MMDetection V2.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_fast
,proposal
,bbox
,segm
PASCAL VOC:mAP
,recall
--show
:如果指定,检测结果将绘制在图像上并显示在新窗口中。仅适用于单GPU测试,用于调试和可视化。请确保您的环境中可以使用GUI,否则您可能会遇到类似的错误。cannot
connect
to
X
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
- 点赞
- 收藏
- 关注作者
评论(0)