交通标志的检测、分类的方法整理(自己的方法)

文章目录

  • 交通标志的检测、分类的方法整理
    • 0. 相关说明
    • 1. 交通标志的检测方法
      • 1.1. 基于颜色阈值来提取感兴趣区域(代码已完成)
      • 1.2. 使用DL来检测,CNN来分类(代码已完成)
        • 1.2.1 对 YOLOv3 的一些改进点(针对数据集的优化)。
        • 1.2.1. 对数据集的处理。
    • 2. 交通标志的分类方法
    • 3. 需要改进的地方

交通标志的检测、分类的方法整理

0. 相关说明

更新时间:2020年04月14日11:45:44

  1. 这个应该是一年前写完的。突然发现还躺在草稿里,没有发布出来……
  2. 当时刚开始学检测,实验室也没有师兄是这个方向的,所以没有将检测结果调试的很好。最终,我采取的方法是在检测结果后面在加一个分类实现的检测(注意我这里的检测加分类不是网络结构层面的two stage,而是检测出结果(只使用候选框位置,不适用类别信息)+分类器(确定类别,含负样本类别))。虽然这方法的实验结果还是不错的,但是只能用于实际的比赛,学术意义不大。
  3. 学术才是根本,工程只是为了交差。不建议使用我这种方法。

1. 交通标志的检测方法

  • 这里的"检测"指的是:输入是图片,输出是候选区域的 bounding box(bbox),不含bbox的类别信息。
  • 我这里使用了两种方法来做交通标志的检测,第一种使用颜色阈来提取感兴趣区域,第二种使用深度学习(yolov3)的方法来检测交通标志(确定位置,因为没有训练好,所以后面加分类器),之后会用CNN的方法来做交通标志灯的分类(确定类别,含负类别)。
  • 将检测和分开的主要原因有,
  1. 各种交通标志的样本不均衡,将各种交通标志当成一类交通标志,有利于对样本较少类别的交通标志进行学习(还没有进行严格的实验证明),将所有的交通标志当成一个类别之后,部分我们可能暂时不需要检测的类别也可以当成检测对象,这样我们的训练样本就更多了。
  2. CCTSDB 数据集只将数据集分成了三大类,没有交通标志的小类别,即无细分类的标签,无法直接训练出。
  3. 非深度学习的方法,都是基于分类任务来做的检测。使用颜色阈值提取感兴趣区域(ROI)后,后面也需要跟一个分类来对 ROI 进行分类,所以分类器比不可少。

1.1. 基于颜色阈值来提取感兴趣区域(代码已完成)

代码链接:https://github.com/yangzhaonan18/trafficSignDetect_opencv
将RGB图像转成HSV图像,分别对红、黄、蓝、白四种颜色进行提取,之后再基于规则,将同一标志中的颜色区域进行合并,最终的输出结果如下(只有检测目标,没有检测类别):
交通标志的检测、分类的方法整理(自己的方法)_第1张图片

1.2. 使用DL来检测,CNN来分类(代码已完成)

1.2.1 对 YOLOv3 的一些改进点(针对数据集的优化)。

我们这里使用YOLOv3来检测交通标志,对YOLOv3主要改进有:

  1. 【修改anchor】针对我们的交通标志的大小,长宽比信息,调整,网络结果中的 anchors 的大小。使用Kmeans 对标签文件中交通标志的大小进行聚类,我们只修改了anchors 的大小,没有修改 anchors 的数量。良好的 anchor 更有利于训练和回归。
  2. 【调整 残差结构】交通标志数据集相对于VOC、COCO这些数据集而言,检测对象更小。最小时,交通标志的面积只占到整个图像的万分之一。
  • for training for small objects (smaller than 16x16 after the image is resized to 416x416) - set layers = -1, 11 instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L720 and set stride=4 instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L717

1.2.1. 对数据集的处理。

交通标志的数据集通常不做左右对称处理,我们将分类任务从检测任务中分离出来后,就可以做左右对称的数据增强了。

  1. 【左右对称 aug】由于我们的检测器只进行检测不进行分类,所有我们对所有的图像进行了左右对称处理增强。一张图像相当于两张图片
  2. 【缩放 aug】训练数据集中部分图片不是在车辆视角采集的,因此存在图中的交通标志过大或过小的情况,这种情况是不满足实际情况的,因此我们对每一张图片进行了随机的裁剪或者padding 处理,保证我们每一张图片中的每一个目标的尺寸都能满足我们的要求。一张图片相当于一个视频序列。

2. 交通标志的分类方法

  • 这里的“分类”指的是,输入是一个标志图片(RGB),输出是这个标志的类别(含其他类)信息。
  1. 我们这里只使用了 CNN 来进行分类,使用 ResNet18训练114类交通标志(114类交通标志+1类其他),最后的分类准确率达到 98%。

3. 需要改进的地方

  1. 如何学习大类别?:yolo 检测对图像的特征提取能力太强了,很容易学到一些细节信息(小类别),而忽略了整体信息(大类别)。在交通标志检测中的表现就是,例如:我提供10种类别的三角形标志,我们希望网络能检测到所有的三角形标志,而不是仅仅这10类标志。
  2. 如何让分类器实现连续学习?:当交通标志的检测类别改变时,我们就需要重头训练我们的分类器,之前的训练工作都浪费了,我们希望能充分利用之前的训练工作,继续训练,实现分类任务。
  3. 如何让检测器实现连续学习?:同理,不只是分类器,当我们的检测任务改变时,也需要从头开始训练我们的检测器,应该需要一种方法来解决这个问题。

你可能感兴趣的:(交通标志,交通标志,检测,分类,信号灯,YOLO)