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. spark源码单步跟踪阅读-从毛片说起

    想当年读大学时,那时毛片还叫毛片,现在有文明的叫法了,叫小电影或者爱情动作片.那时宿舍有位大神,喜欢看各种毛片,当我们纠结于毛片上的马赛克时,大神大手一挥说道:这算啥,阅尽天下毛片,心中自然无码!突然 ...

  2. UVA - 10129 Play on Words(欧拉回路)

    题意:将n个单词排成一个序列,保证相邻单词相邻处字母相同. 分析:每个单词看做一条有向边,字母为点,并查集看图是否连通,因为是有向图,所以最多只能有两个点入度不等于出度,且这两个点一个入度比出度大1, ...

  3. c++数据结构排序

    #include<stdio.h> #include<stdlib.h> #include<time.h> typedef int ElemType; typede ...

  4. InvalidOperationException: Cannot create a DbSet for 'IdentityUserClaim<string>' because this type is not included in the model for the context.

    An unhandled exception occurred while processing the request. InvalidOperationException: Cannot crea ...

  5. Windows平台整合SpringBoot+KAFKA__第3部分_代码部分(结束)

    重要的地方说下,算是给自己提醒,也给阅读者凑合着看看吧: (1)序列化.反序列化: 注意看这个文章 https://www.jianshu.com/p/5da86afed228 很多网上的例子都是 推 ...

  6. 054-for循环

    <?php for($i=1;$i<=5;$i++){ echo "$i<br />"; //循环体 } ?>

  7. plsql和navicat连接远程oracle(易错点)

    plsql和navicat连接远程oracle,只需要安装oracle客户端即可.注意此处是oracle客户端(Instant Client),并不是oracle数据库. oracle客户端下载地址: ...

  8. XPath--快速获取XML数据的节点或属性

    转载自 XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识.示例Xml: <?xml version="1.0" ...

  9. C#不显示在任务栏

    在我用c#写一些小程序是总是希望,程序窗体不在任务栏上显示程序的窗体,c# Form提供了一个 属性值可以很好的解决这个问题 这个属性就是 ShowInTaskbar 在微软的官方声明格式为: pub ...

  10. Python 内置类型 dict, list,线程安全吗

    近段时间发现一个 Python 连接数据库的连接是线程不安全的,结果惹得我哪哪儿都怀疑变量的多线程是否安全的问题,今天终于找到了正确答案,那就是 Python 内置类型 dict,list ,tupl ...