• 【深度学习】实验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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

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

    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    最终效果

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

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

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

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

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

    请添加图片描述

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

    请添加图片描述

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

  • 相关阅读:
    C规范编辑笔记(六)
    面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...
    「接口测试入门课」打卡学习 day09:微服务接口:怎么用Mock解决混乱的调用关系
    SpringBoot整合Thymeleaf
    硬核!8个类手写一个配置中心!
    智能佳-E-PUCK2分布式单体智能集群协作机器人
    【python】懒人福利,通过Python的JIRA库操作JIRA,自动批量提交关闭bug,提高效率
    一次简单的 JVM 调优,拿去写到简历里
    GitHub 报告发布:TypeScript 取代 Java 成为第三受欢迎语言
    Python数据和Json数据的相互转换
  • 原文地址:https://blog.csdn.net/Can__er/article/details/127990608