论文地址
RCNN物体检测的主要步骤如下:
训练:

  1. 监督预训练:利用ILSVRC 2012进行预训练,lr=0.01
  2. 在VOC 2012 train上微调:将CNN最后的1000分类初始化为21分类(20个VOC 类别+背景),使用VOC通过selective search的warped region proposals进行微调。-----所有的region proposals,如果和ground-truth锚框的IoU≥0.5,则视为该类别的positive,其它视为negative。使用SGD,lr=0.001,在每次SGD的Iteration,在所有类别上均匀采样32个positive框以及96个背景框,组成128的mini-batch
  3. 类别分类:注意没有直接使用微调后的CNN进行分类,而是转换为21个二分类SVM问题,在每个二分类中,利用CNN倒数第二层提取出的4096维特征向量以及对应的labels训练,labels的计算方式是(如果region与ground-truth锚框的IoU≥0.3,视为positive,否则为negative) ,在VOC 2012 trainval上优化SVMs
  4. Bounding box回归:最后一个池化层pool输出的特征去训练一个线性回归模型,以预测新的检测框

测试:

  1. selective search产生2000个region proposals(使用selective search’s “fast mode”)
  2. 将这2000个region proposals转化大小为227X227(在转化之前,bounding box需要进行膨胀,各边16像素)
  3. 输入到训练的Alexnet得到4096维的特征向量
  4. 对2000个特征向量使用训练的21个SVM测试
  5. 使用贪婪NMS,如果一个区域与一个更高分数的区域IoU超过阈值,则去除

VOC 2012 数据集较大,类别多,总体的实践步骤较为复杂,这里编写简化版本的RCNN对香蕉数据集进行物体检测。香蕉数据集来自于沐神《动手学深度学习》,数据集中包括1000张训练集与100张验证集,需要检测的物体只有香蕉这一个类别,如下所示。

总体实现步骤为:
训练:

  1. 计算proposal regions:(10mins)对每张训练图片利用selective search生成proposal regions,这里直接使用opencv-contrib-python库里的函数,如果没有该库,注意在pip install opencv-contrib-python之前,应先pip uninstall opencv-python。
def cal_pro_region(img_path):'''计算每张图片的proposal regionArgs:img_path: 图片所在路径Returns:np.array: proposal region的坐标, 大小为num*4, 4列分别[xmin, ymin, xmax, ymax]'''ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()ss.setBaseImage(cv2.imread(img_path))ss.switchToSelectiveSearchFast()rects = ss.process()rects[:, 2] += rects[:, 0]rects[:, 3] += rects[:, 1] return rects
  1. Alexnet微调:对训练集与验证集的每张图片,计算该图片所有候选区域的IoU值,将IoU≥0.5的区域视为positive,0.1<IoU≤0.5的区域为negative,保存候选区域与标签,生成用于Alexnet微调的新数据集。这里训练大概也需要10分钟,最后保存相应网络参数。
    单检测框的IoU计算方式可如下图所示:

预训练的Alexnet是通过pytorch的torchvision.models.alexnet(pretrained=true)获得的。
之后利用上述新数据集来微调Alexnet,最终测试精度为96%左右。网络的预测结果大致如下:

  • Bounding box回归:利用微调的Alexnet的最后一个池化层输出的特征,训练一个线性回归模型,以预测当前proposal region的坐标与真实坐标之间的偏移。训练时间同样10分钟左右,保存网络训练参数。
    (注:不再进行svm的训练,直接利用Alexnet的分类结果)

测试:

  • 对测试图片,利用selective search算法生成候选区域-proposal regions,将每个proposal region图像输入训练的Alexnet二分类网络中得到预测标签(即banana或者background)
  • 将预测标签为banana的区域,所对应的Alexnet的最后一个池化层输出的特征,输入训练的线性回归模型,得到预测的检测框角点坐标偏移值。我们将预测的偏移值L1范数作为评价标准,选取最小值对应的区域坐标(加上偏移值)作为最终检测框。
    最终的检测结果如下图所示:

    总结:
    该实现对原始版本的RCNN进行了简化实现,主要体现在:
  • 所使用的数据集较为简单,只有香蕉这一个类别
  • 直接利用Alexnet的分类结果,而不再训练多余的svm分类器
  • 最终检测框是以预测偏移值绝对值之和最小为评判标准,没有实现NMS
  • bounding box没有进行原论文中各边16像素的膨胀,而是直接resize成227*227

所有代码放在https://github.com/Myshrry/RCNN-for-Banana-Dataset
共勉~

[pytorch] RCNN物体检测的简化实现(d2l-香蕉数据集)相关推荐

  1. pytorch模型加载测试_使用Pytorch实现物体检测(Faster R-CNN)

    在本示例中,介绍一种two-stage算法(Faster R-CNN),将目标区域检测和类别识别分为两个任务进行物体检测.本示例采用PyTorch引擎进行模型构建. 如果您已熟练使用Notebook和 ...

  2. PyTorch开源物体检测工具包

    MMDetection是一个基于PyTorch的开源物体检测工具包.该工具包采用模块化设计,支持多种流行的物体检测和实例分割算法,并且可以灵活地进行拓展,在速度和显存消耗上也具有优势.(https:/ ...

  3. R-CNN 物体检测第二弹(Fast R-CNN)

    北京站 | NVIDIA DLI深度学习培训 2018年1月26日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                           正文共7790 ...

  4. R-CNN 物体检测第一弹

    北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                        ...

  5. rcnn -fast rcnn-faster rcnn物体检测论文

    faster rcnn中的rpn网络: 特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{1282,2562,5122}×三种比例{1:1,1: ...

  6. BBAug: 一个用于PyTorch的物体检测包围框数据增强包

    本文转载自AI公园. 作者:Harpal Sahota 编译:ronghuaiyang 导读 实现了Google Research,Brain Team中的增强策略. 像许多神经网络模型一样,目标检测 ...

  7. BBAug: PyTorch的物体检测包

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:AI公园     作者:Harpal Sahota 编译:ronghuaiyang AI博士笔记系列推荐 周志 ...

  8. 深度学习(六十四)Faster R-CNN物体检测

  9. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

最新文章

  1. python统计列表内元素个数
  2. MySQL里面的CONNECTION_ID
  3. HealthKit开发教程之HealthKit的复合数据
  4. c语言程序设计教案 文库,C语言程序设计教案.doc
  5. Model层视频播放关闭问题及手机视频播放的适配问题解决方案
  6. java中Robot
  7. 使用sublime text 开发node.js
  8. [APIO2014] 序列分割(斜率优化dp)
  9. 第二届河南省大学生程序设计竞赛 Dr.Kong的机器人
  10. java与sql2005连接数据库_Java链接数据库SQl Server2005
  11. 你们还留恋windows什么呢?
  12. LINUX SHELL能不能调用桌面刷新命令,或者模拟键盘输入F5?
  13. maven安装及配置
  14. ACM 国际大学生程序设计竞赛简介
  15. python 视频转图片
  16. tableau瀑布图
  17. 三子棋 Tic-Tac-Toe
  18. window系统设置系统变量
  19. arduino并口屏_零知开源软件库使用-ILI9341并口显示屏
  20. 中国珍珠养殖产业发展现状分析,淡水养殖仍然占据主导地位「图」

热门文章

  1. 疯狂的蚂蚁----ant
  2. hadoop(XShell) 出现错误ERROR: Cannot set priority of namenode process 7927
  3. Python-Django毕业设计好又多百货商业广场有限公司自助收银操作系统(程序+Lw)
  4. strcat函数解析
  5. UDS的0x19服务介绍
  6. 《鬼武者3》全BOSS攻略方法
  7. 湖北银行冲刺上市:不良率高于行业均值,有公司欠5亿元未能追回
  8. 苹果加大对高通攻击力度 或击溃高通核心商业模式
  9. js过滤器filter的使用
  10. SpringBoot添加过滤器