相对于v1做的改进。
BN层
sigmod输入过大或过小就会造成梯度消失,所以利用BN使数据正态分布。
上图一共有8个样本,batch size = 8,然后每个神经元单独做标准化,比如对1 1.5 1.2 0.9,,这8个算出均值,标准差,然后标准化。
标准化后的结果。都在0附近了。
高分辨率的分类器
v1是在224x224的图像上训练的,v2换成在448x448的图像上训练了。
anchor机制
vi的bbox的形状是随机的,而v2确定两个bbox一个是瘦高的,一个是矮胖的,后续只是位置的微调。
v2是划分为13x13个grid cell,每个grid cell有5个anchor,事先设置好的5种大小不同的框,假如预测花,则花的中心点在哪个grid cell里面,就由这个grid cell的5个anchor里面iou最大的负责预测。
这个白框是人为的,由4号区域的与白框iou最大的anchor负责拟合,得到这个anchor对应的预测框,最后输出相对这个预测框相对初始anchor的偏移量就行了。
v2里面类别归anchor管了,v2里面一个grid cell有5个anchor,每个anchor有25个参数。最后是13x13x125。
最后是13x13x125,最终结果的参数就在这个张量里面。
预测框
为了防止预测框野蛮生长,tx,ty,tw,th是计算得到的预测框参数,加上sigmod函数,这样可以把预测框的中心点约束在这个grid cell里面,真正的预测框就是蓝色的了。
yolov2的损失函数
这是v1的
遍历了每一个anchor,第一部分针对不负责预测物体的预测框,所以置信度越小越好;第二部分是训练早期,anchor和预测框的损失值,目的是为了加快预测速度;第三部分包括三个模块。
细粒度特征
左上角是原始的特征图,一条路将他拆成4份,另一条路将他正常的卷积池化,最后把它们摞在一起,所以最后这个长条既包含底层的细粒度信息,也包含高层的信息。
多尺度训练
每10步就重新选择一个不同大小的图片进行训练,就可以使模型兼容各个大小的图像。
更换骨干网络
v2使用了darknet-19网络,左边是分类的,右边是预测的。
这个是预测阶段。
检测类别更多
把这两个数据集结合在一起。