【深度学习】实验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包中预测标注结果,下面是随机选取了几张标注图片:
晴天清晰图像的预测还是比较准确的,无论是来车,还是去的,分类和边框都比较准确:
有遮挡的情况不是很理想,对于识别框选位置难免出错:
阴天远距离,误识别楼房为货车,但是置信度还是比较低的:
远距离两侧,背景混乱时,存在和栅栏误识别的情况,同样也是置信度较低:
【深度学习】实验5答案:滴滴出行-交通场景目标检测相关推荐
- 【深度学习】实验5布置:滴滴出行-交通场景目标检测
DL_class 学堂在线<深度学习>实验课代码+报告(其中实验1和实验6有配套PPT),授课老师为胡晓林老师.课程链接:https://www.xuetangx.com/training ...
- 深度学习(十四)——Softmax详解, 目标检测, RCNN
https://antkillerfarm.github.io/ Softmax详解 首先给出Softmax function的定义: yc=ζ(z)c=ezc∑Cd=1ezd for c=1,-,C ...
- 吴恩达 深度学习系列--卷积神经网络(Convolutional Neural Networks)-03(目标检测)
目标检测 3.1 目标定位(Object localization) 3.1.1概念 3.1.2 监督学习任务定义目标标签y 3.2 特征点检测(Landmark detection) 3.3 基于滑 ...
- 【深度学习】卷积神经网络应用之双阶段目标检测|R-CNN、SPP-Net、Fast-RCNN、Faster-RCNN
文章目录 基本概念 一.R-CNN 1. 网络结构 2. 训练流程 3. 测试阶段 4. RNN存在的问题 二.SPP-Net 1. 网络结构 2. 基础知识 共享卷积计算 金字塔池化 Spatial ...
- 深度学习实战教程(1)--手机跑目标检测(YOLO,从DarkNet到Caffe再到NCNN完整打通)
https://github.com/lwplw 这篇打算就直入主题了,YOLO是什么.DarkNet是什么.Caffe是什么.NCNN又是什么-等等这一系列的基础科普这里就完全不说了,牵扯实在太多, ...
- 【深度学习】ROI Pooling 和 ROI Align 计算机视觉 目标检测
文章目录 ROI Pooling和ROI Align: 一篇好的文章 ROI Pooling 如何计算? AdaptiveMaxPool2d 在做啥 Fast RCNN或者Faster RCNN中都使 ...
- nvidia docker容器不支持中文的解决办法_用docker搭建深度学习实验环境
tensorflow和pytorch官方都维护了不同版本的docker镜像.借助docker我们可以方便的搭建起深度学习实验环境. 但是想要在同一个容器内同时拥有tensorflow.pytorch. ...
- pycharm remote 远程项目 同步 本地_利器:PyCharm本地连接服务器搭建深度学习实验环境的三重境界...
作为实验室社畜,常需要在本地使用Pycharm写代码,然后将代码同步到服务器上,使用远程登录服务器并运行代码做实验. 这其中有很多事情如果没有好的工具,做起来会非常麻烦. 比如如何快速同步本地与服务器 ...
- 深度学习实验1:pytorch实践与前馈神经网络
深度学习实验1:pytorch实践与前馈神经网络 1.pytorch基本操作 1.使用
最新文章
- kafka streams_如何使用Kafka Streams实施更改数据捕获
- EXECL使用技巧(转)
- Java IO流之对象流
- eclipse搭建多module项目的坑
- selenium+chromeheadless爬取网站
- RabbitMQ, ZeroMQ, Kafka 是一个层级的东西吗, 相互之间有哪些优缺点
- jQuery事件绑定函数:on()与bind()的差别
- 翻译:理解TCP/IP网络栈编写网络应用(上)
- [Diary]花草本没有错
- Java之String,StringBuffer,StringBuilder比较
- Greg and Array CodeForces 296C 差分数组
- PR2021安装包下载
- 范德蒙行列式计算以应用
- ASCII码值是怎么计算的,怎么计算arccos的值
- Win10系统怎么还原?Win10如何回到以前的系统
- 《南怀瑾讲述99个人生道理》——刘清海编著
- 域名解析地址如何查看?为什么要做域名解析?
- 随机生成英文字母 php,PHP生成随机英文用户名
- WebGoat(一)——HTTPSplitting(Http拆分攻击)
- 标记用来标识一个html文件中的表格,《网页设计与制作》期末考试试题.doc