一、yolo_v3保留的东西:
①、“分而治之”,从yolo_v1开始,yolo算法就是通过划分单元格来检测,只是划分的数量不一样。
②、采用“leaky ReLU”作为激活函数。
③、端到端进行训练。一个loss function搞定训练,只需关注输入端和输出端。
④、从yolo_v2开始,yolo就用batch normalization作为正则化、加速收敛和避免过拟合的方法,把BN层和leaky relu层接到每一层卷积层之后。
⑤多尺度训练。在速度和准确率之间tradeoff。想速度快点,可以牺牲准确率;想准确率高点儿,可以牺牲一点速度。
二、yolo_v3的性能对比
yolo_v3的模型比之前的模型复杂了不少,可以通过改变模型结构的大小来权衡速度与精度。速度对比如下:
图1. YOLOv3 与其他模型检测方法在coco数据集上的性能比较
三、yolo_v3的结构图如下:
图2. yolo_v3结构图
上图的一些补充:
DBL:就是代码中的Darknetconv2d_BN_Leaky,是yolo_v3的基本组件。就是卷积+BN+Leaky relu。对于v3来说,BN和Leaky relu已经是和卷积层不可分离的部分了,共同构成了最小组件。
resn:n代表数字,有res1,res2,…,res8等等,表示这个res_blovk里含有多少个res_unit。这是yolo_v3的大组件,yolo_v3开始借鉴了ResNet的残差结构,使用这种结构可以让网络结构更深。对于res_block的解释,可以在上图的右下角直观看到,其基本组件也是DBL。
concat:张量拼接。将darknet中间层和后面的某一层的上采样进行拼接。拼接的操作和残差层add的操作是不一样的,拼接会扩充张量的维度,而add只是直接相加不会导致张量维度的改变。