利用Faster R-CNN模型,训练了一个可以实时探测并分类交通路标的卷积神经网络。经过测试,此模型的mAP达到了79.3。
为什么使用 Faster R-CNN?
1. 这是一个用于物体探测以及分类的集合网络
Faster R-CNN 包含 region proposal network(RPN) 和object detection network,这两个网络共享同一组从图片提取特征的卷积层
2. 延迟低,保证快速推断
使用RPN来代替原来使用分割算法生成候选框的方式,使得获得region proposals的速度要快很多。极大的提升了检测框生成速度。
Dataset
使用LISA traffic signs,从行车记录的视频中截图而来,有马路、山路、隧道多种驾驶环境,还有因为颠簸造成的模糊,更符合真实驾驶环境,因为终极目标是使我们的模型可以用于无人驾驶
数据预处理
-
把灰度图片去除,只保留彩色图片,这样每个图片的channels数量就统一了
-
把二十余个Annotations信息(包含图片中的路标类名,坐标,方框的宽高)都集合到一起
-
把数据按9:1的比例分为Training和Testing 两部分
Training 过程
参数
-
共有2857张彩色图片和3222个(包含路标类别和其在图片内坐标的)注解,把他们按9:1的比例分给Training和 Testing 两部分。
-
为了利用GPU的并发性,把batch size 设为8
-
模型的其他参数参考了过去的训练模型
Loss
训练过程中的输入是一个tensors的列表,输出的是三种loss,classifier loss, object detection loss和 classification loss的dictionary。每个图片的loss是三种loss的平均值之和。
随着Epochs的增加,Train Loss变得越来越小,最终训练了30个Epochs
Inference过程
-
输出是包含三个部分 output label, output bounding box, 和confidence score的字典。通过输出,可以评估模型的整体准确率。
-
为了解决重叠边框问题, 利用NMS从预测出的一众方框中找到离ground truth box最接近的框:
IoU: intersection over Union 计算两个方框的重合度
NMS: Non-Maximum Suppression 设定阈值为0.05,保留与ground truth box的IOU超过0.5的box为最终预测结果。因为交通路标之间一般离得很远,重叠的可能性很小,即使阈值只有0.05也足够分清不同的路标。(如果两个路标离得很近,阈值又小,属于另一个路标的边框很可能也被认为是这个路标的了。在这种情况下要增大阈值)
最终把 552 个 labels before NMS 变成了 332 个 ground truth labels
另一种NMS&IoU
在目标检测中,分类器会给每个方框计算出一个class score,就是这个方框属于每一类的概率,NMS就是根据这些值来进行的,主要流程:
- 对于每一类,首先把所有score<thresh1的方框的score设为0
- 之后,将所有的方框按照得分排序,选中最高分及其对应的方框
- 遍历其余的方框,如果和当前最高分方框的重叠面积(IoU)大于一定的阀值,便将该方框删除
- 从未处理的方框中继续选择一个最高分的方框,重复上述过程(操作另一个物体)
- 重复上述过程,直到找到全部保留的方框
- 然后根据所有保留方框的class score和class color画出最后的预测结果
模型评估
评估指标
mAP (mean Average Precision),即所有类别的AP (Average Precision) 平均值
1. 计算每个类别的AP时,需要计算 Precision 和 Recall
Precision = TP / (TP + FP)
Recall = TP / (TP + FN)
TP(True Positive,真正):将正类预测为正类的数量;即与Ground truth区域的IoU>=threshold的预测框
FP(False Positive,假正):将负类预测为正类的数量,误报;即与Ground truth区域IoU < threshold的预测框
FN(False Negative,假负):将正类预测为负类的数量,漏报;遗漏的Ground truth区域
TN(True Negative,真负):将负类预测为负类的数量;没法算,因为没有标框的地方无法界定
2. AP是Precision-Recall Curve(PRC)曲线所覆盖的面积,用来衡量模型在每个具体类别上的好坏。mAP就是给每一分类分别计算AP,再做mean平均。
结果
- mAP 为 79.3
- 出现频次高的路标,比如“停车”,“直行”准确率高,频次的低的准确率相对差一点。
Tips
我们用已训练好的 Resnet-50-FPN 作为卷积层的主干