YOLO v2
@(目标检测)
YOLO通过整合备选框选择和特征检测两个部分,成功的实现了end-to-end的训练,降低了复杂度并且减少了计算量,达到了实时的效果。但是仍然拥有缺陷:
定位误差,YOLO采用的网络结构中含有全连接层,使得输入图片分辨率固定,对物体尺寸不敏感,大量的位置信息被丢失掉。并且在最后一层中,每个grid里面只预测两个obj,一个类,这让YOLO网络天然对存在大量obj的图片难以准确检测。
如何解决这个问题,就是YOLOv2的工作。下面将一一列举YOLOv2的改进。
Batch Normalization
batch normalization的应用已经得到了很多经典网络的肯定,现在基本上成为标配。YOLOv1中并没有引入,所以在YOLOv2中加入网络,使得网络的收敛更快更稳定。至于batch normalization为何有效,这里简单提一下。神经网络的每一层输出,由于网络权重,都会导致数据的分布发生变化。这会对学习造成困难,因此每一层加上BN,使得每一层的输出和上一层的输出的分布保持一致。详情参见Batch Normalization
High Resolution Classifier
YOLO的训练分成两部分,第一部分是用ImageNet通过分类任务训练特征提取器,第二部分是用CoCo,VOC通过检测任务来对网络做fine-tuning。在v2中,第一部分里使用448×448而不是224×224的图片训练网络,高分辨率的样本进行训练会使得网络的检测效果更好,这一点显而易见。(更多的特征信息可以被学习)
Convolutional With Anchor Box
YOLOv1中最被诟病的region层被改变了,首先看一下两种结构对比。
(特别提示,YOLOv1和v2中x,y,w,h的含义不一样,v1中是坐标,而v2中是偏差,详情见Anchor box)
可以发现,YOLOv1中每一个grid可以预测的obj的数量为B(B=2)个,并且在预测的时候每个grid实际上只输出一个BB(bounding box),而YOLOv2上升到了K(K=5)个,并且BB们会独立预测所属类,一个grid里面可以对多个不同类的物体做预测。比如这样的图片。
更多的预测框意味着检测结果的Precsion下降,而Recall [1] [ 1 ] 上升,但是根据论文结果,Precsion从69.5%下降到69.2%,Recall由81%提升到了88%。所以这一方法是行之有效,并且精度方面仍然存在改进空间(然后YOLOv3就这么做了)。
作者观察到,大物体通常占据了图像的中间位置,所以将图片的尺寸从448×448变为了416×416,这样做是为了让网络里所有卷积层产生的特征图,尺寸都为奇数,从而使得在预测物体位置的时候只需要中间位置的一个grid,而不是四个grid。
Anchor Box
anchor box是在RCNN系列中被使用的,使用这个结构的原因是为了在一个grid里面能够预测多个不同类别的目标。而且,一般地,同一种对象,他们的框子基本属于同一种比例,比如人的检测框往往是瘦长的,而车辆的检测框要么是宽扁的,要么是方形的。所以为了获得更加精确的检测框,我们可以先精选出不同种类物体的典型检测框,然后在这个基础上进行修改。在YOLOv2中,我们精选出来的检测框数量为K(K=5)个,这个K值是YOLO的作者试出来的,下面将会介绍。所以对于每一个grid,其特征向量的长度为(5+C)×K,即 [pc,bx,by,bw,bh,c1,...,cC向量共有K个,......,pc,bx,by,bw,bh,c1,...,cC] [ p c , b x , b y , b w , b h , c 1 , . . . , c C ⏟ 向 量 共 有 K 个 , . . . . . . , p c , b x , b y , b w , b h , c 1 , . . . , c C ]
关于Anchor box的资料找了好久啊,才在RCNN里面的支持材料里面找到。
这个东西叫做Bounding Box Regression。首先我们看看直接预测 (x,y,w,h) ( x , y , w , h ) 有什么不好的地方呢?
还记得YOLO是怎么算loss的嘛。如果你有一个预测框,而图像中有多个GT框,那么你是跟哪个GT框算loss呢?答案是在IoU超过0.5的情况下,跟IoU最大的那个。现在来看上面这个图,我们会觉得这个模型预测飞机基本可以了,但是在模型看来,它预测出来的框和GT框的IoU没有达到0.5,直接预测失败,给了模型一个大的loss回去迭代了,极端点就是本来快收敛了,又搞这么几下,迭代回去了。那么如果我们能再调整一下这个预测框的长宽大小和比例的话,使得这个框子更加接近GT框,我们就不需要对模型进行大的调整,这样精度更高收敛速度更快。Bounding Box Regression就是来调整这个框子的位置,使其更加准确的。
我们的目的就是,给定 P=(Px,Py,Pw,Ph)和G=(Gx,Gy,Gw,Gh) P = ( P x , P y , P w , P h ) 和 G = ( G x , G y , G w , G h ) ,寻找一种映射 f f ,使得