该文章是关于车道线检测和分类模型的比赛任务说明和训练指南。主要介绍了数据集的特点、数据预处理、训练过程中需要注意的问题、类别不均衡问题的处理方法、DeepLabv3+模型的finetune、训练过程可视化和生成预测结果等步骤。
数据集包括手机拍摄的道路图片,并标注了车道线的区域和类别。标注数据以灰度图方式存储,不同类别的车道线像素有不同的灰度值。
为了节省显存,可以选择裁剪掉图片的上半部分,即天空部分。同时,需要注意调整类别权重以处理类别不均衡问题。
训练时需要注意默认PaddleSeg v0.6在Paddlepaddle 1.8.4的框架版本下的问题,以及使用适当的损失函数来处理类别不均衡问题。另外,DeepLabv3+模型的finetune也需要进行相应的设置。
通过配置logdir路径和修改配置文件,可以对训练过程进行监控,并生成预测结果。需要注意的是,不同分辨率的图片需要分开处理,修改配置文件中的EVAL_CROP_SIZE以及相应的VIS_FILE_LIST和TEST_FILE_LIST路径配置。
点击上方
“
小白学视觉
”,选择加"
星标
"或“
置顶
”
重磅干货,第一时间送达
0.1 任务
要求参赛者利用提供的训练数据,设计一个车道线检测和分类模型,来检测测试数据中车道线的具体位置和类别。样例示范:
0.2 数据集描述
本次赛题数据集包括x张手机拍摄的道路图片数据,并对这些图片数据标注了车道线的区域和类别,其中标注数据以灰度图的方式存储。
标注数据是与原图尺寸相同的单通道灰度图,其中背景像素的灰度值为0,不同类别的车道线像素分别为不同的灰度值,具体如下表所示:
3. 数据处理
参考项目从头搭建无人车车道线检测挑战赛解决方案中提到:
通过仔细观察,我们发现这些数据有一个共同的特点,就是图片的上三分之一部分都是天空,是没有车道线存在的,知道了这点后,我们就可以进行一个裁剪的过程,一下子就可以节省下三分之一的显存,是不是很爽呢?这里我选择裁剪上方690个像素的高度。
在本次比赛的数据集中,这种现象同样存在,因此本文也采用截去天空的方式进行训练,省下内存空间。本文的做法是直接裁剪掉图片的上半部分。
3.1 裁剪效果
4. 开始训练
4.1 注意事项
训练时需要注意,默认PaddleSeg v0.6在Paddlepaddle 1.8.4的框架版本下
paddle.enable_static()
这句代码会报错,解决办法就是将
pdseg/train.py
中这行代码注释掉;后面
pdseg/vis.py
和
pdseg/eval.py
也需要进行相同操作。
4.2 类别不均衡问题处理
在PaddleSeg文档中,特别就类别不均衡问题的处理进行了说明:
在图像分割任务中,经常出现类别分布不均匀的情况,例如:工业产品的瑕疵检测、道路提取及病变区域提取等。
针对这个问题,您可使用Weighted softmax loss、Dice loss、Lovasz hinge loss和Lovasz softmax loss进行解决。
Weighted softmax loss是按类别设置不同权重的softmax loss。
通过设置
cfg.SOLVER.CROSS_ENTROPY_WEIGHT
参数进行使用。
默认为None. 如果设置为'dynamic',会根据每个batch中各个类别的数目,动态调整类别权重。也可以设置一个静态权重(list的方式),比如有3类,每个类别权重可以设置为[0.1, 2.0, 0.9]. 示例如下
SOLVER: CROSS_ENTROPY_WEIGHT: 'dynamic'
由于比赛是一个分类问题,因此参考
configs/lovasz_softmax_deeplabv3p_mobilenet_pascal.yaml
的配置方式,对
SLOVER
进行设置。
4.3 DeepLabv3+模型finetune
这里参考文档的DeepLabv3+模型使用教程进行设置,参考
config文件
https://gitee.com/paddlepaddle/PaddleSeg/blob/develop/tutorial/finetune_deeplabv3plus.md
5. 训练过程可视化
在可视化模块中配置
logdir
路径为
PaddleSeg/vdl_log_dir
可对训练过程进行监控
6. 生成预测结果
6.1 修改配置文件
这里注意要将不同分辨率的图片分开,然后修改配置文件中的:
-
EVAL_CROP_SIZE
为
EVAL_CROP_SIZE: (1920, 1080)
或
EVAL_CROP_SIZE: (1280, 720)
-
对应的
VIS_FILE_LIST
和
TEST_FILE_LIST
路径配置
-
BATCH_SIZE
建议改为1,否在显存可能不够用
6.2 修改
vis.py
使其将预测结果输出为单通道灰度图
# 对test_list2.txt和test_list3.txt分别进行预测,result目录下就是可提交的图片文件
!python pdseg/vis.py --use_gpu --cfg ./configs/deeplabv3p_resnet50_vd_cityscapes.yaml --vis_dir result
https://aistudio.baidu.com/aistudio/projectdetail/1081298?channelType=1&channel=1
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。