当前位置: 首页 > 工具软件 > mmdetection > 使用案例 >

mmdetection使用

东方骏
2023-12-01

mmdetection使用

mmdetection 大部分模型都需要coco格式数据集

xml / txt 转 coco

  • 注意coco数据集的格式 类别id 是从下标1开始的
  • 在json文件的最后一行可以看见 类别id对应的类别名称 {“names”:‘panel_1’,“id”:1}

更改class_name

  • mmdetection/mmdet/datasets/coco.py
    CLASSES = ("",)
    
  • mmdetection/mmdet/core/evaluation/classes_names.py
    def coco_classes():
        return ["",]
    
  • 注意这里两处classes的顺序和拼写,要和训练的json 最后一行的类别顺序一致

更改自己要跑的模型的configs文件

  • 例如yolox_s
    mmdetection/configs/yolox/yolox_s_8×8_300e_coco.py
    1. 需要更改 检测头的 num_classes = 自己的类别数量(在文件开头)
    2. 需要更改 train = dict{ }、val = dict { }、test = dict { } 的路径 img_prefixanno_file为自己的数据路径.
    3. (可选)
      • 更改__base__里的内容,比如学习率,batch size,
      • 也可以指定work_dirs = "your_work_dirs_path"(模型保存的路径)、
      • 也可以指定预训练模型加载路径load_from=" your_checkpoint_path"
  • 例如cascade_rcnn
    mmdetection/configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py
       _base_ = [
           '../_base_/models/cascade_rcnn_r50_fpn.py',
           '../_base_/datasets/coco_detection.py',
           '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
       ]
    
    需要在 configs/base/ 下找到这四个文件依次修改
    1. 需要更改 检测头的 num_classes = 自己的类别数量(在文件开头,cascade有三个级联检测头,所以要更改三处)(在cascade_rcnn_r50_fpn.py里面)
    2. 需要更改 train = dict{ }、val = dict { }、test = dict { } 的路径 img_prefixanno_file为自己的数据路径. (在coco_detection.py里面)
    3. (可选)
      • 更改__base__里的内容,比如学习率,batch_size,
      • 也可以指定work_dirs="your_work_dirs_path"(模型保存的路径)、
      • 也可以指定预训练模型加载路径load_from=" your_checkpoint_path"

训练

  • 单卡训练
    python tools/train.py your_config_file_path_here
    
  • 分布式多卡训练
    bash ./tools/dist_train.sh your_config_file_path_here 2
    #2 代表两块卡 默认 0 and 1 
    CUDA_VISIBLE_DEVICES=0,2,3 bash ./tools/dist_train.sh your_config_file_path_here 3
    #指定三块卡训练
    
  • 恢复训练
    --resume-from your_pth_path
    #从已经训练好的某个epoch恢复训练
    

结果生成

  • 默认生成在mmdetection/work_dirs/ 文件下
    1. 模型权重文件epoch.pth
    2. log日志
    3. 你的完整训练config文件会在这里在保存一次,(下次可以用这个config文件直接训练,比较方便)

测试

  • 基本命令

    python tools/test.py work_dirs/yolox_/faster_rcnn_r50_fpn_1x_voc0712.py work_dirs/yolox_/faster_rcnn_r50_fpn_1x_voc0712/latest.pth 
    # 分别输入完整conf 权重文件路径(均在你指定的work_dirs下)
    
  • 可视化

     --show-dir work_dirs/visual_result(你想要保存可视化结果的文件夹)
    
  • 生成json格式的结果

     --format-only --options "jsonfile_prefix=./results/result"
     # 会在results下生成result.bbox.json
    
  • 其他参数

    --options "classwise=True"
    #输出每类的map
    
    --eval mAP
    #输出mAP
    
    --eval bbox
    #输出 bbox map
    
  • 也可以多卡测试 同训练
    例子:

    bash ./tools/dist_test.sh configs_start/start/cascade_r50_1600_koi.py work_dirs/cascade_r50_fpn_1600_koi/epoch_5.pth 2 --format-only --options "jsonfile_prefix=./results/cascade_r50_fpn_1600_koi_epoch_5_result" 4
    
  • 其他一些测试操作示例

    loss:
    python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/detectors_cascade_rcnn_r50_1x_coco/20210426_132037.log.json --keys loss --out work_dirs/detectors_cascade_rcnn_r50_1x_coco/loss_results.jpg
    
    map:
    python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/detectors_cascade_rcnn_r50_1x_coco/20210426_132037.log.json --keys bbox_mAP bbox_mAP_50 bbox_mAP_75 --out work_dirs/detectors_cascade_rcnn_r50_1x_coco/map_results.jpg
    
    model 复杂度
    python tools/analysis_tools/get_flops.py configs_water/detectors/detectors_cascade_rcnn_r50_1x_coco.py --shape 1333 800
    
    

更多详见mmdetection 中文文档

https://mmdetection.readthedocs.io/zh_CN/latest/

 类似资料: