要求参赛者利用提供的训练数据,设计一个车道线检测和分类模型,来检测测试数据中车道线的具体位置和类别。样例示范:
本次赛题数据集包括x张手机拍摄的道路图片数据,并对这些图片数据标注了车道线的区域和类别,其中标注数据以灰度图的方式存储。
标注数据是与原图尺寸相同的单通道灰度图,其中背景像素的灰度值为0,不同类别的车道线像素分别为不同的灰度值,具体如下表所示:
参考项目从头搭建无人车车道线检测挑战赛解决方案中提到:
通过仔细观察,我们发现这些数据有一个共同的特点,就是图片的上三分之一部分都是天空,是没有车道线存在的,知道了这点后,我们就可以进行一个裁剪的过程,一下子就可以节省下三分之一的显存,是不是很爽呢?这里我选择裁剪上方690个像素的高度。
在本次比赛的数据集中,这种现象同样存在,因此本文也采用截去天空的方式进行训练,省下内存空间。本文的做法是直接裁剪掉图片的上半部分。
注:如果感觉裁剪幅度过大,读者可自行修改裁剪比例
训练时需要注意,默认PaddleSeg v0.6在Paddlepaddle 1.8.4的框架版本下paddle.enable_static()
这句代码会报错,解决办法就是将pdseg/train.py
中这行代码注释掉;后面pdseg/vis.py
和pdseg/eval.py
也需要进行相同操作。
在PaddleSeg文档中,特别就类别不均衡问题的处理进行了说明:
在图像分割任务中,经常出现类别分布不均匀的情况,例如:工业产品的瑕疵检测、道路提取及病变区域提取等。
针对这个问题,您可使用Weighted softmax loss、Dice loss、Lovasz hinge loss和Lovasz softmax loss进行解决。
Weighted 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
进行设置。
而在比赛基线项目中,也给出了类别权重的计算过程:
这里参考文档的DeepLabv3+模型使用教程进行设置,参考config文件
https://gitee.com/paddlepaddle/PaddleSeg/blob/develop/tutorial/finetune_deeplabv3plus.md
在可视化模块中配置logdir
路径为PaddleSeg/vdl_log_dir
可对训练过程进行监控
这里注意要将不同分辨率的图片分开,然后修改配置文件中的:
EVAL_CROP_SIZE
为EVAL_CROP_SIZE: (1920, 1080)
或EVAL_CROP_SIZE: (1280, 720)
对应的VIS_FILE_LIST
和TEST_FILE_LIST
路径配置
BATCH_SIZE
建议改为1,否在显存可能不够用
vis.py
使其将预测结果输出为单通道灰度图其实就是将灰度图转伪彩色部分的代码注释掉:
In [10]
# 对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