1. 两阶段以及但阶段目标检测算法
时下流行的目标检测算法主要包含两阶段(Two-stage)算法和单阶段(One-stage)算法两类。其中,两阶段算法主要以RCNN系列为代表,此类算法需要先在区域提议(region proposal)阶段通过选择搜索算法对输入图像生成大量的候选区域,然后再使用 CNN 模型对生成的候选区域加以分类和回归;而单阶段算法主要以SSD算法和YOLO系列为代表,顾名思义,此类算法没有候选区域生成阶段,而是直接使用 CNN模型提取特征信息,从而进行检测目标的分类与定位。两阶段算法的区域提议阶段往往会生成大量的(可能超过 2000个)候选区域,这些候选区域为后续的CNN模型处理带来了极大的计算量,大幅降低了算法的检测速度。而相比于两阶段算法,单阶段算法的检测策略显然更为直接,CNN模型仅需要进行一次前向推理就能获得待检测目标的相关信息,这为单阶段算法带来了数十倍、甚至是上百倍于两阶段算法的检测速度,使其在视频目标检测等主流应用领域中可以达到更高的每秒传输帧率(Frames Per Second,FPS),所以相比两阶段算法,单阶段算法的应用场景要广泛得多。当下最流行的通用目标检测算法毫无疑问是 YOLOv4,它在主流目标检测数据集COCO上面以65 FPS(测试于Tesla V100 GPU)的实时检测速度达到了65.7%的平均精度均值(mean Average Precision,m AP),相比于前作YOLOv3有着7.8%的大幅提升。
2. 目标检测算法实时性
因为作为通用目标检测算法,YOLOv3、YOLOv4 需要在多类别(比如 COCO 数据集的80个类别)的目标检测任务中具备很强的泛化能力,所以它们的网络结构被设计得非常复杂,这在一方面提高了网络的训练难度,另一方面也为它们带来了并不理想的模型推理速度。例如,YOLOv4算法在 AMD 3600x CPU上检测单张608 × 608尺寸的图片需要耗时 21 秒左右,而在 Ge Force GTX 1050Ti GPU(普通性能的 GPU)上的实时检测速度也仅有 13 FPS 左右。YOLOv4 算法虽然具备非常优秀的检测精度,但是复杂的网络结构需要大规模的网络参数量进行支撑,这导致了它的检测速度并不“实时”。口罩检测任务的应用场景非常普遍,多数场景是机场、车站等在全国范围内随处可见的公共交通场所,鉴于这类场所的分布普遍性,是不可能具备超高性能的计算机来部署YOLOv3、YOLOv4 这种非轻量级的目标检测算法的。Wang等人通过对YOLOv4算法的网络结构进行大幅的尺度缩放,并引入跨阶段局部网络(Cross Stage Partial Network,CSPNet)对骨干网络的构造进行改进,提出了YOLOv4-tiny算法。YOLOv4-tiny算法是一种典型的轻量级通用目标检测算法,它的网络参数量仅有YOLOv4算法的10%左右,检测速度则是 YOLOv4算法的6~8倍。相比于YOLOv4算法(具有三个尺度的预测特征层),YOLOv4-tiny算法在骨干网络和特征增强网络上都做了大量的简化,并且只有两个尺度的预测特征层。不过需要注意的是,YOLOv4-tiny网络结构的大幅简化随之而来的就是检测精度的牺牲,例如,它在COCO数据集上的 m AP 指标为42.0%,相比YOLOv4算法确实降低了不少。不过,相比COCO数据集的80个检测类别,现实应用中的大多数目标检测任务的类别数一般在 10 个以下,比如口罩检测任务就只有口罩目标和人脸目标 2个类别,对这类低类别数的检测任务来说,YOLOv4-tiny算法对目标的解析能力尚可,并且具备极为优秀的检测速度。