https://mmdetection.readthedocs.io/en/latest/1_exist_data_model.html
위 참고하여 작성.
2021.10.19 - [딥러닝관련/Detection] - MMdetection(1) 설치 및 Demo 실행 - (1)
여기 위에서 demo를 실행했었다.
구체적인 실행 방법은 아래와 같다.
# Image Demo
python demo/image_demo.py \
${IMAGE_FILE} \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
[--device ${GPU_ID}] \
[--score-thr ${SCORE_THR}]
python demo/image_demo.py demo/demo.jpg \
configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
--device cpu
# Webcam Demo
python demo/webcam_demo.py \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
[--device ${GPU_ID}] \
[--camera-id ${CAMERA-ID}] \
[--score-thr ${SCORE_THR}]
python demo/webcam_demo.py \
configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
# Video demo
python demo/video_demo.py \
${VIDEO_FILE} \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
[--device ${GPU_ID}] \
[--score-thr ${SCORE_THR}] \
[--out ${OUT_FILE}] \
[--show] \
[--wait-time ${WAIT_TIME}]
python demo/video_demo.py demo/demo.mp4 \
configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
--out result.mp4
Standard Datasets에서 test
(CoCo, Pascal VOC, Cityscapes 등..)
데이터를 다운 받은 후 아래와 같은 구조로 구성한다.
# https://mmdetection.readthedocs.io/en/latest/3_exist_data_new_model.html
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ ├── cityscapes
│ │ ├── annotations
│ │ ├── leftImg8bit
│ │ │ ├── train
│ │ │ ├── val
│ │ ├── gtFine
│ │ │ ├── train
│ │ │ ├── val
│ ├── VOCdevkit
│ │ ├── VOC2007
│ │ ├── VOC2012
만약 추가로 COCO-stuff datasets가 필요하면 아래와 같이 구성한다.
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ │ ├── stuffthingmaps
COCO panoptic datasets의 경우 아래와 같이 구성
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ │ ├── panoptic_train2017.json
│ │ │ ├── panoptic_train2017
│ │ │ ├── panoptic_val2017.json
│ │ │ ├── panoptic_val2017
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
cityscapes annotation의 경우 아래의 코드를 이용하여 변경해줘야 함
pip install cityscapesscripts
python tools/dataset_converters/cityscapes.py \
./data/cityscapes \
--nproc 8 \
--out-dir ./data/cityscapes/annotations
기존 모델 테스트
Single GPU
Single node multiple GPU
Multiple Node
(데스크탑에서 진행하는 것이라면 Node는 컴퓨터로 볼 수 있음)
지원 가능
실행 방법은 아래와 같음
# single-gpu testing
python tools/test.py \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
[--out ${RESULT_FILE}] \
[--eval ${EVAL_METRICS}] \
[--show]
# multi-gpu testing
bash tools/dist_test.sh \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
${GPU_NUM} \
[--out ${RESULT_FILE}] \
[--eval ${EVAL_METRICS}]
옵션들은 아래와 같음
RESULT_FILE: Filename of the output results in pickle format. If not specified, the results will not be saved to a file.
EVAL_METRICS: Items to be evaluated on the results. Allowed values depend on the dataset, e.g., proposal_fast, proposal, bbox, segm are available for COCO, mAP, recall for PASCAL VOC. Cityscapes could be evaluated by cityscapes as well as all COCO metrics.
--show: If specified, detection results will be plotted on the images and shown in a new window. It is only applicable to single GPU testing and used for debugging and visualization. Please make sure that GUI is available in your environment. Otherwise, you may encounter an error like cannot connect to X server.
--show-dir: If specified, detection results will be plotted on the images and saved to the specified directory. It is only applicable to single GPU testing and used for debugging and visualization. You do NOT need a GUI available in your environment for using this option.
--show-score-thr: If specified, detections with scores below this threshold will be removed.
--cfg-options: if specified, the key-value pair optional cfg will be merged into config file
--eval-options: if specified, the key-value pair optional eval cfg will be kwargs for dataset.evaluate() function, it’s only for evaluation
실행 예시는 아래와 같음
checkpoints/ 에 weight가 있어야 함
Faster-RCNN 예시
(checkpoint와 config파일 : https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn)
# show image
python tools/test.py \
configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
--show
결과
# save image
python tools/test.py \
configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
--show-dir faster_rcnn_r50_fpn_1x_results
결과
COCO dataset은 mmdetection에서 mAP metric을 지원하지 않아 VOC로 테스트
checkpoint는 아래 링크 참조하여 다운
https://github.com/open-mmlab/mmdetection/tree/master/configs/pascal_voc
# eval mAP
python tools/test.py \
configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py \
checkpoints/faster_rcnn_r50_fpn_1x_voc0712_20200624-c9895d40.pth \
--eval mAP
결과는 위와 같다
Ground Truth Annotation 없이 test
(MMdetection은 이 경우 COCO 포맷에 맞춰 바꿔줘야 함, 이 경우 아래 링크 참조)
# 예시
python tools/dataset_converters/images2coco.py \
${IMG_PATH} \
${CLASSES} \
${OUT} \
[--exclude-extensions]
변환 후 아래의 명령어를 이용해 test 가능
# single-gpu testing
python tools/test.py \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
--format-only \
--options ${JSONFILE_PREFIX} \
[--show]
# multi-gpu testing
bash tools/dist_test.sh \
${CONFIG_FILE} \
${CHECKPOINT_FILE} \
${GPU_NUM} \
--format-only \
--options ${JSONFILE_PREFIX} \
[--show]
Mask RCNN을 이용하여 test
python ./tools/test.py \
configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py \
checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \
--options "jsonfile_prefix=./mask_rcnn_test-dev_results" \
--eval bbox
Batch Inference
테스트 모드에서 single image 또는 batched image로 inference 가능
기본적으로는 single image inference 사용
test data의 config에서 samples_per_gpu로 batch inference 가능
아래와 같이 config 수정하여 실행 가능
data = dict(train=dict(...), val=dict(...), test=dict(samples_per_gpu=2, ...))
아니면 --cfg-option를 수정하여 실행 가능
--cfg-options data.test.samples_per_gpu=2
Deprecated ImageToTensor
# use ImageToTensor (deprecated)
pipelines = [
dict(type='LoadImageFromFile'),
dict(
type='MultiScaleFlipAug',
img_scale=(1333, 800),
flip=False,
transforms=[
dict(type='Resize', keep_ratio=True),
dict(type='RandomFlip'),
dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]),
dict(type='Pad', size_divisor=32),
dict(type='ImageToTensor', keys=['img']),
dict(type='Collect', keys=['img']),
])
]
위 코드가 사라질 예정이니 아래 사용
# manually replace ImageToTensor to DefaultFormatBundle (recommended)
pipelines = [
dict(type='LoadImageFromFile'),
dict(
type='MultiScaleFlipAug',
img_scale=(1333, 800),
flip=False,
transforms=[
dict(type='Resize', keep_ratio=True),
dict(type='RandomFlip'),
dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]),
dict(type='Pad', size_divisor=32),
dict(type='DefaultFormatBundle'),
dict(type='Collect', keys=['img']),
])
]
Train predefined models on standard datasets
COCO datasets과 같은 standard datasets에서 미리 정의된 모델(config) 에서 학습하는 방법을 보여 줌
config 파일의 기본 learning rate는 GPU 8개와 2 img/gpu (batch size = 8 * 2 = 16)
Linear scaling 규칙에 따라 GPU당 다른 GPU 또는 이미지를 사용하는 경우
배치 크기에 비례하여 학습률을 설정.
lr=0.01 for 4 GPUs * 2 imgs/gpu
lr=0.08 for 16 GPUs * 4 imgs/gpu
Single GPU에서의 학습
python tools/train.py \
${CONFIG_FILE} \
[optional arguments]
# options
--no-validate (not suggested): Disable evaluation during training.
--work-dir ${WORK_DIR}: Override the working directory.
--resume-from ${CHECKPOINT_FILE}: Resume from a previous checkpoint file.
--options 'Key=value': Overrides other settings in the used config.
resume-from 과 load-from의 차이
resume-from : weight와 optimizer 상태 모두 로드 및 epoch도 지정된 checkpoint에서 상속
(일반적으로 학습하다가 중단되었을 때)
load-from : weight만 load 하고 training epoch는 0부터 시작
(일반적으로 fine-tuning 할 때)
위를 참고하여 아래의 명령어를 실행하여 faster rcnn COCO dataset 학습을 진행하였다.
python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py --work-dir log/2021-10-29-faster_rcnn_r50_fpn_1x_coco_log
학습도 잘 시작하고 log파일도 잘 생기는 걸 아래와 같이 확인할 수 있다.
궁금해서 보니까 pre-trained weight는 아래와 같은 경로에 저장되어 있음을 알 수 있다.
~/.cache/torch/hub/checkpoints
'딥러닝관련 > Detection' 카테고리의 다른 글
Object detection 정리 (1) (feat, object detection? , 1 stage detector, 2 stage detector) (0) | 2021.11.03 |
---|---|
Detectron2 (2) Standard datasets 학습 (0) | 2021.10.29 |
MMdetection(1) 설치 및 Demo 실행 - (2) (config) (0) | 2021.10.27 |
MMCV 의 Registry (0) | 2021.10.26 |
MMCV 의 Config (0) | 2021.10.26 |