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. 小程序之scroll-view用法 - 水平滚动

    <scroll-view class="box" scroll-x="true" > <view class="box-item&q ...

  2. scala文件通过本地命令运行

    1.准备(检查) a.本地环境安装jdk b.安装scala 2.sublime编辑scala文件,并存放到F:\plan_next\scala_compile下 3.文件目录中切换到cmd中(文件目 ...

  3. postman带上token对接口进行测试

    根据验证码进行登陆,登录之后返回token.然后请求其他接口时在header头中带上token访问其他接口进行测试 账户信息输入验证码 登陆成功,看到返回的token 我们这个项目可以刷新一下toke ...

  4. nodejs 杂七杂八

    nodejs => 提供核心模块语法 node中的回调函数 都是异步

  5. Nachos-Lab1-完善线程机制

    Nachos是什么 Nachos (Not Another Completely Heuristic Operating System),是一个教学用操作系统,提供了操作系统框架: 线程 中断 虚拟内 ...

  6. xml配置文件解释

    XML 指可扩展标记语言(EXtensible Markup Language) xmlns:是指XML命名空间 ( XML Namespace ) XSD是指XML结构定义 ( XML Schema ...

  7. php.laravel.部署

    Laravel 的部署 D  参考laravel-china的做 | 其他参考 | 重要的参考 | Nginx github | 如果想要ssl 啊

  8. 第三篇:Vue指令

    Vue指令 1.文本指令相关 v-*是Vue指令,会被vue解析,v-text="num"中的num是变量(指令是有限的,不可以自定义) v-text是原样输出渲染内容,渲染控制的 ...

  9. Flask—路由的注册方法

    第一种注册方法 from flask import Flask app = Flask(__name__) @app.route("/hello") # 第一种注册方法 def h ...

  10. vue-cli 官方脚手架 eslink配置 恢复serve状态下的打印

    使用官方脚手架 打印会提示保存,主要是eslink的配置(在package.json文件夹里面修改) 配置说明 下面是抄的 "eslintConfig": { "root ...