对anchor box的一些个人理解
滑动窗口
这是比较原始的目标检测方法,给定一个固定尺寸的窗口,根据设定的步伐,一步一步的从左至右、从上至下滑动,把每个窗口输入到卷积神经网络中进行预测和分类,这样做有两个缺点:
1、由于窗口尺寸固定,因此不适合形变较大的物体
2、窗口较多,运算量大
为什么提出anchor box?主要有两个原因:
1、一个窗口只能检测一个目标,我理解的是,有多个anchor box就可以在图片上检测多个目标,图片上有多个anchor box,每个anchor box检测一个目标。
2、无法解决多尺度问题。这个我不是很理解。难道因为多尺度图片的输入跟anchor box有关系,还是不同的图片需要同样大小的anchor box?
anchor box 框的位置是怎么设置的?
1、通常一个对象或者说一个中心点的anchor box不是通过数学公式或者训练数据集生成的,而时由人主动设计的(这就感觉不够智能,很傻)。
2、通常均分分布在图片上(其本质和滑动窗口检测一样,都是在遍历图片)。
2、一个中心会对应多个 anchor box 。(数量也是认为设定的,不够智能,超参数设置)
anchor box 的数量和形状是怎么设置的?
1、数量和形状通常都是人为设定的,想设置多少就是多少。(YOLO 第一个版本的anchor box 形状是认为给定的,第二个版本中的 anchor box的形状是通过聚类来自动设计的。有效的降低了 框大小带来的loss值,测试得分会更高一点)
2、在YOLOv1里面会为每一幅图片分配49个cell,每一个cell 会分配 2 个anchor box,所以总共就会有98个 anchor box。
anchor box 的预测过程是怎样的?
预测过程分为2个部分,预测框的位置和框的类别。
将 anchor box 与 bounding box 匹配:
1、框位置的预测是通过比较IOU实现的,IOU越大表示预测的越好。
2、一幅图中所有的anchor box(abox)数目一定是大于等于 bounding box(bbox)的数量,只要这样才有可能预测到所有的 bbox。(不懂)
3、训练的时,一幅图片上会分配很多的 abox 和 bbox。
4、首选 为每一个 bbox 匹配一个最好的 abox(使用比较IOU的算法实现),所有的 bbox 配对完之后,一些剩余的 abox 会没有匹配(没有对应 bbox )。(不懂)
5、为剩余的每一个 abox 分配 bbox(这些 bbox 之前已经和更好的abox匹配了)(不懂)
6、所有的匹配都要满足设置的IOU要求,没有匹配的 abox 被定义为负类 anchor box。(不懂)
为 anchor box 预测位置偏移量:
1、abox 的标注偏差是由匹配好的 abox 与 bbox 之间的偏差决定的。
2、没有匹配的 abox 被定义为负类 anchor box。
参考资料
https://zhuanlan.zhihu.com/p/63024247
https://blog.csdn.net/weixin_42419002/article/details/88792292