新版 MMDetection V2.3.0训练测试笔记

目录

Installation

验证

使用自己的数据集训练faster-rcnn

训练命令

Use pre-trained model

测试命令(测试整个测试集)

Image demo(测试单张图像)

测试图像的High-level APIs

Useful tools

分析日志

引用


MMDetection已经更新到了v2.3.0版本,很多博客是基于1.0版本的操作,这里记录一下自己使用新版的一些操作

主分支使用 PyTorch 1.3 to 1.5,强烈推荐使用2.0版本,以实现更快的速度、更高的性能、更好的设计和更友好的使用。


Installation

  • Python 3.6+
  • PyTorch 1.3+

step1:

conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab

step2: 

conda install pytorch cudatoolkit=10.1 torchvision -c pytorch

或者使用pip安装

pip install  torch==1.5.0 torchvision==0.6.0 mmcv==0.5.5

Pytorch 使用不同版本的cuda, 以及为什么还要安装cudatoolkit  : 点此链接

step3:

pip install mmcv-full

step4:

# install mmdetection
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -r requirements/build.txt
pip install -v -e .   或者  python setup.py develop

验证

python tools/train.py -h


使用自己的数据集训练faster-rcnn

(1)修改faster_rcnn_r50_fpn_1x_coco.py  

_base_ = [
    '../_base_/models/faster_rcnn_r50_fpn.py',
    '../_base_/datasets/coco_detection.py',
    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]

 

(2)修改faster_rcnn_r50_fpn.py

anchor_generator=dict(
            type='AnchorGenerator',
            scales=[8],
            ratios=[0.5, 1.0, 2.0],
            strides=[4, 8, 16, 32, 64])
 num_classes=80

类别不需加1 

(3)数据集的位置以及samples_per_gpu修改

 samples_per_gpu=2,
 workers_per_gpu=2,
evaluation = dict(interval=1, metric='mAP')

(4)学习率和epoch的修改位置

optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)

重要:配置文件中的默认学习率(lr=0.02)是8个GPU和samples_per_gpu=2(批大小= 8 * 2 = 16)。根据线性缩放规则,如果您使用不同的GPU或每个GPU的有多少张图像,则需要按批大小设置学习率,例如,对于4GPU* 2 img / gpu=8,lr =8/16 * 0.02 = 0.01 ;对于16GPU* 4 img / gpu=64,lr =64/16 *0.02 = 0.08 。

计算公式:批大小(gup-num * samples_per_gpu) / 16 * 0.02

(5)修改测试的标签类别文件

(6)修改voc.py文件

重要: 修改完 class_names.py 和 voc.py 之后一定要重新编译代码,否则验证输出仍然为VOC的类别,且训练过程中指标异常

 loss_rpn_cls: 0.00, loss_rpn_bbox: 0.0000, loss_cls: 0.000, acc: 100, loss_bbox: 0.0000, loss: 0.000


训练命令

1. 使用单个GPU进行训练

python tools/train.py ${CONFIG_FILE} [optional arguments]

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

2.使用多个GPU进行训练

./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]

./tools/dist_train.sh  configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py

[optional arguments]  可选参数

--no-validate  : 不建议使用,代码中每隔K(默认为1)执行评估,可以在configs/_base_/datasets/voc0712.py 修改evaluation = dict(interval=1, metric='mAP')

--work-dir ${WORK_DIR}   覆盖配置文件中指定的工作目录

--resume-from ${CHECKPOINT_FILE}   程序中断后继续训练,从先前的检查点文件恢复

--options 'Key=value'   :  在使用的配置中覆盖一些设置。

 

Use pre-trained model

要使用预训练的模型,新的配置在load_from中添加预训练模型的链接。用户可能需要在训练前下载模型权重,以避免训练期间的下载时间。

checkpoint_config = dict(interval=1)
# yapf:disable
log_config = dict(
    interval=50,
    hooks=[
        dict(type='TextLoggerHook'),
        # dict(type='TensorboardLoggerHook')
    ])
# yapf:enable
dist_params = dict(backend='nccl')
log_level = 'INFO'
load_from = 'https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/mask_rcnn_r50_fpn_2x_20181010-41d35c05.pth'
resume_from = None
workflow = [('train', 1)]

 


测试命令(测试整个测试集)

 

# single-gpu testing
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] [--show]
  • RESULT_FILE:输出结果的文件名,采用pickle格式。如果未指定,结果将不会保存到文件中。
  • EVAL_METRICS:要根据结果评估的项目。允许的值是:COCO:proposal_fastproposalbboxsegm                            PASCAL VOC: mAPrecall
  • --show:如果指定,检测结果将绘制在图像上并显示在新窗口中。仅适用于单GPU测试,用于调试和可视化。请确保您的环境中可以使用GUI,否则您可能会遇到类似的错误。cannot connect to server
  • --show-dir:   如果指定,检测结果将绘制在图像上并保存到指定的目录中。仅适用于单GPU测试,用于调试和可视化。使用此选项时,您的环境中不需要可用的GUI。
  • --show-score-thr:  如果指定,则将删除分数低于此阈值的检测。

具体示例:

1. Test Faster R-CNN and visualize the results. Press any key for the next image.

python tools/test.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
    checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth \
    --show

2. Test Faster R-CNN and save the painted images for latter visualization.

python tools/test.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x.py \
    checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth \
    --show-dir faster_rcnn_r50_fpn_1x_results

3. Test Faster R-CNN on PASCAL VOC (without saving the test results) and evaluate the mAP.

python tools/test.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc.py \
    checkpoints/SOME_CHECKPOINT.pth \
    --eval mAP

4. Test Mask R-CNN with 8 GPUs, and evaluate the bbox and mask AP.

./tools/dist_test.sh configs/mask_rcnn_r50_fpn_1x_coco.py \
    checkpoints/mask_rcnn_r50_fpn_1x_20181010-069fa190.pth \
    8 --out results.pkl --eval bbox segm

 

Image demo(测试单张图像)

python demo/image_demo.py ${IMAGE_FILE} ${CONFIG_FILE} ${CHECKPOINT_FILE} [--device ${GPU_ID}] [--score-thr ${SCORE_THR}]

Examples:

python demo/webcam_demo.py configs/faster_rcnn_r50_fpn_1x_coco.py \
    checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth

 

测试图像的High-level APIs

下面是一个构建模型和测试给定图像的示例。

from mmdet.apis import init_detector, inference_detector
import mmcv

config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth'

# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file, device='cuda:0')

# test a single image and show the results
img = 'test.jpg'  # or img = mmcv.imread(img), which will only load it once
result = inference_detector(model, img)
# visualize the results in a new window
model.show_result(img, result)
# or save the visualization results to image files
model.show_result(img, result, out_file='result.jpg')

# test a video and show the results
video = mmcv.VideoReader('video.mp4')
for frame in video:
    result = inference_detector(model, frame)
    model.show_result(frame, result, wait_time=1)

Useful tools

分析日志

pip install seaborn

python tools/analyze_logs.py plot_curve [--keys ${KEYS}] [--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] [--style ${STYLE}] [--out ${OUT_FILE}]
  • 绘制分类损失
python tools/analyze_logs.py plot_curve log.json --keys loss_cls --legend loss_cls
  • 绘制训练时的分类和回归损失,并将该图保存为pdf。
python tools/analyze_logs.py plot_curve log.json --keys loss_cls loss_bbox --out losses.pdf
  • 在同一个图中绘制两次训练的bbox mAP
python tools/analyze_logs.py plot_curve log1.json log2.json --keys bbox_mAP --legend run1 run2

 

引用

https://blog.csdn.net/weixin_41010198/article/details/106258366

https://zhuanlan.zhihu.com/p/101225733

 

你可能感兴趣的:(深度学习框架,mmdetection,新版,2.0,训练,检测)