꺼내먹는지식 준
MMdetection 본문
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 |