引言
因为找工作的原因,面试中经常遇到目标检测的问题,在2022年的现在,大多是对单步目标检测算法YOLO家族系列展开一系列追问,比如Yolov3、Yolov4、Yolov5、Yolox算法。
另一部分就是Faster RCNN为代表的两阶段目标检测网络。
而比较有意思的是,目前来看,自动驾驶和各种机器人公司的兴起,导致两阶段目标检测网络几乎失去了用武之地,一方面是RCNN系列本身参数较多,模型庞大,速度慢,另一方面对于实际工作中,2D 数据能完成的任务大多是车道线检测、标识牌文字识别、红绿灯判断,这需要在模型小速度快。而重要的行人和车辆的检测则是由激光雷达完成。
因此,在面试多家公司后,我觉得针对目前就业的面试准备,完全可以忽略掉两阶段目标检测网络,即便是面试中问起,你也可以不会,因为工作中用不到,这仅是个加分项。
反过来说,YOLO系列的重要性却是有了极大的提高。因此,面试要求中,对于YOLO不仅仅在于网络结构的全面掌握,还有细节的理解,包括个版本的演变,不同之处。以及,Loss函数的具体公式的优缺点。另外,模型的部署以及剪枝也成为了必须掌握的内容,这个在算法交付环节可以说占了很大的比重,毕竟不是实验室和写论文,公司是要把算法卖出去的,模型的部署就是最终呈现给客户的产品。
那么,直接从V3开始复习。
YOLO V3
首先,V3使用了DarkNet-53中的前52个卷积层作为主干网络,这种做法的好处在于提高了网络对各中分辨率图像的泛用性。注意,整个主干网络中,没有一个下采样函数,所有的缩小分辨率功能,都是由卷积模块完成的(卷积参数 kenel:3X3 step:2)。
有的教程在这里含糊不清,甚至给了错误的解释,这里我要明确一下。
YOLO v3的DarkNet-53 1)没有使用下采样函数 2)绝对没有全连接层!!!
DarkNet-53 之所以被作者在论文中提出,是由于需要和ResNet做性能对比试验,而ResNet是一种分类网络,可以完成对输入图像的多分类 。因此,为了做这个对比试验,需要在网络的最后加入全连接层实现多分类的能力,但是YOLO中并没有用到,这是因为YOLO是个目标检测网络!
第二,Darknet53是经典的一个深层网络,结合ResNet的特点在保证对特征进行超强表达的同时又避免了网络过深带来的梯度问题。与ResNet不同的是,darknet开始输入图像经过一个conv1层(conv1的卷积核大小也不同)后不用池化层去下采样,而是通过一个步长为2的3x3卷积下采样。
上图是各个主干网络在准确率和效率方面的对比,准确率就是Top-1和Top-5,这两个指标上Darknet-53都是优于ResNet-101的,并非常接近于ResNet-152。YOLOv3用了三个指标说明Darknet-53好,分别是Bn Ops,BFLOP/s和FPS,一般情况下分类网络都只用一个指标说明网络的计算量那就是FLOPs或MFLOPs,但是YOLOv3用了三个。
Bn Ops和BFLOP/s分别代表着网络一个需要多少个10亿次的计算,以及这个结构在同一平台下每秒可以跑多少次10亿次计算,这两个值就决定了FPS
YOLOv3还统计了BFLOP/s,就是这结构实际跑在平台上效率如何,因为ResNet-101和ResNet-152的层很多,数据在层之间需要传输,所以实际跑出来ResNet-101和ResNet-152的BFLOP/s要低Darknet-53很多。
最后,FPS实际体现了这个结构的速度,Darknet-53与ResNet-101的计算量是相似的,但是由于BFLOP/s更高,所以Darknet-53比ResNet-101快1.5倍,Darknet-53计算量本来就比ResNet-152低,BFLOP/s还要更高,所以快了2倍。
面试中大概会问,Darknet中残差结构的问题,如何避免梯度退化到零。
所以,残差到底是在干什么?