【深度学习】滴滴出行-交通场景目标检测

news2024/11/19 11:27:49

案例5:滴滴出行-交通场景目标检测

相关知识点:目标检测、开源框架的配置和使用(mmdetection, mmcv)

1 任务目标

1.1 任务和数据简介

本次案例将使用深度学习技术来完成城市交通场景下的目标检测任务,案例所使用的数据集由滴滴出行提供,基于D2-City大规模行车记录视频数据集[1],经过视频抽帧等预处理步骤得到。数据集共包含12,000张图像,每张图像的大小为1080×1920或720×1280,已划分为训练集(10,000张)、验证集(1,000张)、测试集(1,000张),其中训练集和验证集提供了检测标签,测试集仅提供图像,用于提交后测试模型效果。本数据集共包含12个待检测的物体类别,包括小汽车、公交车、自行车、行人等,具体定义及示例如图1所示。本任务的目标是在给定的交通场景图像中,尽可能完整、准确地检测出所有要求的物体,检测结果示例如图2所示。关于数据的更多细节可参考D2-City文献[1].

为了方便使用,数据集的标注信息已被预处理成MS-COCO格式,MS-COCO是通用物体检测领域最常用的数据集,如需深入理解数据集格式,请自行学习:MS-COCO数据集官网[2]、MS-COCO数据集文献[3]、MS-COCO标注格式[4]. 模型的评估指标也使用MS-COCO常用指标mAP(mean average precision),请自行学习其定义及计算方式(无需自己实现):mAP定义[5],mAP计算方式[6][7]

1.2 参考程序及使用说明

本次案例提供了完整、可供运行的参考程序,选取了带FPN[8]结构的Faster R-CNN[9]模型,基于MMDetection物体检测框架[10]实现,各程序简介如下:

  • faster_rcnn_r50_fpn_1x_didi.py为模型配置文件,安装MMDetection后置于mmdetection/configs/faster_rcnn路径下;

  • didi_detection.py为数据集配置文件,置于mmdetection/configs/_base_/datasets路径下,并将data_root变量修改为数据集所在路径;

  • test.json为测试数据集文件信息,置于mmdetection/[数据集所在路径]/dataset_release路径下,在测试集上做推理时会用到;

  • didi_demo.ipynb用于可视化模型的检测结果。

参考程序的使用步骤及说明

  • 自行安装MMDetection最新版(v3.2.0)及其全部依赖库,包括PyTorch等(MMDetection GitHub: [10],安装指南: [11]);
  • 学习必要的使用说明:MMDetection文档[12] (请务必仔细阅读Getting Started章节);

在这里插入图片描述

图1: 待检测的12个物体类别及其示例

在这里插入图片描述

图2: 检测结果示例,不同颜色的框代表不同类别

  • 下载案例数据集,配置上述文件并置于MMDetection目录下的指定位置;

  • 以参考程序(Faster R-CNN with FPN)为例,训练模型:

     python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_didi.py
    
  • 根据训练得到的模型(.pth文件,训练后自动保存于work_dirs/路径下),在测试集上进行推理并得到.json格式的输出文件:

    python tools/test.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_didi.py \
        ./work_dirs/faster_rcnn_r50_fpn_1x_didi/latest.pth \
        --cfg-options "outfile_prefix=./test_results"
    

    该命令会生成test_results.bbox.json文件,用于最终提交和评分。文件结构大致为

    [
       {"image_id":, "bbox": [,,,], "score":, "category_id":},
       {"image_id":, "bbox": [,,,], "score":, "category_id":},]
    
  • 参考程序的超参数沿用了MS-COCO数据集上的配置,可能在本案例数据集上表现不够好,仅以此为例展示如何完成本案例;图3是参考程序训练完成后在验证集上的结果(每轮训练结束后自动输出),图4是测试集上的结果(学生不可见,用于最后评分)。

    image-20240317163433679

    图3: 参考程序训练完成后在验证集上的mAP结果

    image-20240317163511360

    图4: 参考程序训练完成后在测试集上的mAP结果 (学生不可见)

1.3 要求和建议

​ 在参考程序的基础上,综合使用深度学习各项技术,尝试提升该模型在城市交通场景目标检测任务上的效果,以最后提交的.json输出结果对应的测试集mAP值为评价标准。

​ 可从物体检测领域的各个方面着手对模型进行提升,如尝试其它的检测算法(替换Faster R-CNN),如FCOS, Cascade R-CNN等;或者尝试改进Faster R-CNN算法本身的部件,如尝试其它网络结构(替换ResNet50)、其它更适合本案例数据集的超参数(训练图像分辨率、anchor设置、训练策略等)。建议参考MMDetection已经实现好的若干模型[13],以及通用物体检测领域的其它常用方法和技巧[14]

1.4 注意事项

  • 提交所有代码和一份案例报告,提交test_results.bbox.json文件;

  • 案例报告应详细介绍所有改进尝试及对应的结果(包括验证集mAP值和若干检测结果示例图),无论是否成功提升模型效果,并对结果作出分析;

  • 禁止任何形式的抄袭,借鉴开源程序务必加以说明。

1.5 参考资料

[1] Che et al. D2-City: A Large-Scale Dashcam Video Dataset of Diverse Traffic Scenarios. arXiv 2019.

[2] MS-COCO数据集: https://cocodataset.org/

[3] Lin et al. Microsoft COCO: Common Objects in Context. ECCV 2014.

[4] MS-COCO标注格式: https://www.immersivelimit.com/tutorials/create-coco-annotations-from-scratch

[5] MS-COCO mAP定义: https://cocodataset.org/#detection-eval

[6] mAP计算方式: https://www.zhihu.com/question/53405779

[7] mAP计算方式: https://github.com/rafaelpadilla/Object-Detection-Metrics/

[8] Lin et al. Feature pyramid networks for object detection. CVPR 2017.

[9] Ren et al. Faster r-cnn: Towards real-time object detection with region proposal networks. NIPS 2015.

[10] MMDetection: https://github.com/open-mmlab/mmdetection

[11] MMDetection安装指南: https://mmdetection.readthedocs.io/en/latest/get_started.html

[12] MMDetection文档: https://mmdetection.readthedocs.io/

[13] MMDetection Model Zoo: https://github.com/open-mmlab/mmdetection/blob/master/docs/model_zoo.md

[14] Liu et al. Deep Learning for Generic Object Detection: A Survey. IJCV 2020.

2 通过云平台训练基础代码

​ 在本次实验中,并没有给出全部的代码,需要自己从 github 上 clone MMdetection 项目,并自己学习 MMdetection 文档,来完成整个项目。

2.1 环境配置

​ 创建项目,点击右上角设置按钮配置环境。选择“挂载Work目录”,“T4 GPU”,“GPU Pytorch1.6 Tensorflow 2.3.0 Python 3.8.5”完成基础环境配置。本次训练时长较长,占用云平台空间较大,需要挂载 work 文件夹,不然可能会提示 protect文件夹 空间不足。

image-20240301221212761

运行程序,上传本地文件,到project文件夹。

2.2 项目配置

本环节需要配置 MMdetection 的环境,根据文档内容,下载安装一些必备库。

  1. 更新pip

    之后安装的库,需要高版本的pip,所以需要先更新pip。在Jupyter的代码框中,运行以下命令。

    !pip install --upgrade pip
    
  2. test.json 置于 /home/mw/input/datasets1367/dataset/dataset_release 文件夹中

    在Jupyter的代码框中,运行以下命令,完成文件的拷贝。

    %cp /home/mw/project/test.json /home/mw/input/datasets1367/dataset/dataset_release 
    
  3. 用 MIM 安装 MMEngine 和 MMCV

    !pip3 install openmim
    !mim install mmengine
    !mim install "mmcv>=2.0.0,<2.1.0"
    

    安装完成后,会显示Successfully installed mmcv-2.1.0 mmengine-0.10.3 ... 等内容。

  4. 使用源码安装 MMDetection

    !git clone https://github.com/open-mmlab/mmdetection.git
    %cd mmdetection
    !pip install -e .
    

    安装完成后,project文件夹中,会出现mmdetection文件夹。

  5. 文件配置

    faster_rcnn_r50_fpn_1x_didi.py 复制到 mmdetection/configs/faster_rcnn路径下。

    didi_detection.py 复制到mmdetection/configs/_base_/datasets路径下,并将data_root变量修改为数据集所在路径。

    data_root = '/home/mw/input/datasets1367/dataset/dataset_release/'
    

2.3 项目训练

  1. 在线训练

    在Jupyter的代码框中,运行以下命令,开始项目的训练。

    %cd /home/mw/project/mmdetection
    !python ./tools/train.py ./configs/faster_rcnn/faster_rcnn_r50_fpn_1x_didi.py --work-dir /home/mw/work/work_dir
    

    当看到程序运行显示以下内容,表示程序已经成功进行训练。

    02/29 06:00:41 - mmengine - INFO - Epoch(train)  [1][  50/5000]  lr: 1.9820e-03  eta: 9:34:04  time: 0.5746  data_time: 0.0061  memory: 3606  loss: 1.4120  loss_rpn_cls: 0.4417  loss_rpn_bbox: 0.0850  loss_cls: 0.8184  acc: 92.2852  loss_bbox: 0.0669
    02/29 06:01:08 - mmengine - INFO - Epoch(train)  [1][ 100/5000]  lr: 3.9840e-03  eta: 9:17:54  time: 0.5431  data_time: 0.0047  memory: 3606  loss: 0.7339  loss_rpn_cls: 0.1702  loss_rpn_bbox: 0.0733  loss_cls: 0.3048  acc: 95.0195  loss_bbox: 0.1856
    ...
    
  2. 离线训练

    本程序训练需要12个epoch,训练时长需要8~10个小时,在线训练需要保持一直联网,不然就会断掉,所以建议放到离线环境上运行。

    当以上步骤全部跑通后,测试项目是否可以点击 “运行全部” 就可以执行所有代码,完成项目训练。如果可以,则可以放在离线任务中训练。

    在长达10个小时的离线训练后,终于完成了离线训练,可以在云平台的离线训练日志中,看到训练进度以及资源占用。

    image-20240302130335293

    image-20240302130411320

  3. 训练结果分析

    训练结束后在work_dirs文件夹中存储训练项目日志以及保存的模型。

    项目运行结束后,最后一轮训练结果如下。

    image-20240301230910260

    模型采用了平均精度 (AP)平均召回率 (AR)IoUmaxDetsArea 四个维度对模型进行评估,下面介绍以上信息具体内容。

    • IoU(Intersection over Union)

      IoU 是一个用于评估目标检测模型性能的常见指标。它衡量了模型预测的边界框(bounding box)与真实边界框之间的重叠程度。

    • 目标对象大小 Area

      MMDetection 将 Area 分为三类:small, medium, 和 large,代表了小、中、大不同尺寸的目标。

    • maxDets (Maximum Detections)

      maxDets用于限制每张图像或每个类别的最大检测数量。限制每个图像或每个类别的最大检测数,以便更全面地评估模型的准确性。

    • 平均精度 AP (Average Precision)

      平均精度是在不同IoU阈值下计算出的精度的平均值,是指模型预测为正类别的样本中有多少是真正的正例。

      • 在所有的目标尺寸上,IoU 从 0.50 到 0.95 的平均精度 (AP) 为 0.290;IoU 为 0.50 时平均精度(AP)最高,达到0.492;IoU 为 0.75 时平均精度(AP)为0.293。

        可以看出,AP 的计算中,更高的 IoU 阈值通常对模型提出更严格的要求。

      • 当 IoU 在0.5到0.95之间,小目标的平均精度(AP) 最低,只有0.120;中等目标的平均精度(AP) 为0.321;大目标的平均精度(AP) 最高,为0.456。

        可以看出,对识别尺寸越大的目标,模型的平均精度(AP) 就越高。

    • 平均召回率 AR (Average Recall)

      平均召回率是在不同IoU阈值下计算出的召回率的平均值,是指所有真正的正例中,模型成功预测为正类别的比例。

      • 在所有的目标尺寸上,当IoU 在 0.50 到 0.95 之间,在maxDets 为100、300、1000的平均召回率 (AR) 都为 0.449。

        可以看出maxDets 对AR没有影响。

      • 当 IoU 在0.5到0.95之间,小目标的平均召回率(AR) 最低,只有0.252;中等目标的平均召回率(AR)为0.482;大目标的平均召回率(AR)最高,为0.642。

        可以看出,对识别尺寸越大的目标,模型的平均召回率 (AR) 就越高。

3 在本地训练基础代码

​ 因为云平台环境配置总容易出问题,之后我便换到了本地进行训练以及进一步的测试。

3.1 环境配置

​ 环境配置和云平台类似,可以通过查看 MMDetection文档 来完成配置。

  1. 创建并激活一个 conda 环境

    conda create --name openmmlab python=3.8 -y
    conda activate openmmlab
    
  2. 基于 Pytorch官方平台 安装Pytorch

    conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
    
  3. 使用 MIM 安装 MMEngine 和 MMCV

    pip install -U openmim
    mim install mmengine
    mim install "mmcv>=2.0.0"
    
  4. 安装 MMDetection

    git clone https://github.com/open-mmlab/mmdetection.git
    cd mmdetection
    pip install -v -e .
    

    安装完成后,会生成一个mmdetection文件夹。

  5. 文件配置

    • test.json置于mmdetection/[数据集所在路径]/dataset_release路径下。

    • faster_rcnn_r50_fpn_1x_didi.py 复制到 mmdetection/configs/faster_rcnn路径下。

    • didi_detection.py 复制到mmdetection/configs/_base_/datasets路径下,并将data_root变量修改为数据集所在路径。

      data_root = 'xxxx/dataset_release/'
      

3.2 项目训练

  1. 训练项目

    在mmdetection文件夹下,通过命令行窗口执行以下命令。

    python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_didi.py
    

    显示以下内容,说明成功开始训练。

    02/29 06:00:41 - mmengine - INFO - Epoch(train)  [1][  50/5000]  lr: 1.9820e-03  eta: 9:34:04  time: 0.5746  data_time: 0.0061  memory: 3606  loss: 1.4120  loss_rpn_cls: 0.4417  loss_rpn_bbox: 0.0850  loss_cls: 0.8184  acc: 92.2852  loss_bbox: 0.0669
    02/29 06:01:08 - mmengine - INFO - Epoch(train)  [1][ 100/5000]  lr: 3.9840e-03  eta: 9:17:54  time: 0.5431  data_time: 0.0047  memory: 3606  loss: 0.7339  loss_rpn_cls: 0.1702  loss_rpn_bbox: 0.0733  loss_cls: 0.3048  acc: 95.0195  loss_bbox: 0.1856
    ...
    

    注意,训练时长还是比较长的,我是4060的显卡,训练时间大约有6个小时

  2. 训练结果分析

    在命令行窗口训练,输出的结果只显示在窗口中,但是在文件夹中存有了log日志文件。

    .\mmdetection\work_dirs\faster_rcnn_r50_fpn_1x_didi\20240229_232911文件夹下,有以下文件:

    20240229_232911
    ├── 20240229_232911.log			# 训练日志文件
    ├── vis_data
    │   ├── 20240229_232911.json	# 与scalars.json相同
    │   ├── config.py				# 训练配置信息:包括训练的模型、数据集地址等信息
    │   ├── scalars.json			# 训练数据信息:包括每轮训练的loss、mAP等信息
    

    可以从 20240229_232911.log 中的最后,看到第12轮训练的结果。

    2024/03/01 05:26:41 - mmengine - INFO - bbox_mAP_copypaste: 0.283 0.476 0.289 0.126 0.303 0.447
    2024/03/01 05:26:41 - mmengine - INFO - Epoch(val) [12][500/500]    coco/bbox_mAP: 0.2830  coco/bbox_mAP_50: 0.4760  coco/bbox_mAP_75: 0.2890  coco/bbox_mAP_s: 0.1260  coco/bbox_mAP_m: 0.3030  coco/bbox_mAP_l: 0.4470  data_time: 0.0014  time: 0.1407
    
  3. 训练日志分析

    其中,通过tools/analysis_tools/analyze_logs.py 可利用指定的训练 log 文件绘制 loss 曲线图, 第一次运行前请先运行 pip install seaborn 安装必要依赖。

    python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/vis_data/20240229_232911.json --keys loss_cls loss_bbox  --legend loss_cls loss_bbox --out work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/log.png
    

    log2

    • loss_cls (分类损失): 这是用于目标检测任务中的分类损失。它通常使用交叉熵损失函数来计算模型预测的类别与真实类别之间的差异。如果使用sigmoid激活函数,则采用二元交叉熵损失。
    • loss_bbox (边界框回归损失): 这是用于目标检测中的边界框回归损失。它计算模型预测的边界框与真实边界框之间的差异。常用的损失函数包括L1Loss、SmoothL1Loss、IoULoss等。
    python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/vis_data/20240229_232911.json --keys loss_rpn_cls loss_rpn_bbox  --legend loss_rpn_cls loss_rpn_bbox --out work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/log2.png
    

    image-20240311205435858

    • loss_rpn_cls (RPN分类损失): 这是区域提议网络(RPN)的分类损失,用于评估RPN预测的锚点是前景还是背景的准确性。这通常也使用交叉熵损失函数。
    • loss_rpn_bbox (RPN边界框回归损失): 这是RPN的边界框回归损失,用于评估RPN预测的锚点边界框与真实边界框之间的差异。这通常使用SmoothL1Loss作为损失函数。
    python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/vis_data/20240229_232911.json --keys loss_cls loss_bbox loss_rpn_cls loss_rpn_bbox  --legend loss_cls loss_bbox loss_rpn_cls loss_rpn_bbox --out work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/log3.png
    

    log3

3.3 项目测试

  1. 在测试集测试性能

    利用 MMDetection 的 test.py ,对数据集上进行测试,对交通图像进行标注。

    python ./tools/test.py ./configs/faster_rcnn/faster_rcnn_r50_fpn_1x_didi.py ./work_dirs/faster_rcnn_r50_fpn_1x_didi/epoch_12.pth  --out ./work_dirs/faster_rcnn_r50_fpn_1x_didi/result.pkl --show-dir ./work_dir/faster_rcnn_r50_fpn_1x_didi/test_show/
    

    输出结果如下:

    image-20240302165333266

    生成了一个 result.pkl 文件,并得到了以下测试图片:

    11000

    image-20240302160145463

  2. 结果分析

    输入以下指令,利用 analyze_results.py 对生成的.pkl文件进行结果分析。

    python ./tools/analysis_tools/analyze_results.py ./configs/faster_rcnn/faster_rcnn_r50_fpn_1x_didi.py ./work_dirs/faster_rcnn_r50_fpn_1x_didi/result.pkl ./work_dirs/faster_rcnn_r50_fpn_1x_didi/analyze_results
    

    发现在本次实验中,生成的pkl文件无法正常的使用,得到的测试图片如下。

    b73bd659498c79291981b4cec79d32a

  3. 绘制混淆矩阵

    同样的,显示混淆矩阵时也发生错误。

    python ./tools/analysis_tools/confusion_matrix.py ./configs/faster_rcnn/faster_rcnn_r50_fpn_1x_didi.py ./work_dirs/faster_rcnn_r50_fpn_1x_didi/result.pkl ./work_dirs/faster_rcnn_r50_fpn_1x_didi/confusion_matrix --show
    

    confusion_matrix

    分析感觉是数据集格式问题,测试集不存在ground truth label,导致不能正确的生成pkl文件,进行进一步分析,最终也没有解决。但是在使用test.py,可以得到.bbox.json文件,里面存储着预测信息,具体如下。

    [{"image_id": 11453, "bbox": [788.5220336914062, 496.3249816894531, 78.60833740234375, 48.751312255859375], "score": 0.998957633972168, "category_id": 1}, {"image_id": 11453, "bbox": [893.9302368164062, 498.6480407714844, 50.187744140625, 36.162445068359375], "score": 0.9979375600814819, "category_id": 1}, {"image_id": 11453, "bbox": [981.7869873046875, 487.6568908691406, 76.1290283203125, 62.054718017578125], "score": 0.9976244568824768, "category_id": 1},...
    

4 算法优化

4.1 Cascade R-CNN

​ 通过搜索相关资料,尝试将 Faster R-CNN 算法替换为 Cascade R-CNN 算法。

  1. Cascade R-CNN 算法

    Cascade R-CNN是一种高效的目标检测算法,它通过级联(cascade)多个检测器(detector)来逐步提高检测的质量。每个检测器都在不同的IoU阈值上进行训练,以优化对应质量级别的预测。这种方法有效地解决了单一IoU阈值检测器面临的问题,如过拟合和mismatch问题。

    算法结构:

    Cascade R-CNN在Faster R-CNN的基础上进行了扩展。

    • 第一阶段是进行候选区域提取的子网络 H 0 H0 H0 ,应用于整张图片。
    • 第二个阶段进行RoI检测的子网络 H 1 H1 H1 ,最后会有一个分类分数 C C C,边界框 B B B

    image-20240317154945623

  2. 修改训练脚本

    建立cascade_rcnn_r50_fpn_1x_didi.py训练脚本,并放置在mmdetection\configs\cascade_rcnn路径下,脚本内容如下。

    _base_ = [
        '../_base_/models/cascade-rcnn_r50_fpn.py',
        '../_base_/datasets/didi_detection.py',
        '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
    ]
    
  3. 项目训练

    • 训练

      输入以下命令进行训练。

      python tools/train.py configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_didi.py
      

      image-20240311073205349

    • 训练结果分析

      将 Faster R-CNN 和 Cascade R-CNN 各项参数以表格形式对比,结果如下。

      参数Faster R-CNNCascade R-CNN
      coco/bbox_mAP0.2900.294
      coco/bbox_mAP_500.4920.476
      coco/bbox_mAP_750.2930.307
      coco/bbox_mAP_s0.1200.130
      coco/bbox_mAP_m0.3210.322
      coco/bbox_mAP_l0.4560.462
      coco/bbox_mAR_1000.4490.454
      coco/bbox_mAR_3000.4490.454
      coco/bbox_mAR_10000.4490.454
      coco/bbox_mAR_s0.2520.260
      coco/bbox_mAR_m0.4820.486
      coco/bbox_mAR_l0.6420.636

      可以看到,除了 coco/bbox_mAP_50coco/bbox_mAR_l 这两个参数以外,Cascade R-CNN 的表现都优于 Faster R-CNN。

    • 训练日志分析

      输入以下指令,进行日志分析。

      python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/vis_data/20240310_230237.json --keys loss_rpn_cls loss_rpn_bbox  --legend loss_rpn_cls loss_rpn_bbox --out work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/log.png
      

      image-20240311204843122

      python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/vis_data/20240310_230237.json --keys s0.loss_cls s0.loss_bbox s1.loss_cls s1.loss_bbox s2.loss_cls s2.loss_bbox --legend s0.loss_cls s0.loss_bbox s1.loss_cls s1.loss_bbox s2.loss_cls s2.loss_bbox --out work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/log2.png
      

      image-20240311205106294

      python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/vis_data/20240229_232911.json work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/vis_data/20240310_230237.json --keys loss --legend Faster_RCNN_loss Cascade_RCNN_loss --out work_dirs/log_compare
      

      image-20240311210437589

      python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/vis_data/20240229_232911.json work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/vis_data/20240310_230237_2.json --keys acc --legend Faster_RCNN_acc Cascade_RCNN_acc --out work_dirs/log_compare2
      

      image-20240311211325835

  4. 测试

    在测试集测试性能

    利用 MMDetection 的 test.py ,对数据集上进行测试,对交通图像进行标注。

    python ./tools/test.py ./configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_didi.py ./work_dirs/cascade_rcnn_r50_fpn_1x_didi/epoch_12.pth --show-dir ./test_show/
    

    对比 Faster R-CNN 与 Cascade R-CNN 对测试图像的标注结果,上图为Faster R-CNN,下图为 Cascade R-CNN。

    image-20240311213404806

    image-20240311213450990

    可以看到,下图对各个车辆的预测值更高,并且左侧有一个模糊的货车,Cascade R-CNN 成功的预测正确,标签为van:79.2,而 Faster R-CNN 将其重复预测,并且标注标签为car:32.3 标注错误。右侧行人,Cascade R-CNN成功将其标注,而 Faster R-CNN 并没有将其标注出来。

    d63dd3b6f0a346abb4bfe467498d5d7

    c2c59a09dfb905d34195b1fa222d248

    对比可知,Cascade R-CNN 预测效果优于 Faster R-CNN。

4.2 RegNet替换ResNet50 backbone

  1. RegNet

    RegNet是一个基于网络宽度、深度和分辨率等因素来搜索最佳神经网络架构的算法。它的设计理念是通过网络设计空间的逐步简化来找到易于理解、构建和泛化的模型。它结合了手动设计网络和神经网络搜索(NAS)的优点,旨在提高模型的可解释性和性能)。

    faster_rcnn 文件夹中,新建了一个 faster_rcnn_regnet_fpn.py 。修改 backbone 框架,将原来的 ResNet50 框架替换为 RegNet。因为骨架有变动,所以也将输入调到合适的参数in_channels=[96,192, 432, 1008]

        backbone=dict(
            type='RegNet',
            arch='regnetx_3.2gf',
            out_indices=(0,1,2,3),
            frozen_stages=1,
            norm_cfg=dict(type='BN', requires_grad=True),
            norm_eval=True,
            style='pytorch',
            init_cfg=dict(type='Pretrained', checkpoint='open-mmlab://regnetx_3.2gf')),
        neck=dict(
            type='FPN',
            in_channels=[96,192, 432, 1008],
            out_channels=256,
            num_outs=5),
    
  2. 模型训练

    输入以下指令进行训练。

    python tools/train.py configs/faster_rcnn/faster_rcnn_regnet_fpn.py
    

    image-20240312202449754

    将FasterRCNN的 ResNet50 和 RegNet框架 与 Cascade RCNN 的训练结果以表格形式对比,结果如下。

    参数ResNet50RegNetCascade R-CNN
    coco/bbox_mAP0.2900.2900.294
    coco/bbox_mAP_500.4920.4850.476
    coco/bbox_mAP_750.2930.2980.307
    coco/bbox_mAP_s0.1200.1210.130
    coco/bbox_mAP_m0.3210.3240.322
    coco/bbox_mAP_l0.4560.4480.462
    coco/bbox_mAR_1000.4490.4570.454
    coco/bbox_mAR_3000.4490.4570.454
    coco/bbox_mAR_10000.4490.4570.454
    coco/bbox_mAR_s0.2520.2540.260
    coco/bbox_mAR_m0.4820.4960.486
    coco/bbox_mAR_l0.6420.6370.636

    可以看到,RegNet相比于ResNet在大部分参数上都有所提升,有效的提升了目标检查能力。

  3. 训练日志分析

    • 对比3类实验的loss

      python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/vis_data/20240229_232911.json work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/vis_data/20240310_230237.json work_dirs/faster_rcnn_regnet_fpn/20240312_011910/vis_data/20240312_011910.json --keys loss --legend Faster_RCNN_loss Cascade_RCNN_loss Faster_RCNN_regnet_loss --out work_dirs/log_compare_loss3
      

      image-20240312224718236

    • 对比3个的训练集精准度

      python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster_rcnn_r50_fpn_1x_didi/20240229_232911/vis_data/20240229_232911.json work_dirs/cascade_rcnn_r50_fpn_1x_didi/20240310_230237/vis_data/20240310_230237_2.json work_dirs/faster_rcnn_regnet_fpn/20240312_011910/vis_data/20240312_011910.json --keys acc --legend Faster_RCNN_acc Cascade_RCNN_acc Faster_RCNN_regnet_acc --out work_dirs/log_compare_acc3
      

      image-20240312224413215

    根据以上对比结果可知,使用RegNet替换ResNet50,loss值与之前相近,准确率较好于ResNet50骨架,但是不如Cascade RCNN。

  4. 模型测试

    python ./tools/test.py ./configs/faster_rcnn/faster_rcnn_regnet_fpn.py ./work_dirs/faster_rcnn_regnet_fpn/epoch_12.pth --show-dir ./test_show/
    

    下图为Faster RCNN采用ResNet50架构,预测的图片。

    image-20240317161607807

    image-20240317162033064

    下图为Faster RCNN采用RegNet架构,预测的图片。

    image-20240317161615907

    image-20240317162128472

    可以看到,采用 RegNet 预测的汽车与人更加准确,比采用 ResNet 的Faster RCNN 预测出了更多的汽车和人物。

5 总结

​ 本次实验在云平台和本地分别跑了基础的 Faster RCNN 算法,进交通目标检查,并分析其结果。然后分别替换了算法和骨架,尝试了用 Cascade RCNN 算法替换 Faster RCNN 算法;用 RegNet 替换 ResNet50,并分析结果。发现使用 Cascade RCNN 算法进行交通目标检查,结果最好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1525532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「全栈」低代码时代开启!页面开发、数据处理、复杂逻辑统统一站搞定!

数字化浪潮的推进让企业对应用开发效率有着愈发严苛的要求。 传统的开发模式&#xff0c;无论是前端开发还是后端处理&#xff0c;都普遍面临周期长、成本高、响应慢、迭代难等问题&#xff0c;由于部分企业长期未进行创新改革&#xff0c;导致每次在新增系统功能时&#xff0…

【源码阅读】Mybatis底层源码分析(详细Debug查看附代码)

一、搭建测试代码框架 &#xff08;代码已提交到github->测试代码&#xff0c;建议结合代码根据本文debug一遍更有利于理解&#xff0c;帮忙点个Star 哈&#xff0c;本人在这里谢谢了&#xff09; 二、猜想Mybatis是如何设计的 从上面的案例中&#xff0c;可以大致可以猜测…

VMware虚拟机硬盘容量扩容方法

扩容后不会影响原文件。亲测有效&#xff0c;高效便捷 - 在关机状态下&#xff0c;先在VM上直接扩容硬盘容量&#xff0c;输入扩容后的硬盘最大容量 注意&#xff0c;如果想在原硬盘上增加容量&#xff0c;需要将原来的快照都删除 - 输入最大磁盘大小 运行虚拟机进入系统&…

【代码】伪标签图像随机生成

这段代码将生成2-4个大小不同的圆形和1-2个大小不同的椭圆形&#xff0c;并确保它们之间以及与背景边界之间不会发生重叠 限制圆形的半径不超过150&#xff0c;第13行 import cv2 import random import os这段代码将生成2-4个大小不同的圆形和1-2个大小不同的椭圆形&#xff0…

代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

题目&#xff1a;344.反转字符串 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:344.反转字符串 题目链接&#xff1a;力扣题目链接 图释&#xff1a; // 反转字符串 void reverseString(vector<char>& s) {// 直接使用反转的库函数 reverserev…

数字化转型之于国家:为三驾马车更新马达

随着国民经济和社会发展第十四个五年规划的开启&#xff0c;中国也进入了全面建设社会主义现代化国家的新发 展阶段&#xff0c;未来要在坚持“创新、协调、绿色、开放、共享”的新发展理念下&#xff0c;在质量效益明显提升的基础上实 现经济持续健康发展。持续的发展意味着…

水库大坝安全监测中需要注意的事项

随着经济和社会的发展&#xff0c;水资源的需求也在不断增加。因此&#xff0c;建设水库已成为保障水资源的主要方式之一。然而&#xff0c;随着水库规模的增大和工程的复杂性的增加&#xff0c;水库大坝的安全问题也日益引起重视。为此&#xff0c;需要对水库大坝进行安全监测…

【爬虫】– 抓取原创力文档数据

使用RPA工具&#xff0c;实现针对于原创力中不可下载文档的抓取&#xff0c;可延用于其他类似文库 1 使用工具、环境 影刀RPA、WPS Office、谷歌浏览器&#xff08;非指定&#xff09; 2 代码流程 3 关键点 此方案只适合抓取非VIP即可预览全文的文档&#xff0c;抓取下来的数…

计算机网络 谢希仁(001-1)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.1到1.4的内容 简介 1.1计算机网络的作用 三网融合&#xff08;三网合一&#xff09; 模拟信号就是连续信号 数字信号是离散信号 1.2互联网概述 以前2兆带宽就要98 现在几百兆带宽也就几百块 …

海川润泽AI机器视觉仪系列产品,助推“人工智能+”打开新质生产力的大门

3月5日&#xff0c;第十四届全国人民代表大会第二次会议开幕。国务院总理李强在政府工作报告&#xff0c;提出大力推进现代化产业体系建设&#xff0c;加快发展新质生产力。深入推进数字经济创新发展&#xff0c;制定支持数字经济高质量发展政策&#xff0c;积极推进数字产业化…

AI+权重衰退

AI权重衰退 1权重衰退2代码实现 2丢弃法 1权重衰退 AI权重衰退是指在人工智能&#xff08;AI&#xff09;领域中的一种技术或方法&#xff0c;用于训练机器学习模型时对权重进行惩罚或调整&#xff0c;以避免过拟合现象的发生。 在机器学习中&#xff0c;过拟合是指模型在训练…

Debug追踪

2.2 Debug追踪 使用IDEA的断点调试功能&#xff0c;查看程序的运行过程 在有效代码行&#xff0c;点击行号右边的空白区域&#xff0c;设置断点&#xff0c;程序执行到断点将停止&#xff0c;我们可以手动来运行程序 点击Debug运行模式 程序停止在断点上不再执行&#xff0c…

C/C++程序设计实验报告3 | 数组实验

本文整理自博主本科大一《C/C程序设计》专业课的课内实验报告&#xff0c;适合C语言初学者们学习、练习。 编译器&#xff1a;gcc 10.3.0 ---- 注&#xff1a; 1.虽然课程名为C程序设计&#xff0c;但实际上当时校内该课的内容大部分其实都是C语言&#xff0c;C的元素最多可能只…

多重背包(二进制优化)

[Acwing 5.多重背包] 有 N N N 种物品和一个容量是 V V V 的背包。 第 i i i 种物品最多有 s i s_i si​ 件&#xff0c;每件体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​。 求解将哪些物品装入背包&#xff0c;可使物品体积总和不超过背包容量&#xff0c;且…

BUUCTF-----[GXYCTF2019]禁止套娃

题目 目录扫描&#xff0c;扫到.git泄露&#xff0c;使用工具查看到index.php的源码 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i,…

出海品牌必备指南:海外网红营销5大底层逻辑解析

随着全球化的推进&#xff0c;品牌出海已经成为许多企业拓展市场的重要策略之一。在这个过程中&#xff0c;海外网红营销成为品牌吸引目标受众、提升知名度的有效工具。然而&#xff0c;要在海外市场取得成功&#xff0c;并不仅仅是找准网红合作伙伴&#xff0c;更需要深入了解…

全新2024快递平台系统 独立版快递信息查询小程序源码 cps推广营销流量主+前端 同城快递平台

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Counter)

计数器组件&#xff0c;提供相应的增加或者减少的计数操作。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Counter() 从API version 9开始&#xff0c;该接口…

GIT共享 跨仓库操作 子模块

初级代码游戏的专栏介绍与文章目录-CSDN博客 有些文件想在多个项目共享&#xff0c;但是又不能放在一个GIT仓库里&#xff0c;这要用到子模块&#xff08;submodule&#xff09;&#xff0c;说难不难&#xff0c;就是有些细节要注意。 不过说真的&#xff0c;共享向来不是个好主…

山景BP1048 升级狗烧写

1.打开MVAssistant_BP10xx工具&#xff0c;在芯片型号栏中选择B1X系列。 2.模式选择 选 M2.仅升级Flash SH(可选) 3 .Code数据选择SDK编译好的bin文件 4.const数据选择编译好的提示音bin文件。 5.点击升级狗下载。 6. 如下图所示&#xff0c;出现提示为正在给升级狗正在下载程…