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. NO11 SSH故障排查思路和netstat命令

    本章知识相关考试:1.企业场景面试题:Linux系统如何优化?2.企业场景面试题:SSH服务连不上,如何排查?记住回答技巧: 1 ping  2 telnet 客户端ssh工具:SecureCRT,x ...

  2. CentOS 6.x 重置root 密码

    1.重启,进入启动界面,快速按e,进入GNU GRUB界面. 2.选择第二项,按e,进行编辑. 3.在末尾输入1或single,回车,返回上一界面,还是选第二项,按b,进入单用户模式. 此时输入命令  ...

  3. Maven项目工程目录

    maven工程目录规范: src/main/java   存放项目的.java文件 src/main/resources   存放项目的资源文件,如spring.hibernate配置文件 src/t ...

  4. 128-PHP类继承extends

    <?php class father{ //定义father类 //定义public描述的成员属性和方法 public $eyes=2; public $ears=2; public funct ...

  5. 071-PHP数组合并

    <?php $arr1=array('a','b','c'); //定义一个数组 echo '数组$arr1的信息:<br />'; print_r($arr1); //输出数组信息 ...

  6. Wdcp升级Php5.3成功

    在lanmp/wdcp/wdOS的当前版本中,默认的php都是用到5.2.17的版本如需要升级到php5.3的,可使用如下脚本升级(注:此升级无安全漏洞等原因,只为某些追求高版本或应用需求需要高版本, ...

  7. ELK 介绍

    章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash ELK是什么? ELK是3个开源产品的组合: Elastics ...

  8. 前端01 HTML5

    01工具使用 Sublime插件安装和使用 2Sublime插件安装和使用.pcf 3Sublime插件安装与卸载.pcf 4Sublime安装markdown插件.pcf 使用typora生成pdf ...

  9. ZOJ - 3961 Let's Chat(区间相交)

    题意:给定一个长度为n的序列,A和B两人分别给定一些按递增顺序排列的区间,区间个数分别为x和y,问被A和B同时给定的区间中长度为m的子区间个数. 分析: 1.1 ≤ n ≤ 109,而1 ≤x, y  ...

  10. python 对axis的理解

    首先请看一下官方帮助的解释: 轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸.  注意看,官方对于0和1的解释是轴,也就是坐标轴.而坐标轴是有 ...