https://download.csdn.net/download/zefan7564/10148990

https://blog.csdn.net/qq_37124237/article/details/81087505

目标检测 Faster R-CNN运行及实时性DEMO测试

2018年07月17日 20:01:59 qq_37124237 阅读数:202
 
  1. #!/usr/bin/env python
  2.  
  3. # --------------------------------------------------------
  4. # Faster R-CNN
  5. # Copyright (c) 2015 Microsoft
  6. # Licensed under The MIT License [see LICENSE for details]
  7. # Written by Ross Girshick
  8. # --------------------------------------------------------
  9.  
  10. """
  11. Demo script showing detections in sample images.
  12.  
  13. See README.md for installation instructions before running.
  14. """
  15.  
  16. import _init_paths
  17. from fast_rcnn.config import cfg
  18. from fast_rcnn.test import im_detect
  19. from fast_rcnn.nms_wrapper import nms
  20. from utils.timer import Timer
  21. import matplotlib.pyplot as plt
  22. import numpy as np
  23. import scipy.io as sio
  24. import caffe, os, sys, cv2
  25. import argparse
  26.  
  27. CLASSES = ('__background__',
  28. 'ship')
  29.  
  30. NETS = {'vgg16': ('VGG16',
  31. 'VGG16_faster_rcnn_final.caffemodel'),
  32. 'zf': ('ZF',
  33. 'ZF_faster_rcnn_final.caffemodel'),
  34. 'wyx': ('wyx','vgg_cnn_m_1024_faster_rcnn_iter_1000.caffemodel')}
  35.  
  36.  
  37. def vis_detections(im, class_name, dets, thresh=0.5):
  38. """Draw detected bounding boxes."""
  39. inds = np.where(dets[:, -1] >= thresh)[0]
  40. if len(inds) == 0:
  41. return
  42.  
  43. im = im[:, :, (2, 1, 0)]
  44. fig, ax = plt.subplots(figsize=(12, 12))
  45. ax.imshow(im, aspect='equal')
  46. for i in inds:
  47. bbox = dets[i, :4]
  48. score = dets[i, -1]
  49.  
  50. ax.add_patch(
  51. plt.Rectangle((bbox[0], bbox[1]),
  52. bbox[2] - bbox[0],
  53. bbox[3] - bbox[1], fill=False,
  54. edgecolor='red', linewidth=3.5)
  55. )
  56. ax.text(bbox[0], bbox[1] - 2,
  57. '{:s} {:.3f}'.format(class_name, score),
  58. bbox=dict(facecolor='blue', alpha=0.5),
  59. fontsize=14, color='white')
  60.  
  61. ax.set_title(('{} detections with '
  62. 'p({} | box) >= {:.1f}').format(class_name, class_name,
  63. thresh),
  64. fontsize=14)
  65. plt.axis('off')
  66. plt.tight_layout()
  67. plt.draw()
  68.  
  69.  
  70. def vis_detections_video(im, class_name, dets, thresh=0.5):
  71. """Draw detected bounding boxes."""
  72. global lastColor,frameRate
  73. inds = np.where(dets[:, -1] >= thresh)[0]
  74. if len(inds) == 0:
  75. return im
  76.  
  77. for i in inds:
  78. bbox = dets[i, :4]
  79. score = dets[i, -1]
  80. cv2.rectangle(im,(bbox[0],bbox[1]),(bbox[2],bbox[3]),(0,0,255),2)
  81. cv2.rectangle(im,(int(bbox[0]),int(bbox[1]-20)),(int(bbox[0]+200),int(bbox[1])),(10,10,10),-1)
  82. cv2.putText(im,'{:s} {:.3f}'.format(class_name, score),(int(bbox[0]),int(bbox[1]-2)),cv2.FONT_HERSHEY_SIMPLEX,.75,(255,255,255))#,cv2.CV_AA)
  83.  
  84. return im
  85.  
  86.  
  87.  
  88. def demo(net, im):
  89. """Detect object classes in an image using pre-computed object proposals."""
  90. global frameRate
  91. # Load the demo image
  92. #im_file = os.path.join(cfg.DATA_DIR, 'demo', image_name)
  93. #im = cv2.imread(im_file)
  94.  
  95. # Detect all object classes and regress object bounds
  96. timer = Timer()
  97. timer.tic()
  98. scores, boxes = im_detect(net, im)
  99. timer.toc()
  100. print ('Detection took {:.3f}s for '
  101. '{:d} object proposals').format(timer.total_time, boxes.shape[0])
  102. frameRate = 1.0/timer.total_time
  103. print "fps: " + str(frameRate)
  104. # Visualize detections for each class
  105. CONF_THRESH = 0.8
  106. NMS_THRESH = 0.3
  107. for cls_ind, cls in enumerate(CLASSES[1:]):
  108. cls_ind += 1 # because we skipped background
  109. cls_boxes = boxes[:, 4*cls_ind:4*(cls_ind + 1)]
  110. cls_scores = scores[:, cls_ind]
  111. dets = np.hstack((cls_boxes,
  112. cls_scores[:, np.newaxis])).astype(np.float32)
  113. keep = nms(dets, NMS_THRESH)
  114. dets = dets[keep, :]
  115. vis_detections_video(im, cls, dets, thresh=CONF_THRESH)
  116. cv2.putText(im,'{:s} {:.2f}'.format("FPS:", frameRate),(1750,50),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255))
  117. cv2.imshow(videoFilePath.split('/')[len(videoFilePath.split('/'))-1],im)
  118. cv2.waitKey(20)
  119.  
  120.  
  121. def parse_args():
  122. """Parse input arguments."""
  123. parser = argparse.ArgumentParser(description='Faster R-CNN demo')
  124. parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',
  125. default=0, type=int)
  126. parser.add_argument('--cpu', dest='cpu_mode',
  127. help='Use CPU mode (overrides --gpu)',
  128. action='store_true')
  129. parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]',
  130. choices=NETS.keys(), default='vgg16')
  131.  
  132. args = parser.parse_args()
  133.  
  134. return args
  135.  
  136.  
  137.  
  138.  
  139. if __name__ == '__main__':
  140. cfg.TEST.HAS_RPN = True # Use RPN for proposals
  141.  
  142. args = parse_args()
  143.  
  144. # prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0],
  145. # 'faster_rcnn_alt_opt', 'faster_rcnn_test.pt')
  146. prototxt = '/home/yexin/py-faster-rcnn/models/pascal_voc/VGG_CNN_M_1024/faster_rcnn_end2end/test.prototxt'
  147. # print 'see prototxt path{}'.format(prototxt)
  148.  
  149.  
  150. # caffemodel = os.path.join(cfg.DATA_DIR, 'faster_rcnn_models',
  151. # NETS[args.demo_net][1])
  152. caffemodel = '/home/yexin/py-faster-rcnn/output/faster_rcnn_end2end/voc_2007_trainval/vgg_cnn_m_1024_faster_rcnn_iter_100.caffemodel'
  153.  
  154.  
  155. # print '\n\nok'
  156.  
  157. if not os.path.isfile(caffemodel):
  158. raise IOError(('{:s} not found.\nDid you run ./data/script/'
  159. 'fetch_faster_rcnn_models.sh?').format(caffemodel))
  160. print '\n\nok'
  161.  
  162. if args.cpu_mode:
  163. caffe.set_mode_cpu()
  164. else:
  165. caffe.set_mode_gpu()
  166. caffe.set_device(args.gpu_id)
  167. cfg.GPU_ID = args.gpu_id
  168. net = caffe.Net(prototxt, caffemodel, caffe.TEST)
  169.  
  170. print '\n\nLoaded network {:s}'.format(caffemodel)
  171.  
  172. # Warmup on a dummy image
  173. im = 128 * np.ones((300, 500, 3), dtype=np.uint8)
  174. for i in xrange(2):
  175. _, _= im_detect(net, im)
  176.  
  177. videoFilePath = '/home/yexin/py-faster-rcnn/data/demo/test_1-3.mp4'
  178. videoCapture = cv2.VideoCapture(videoFilePath)
  179. #success, im = videoCapture.read()
  180. while True :
  181. success, im = videoCapture.read()
  182. demo(net, im)
  183. if cv2.waitKey(10) & 0xFF == ord('q'):
  184. break
  185. videoCapture.release()
  186. cv2.destroyAllWindows()
  187.  

caffe fastercbnnahdemo的更多相关文章

  1. 基于window7+caffe实现图像艺术风格转换style-transfer

    这个是在去年微博里面非常流行的,在git_hub上的代码是https://github.com/fzliu/style-transfer 比如这是梵高的画 这是你自己的照片 然后你想生成这样 怎么实现 ...

  2. caffe的python接口学习(7):绘制loss和accuracy曲线

    使用python接口来运行caffe程序,主要的原因是python非常容易可视化.所以不推荐大家在命令行下面运行python程序.如果非要在命令行下面运行,还不如直接用 c++算了. 推荐使用jupy ...

  3. 基于Caffe的Large Margin Softmax Loss的实现(中)

    小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文:  http://www.miao ...

  4. 基于Caffe的Large Margin Softmax Loss的实现(上)

    小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...

  5. 基于Caffe的DeepID2实现(下)

    小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...

  6. 基于Caffe的DeepID2实现(中)

    小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...

  7. 基于Caffe的DeepID2实现(上)

    小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...

  8. 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训

    原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...

  9. 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练

    原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...

随机推荐

  1. Linux学习《第五章 用户身份与文件权限》

  2. UVA - 10817 Headmaster's Headache (状压dp+记忆化搜索)

    题意:有M个已聘教师,N个候选老师,S个科目,已知每个老师的雇佣费和可教科目,已聘老师必须雇佣,要求每个科目至少两个老师教的情况下,最少的雇佣费用. 分析: 1.为让雇佣费尽可能少,雇佣的老师应教他所 ...

  3. vlc rtsp 服务器脚本

    set VLC="C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" set VIDEO="D:\BaiduYunDownload\ ...

  4. 13.56mhz自动寻卡功能业界最低功耗:SI522

    随着智能门锁的不断火爆,很多智能门锁产商为了让产品的功耗下降下来,都在不断寻找能自动寻卡的13.56mhz.今天我就为大家推荐一款13.56mhz芯片自动寻卡业界最低功耗,不仅是业界最低另外还完全PI ...

  5. [LeetCode] 932. Beautiful Array 漂亮数组

    For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...

  6. 五十四、SAP中LVC表格每列的宽度自适应

    一.之前我们的LVC表格输出的界面,有些列太宽余留空白区块太多,有些列则显示不全还带省略号等 二.我们来到'REUSE_ALV_GRID_DISPLAY_LVC'的模块中,查看他的属性 三.我们查看L ...

  7. 050-PHP除法运算

    <?php $n=10/3; //除法运算 echo $n; //输出变量n的值 ?>

  8. 048-PHP定义常量

    <?php define('NUM',123); //定义常量NUM echo NUM; //输出NUM的值 define('STR','ABC',TRUE); //定义常量STR并设置大小写不 ...

  9. Swift泛型定义 同时限定T的类(class)和多协议(protocol)

    https://blog.csdn.net/weixin_34054931/article/details/88027728 swift 可以定义模板函数,如: func testFunc<T& ...

  10. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-bookmark

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...