YOLOV2论文对v1中许多地方都进行了相关的改进和提升,其将骨干网络也进行了更换,不在使用v1的骨干网络。其v2骨干模型结构图如下:
作者删去了骨干网络最下面的三层操作,接上了三个卷积核一个高维度特征与低维度特征的融合,并最终生成模型输出 13 x 13 x (20 + 5) * 检测框个数(下图是从网络中找的)。
后面的20 + 5 怎么来的呢?在v1中,不管你单元格内有多少个框,都共用一个20维的类别概率值,所以你需要计算每一个框对应的每一个类别概率值(iou 乘以 该框有物体的概率 乘以 有物体的前提下是物体A的概率)。在v2中给每一个框都预测一组20维类别概率值,后面的5就还是四个坐标一个confidence分数。
除了上面模型结构和最终输出结构的改变外,下面详细讲讲v2改进的地方:
1、 v1中并没有使用bn层,此时我们使用了bn层,效果提升2个点
2、v1中采用224作为图像输入,这里我们采用300或者416 488 544作为图像输入,得到4个点提升
3、v1中直预测框的位置,然后由iou以及有目标概率和在有目标概率前提下是该目标的概率乘积决定概率分布
而在v2中,我们就使用fasterrcnn那一套了,就使用预测偏移量的方法。
4、在之前我们都没有说求得anchor或者default box的尺寸和比例方法是什么,都是根据工程经验自己设置的,在本文中是对原始图片中所有的目标框进行维度聚类,来获取预测框的scale和比例值。
5、我们之前预测偏移量时,对生成的偏移量没有大小限制,很可能出现加上偏移量后框就跑偏的结果,因此我们现在对偏移量加上一个sigmoid函数,将他限制在当前单元格内。
6、我们如果只用1313来做最终预测,对大物体当然是有效的,但是对小物体,就不是那么友好了,所以需要将低层的特征和高层特征进行融合。此时融合使用一种特殊的方法,将2626的分成四份,每一份内13*13.
7、我们在原始yolov1中,我们使用固定尺寸对我们图片模型进行训练,这其实会降低该模型的健壮性。使得我们模型的适应性并不高。并且由于我们的模型是全卷积和池化的,没有全连接的部分,因此我们可以不必要固定尺寸。
我们根据yolo系列418作为输入,最终得到输出是13x13x1024.故其缩放率为418 / 13 = 32; 那我们就可以取320 – 608间所有32整数倍作为我们图片的尺寸区间。让每张图片随机选择缩放尺寸。
关于如何区分正负样本,如何根据聚类形成的框大小和比例生成框,以及如何计算loss,都未提及
不过我们可以根据ssd的做法,大概明白如何生成框
1、就是根据比例和尺寸生成模板框,将模板框在最终输出的13*13中每个单元格内滑动,就可以生成指定个数的框。
2、如何区分正负样本,我们也可以根据ssd联想到,根据两条原则选择正样本:1)先计算真实框和生成框的IOU值,将每一个真实框的最大IOU值当正样本。
2)将每一个生成框的最大IOU值做正样本。
下面选择负样本,我们将所有不是正样本的求loss,然后从大到小选择出3倍正样本数量的负样本,作为我们最终训练负样本。
3、那么如何求loss呢??个人感觉可以根据YOLOV1的三部分组成loss方法来求。不过以上这些均是个人根据之前所学想到的,有什么不同意见欢迎在评论区留言。