꺼내먹는지식 준

MMdetection 본문

AI/CV

MMdetection

알 수 없는 사용자 2022. 3. 22. 13:40

MMdetection은 정말 많은 object detection module을(Faster R CNN, Yolo v3. DERT..) 담고 있다. 

사용법도 굉장히 간단해서 config 파일을 수정해주는 것만으로 사용 준비 끝이다. 

다만, config 파일 사용법은 숙지를 해야한다. 

 

모델, scheduler, optimizer 등 모두 수정 가능 

mmdetection github에서 configs directory를 들어가보면 다양한 모델의 config가 사전 정의되어있다. 

각각 학습가능한 dataset에 대해서도 작성되어있다. 

 

configs/base/ 폴더에 가장 기본이 되는 config 파일이 존재 

datset, model, scheule, default_runtime 4가지 기본 구성 요소 

dataset - COCO, VOC, Cityscape

Model - Faster_RCNN, Retinanet, rpn

 

config파일은 기본적으로 base config 파일을 상속 받아서, 일부를 custom 해서 사용 가능 

 

아래와 같이 사용 가능 

 

 

base config 예시

coco_detection.py 를 열어보면 

다음과 같은 형태로 구성되어있다. 

samples_per_gpu: gpu 1개당 올라갈 이미지 샘플의 개수 

왜 batch 안의 이미지 2장만 쓰는가? 

Fast R CNN의 경우 한 이미지당 ROI 가 2000, 즉 한 GPU 당 4000개의 ROI 

workers_per_gpu: 한 gpu당 worker (cpu)의 개수 

 

수정 원하면 이 부분만 수정이 가능 

 

하단

train : annotation file 위치, img_prefix 정의 필요, type 도 정의 필요 등.. 

val

test 

 

데이터를 정의만 해주는데 어떻게 mmDetection이 데이터를 load하고 torch object로 변환해줄까? 

pipeline = train_pipeline

: 이에 근거해서 hard disk의 low level image에서 모델이 이해 가능한 torch object로 변환 

다음의 과정 

빨간색: 영향을 받는 것 

초록색: 새로 생성 되는 것 

 

Model 

type: 모델 유형

backbone: input image to feature map 

type과 여러 백본 내의 요소들 결정 load 가능 

 

Neck: feature map 재구성

RPN_head 

scale 어떻게, ratio 어떻게 등 

만약 우리의 사진의 ratio 가 eda 해보니 대부분 가로가 길더라. 

이 경우 ratio를 명시적 수정 가능 

 

box_coder 로 box normalize도 가능 

 

등등... 

 

RoI head 

num_classes = 80 

coco_dataset 기준이라 예를들어 11개의 class라면 11 개로 수정 

loss 등.. 

 

사용 가능한 model 

없는건 custom backbone으로 등록 가능

 

다음의 3가지 과정  

 

backbones아래에 다음과 같이 파일 추가 가능 

model backbone의 type에 등록 

 

Runtime settings

Training Scheduler, optimizer 등 학습 관련 

Epoch, step 기반 스케쥴러 선언 등 다 가능 

 

파이프라인 복습! 

어떻게 재정의 하고 하는지 github에 들어가서 한번 봐보자. 

config 파일 이해만으로도 모델 학습이 가능하니 굉장히 편리하다. 

다만, arg 이 워낙 많다보니, 결국에는 각 모델을 이해하고 있지 않으면 활용이 어렵다. 

Naive 코드 정도는 한번 구현해보거나, 논문을 읽고 오자. 

 

mmdetection은 pipeline이 짜여져 있기 때문에 수정이 좀 어렵고, backbone loss 추가 등도 조금 의식을 하고 수행해야 한다. 

 

Detectron2 

 

Detection 외에도 segmentation, pose prediction 등 알고리즘 제공 (segmentation은 사실 따로 더 좋은 library가 있어서 detection에만 거의 사용)

 

1) setup config

2) setup trainer

3) start training

 

setup config

기본 config 로드, arg 추가로 config 구성 

 

trainer 구성

start training 

Pipeline 

여러 module 
+
from detectron2.config import get_cfg

coco format으로 정의된 데이터셋 등록 

 

사전 정의 된 fast R CNN config 가져와서 merge 

LR, Interation, ROI class 수, num_workers 등 mmDetection과 유사 

 

mmdetection은 pipeline이 존재했는데, detectron은 존재하지 않는다. 

이에 따라 augmenation mapper 를 정의해서 전달해야 한다.

자유도는 높지만 사용이 좀 어렵다. 

build_train_loader 재정의, mapper=MyMapper 에정의한 augmentation mapper 를 넘겨줘야 한다. 이를 위해 train loader 재정의 

 

 

mmDetection과 유사하나, mapper 사용이 다르다.

 

 

 Dataset 등록 

 

 

 

 

 

 

Model

이런식으로 사용 가능, 나머지는 알아서 찾아서 참고해보자. 

Threshold 등도 수정 가능.. 

 

NMS 로 몇개를 사용할지 정도 

 

 

 

 

Solver

학습 관련

 

LR Sheduler 



예시를 하나만 사용했다.

나머지도 description도 한번 살펴보자. 

 

 

'AI > CV' 카테고리의 다른 글

1 stage Detectors  (0) 2022.03.23
Object Detection Neck  (0) 2022.03.22
COCO data 처리  (0) 2022.03.22
mAP란? FLOPs 란?  (0) 2022.03.21
YOLO v3  (0) 2022.03.19
Comments