主干网络
主干网络(backbone):DarkNet53(没有全连接层,所以YOLOv3只用了前52层),基本单元:DBL(卷积+BN+Leaky Relu),大组件:resn。
52 = 1+1+1*2+1+2*2+1+8*2+1+8*2+1+4*2
图片尺寸计算公式:(N-K+2P)/S+1 P:边缘填充方式,S:步长。通过backbone后图片尺寸变成原尺寸的1/32,所以一般要求输入图片尺寸为32的倍数。
BN层:引入可学习的缩放和平移参数,使得均值和方差可以调整到合适的值,通过反向传播优化参数。
Leaky Relu:增加模型的非线性特征提取能力,便于区分目标和背景。
残差模块resn:n表示包含几个res(残差块),res前面的DBL的作用为降采样,使用核为3*3,步长为2的卷积块,代替池化层。
- res结构:第一个DBL的卷积为1*1卷积块,第二个为3*3卷积块。
- add操作:将经过两次DBL操作后的数据与原始数据直接相加,不会改变张量维度。
FPN(feature pyramid network)
concat:张量拼接。将DarkNet中间层与后面的某一层的上采样进行拼接。会扩充张量的维度。
上采样:通过插值法(最邻近插值),yolov3采用的是转置卷积的方式。
通过FPN层使得输出为3个不同尺度的feature map,实现检测不同size的目标。
损失函数
包括四类:左上角坐标(x,y),(w,h),class,confidence
坐标损失函数采用均方误差(MSE),其他采用二值交叉熵(BCE)。
二值交叉熵:处理二值分类任务。 yi为目标值,yi帽为预测值。两者越接近loss越小。
坐标采用均方误差的原因:边界尺寸为连续值,均方误差可以对连续差异提供平滑的梯度信号。
类别预测和置信度预测采用二值交叉熵的原因:这两个都是离散值,二值交叉熵可以比较预测值和真实值的二元关系,提高明确的梯度信号。
但是源码中xy的损失函数也是采用二值交叉熵函数,效果较好。