docker 下配置Faster RCNN

    技术2025-08-05  23

    dockers安装和Nvidia-docker安装

    Ubuntu从头开始使用Docker运行OpenPose

    获取镜像

    找到一个合适的dockers https://hub.docker.com/r/jimmyli/faster-rcnn-gpu Dockerfile 修改sources.list源

    docker pull jimmyli/faster-rcnn-gpu

    镜像创建好了之后在用docker run命令建立容器

    创建容器

    这是docker hub上写的方法,是有问题的,因为英伟达docker改版了

    sudo nvidia-docker run --rm -it jimmyli/faster-rcnn-gpu /bin/bash

    要改成

    docker run --gpus all --shm-size 16g -v $(pwd)/sharedfolder:/code_current -v /data/:/data/ -p 6006:6006 -t -i jimmyli/faster-rcnn-gpu /bin/bash

    docker run 命令大全

    安装Faster RCNN

    https://github.com/rbgirshick/py-faster-rcnn

    # 训练自Pascal VOC Dataset的模型 cd /workspace/py-faster-rcnn/tools/ python demo.py # 训练自COCO的模型 python demo_coco.py

    改编demo

    改进demo函数,实现:

    在data/demo文件夹下放如图片就可以运行,运行结果放入tools/demo_results。可选择是否输出画框的图片使用命令–draw输出json结果在tools/demo_results def demo(net, image_name, args): """Detect object classes in an image using pre-computed object proposals.""" all_data = [] thresh = 0.5 # Load the demo image im_file = os.path.join(cfg.DATA_DIR, 'demo', image_name) im = cv2.imread(im_file) # Detect all object classes and regress object bounds timer = Timer() timer.tic() scores, boxes = im_detect(net, im) timer.toc() print ('Detection took {:.3f}s for ' '{:d} object proposals').format(timer.total_time, boxes.shape[0]) # Visualize detections for each class CONF_THRESH = 0.8 NMS_THRESH = 0.3 for cls_ind, cls in enumerate(CLASSES[1:]): cls_ind += 1 # because we skipped background cls_boxes = boxes[:, 4*cls_ind:4*(cls_ind + 1)] cls_scores = scores[:, cls_ind] dets = np.hstack((cls_boxes, cls_scores[:, np.newaxis])).astype(np.float32) keep = nms(dets, NMS_THRESH) dets = dets[keep, :] inds = np.where(dets[:, -1] >= thresh)[0] # 选框置信度大于0.5的才导入数据 if len(inds) != 0: json_data = {'dets': str(dets), 'image_name': image_name, 'class': cls} all_data.append(json_data) if args.draw_boxes: vis_detections(im, cls, dets, image_name, thresh=CONF_THRESH) return all_data def parse_args(): """Parse input arguments.""" parser = argparse.ArgumentParser(description='Faster R-CNN demo') parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]', default=0, type=int) parser.add_argument('--cpu', dest='cpu_mode', help='Use CPU mode (overrides --gpu)', action='store_true') parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]', choices=NETS.keys(), default='vgg16') parser.add_argument('--draw', dest='draw_boxes', help='Draw detected bounding boxes yes or no', action='store_true', default=False) # 增加选项,是否输出画框后的图像 args = parser.parse_args() return args # 开头加入下面代码,用来显示中文 # -*- coding: UTF-8 -*- # 改进MAIN下面的代码 if __name__ == '__main__': cfg.TEST.HAS_RPN = True # Use RPN for proposals args = parse_args() prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0], 'faster_rcnn_alt_opt', 'faster_rcnn_test.pt') caffemodel = os.path.join(cfg.DATA_DIR, 'faster_rcnn_models', NETS[args.demo_net][1]) if not os.path.isfile(caffemodel): raise IOError(('{:s} not found.\nDid you run ./data/script/' 'fetch_faster_rcnn_models.sh?').format(caffemodel)) if args.cpu_mode: caffe.set_mode_cpu() else: caffe.set_mode_gpu() caffe.set_device(args.gpu_id) cfg.GPU_ID = args.gpu_id net = caffe.Net(prototxt, caffemodel, caffe.TEST) print('\n\nLoaded network {:s}'.format(caffemodel)) # Warmup on a dummy image im = 128 * np.ones((300, 500, 3), dtype=np.uint8) for i in xrange(2): _, _ = im_detect(net, im) print(cfg.DATA_DIR+'/demo') # 改进为可以直接在py-faster-rcnn/data/demo下放入想要检测的图片,运行结果在py-faster-rcnn/tools/demo_results下 images_dir = os.listdir(cfg.DATA_DIR + '/demo') count = 0 start_time = time.time() for images_name in images_dir: count += 1 print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') print('第', count,'张', 'Demo for data/demo/{}'.format(images_name)) demo(net, images_name) current_time = time.time() sum_time = datetime.timedelta(seconds=current_time - start_time ) print('总时间:', sum_time) # 运行总时长 #plt.show() #plt.figure().savefig('demo.png')
    Processed: 0.011, SQL: 9