MMdetection训练个人coco数据集

依赖

  • coco格式数据集。

    coco_dataset/
    ├── annotations/                 # 存储标注文件(JSON格式)
    │   ├── instances_train2017.json # 目标检测标注(训练集)
    │   ├── instances_val2017.json   # 目标检测标注(验证集)
    │   ├── instances_test2017.json   # 目标检测标注(验证集)
    ├── train2017/                   # 训练集图像文件夹
    │   ├── 000000000001.jpg
    │   ├── 000000000002.jpg
    │   ├── ...
    ├── val2017/                     # 验证集图像文件夹
    │   ├── 000000000003.jpg
    │   ├── 000000000004.jpg
    │   ├── ...
    ├── test2017/                    # 测试集图像文件夹(可选)
    │   ├── 000000000005.jpg
    │   ├── 000000000006.jpg
    │   ├──...
    
  • MMdetection版本:v3.3.0

  • MMdetection环境安装 链接

  • 参考链接


1.将代码库的coco数据集类别改为个人数据集类别

  • 文件1路径:mmdet/evaluation/functional/class_names.py
def coco_classes() -> list:
    """Class names of COCO."""
    return [
        'Purslane', 'Crabgrass', 'FatHen', 'other_weeds'
    ]
  • 文件2路径: mmdet/datasets/coco.py
class CocoDataset(BaseDetDataset):
    """Dataset for COCO."""

    METAINFO = {
        'classes':
        ('Purslane', 'Crabgrass', 'FatHen', 'other_weeds'),
        # palette is a list of color tuples, which is used for visualization.
  • 在当前项目根目录运行 setup.py重新编译,加载新的coco类别
    python setup.py install build
    

2.配置训练参数

  • 使用训练脚本,生成参数配置文件,指定模型与训练参数存放路径
python tools/train.py configs/conditional_detr/conditional-detr_r50_8xb2-50e_coco.py --work-dir work_dirs/co_detr
  • 配置训练参数

    data_root = 'data/coco/' #数据集路径
        checkpoint=dict(interval=50, type='CheckpointHook'),#模型几轮一存
            num_classes=4,
    
    train_cfg = dict(max_epochs=1000, type='EpochBasedTrainLoop', val_interval=10)#总训练轮数和评估频率
    
    optimizer=dict(lr=0.001, type='AdamW', weight_decay=0.0001)#lr学习率0.001
    
  • 训练命令,注意修改配置文件路径

    python tools/train.py work_dirs/co_detr/conditional-detr_r50_8xb2-50e_coco.py  --work-dir work_dirs/co_detr
    

3. 性能评估

3.1可视化评估命令

python tools/test.py work_dirs/co_detr/conditional-detr_r50_8xb2-50e_coco.py  work_dirs/co_detr/epoch_1000.pth --show

3.2单类别ap评估

  • 修改mmdet/evaluation/metrics/coco_metric.py中的cocoMetric

    classwise: bool = True,
    
  • 调整iou阈值并评估

    iou_thrs = np.linspace(  .5, 0.95, int(np.round((0.95 - .5) / .05)) + 1, endpoint=True)  #.5改成0.3
    
  • 再运行评估命令就会打印各个类别的ap

    python tools/test.py work_dirs/co_detr/conditional-detr_r50_8xb2-50e_coco.py work_dirs/co_detr/epoch_1000.pth --out work_dirs/co_detr/eval_result/result.pkl
    

3.3模型复杂度评估命令

  • 评估指标 flops Params
    python tools/analysis_tools/get_flops.py work_dirs/co_detr/conditional-detr_r50_8xb2-50e_coco.py