MMDetection入门到精通系列,最全最详细

前言

MMDetecion系列是难得的精品文章,请手动三连!
如果你对mmdetection一无所知,可以参考这篇文章:一文了解mmdetection(正在写)
如果你想直接部署mmdetection,请阅读本文,
看完本文,可以阅读mmdetecton从精通到高阶

该系列都是在Linux下完成,windows可能有所区别

MMDection安装

假设你已经配置好了conda虚拟环境,没配置好的看Anaconda与pytorch环境安装(正在写)

环境安装

首先,官网下载mmdetection

wget https://github.com/open-mmlab/mmdetection.git

进入mmdetection目录和虚拟环境(使用创建的虚拟环境名):

cd mmdetection
conda activate mmd

安装相关依赖

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html
pip install -r requirements/build.txt
pip install -v -e .

demo测试

在mmdetection目录下创建demo.py如下:

from mmdet.apis import init_detector, inference_detector

config_file = 'configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py'
'''
创建‘checkpoints’目录并下载 checkpoint
网址为: http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
'''
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
device = 'cuda:0'
img = 'demo/demo.jpg'

# 初始化检测器
model = init_detector(config_file, checkpoint_file, device=device)
inference_detector(model, 'demo/demo.jpg')

运行demo.py即可

python demo.py

你将会看到一个包含 DetDataSample 的列表,预测结果在 pred_instance 里,包含有检测框,类别和得分

创建数据集

mmdetection的数据结构如下,我们以coco数据集为例:
annotations中包含instances_train2017.json,instances_val2017.json,所有文件名不要更改
train2017, val2017, test2017分别包括训练,验证,测试图片(.png或.jpg)

mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── coco
│   │   ├── annotations
│   │   │   ├──instances_train2017.json
│   │   │   ├──instances_val2017.json
│   │   ├── train2017
│   │   ├── val2017
│   │   ├── test2017
│   ├── cityscapes
│   │   ├── annotations
│   │   ├── leftImg8bit
│   │   │   ├── train
│   │   │   ├── val
│   │   ├── gtFine
│   │   │   ├── train
│   │   │   ├── val
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   ├── VOC2012

训练模型

通过修改配置文件,改变训练参数,以faster rcnn为例:

python ./tools/train.py ./configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py

加载预训练模型

train.py参数介绍:
打开tools/train.py查看超参数即可,mmdetection 3.x中train.py没有–weights超参数,在配置文件在加入load_from=‘模型文件’即可使用预训练模型

load_from = '/mmdetection//checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'

train.py中有--resume参数,可以加载上次未训练完的模型,即work_dirs中最新模型,配置文件加resume=True也可以实现

配置文件:

_base_ = [
    '../_base_/models/faster-rcnn_r50_fpn.py',  
    '../_base_/datasets/coco_detection.py',
    '../_base_/schedules/schedule_1x.py',
    '../_base_/default_runtime.py'
]

表明模型文件继承自faster-rcnn_r50_fpn.py,数据加载继承自coco_detection.py,训练参数继承自schedule_1x.py,default_runtime.py
建议创建一个新配置文件,如my_faster_rcnn.py继承原有配置,然后修改你的自定义配置文件

_base_ = ['faster-rcnn_r50_fpn_1x_coco.py',]

修改类别classes

修改类别后一定要重新编译

python setup.py install  

进入mmdetection/mmdet/evaluation/functional/class_names.py,修改def coco_classes()

def coco_classes() -> list:
    """Class names of COCO."""
    return [
        '3_2', '9_1', '2_1', '8', '10_1', '10_2', '9_2', '2_2', '3_1'  # 你的数据类别
    ]

进入mmdetection/mmdet/datasets/coco.py,修改class CocoDataset(BaseDetDataset):

@DATASETS.register_module()
class CocoDataset(BaseDetDataset):
    """Dataset for COCO."""

    METAINFO = {
        'classes':
        ('3_2', '9_1', '2_1', '8', '10_1', '10_2', '9_2', '2_2', '3_1'),  # 你的数据类别

以faster rcnn为例,找到继承的configs/_base_/models/faster-rcnn_r50_fpn.py,找到model的roi_head的bbox_head的num_classes,在自定义配置中修改

model = dict(
    roi_head=dict(bbox_head=dict(num_classes=9),),)

关键训练参数

model = dict(
    data_preprocessor=dict(
        mean=[113.7506, 114.8209, 112.6435],
        std=[57.9982, 59.6259, 59.5165],),
    roi_head=dict(bbox_head=dict(num_classes=9),),)

mean=[113.7506, 114.8209, 112.6435], std=[57.9982, 59.6259, 59.5165]是数据集的平均值和标准差,可以看这篇文章生成数据集的平均值和标准差

train_dataloader = dict(
    batch_size=2,  # 训练batch大小
    num_workers=2,  # 训练线程
    persistent_workers=True,
    sampler=dict(type='DefaultSampler', shuffle=True),
    batch_sampler=dict(type='AspectRatioBatchSampler'),)
    
rain_cfg = dict(type='EpochBasedTrainLoop', max_epochs=200, val_interval=10)
# 最大训练批次,每隔val_interval验证一次map
default_hooks=dict(checkpoint=dict(type='CheckpointHook', interval=10),)
# 每隔interval保存一次模型
load_from = '/work/yanqi/mmdetection/checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'

开始训练

重新编译

python setup.py install  

训练

python ./tools/train.py ./configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py

多显卡训练看我的这篇文章MMDetection 3.x使用多GPU训练

CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 ./tools/train.py ./configs/yolox/yolox_s_8xb8-300e_coco.py --launcher pytorch

生成检测图片

进入demo/阅读超参数设置,以faster rcnn为例命令如下

python ./demo/image_demo.py ./data/coco/test2017 ./configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py --weights ./work_dirs/faster-rcnn_r50_fpn_1x_coco/epoch_100.pth --out-dir output

数据增强

数据增强见目标检测数据增强篇

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值