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. windows中的运行命令

    首先按“开始”-“运行”,或按WIN键+R,进入『运行』窗口. 下面是常用的运行命令 (按英文字符顺序排列) appwize.cpl----添加.删除程序 access.cpl-----辅助功能选项 ...

  2. 51nod 1055:最长等差数列

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  取消关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 ...

  3. 图片字节流生成bmp文件

    1 BITMAPFILEHEADER bfh;//文件头 2 bfh.bfType=0x4d42; bfh.bfOffBits=sizeof(bfh)+sizeof(BITMAPINFOHEADER) ...

  4. 浅谈arduino的bootloader

    在arduino的板子上,作为核心的avr单片机往往都会烧录一个bootloader,这个叫做bootloader的东东其实是arduino研发团队针对arduino板子开发的一小段代码,借助于这段代 ...

  5. cf754 754D - Fedor and coupons

    2个多小时,弱智了..(连A都做不对,就不要做D了(迷)) #include<bits/stdc++.h> #define lowbit(x) x&(-x) #define LL ...

  6. 127个常用的JS代码片段,每段代码花30秒就能看懂(上)

    127个常用的JS代码片段,每段代码花30秒就能看懂(上) JavaScript 是目前最流行的编程语言之一,正如大多数人所说:“如果你想学一门编程语言,请学JavaScript.” FreeCode ...

  7. Bean 注解(Annotation)配置(2)- Bean作用域与生命周期回调方法配置

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  8. springboot 自定义错误jsp页面

    1.总览 2.application.properties spring.mvc.view.prefix=/WEB-INF/pages/ spring.mvc.view.suffix=.jsp#关闭w ...

  9. UVA - 714 Copying Books (抄书)(二分+贪心)

    题意:把一个包含m个正整数的序列划分成k个(1<=k<=m<=500)非空的连续子序列,使得每个正整数恰好属于一个序列(所有的序列不重叠,且每个正整数都要有所属序列).设第i个序列的 ...

  10. AD走圆弧走线

    美式键盘: “shift  +  空格”