【深度学习】实验5答案:滴滴出行-交通场景目标检测

DL_class

学堂在线《深度学习》实验课代码+报告(其中实验1和实验6有配套PPT),授课老师为胡晓林老师。课程链接:https://www.xuetangx.com/training/DP080910033751/619488?channel=i.area.manual_search

持续更新中。
所有代码为作者所写,并非最后的“标准答案”,只有实验6被扣了1分,其余皆是满分。仓库链接:https://github.com/W-caner/DL_classs。 此外,欢迎关注我的CSDN:https://blog.csdn.net/Can__er?type=blog
部分数据集由于过大无法上传,我会在博客中给出下载链接。如果对代码有疑问,有更好的思路等,也非常欢迎在评论区与我交流~

实验5:滴滴出行-交通场景目标检测

跑通程序

在飞桨平台配置环境,包括pytorch,torchvision,audio和mmcv。然后通过git下载安装mmdetection,放入自定义的config文件和数据集。修改类比参数(包括2处分类标签和1处分类数量),进行训练。该代码框架结构如下图所示:在这里插入图片描述
使用深度学习技术来完成城市交通场景下的目标检测任务,首先采用示例程序(faster_rnn)进行训练,训练了12个周期后,训练集达到的效果如下,准确率约为0.93,MAP为0.286。在训练的过程中,可以非常明显的看到前几个周期能够迅速收敛,且基本到了第五个周期后,开始不断波动。
在这里插入图片描述

可以看出,效果并不是很好,下面进行一些针对性改进。

效果提升

模型选取

分别尝试了几个网络结构(原始参数),进行5个周期的训练,需要修改的训练代码(命令)如下:

# faster_rcnn
_base_ = [
    # 模型
    '../_base_/models/faster_rcnn_r50_fpn.py',
    # 数据集
    '../_base_/datasets/didi_detection.py',
    # 优化器
    '../_base_/schedules/schedule_1x.py', 
    # 训练方式
    '../_base_/default_runtime.py'
]

# yolo
!python tools/train.py configs/yolo/yolov3_d53_mstrain-608_273e_coco.py --work-dir work_dirs/yolo


# cascade_rcnn
_base_ = [
    '../_base_/models/cascade_rcnn_r50_fpn.py',
    '../_base_/datasets/didi_detection.py',
    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]

# fcos
!python tools/train.py configs/fcos/fcos_r50_caffe_fpn_gn-head_1x_coco.py --work-dir work_dirs/fcos

尝试几种常用的目标识别深度学习模型,下面为几种网络第五周期在验证集上的表现:

  • Yolo:收敛非常缓慢,效果很差(五个周期后0.72)。大概可以确定,backbone使用ResNet是比Darknet有着更好效果的,所以重新替换yolo中的backbone,重新进行训练。可以发现,表现仍然不如two-stages的网络。
    在这里插入图片描述
  • Cascade R-CNN:和Faster-CNN收敛速度差不多,但是训练速度比较慢。最终也是选择了这个模型。
    在这里插入图片描述
  • Fcos:表现一般,可能对于空间的提取能力较强,而对于平面的识别较弱,不再考虑。
    在这里插入图片描述

网络结构和超参数

对于backbone确定使用ResNet,尝试使用更深层的网络Res100进行提取。同时,针对本数据集的12种分类,构造新的合适anchor,这里针对行人(较长较瘦)和货车(较短较宽)定义了新的两种长宽比,即 ratios=[0.2, 0.5, 1.0, 3.0]。简单训练了3个周期,发现效果有所提升。

在这里插入图片描述
同时,调整学习率和优化器,更换为adam优化器进行优化。调整学习率发现当使用warm_up时,快速的(500) warm_up 在前三个批次最好效果能达到 loss=0.6左右,而较小的学习率(1e-5)比较大的学习率(大于5e-5)收敛更快,震荡频率更小,说明原始的学习率已经能够找到正确方向而不震荡,最终配置如下。

optimizer = dict(type='Adam', lr=0.0001, weight_decay=0.0001)
optimizer_config = dict(grad_clip=None)

# learning policy
lr_config = dict(
    policy='step',
    warmup='linear',
    warmup_iters=200,
    warmup_ratio=0.001,
    step=[5, 8, 11])
runner = dict(type='EpochBasedRunner', max_epochs=12)

最终效果

下图为map随着训练周期的变化,可以看到,在第6周期(学习率第一次衰减)处有着明显的提高。第9周期(学习率第2次衰减)也避免了震荡情况。
请添加图片描述

训练12个周期,在验证集上最好的表现如下图所示(第7周期),MAP达到了0.293。可以发现,该数据集上,对于小目标的检测始终较为欠缺,或许采用数据扩充,位置修正等方法会有更好的表现。
在这里插入图片描述

在测试集上进行推理并得到.json 格式的输出result文件,同时使用tools包中预测标注结果,下面是随机选取了几张标注图片:

晴天清晰图像的预测还是比较准确的,无论是来车,还是去的,分类和边框都比较准确:
请添加图片描述
请添加图片描述

有遮挡的情况不是很理想,对于识别框选位置难免出错:

请添加图片描述

阴天远距离,误识别楼房为货车,但是置信度还是比较低的:

请添加图片描述

远距离两侧,背景混乱时,存在和栅栏误识别的情况,同样也是置信度较低:
请添加图片描述

猜你喜欢

转载自blog.csdn.net/Can__er/article/details/127990608