MMDetection V2.3.0训练测试笔记

举报
老师好我叫高同学 发表于 2020/10/12 09:45:32 2020/10/12
【摘要】 MMDetectionv2.3.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_detectorimport 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 filemodel = init_detector(config_file, checkpoint_file, device='cuda:0')# test a single image and show the resultsimg = 'test.jpg'  # or img = mmcv.imread(img), which will only load it onceresult = inference_detector(model, img)# visualize the results in a new windowmodel.show_result(img, result)# or save the visualization results to image filesmodel.show_result(img, result, out_file='result.jpg')# test a video and show the resultsvideo = 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


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。