ssd,yolo训练网络的时候为什么要用anchor box,图片不是有标ground truth box 吗?为什么不能直接用这个训练呢?
先更正下提问者的描述,yolo本身不含有anchor机制。
以下回答适合对目标检测中anchor的作用和机制比较了解的读者阅读。
首先我们明确一个定义,当前主流的Object Detection框架分为1 stage和2 stage,而2 stage多出来的这个stage就是Regional Proposal过程,明确这一点后,我们继续讲。
Regional Proposal的输出到底是什么?
我们首先看一下以Faster R-CNN为代表的2 stage目标检测方法
图1
可以看到,图中有两个Classification loss和两个Bounding-box regression loss,有什么区别呢?
1、Input Image经过CNN特征提取,首先来到Region Proposal网络。由Regio Proposal Network输出的Classification,这并不是判定物体在COCO数据集上对应的80类中哪一类,而是输出一个Binary的值p,可以理解为 ,人工设定一个threshold=0.5。
RPN网络做的事情就是,如果一个Region的 ,则认为这个Region中可能是80个类别中的某一类,具体是哪一类现在还不清楚。到此为止,Network只需要把这些可能含有物体的区域选取出来就可以了,这些被选取出来的Region又叫做ROI (Region of Interests),即感兴趣的区域。当然了,RPN同时也会在feature map上框定这些ROI感兴趣区域的大致位置,即输出Bounding-box。
----打个比方----
我上午第四节课饿得不行,我就想着中午要吃什么?附近好多西餐厅和中餐厅,餐厅里菜品有很多。但是我生活费不够了。。gg。。不太想吃(吃不起)西餐,所以无论西餐厅里有什么菜品,我都不会考虑;只有路过中餐厅时,我才会进去看看具体吃什么菜。
----------真是尴尬的栗子----------
So, RPN网络做的事情就是,把一张图片中,我不感兴趣的区域——花花草草、大马路、天空之类的区域忽视掉,只留下一些我可能感兴趣的区域——车辆、行人、水杯、闹钟等等,然后我之后只需要关注这些感兴趣的区域,进一步确定它到底是车辆、还是行人、还是水杯(分类问题)。。。。
你可能会看到另一对通俗易懂的词语,前景(车、人、杯)和背景(大马路、天空)。
图2.天空和草地都属于背景
图3.天空和马路也都是背景
啊 好的,到此为止,RPN网络的工作就完成了,即我们现在得到的有:在输入RPN网络的feature map上,所有可能包含80类物体的Region区域的信息,其他Region(非常多)我们可以直接不考虑了(不用输入后续网络)。
接下来的工作就很简单了,假设输入RPN网络的feature map大小为 ,那么我们提取的ROI的尺寸一定小于 ,因为原始图像某一块的物体在feature map上也以同样的比例存在。我们只需要把这些Region从feature map上抠出来,由于每个Region的尺寸可能不一样,因为原始图像上物体大小不一样,所以我们需要将这些抠出来的Region想办法resize到相同的尺寸,这一步方法很多(Pooling或者Interpolation,一般采用Pooling,因为反向传播时求导方便)。
假设这些抠出来的ROI Region被我们resize到了 或者 ,那我们接下来将这些Region输入普通的分类网络,即第一张Faster R-CNN的结构图中最上面的部分,即可得到整个网络最终的输出classification,这里的class(车、人、狗。。)才真正对应了COCO数据集80类中的具体类别。
同时,由于我们之前RPN确定的box\region坐标比较粗略,即大概框出了感兴趣的区域,所以这里我们再来一次精确的微调,根据每个box中的具体内容微微调整一下这个box的坐标,即输出第一张图中右上方的Bounding-box regression。
整个Faster R-CNN网络就到此结束了,下面总结一下,同时也回答你的问题:
Region Proposal有什么作用?
1、COCO数据集上总共只有80类物体,如果不进行Region Proposal,即网络最后的classification是对所有anchor框定的Region进行识别分类,会严重拖累网络的分类性能,难以收敛。原因在于,存在过多的不包含任何有用的类别(80类之外的,例如各种各样的天空、草地、水泥墙、玻璃反射等等)的Region输入分类网络,而这些无用的Region占了所有Region的很大比例。换句话说,这些Region数量庞大,却并不能为softmax分类器带来有用的性能提升(因为无论怎么预测,其类别都是背景,对于主体的80类没有贡献)。
2、大量无用的Region都需要单独进入分类网络,而分类网络由几层卷积层和最后一层全连接层组成,参数众多,十分耗费计算时间,Faster R-CNN本来就不能做到实时,这下更慢了。
最后有个小小的说明,针对不了解Anchor的同学们,我在文中始终在说对于感兴趣的区域“框定一个坐标”,这是为了便于理解,其实这样说是不准确的。
具体就是:我们整张图像上,所有的框,一开始就由Anchor和网络结构确定了,这些框都有各自初始的坐标(锚点)。所有后续的工作,RPN提取前景和背景,其实就是保留包含前景的框,丢掉包含背景的;包括后续的NMS,也都是丢掉多余的,并非重新新建一个框。
我们网络输出的两个Bounding-box regression,都是输出的坐标偏移量,也就是在初始锚点的基础上做的偏移修正和缩放,并非输出一个原图上的绝对坐标。
yolo有类似rpn的机制,那就是最后输出时的confidence值,这个值决定了前景和背景。
ssd是将anchor机制融合在了1 stage模型中,原理与本文所述基本一致。
图4.这张更能体现object detection的state-of-the-art
引用:
图1.https://arxiv.org/abs/1506.01497
图2、3、4均为在Google Image中找到原始图像,我自己做的Object Detection并标注。
◔"L_◔不懂为什么后天考试,现在我还有时间在这码字。。。
########虽然不是大V,但是也花了一点时间写,转载请注明出处!########
编辑于 2019-11-04
赞同 33017 条评论
分享
收藏喜欢收起
Justin ho
图像算法工程师
42 人赞同了该回答
谢邀。这里以faster rcnn举例。在faster rcnn里面,anchor(或者说RPN网络)的作用是代替以往rcnn使用的selective search的方法寻找图片里面可能存在物体的区域。当一张图片输入resnet或者vgg,在最后一层的feature map上面,寻找可能出现物体的位置,这时候分别以这张feature map的每一个点为中心,在原图上画出9个尺寸不一anchor。然后计算anchor与GT(ground truth) box的iou(重叠率),满足一定iou条件的anchor,便认为是这个anchor包含了某个物体。
目标检测的思想是,首先在图片中寻找“可能存在物体的位置(regions)”,然后再判断“这个位置里面的物体是什么东西”,所以region proposal就参与了判断物体可能存在位置的过程。
region proposal是让模型学会去看哪里有物体,GT box就是给它进行参考,告诉它是不是看错了,该往哪些地方看才对。
建议详细阅读这个领域一系列的论文,从rcnn、sppnet、frcnn、faster rcnn到ssd、yolo,整条线看下来就能大概明白目标检测的“套路”。
编辑于 2018-01-10
赞同 4213 条评论
分享
收藏喜欢
Alex婧
apt-get install perfect
2 人赞同了该回答
首先,说一下test阶段,给一张image,需要得到物体位置和置信概率。
因此需要在train阶段有个画框的model。
其次,回答提问者的问题,anchor box是用来产生一系列矩形框,然后和ground truth比较Iou>0.5是正例,<0.5是负例,用这些数据训练模型。
编辑于 2019-04-08
赞同 2添加评论
分享
收藏喜欢
广告
不感兴趣知乎广告介绍
职场竞争这么激烈,学历和能力缺一不可!考个在职研究生,拓展人脉、提升自己,备考名校学历,工作学习两不误!点击了解详情查看详情
知乎用户
楼主弄明白了吗?我也有楼主的困惑,我的理解是K个anchor 是作为初值给RPN回归,输出K个proposals,不知道对不对,望指教
发布于 2019-01-14
赞同1 条评论
分享
收藏喜欢
clks-wzz
CV & Deep learning
1 人赞同了该回答
答主说的方法理论上可行。
但是这是一个label规范化和人工先验的问题。
在我看来,anchor box一方面规范了输出和label。
另一个方面给了输出一个先验(即先给出几个物体可能的位置,同时用到了feature map空间位置的对应关系),方便网络学习收敛。
如果直接学ground truth,那么问题就来了:你怎么设置label?而且直接学不容易收敛啊~
编辑于 2018-01-10
赞同 1添加评论
分享
收藏喜欢
卢毅
合格的听众
感觉可以从Data-mining角度理解,one-stage的方法直接从特征图每一点构造候选区特征预测,首先,太多的“垃圾”样本;其次,轮廓没有代表性;经过region proposal之后相当于精炼了一部分候选框,同事对于最终用于训练的候选框,也有回归模型按照是否有待测物体先一步计算了轮廓。对召回率和准确率有提升,但是two-stage的方法引入了额外的计算。
发布于 2018-01-11
赞同添加评论
分享
收藏喜欢
ShengCiun Liang
反对任何形式的平权
或许我觉得题主的问题是网络的输出是什么?为什么要输出这个?
以我个人的理解,首先使用anchor box的含义就是我不知道这个点是否存在一个物体,其次是这个物体有多大,那么使用anchor box就很好理解了,通过iou计算这个点存在物体的概率,而不同大小的box就是存在不同大小box的物体的概率分别为多少,之后定义一个观点,即一个点只属于一个物体,于网络而言就是对于几个anchor的输出取最大值。
当然这样框到的物体非常粗糙,因为只有几个固定大小的框,于是就有了bbox regression,个人认为也正是bbox这个方法不佳,于是被segmentation取代了,也就是mask rcnn
发布于 2018-01-10
赞同添加评论
分享
收藏喜欢
赵路加
网站销售
Anchor box,顾名思义锚点产生的框。注意,是”产生”,也就意味着自然存在的,不需要通过人为或者神经网络而得到。在faster rcnn中,也就是经过骨干网络输出的高阶特征或者说下采样特征,基于尺寸映射回原图的锚点所产生的框,是一组函数映射值。锚点框的存在,主要意义在于通过与gt框计算iou得到rpn网络的标签,然后经过rpn修正得到faster rcnn的roi区域。不过,从另一方面来说,anchor box也可以说是rpn的输入,你可以把rpn理解成一个AE网络,anchor box就是先验知识,你需要rpn根据anchor box,产生更与gt相匹配的box。
发布于 2020-03-13
赞同添加评论
分享
收藏喜欢
万能布偶先生
前阿里达摩院程序员,现卖酒up主,tb搜“猫脱酒馆”
感觉本质就是神经网络对回归搞不定呀搞不定~~~和人去处理也是类似的,你看个局部信息也只能对大小有一定概念,但是没有准确的位置,然后你要依赖这个对物体检测做分割,当然会有问题。所以现在用region proposal来做个预测再refine。靠谱的当然是先出检测再出分割,只是大术未出