1. 安装配置mmdetection环境,直接看官网
开始你的第一步 — MMDetection 3.0.0 文档
最好用conda新建环境管理,防止包冲突
git clone mmdetection源码到本地
2. 开始实验
2.1 准备数据集
需要使用COCO数据集格式
2.2 配置训练文件
在configs文件夹里找到想要的模型,以faster rcnn为例,我想用faster-rcnn_r50_fpn_ciou_1x_coco.py这个模型配置文件,我只需要继承它即可,需要修改哪里用类的继承的方法修改就行,会自动覆盖原始的值。
以下配置文件为例:configs/faster_rcnn/faster-rcnn_r18_fpn_8xb8-amp-lsj-200e_FOD_tiny.py
# 继承这个类,如果需要修改哪个就写哪个就行
_base_ = 'faster-rcnn_r50_fpn_ciou_1x_coco.py'
# 我们还需要更改 head 中的 num_classes 以匹配数据集中的类别数
model = dict(
roi_head=dict(
bbox_head=dict(
type='Shared2FCBBoxHead',
num_classes=23
)
)
)
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=50, val_interval=1)
# 修改数据集相关配置
data_root = '/home/zhangh/dataset/defect_dataset/'
metainfo = {
# 'classes': ('Straight_Knife', 'Folding_Knife', 'Scissor', 'Utility_Knife', 'Multi-tool_Knife'),
'classes': ('Abrasion', 'Crazing', 'Patches', 'Inclusion', 'Uneven', 'Blowhole', 'Break', 'Crack', 'Crescent_Gap', 'Crease', 'Silk-Spot', 'Water-Spot', 'Weld-Line', 'GC-Inclusion', 'Oil-Spot', 'Rolled-Pit', 'Punching', 'Waist-Folding', 'Bruise', 'Pitted_Surface', 'Rolled-in_Scale', 'Scratches', 'Bubble'),
# 'palette': [
# (220, 20, 60),
# ]
}
train_dataloader = dict(
batch_size=8,
num_workers=1,
dataset=dict(
data_root=data_root,
metainfo=metainfo,
ann_file='JASON/instances_train2017.json',
data_prefix=dict(img='images/train/')))
val_dataloader = dict(
batch_size=8,
num_workers=1,
dataset=dict(
data_root=data_root,
metainfo=metainfo,
ann_file='JASON/instances_val2017.json',
data_prefix=dict(img='images/val/')))
test_dataloader = dict(
batch_size=8,
num_workers=1,
dataset=dict(
data_root=data_root,
metainfo=metainfo,
ann_file='JASON/instances_test2017.json',
data_prefix=dict(img='images/test/')))
# 修改评价指标相关配置
val_evaluator = dict(ann_file=data_root + 'JASON/instances_val2017.json')
test_evaluator = dict(ann_file=data_root + 'JASON/instances_test2017.json')
# load_from =None # 加载预训练模型
# 官网
# https://mmdetection.readthedocs.io/zh-cn/latest/user_guides/test.html
# 训练
# python tools/train.py configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py
# 测试
# python tools/test.py configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py checkpoints/faster_rcnn_r50_fpn_1x_voc0712_20200624-c9895d40.pth
# ./tools/dist_test.sh configs/mask_rcnn/mask-rcnn_r50_fpn_1x_coco.py checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth
# 获得模型参数量
# python tools/analysis_tools/get_flops.py configs/faster_rcnn/faster-rcnn_r18_fpn_8xb8-amp-lsj-200e_FOD_tiny.py
如需加载预训练模型,可以在对于的配置文件里找到README文件进行下载,在用load_from=模型路径即可。
2.3开始训练
用到tools/train.py这个工具
python tools/train.py configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py
训练好的权重文件会保存至work_dirs文件夹。
2.4 开始验证
用到tools/test.py这个工具
python tools/test.py configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py checkpoints/faster_rcnn_r50_fpn_1x_voc0712_20200624-c9895d40.pth
设置 mmdetection/mmdet/evaluation/metrics/coco_metric.py里的classwise为true,在推理的时候能够看到每个类别的ap值。
模型的参数量和计算量,需要用到tools/analysis_tools/get_flops.py文件
python tools/analysis_tools/get_flops.py configs/faster_rcnn/faster-rcnn_r18_fpn_8xb8-amp-lsj-200e_FOD_tiny.py
计算模型的fps,需要用到tools/analysis_tools/benchmark.py文件
python -m torch.distributed.launch --nproc_per_node=1 --master_port=29500 --use_env tools/analysis_tools/benchmark.py configs/faster_rcnn/faster-rcnn_r18_fpn_8xb8-amp-lsj-200e_FOD_tiny.py --checkpoint work_dirs/faster-rcnn_r18_fpn_8xb8-amp-lsj-200e_FOD_tiny/epoch_50.pth --launcher pytorch
python -m torch.distributed.launch --nproc_per_node=1 --master_port=29500
代表分布式的参数,直接复制即可
加--use_env的原因如下链接:
https://blog.csdn.net/qq_43826289/article/details/131564035