多尺度物体目标检测

  • 锚框生成过多的问题
  • 尺度
  • 如何在MXNet中生成多尺度的锚框
  • 总结

锚框生成过多的问题

  上一节学习到,我们是基于生成的锚框来预测物体类别和偏移量,而且我们对于一张原始图片,对于每个像素都会生成多个锚框。
  问题:我们生成了大量的锚框,而在其中有大量的重复区域,造成了运算量过于复杂。那么如何减少我们的计算量呢?
  其实很简单,我们只需要对原始图像均匀采样一小部分像素,并以采样的像素为中心生成锚框,这样我们可以通过控制采样的像素个数,而控制整体的运算复杂度。

尺度

  尺度这个概念其实在生活中我们常常接触,举一些比较形象的例子,比如说我们用手机拍照时,可以通过缩小放大画面,从而改变尺度。我们在用地图的时候,也可以缩小和放大改变尺度。
  计算机在不知道我们感兴趣的物体尺寸情况下,我们就需要考虑多尺度以获得感兴趣物体的最佳尺度。
  具体一点到我们的CNN中,我们CNN中一般越靠近输出层的特征图高和宽会越来越小,我们可以看做是,在越靠近输出层的特征图每个像素感受野越大,也就是说每个像素能反映原图片中越大的区域,也就是尺度越大。(比如在靠近输入层地方的特征图,一个像素只能对应原图像中3*3的像素区域,但是在靠近输出层地方的特征图,一个像素有可能就对应30*30的像素区域)
  目标检测过程中,较小目标相比于较大目标在图像上出现的位置可能性更多,比如形状为1∗1,2∗1,2∗21*1,2*1,2*21∗1,2∗1,2∗2的目标在形状为2∗22*22∗2的图像区域上出现的位置可能性为4,2,14,2,14,2,1种。所以我们可以在靠近输出层的大尺度特征图中生成大小比例大、数量较少的锚框,来检测尺寸比较大的物体。在前面的一些小尺寸特征图中生成大小比例小、数量较多的锚框,来检测尺寸较小的物体。

如何在MXNet中生成多尺度的锚框

  问题来了,我们如何用MXNet中函数生成多尺度的锚框呢?其实很简单,我们直接使用不同大小的特征图作为输入,然后生成锚框,最后还原的时候乘以原始图像的宽和高就OK了。也就是我们可以通过定义一个特征图来对整个原始图像均匀采样。
  我们知道生成锚框的函数为contrib.nd.MultiBoxPrior,这个函数的输出为(1,锚框总数,4)其中各个不同的批量共享这些锚框。这个函数输出的四个坐标自动的除以了输入的宽和高,归一化到了0和1之间。这就代表了输出的锚框是相对于整个图像的相对位置,由于我们生成锚框是对特征图每个像素都生成,所以我们基于这个特征图生成的锚框一定是对原始图像均匀采样得到的。

def show_diff_scale_anchors(axes,fmap_w,fmap_h,sizes,ratios,img_scale):#显示不同尺度的图像fmap = nd.zeros(shape=(1,3,fmap_h,fmap_w))#生成锚框 anchors = contrib.nd.MultiBoxPrior(fmap,sizes=sizes,ratios=ratios)#显示多尺度show_all_bboxes(axes,anchors[0]*img_scale)plt.figure(figsize=(7,7))
img = image.imread('../img/catdog.jpg').asnumpy()
fig = plt.imshow(img)
show_diff_scale_anchors(fig.axes,4,4,[0.15],[1,2,0.5],img_scale)

  上面我们在4∗44*44∗4的特征图上生成锚框,一共采样了16个像素,每个像素有3个锚框,结果如下:

  接下来我们尝试加大尺度,在2∗22*22∗2的特征图上生成锚框,此时我们的锚框大小比例应该加大,而个数应该减小,结果如下:

plt.figure(figsize=(7,7))
img = image.imread('../img/catdog.jpg').asnumpy()
fig = plt.imshow(img)
show_diff_scale_anchors(fig.axes,2,2,[0.3],[0.7,0.5],img_scale)

  最后我们尝试最大的尺度,使用1∗11*11∗1的特征图,此时我们应该是在中心像素生成锚框,结果如下:

plt.figure(figsize=(7,7))
img = image.imread('../img/catdog.jpg').asnumpy()
fig = plt.imshow(img)
show_diff_scale_anchors(fig.axes,1,1,[0.75],[0.7,0.5],img_scale)

总结

  

  1. 不同尺度的特征图在原始输入图像中含有不同的感受野,越靠近输出层的特征图每个像素的感受野越大,越适合用来检测大物体
  2. 我们可以使用contrib.nd.MultiBoxPrior函数很方便生成不同尺度的锚框,最后我们还原时乘以输入图像的高和宽就行
  3. SSD就是一种多尺度的目标检测框架

物体检测Object Detection学习笔记(MXNet)(二)相关推荐

  1. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  2. 图像理解之物体检测object detection,模型rcnn/fastrcnn/fasterrcnn原理及概念

    A,https://www.cnblogs.com/zhengzhe/p/7783270.html RCNN选择性搜索(Selective Search) RCNN选择性搜索(Selective Se ...

  3. 深入研读“ReDet: A Rotation-equivariant Detector for Aerial Object Detection”学习笔记

    ReDet: A Rotation-equivariant Detector for Aerial Object Detection Jiaming Han∗, Jian Ding∗, Nan Xue ...

  4. 【华为云技术分享】物体检测yolo3算法 学习笔记(1)

    [摘要] YOLO作为一个one-stage目标检测算法,在速度和准确度上都有杰出的表现.而YOLO v3是YOLO的第3个版本(即YOLO.YOLO 9000.YOLO v3),检测效果,更准更强. ...

  5. 【华为云技术分享】物体检测yolo3算法 学习笔记2

    先来看一下yolo3的结构图: 1.主体网络darknet53 最左边的这一部分叫做Darknet-53, (1)它最重要特点是使用了残差网络Residual,darknet53中的残差卷积就是进行一 ...

  6. [Intensive Reading]目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言

    目标检测系列: 目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作 目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享 ...

  7. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  8. [caffe]深度学习之CNN检测object detection方法摘要介绍

    [caffe]深度学习之CNN检测object detection方法摘要介绍  2015-08-17 17:44 3276人阅读 评论(1) 收藏 举报 一两年cnn在检测这块的发展突飞猛进,下面详 ...

  9. 同r做一个窗口_目标检测(Object Detection):R-CNN/SPPnet/R-FCN/Yolo/SSD

    这篇文章我是Survey目标检测(Object Detection)系列论文的一个总结. 包括R-CNN系列.SPP-net.R-FCN.YOLO系列.SSD.DenseBox等. 基本概念 目标识别 ...

最新文章

  1. 企业的六种数据存储合规性策略
  2. java字符_Java String 类
  3. 线程池 java 新建方式_Java线程池的四种创建方式
  4. 如何自学python基础-零基础如何学习python
  5. 用 Python 和 OpenCV 检测和跟踪运动对象
  6. java 整数加减_JAVA超大整数的加法如何改成减法
  7. C#窗体应用中使用ZedGraph曲线插件绘制图表
  8. JAVA笔记-Oracle中存储过程编写类似于MySQL的replace功能
  9. c语言单链表功能,[数据结构]单链表(C语言)的各种功能
  10. 网站前端开发基础知识学什么?必备技能
  11. centos 7 菜鸟第一天 找回win10
  12. 学c语言做练习之文件
  13. java异常中Exception捕获不到的异常
  14. 中国移动(ECIA)云网工程师技术知识-立哥技术
  15. 计算机辅助翻译 摘要,翻译实践中计算机辅助翻译技术的使用-应用语言学论文-语言学论文.docx...
  16. 常见服务的默认端口_wuli大世界_新浪博客
  17. 清除Zabbix的历史记录
  18. 如何内置AdobeFlashPlayer.apk
  19. 起薪8000年终40万 游戏行业人才缺口达60万
  20. 小程序破解WIFI密码,亲测有效

热门文章

  1. Phython基础笔记
  2. 软件测试面霸的修炼心经
  3. 阿木社区pixhawk二次开发无人机参数测量报告
  4. 美工页面怎么排版?排版设计需要注意什么要点?
  5. java生成永远不重复的随机数_java生成不重复随机数的方法
  6. [机缘参悟-49]:三季人与认知维度
  7. c# opencv车牌识别_毕设有着落了!一套开源的,基于SpringBoot的车牌识别系统
  8. Python后台运行 -- nohup python xxx.py
  9. MacOS VSCode配置c++环境
  10. ABAP资产负债表作业