博客专栏

EEPW首页 > 博客 > Anchor-free目标检测 | 工业应用更友好的新网络(2)

Anchor-free目标检测 | 工业应用更友好的新网络(2)

发布人:CV研究院 时间:2021-09-16 来源:工程师 发布文章

4.3)讨论

① 一张图片最多可以检测出49个对象

每个30维向量中只有一组(20个)对象分类的概率,也就只能预测出一个对象。所以输出的 7*7=49个 30维向量,最多表示出49个对象。

② 总共有 49*2=98 个候选区(bounding box)

每个30维向量中有2组bounding box,所以总共是98个候选区。

③ YOLO的bounding box并不是Faster RCNN的Anchor

Faster RCNN等一些算法采用每个grid中手工设置n个Anchor(先验框,预先设置好位置的bounding box)的设计,每个Anchor有不同的大小和宽高比。YOLO的bounding box看起来很像一个grid中2个Anchor,但它们不是。YOLO并没有预先设置2个bounding box的大小和形状,也没有对每个bounding box分别输出一个对象的预测。它的意思仅仅是对一个对象预测出2个bounding box,选择预测得相对比较准的那个。

这里采用2个bounding box,有点不完全算监督算法,而是像进化算法。如果是监督算法,我们需要事先根据样本就能给出一个正确的bounding box作为回归的目标。但YOLO的2个bounding box事先并不知道会在什么位置,只有经过前向计算,网络会输出2个bounding box,这两个bounding box与样本中对象实际的bounding box计算IOU。这时才能确定,IOU值大的那个bounding box,作为负责预测该对象的bounding box。

训练开始阶段,网络预测的bounding box可能都是乱来的,但总是选择IOU相对好一些的那个,随着训练的进行,每个bounding box会逐渐擅长对某些情况的预测(可能是对象大小、宽高比、不同类型的对象等)。所以,这是一种进化或者非监督学习的思想。

另外论文中经常提到responsible。比如:Our system divides the input image into an S*S grid. If the center of an object falls into a grid cell, that grid cell is responsible for detecting that object. 这个 responsible 有点让人疑惑,对预测"负责"是啥意思。其实没啥特别意思,就是一个Object只由一个grid来进行预测,不要多个grid都抢着预测同一个Object。更具体一点说,就是在设置训练样本的时候,样本中的每个Object归属到且仅归属到一个grid,即便有时Object跨越了几个grid,也仅指定其中一个。具体就是计算出该Object的bounding box的中心位置,这个中心位置落在哪个grid,该grid对应的输出向量中该对象的类别概率是1(该gird负责预测该对象),所有其它grid对该Object的预测概率设为0(不负责预测该对象)。

还有:YOLO predicts multiple bounding boxes per grid cell. At training time we only want one bounding box predictor to be responsible for each object. 同样,虽然一个grid中会产生2个bounding box,但我们会选择其中一个作为预测结果,另一个会被忽略。下面构造训练样本的部分会看的更清楚。

④ 可以调整网格数量、bounding box数量

7*7网格,每个网格2个bounding box,对448*448输入图像来说覆盖粒度有点粗。我们也可以设置更多的网格以及更多的bounding box。设网格数量为 S*S,每个网格产生B个边框,网络支持识别C个不同的对象。这时,输出的向量长度为:

12.png


YOLO选择的参数是 7*7网格,2个bounding box,20种对象,因此 输出向量长度 = 20 + 2 * (4+1) = 30。整个输出的tensor就是 7*7*30。

因为网格和bounding box设置的比较稀疏,所以这个版本的YOLO训练出来后预测的准确率和召回率都不是很理想,后续的v2、v3版本还会改进。当然,因为其速度能够满足实时处理的要求,所以对工业界还是挺有吸引力的。

5)训练样本构造

作为监督学习,我们需要先构造好训练样本,才能让模型从中学习。

13.jpg

对于一张输入图片,其对应输出的7*7*30张量(也就是通常监督学习所说的标签y或者label)应该填写什么数据呢。

首先,输出的 7*7维度 对应于输入的 7*7 网格;然后具体看下30维向量的填写。

① 20个对象分类的概率

对于输入图像中的每个对象,先找到其中心点。比如图8中的自行车,其中心点在黄色圆点位置,中心点落在黄色网格内,所以这个黄色网格对应的30维向量中,自行车的概率是1,其它对象的概率是0。所有其它48个网格的30维向量中,该自行车的概率都是0。这就是所谓的"中心点所在的网格对预测该对象负责"。狗和汽车的分类概率也是同样的方法填写。

② 2个bounding box的位置

训练样本的bounding box位置应该填写对象实际的bounding box,但一个对象对应了2个bounding box,该填哪一个呢?上面讨论过,需要根据网络输出的bounding box与对象实际bounding box的IOU来选择,所以要在训练过程中动态决定到底填哪一个bounding box。参考下面第③点。

③ 2个bounding box的置信度

上面讨论过置信度公式:

14.png

6)损失函数

损失就是网络实际输出值与样本标签值之间的偏差。

15.jpg

YOLO给出的损失函数如下

16.jpg

DenseBox和YOLO的区别:

1.DenseBox最初应用于人脸检测,相当于只有两类,而YOLO是通用检测,通常大于两类。

2.DenseBox是密集预测,对每个pixel进行预测,而YOLO先将图片进行网格化,对每个grid cell进行预测,所以前者更适合于小目标,后者更适合于大目标。

3.DenseBox的gt通过bbox中心圆形区域确定的,而YOLO的gt由bbox中心点落入的grid cell确定的。

CornerNet:

下图,经过特征提取主干网络(主干网络为Hourglass-104)后分为两个分支(两个分支分别接前面提到的corner pooling,随后细谈),一个分支生成目标左上点热力图,一个分支生成目标右下点热力图,而此时两个热力图并没有建立联系,因此无法确定两点是够属于同一目标,因此两分支同时生成embeddings,通过判断两个embedding vector的相似性确定同一物体(距离小于某一阈值则划为同一目标)。

17.png

1、输入一张图像,经过backbone网络(Hourglass network)后,得到feature map。

2、将feature map同时输入到两个branch,分别用于预测Top-Left Corners和Bottom-right Corners。

3、两个branch都会先经过一个叫Corner Pooling的网络,最后输出三个结果,分别是Heatmaps、Embeddings、Offsets。

4、根据Heatmaps能够得到物体的左上角点和右下角点,根据Offsets对左上角和右下角点位置进行更加精细的微调,根据Embeddings可以将同一个物体的左上角和右下角点进行匹配。得到到最终的目标框。

18.png

1:怎么检测这个两个点?生成keypoint的heatmap,heatmap中响应值最大的位置就是点的位置。

2:怎么知道这两个点所组成的框包含物体的类别?每个heatmaps集合的形式都是CxHxW,其中C代表的是检测目标的类别数,H和W则代表的heatmap的分辨率,Corner响应值最大所在的channel即对应了物体的类别。

3:当图像中有多个物体时,怎么知道哪些点可以组成框?(哪些左上角的点和哪些右下角的点能够组成有效的框)生成embedding向量,用向量的距离衡量两个Corner是否可以组成对。

4:Loss是什么形式?loss总共分了三个部分,一部分是用于定位keypoint点的detecting loss,一个是用于精确定位的offset loss,一个是用于对Corner点进行配对的grouping loss。

5:网络结构是怎么样的?使用Hourglass作为backbone,使用Corner Pooling构造了prediction module,用来得到最终的结果。

6:有没有什么比较新奇的东西?提出的Corner Pooling,第一次使用检测点的方法检测物体。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

隔离器相关文章:隔离器原理


关键词: AI

相关推荐

技术专区

关闭