mmclassification Inference a model

Published onesixx on

Image demo

This script performs inference on a single image.

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

https://mmdetection.readthedocs.io/en/latest/1_exist_data_model.html#inference-and-train-with-existing-models-and-standard-datasets

coco_2017_train데이터셋으로 학습하고, coco_2017_val로 테스트한 모든 모델들은 Model zoo (https://modelzoo.co/)에서 관리

 Faster RCNN (기존 모델)을 활용한다.

=> 즉 기존모델을 활요한다는 것은

해당 Model의 weight를 가지고 있는 checkpoint파일 (https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth)내려 (mmdection/checkpoints/)에 받아서
해당 config파일(mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py)통해,
coco 스타일의 데이터셋으로

import os
print(os.getcwd())
# /home/oschung_skcc/my/git/msc/mmclassification/docs/en/tutorials

os.chdir("/home/oschung_skcc/my/git/msc/mmclassification")
print(os.getcwd())


# !ln -s /raid/templates/data/msc_pilot/ msc_pilot

Inference a model

#######################################
### * Inference a model with Python API
#######################################
# - Prepare the model
#   - Prepare the config file
#   - Prepare the checkpoint file
# - Build the model
# - Inference with the model

### 사용할 이미지
data_dir  = '/raid/templates/data/msc_pilot/cam_kht/'
img_file = '20220822_161009.jpg'
img = data_dir+img_file

from PIL import Image
Image.open(img)


# https://mmclassification.readthedocs.io/en/latest/
import mmcv
from mmcls.apis import init_model,inference_model,show_result_pyplot
device = 'cuda:6'
### 1) Model  설정을 위한 config 파일 준비
# MobileNet V2
# https://github.com/open-mmlab/mmclassification/tree/master/configs/mobilenet_v2
#!ls configs/mobilenet_v2/mobilenet-v2_8xb32_in1k.py  #있는지 확인
config_file = 'configs/mobilenet_v2/mobilenet-v2_8xb32_in1k.py'

### 2) Model weigt을 위한 checkpoint 파일 준비
# https://mmclassification.readthedocs.io/en/master/papers/mobilenet_v2.html
checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/mobilenet_v2/mobilenet_v2_batch256_imagenet_20200708-3b2dc3af.pth'

### 3) Model 빌드
model = init_model(config_file, checkpoint_file, device=device)
# model.__class__.__mro__  # 모델의 상속관계 

### 4) Model을 통해 Inference
img_array = mmcv.imread(img)
# img_array.shape  #(3000, 4000, 3)
result = inference_model(model, img_array)


### 결과 
show_result_pyplot(model, img, result)
print(result)
#{'pred_label': 478, 'pred_score': 0.5635119676589966, 'pred_class': 'carton'}

Fine-tune(reTrain) a model

ImageNet으로 학습되었던 모델을
내dataset으로 재학습 시킨다.

(작은 데이터로 인한 over-fitting을 방지)

#######################################
### * Fine-tune(reTrain) a model with Python API
#######################################
# 1. Prepare the target dataset and meet MMClassification's requirements.
# 2. Modify the training config.
# 3. Start training and validation.
config_file = 'configs/mobilenet_v2/mobilenet-v2_8xb32_in1k.py'
checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/mobilenet_v2/mobilenet_v2_batch256_imagenet_20200708-3b2dc3af.pth'



##############################################################################
### 1. Target dataset 준비

# Custome Dataset



##############################################################################
### 2. training config 수정
from mmcv import Config
cfg = Config.fromfile(config_file)

cfg.model.head.num_classes = 2  # 1000
cfg.model.head.topk = (1, )

cfg.model.backbone.init_cfg = dict(type='Pretrained', checkpoint=checkpoint_file, prefix='backbone')

cfg.data.samples_per_gpu = 32
cfg.data.workers_per_gpu = 2

# Specify the path and meta files of training dataset
cfg.data.train.data_prefix = 'data/cats_dogs_dataset/training_set/training_set'
cfg.data.train.classes     = 'data/cats_dogs_dataset/classes.txt'

# Specify the path and meta files of validation dataset
cfg.data.val.data_prefix = 'data/cats_dogs_dataset/val_set/val_set'
cfg.data.val.ann_file    = 'data/cats_dogs_dataset/val.txt'
cfg.data.val.classes     = 'data/cats_dogs_dataset/classes.txt'

# Specify the path and meta files of test dataset
cfg.data.test.data_prefix = 'data/cats_dogs_dataset/test_set/test_set'
cfg.data.test.ann_file    = 'data/cats_dogs_dataset/test.txt'
cfg.data.test.classes     = 'data/cats_dogs_dataset/classes.txt'

# Specify the normalization parameters in data pipeline
normalize_cfg = dict(type='Normalize', mean=[124.508, 116.050, 106.438], std=[58.577, 57.310, 57.437], to_rgb=True)
cfg.data.train.pipeline[3] = normalize_cfg
cfg.data.val.pipeline[3] = normalize_cfg
cfg.data.test.pipeline[3] = normalize_cfg

# Modify the evaluation metric
cfg.evaluation['metric_options']={'topk': (1, )}

# Specify the optimizer
cfg.optimizer = dict(type='SGD', lr=0.005, momentum=0.9, weight_decay=0.0001)
cfg.optimizer_config = dict(grad_clip=None)

# Specify the learning rate scheduler
cfg.lr_config = dict(policy='step', step=1, gamma=0.1)
cfg.runner = dict(type='EpochBasedRunner', max_epochs=2)

# Specify the work directory
cfg.work_dir = './work_dirs/cats_dogs_dataset'

# Output logs for every 10 iterations
cfg.log_config.interval = 10

# Set the random seed and enable the deterministic option of cuDNN
# to keep the results' reproducible.
from mmcls.apis import set_random_seed
cfg.seed = 0
set_random_seed(0, deterministic=True)

cfg.gpu_ids = range(1)
cfg.device='cuda'

##############################################################################
### 3. 학습/검증 
import mmcv
import os
import time

from mmcls.datasets import build_dataset
from mmcls.models   import build_classifier
from mmcls.apis     import train_model

mmcv.mkdir_or_exist(os.path.abspath(cfg.work_dir))

# dataset
datasets = [build_dataset(cfg.data.train)]

# Model
model    = build_classifier(cfg.model)
model.init_weights()
model.CLASSES = datasets[0].CLASSES

# retraining :: fine tuning

train_model(model, datasets, cfg,
    distributed=False,
    validate=True,
    timestamp=time.strftime('%Y%m%d_%H%M%S', time.localtime()),
    meta=dict()
)

from mmcls.apis import inference_model, show_result_pyplot
model.cfg = cfg
img = mmcv.imread('data/cats_dogs_dataset/training_set/training_set/cats/cat.1.jpg')
result = inference_model(model, img)
show_result_pyplot(model, img, result)
Categories: vision

onesixx

Blog Owner

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x