CS 공부/AI
[Object Detection] MMDetection과 Detectron2
imsmile2000
2023. 5. 3. 14:10

MMDetection
- Pytorch 기반의 object detection 오픈소스 라이브러리
- Pipeline: input - backbone - neck - dense prediction - prediction
- 2 stage 모델은 backbone / neck / DenseHead / RoIHead 모듈로 나눌 수 있음
- backbone: 입력 이미지를 feature map으로 변형
- neck: backbone과 head를 연결, feature map 재구성
- DenseHead: feature map의 dense location을 수행
- RoIHead: RoI 특징을 입력으로 받아 box 분류, 좌표 회귀 등을 예측
- 각 모듈 단위로 config 파일을 통해 커스터마이징
- 2 stage 모델은 backbone / neck / DenseHead / RoIHead 모듈로 나눌 수 있음
- Config File
- configs를 통해 데이터셋, 모델, scheduler, optimizer 정의 가능
- 특히 configs에는 다양한 object detection 모델들의 config 파일들이 정의되어 있음
- 가장 기본이 되는 config 파일 구성요소: dataset, model, schedule, default_runtime
- config/base/ 폴더에 여러버전의 config 존재
- Dataset - COCO, VOC, Cityscape
- Model - faster rcnn, retinanet, rpn
- 틀이 갖춰진 config를 상속 받고, 필요한 부분만 수정해서 사용
- Dataset
- samples_per_gpu, workers_per_gpu 값 수정해서 사용
- train / val / test pipeline

- Model
- type: 모델 유형 ex. fasterRCNN, RetinaNet 등
- backbone: input 이미지를 feature map으로 변형해주는 네트워크 ex. ResNet, HRNet
- Neck: backbone과 head를 연결, feature map 재구성 ex. FPN, PAFPN..
- RPN_head: region proposal 네트워크 ex. RPNHead, Anchor_free_head
- anchor_generator, bbox_coder, loss_cls, loss_bbox 설정
- RoI head: region of interest ex. StandardRoIHead, CascadeRoIHead
- bbox_roi_extractor, bbox_head 설정
- Runtime settings: optimizer, lr, runner 설정
- 사용 가능한 모델

# 커스텀 backbone 모델 등록 (mobilenet.py)
import torch.nn as nn
from ..builder import BACKBONES
@BACKBONES.register_module()
class MobileNet(nn.Module): #예시
def __init__(self,arg1,arg2):
pass
def forward(self,x):
pass
# 모듈 import (init.py)
from .mobilenet import MobileNet
# 등록한 backbone 사용
model=dict(....backbone=dict(type='MobileNet', arg1=~, arg2=~),...)
Detectron2
- Facebook AI Reserach의 Pytorch 기반의 라이브러리
- object detection 외에도 segmentation, pos estimation 등의 알고리즘도 제공
- Pipeline: setup config - setup trainer - start training
- Setup Config: augument parser
- Setup Trainer: build_model, build_loader, build_optimizer, build_lr_scheduler
- Setup Training
- Config file
- MMDetection과 유사하게 config 파일을 수정, 이를 바탕으로 파이프라인을 build하고 학습
- 틀이 갖춰진 기본 config을 상속받고, 필요한 부분만 수정해 사용
- Dataset
- config: 데이터셋, 데이터로더와 관련된 config
- Train, Test에 각각 등록한 train 데이터셋과 test 데이터셋의 이름을 입력
- 커스텀 데이터셋을 사용하고 싶을 때는 register Dataset
- augmentation: 정보가 담긴 mapper 정의, dataloader에 mapper을 input으로 넣어줌
- Model
- backbone: input 이미지를 feature map으로 변형해주는 네트워크 ex. ResNet, RegNet
- FPN: backbone과 head를 연결, feature map 재구성
- Anchor_generator
- RPN: threshold, nms config
- ROI_HEADS
- ROI_BOX_HEAD
# 커스텀 backbone 모델 등록 (mobilenet.py)
from deetectron2.modeling import BACKBONE_REGISTRY, Backbone, ShapeSpec
@BACKBONE_REGISTRY.register()
class ToyBackbone(Backbone): #예시
def __init__(self,cfg,input_shape):
super().__init__()
self.conv1=nn.Conv2d(3,64,kernel_size=7,stride=16,padding=3)
def forward(self,image):
return {"conv1": self.conv1(image)}
def output_shape(self):
return {"conv1": ShapeSpec(channels=64,stride=16)}
# 등록한 backbone 사용
cfg.MODEL.BACKBONE.NAME="ToyBackbone"
model=build_model(cfg)
- Solver
- LR_scheduler
- Weight_Decay
- Clipp_gradients
MMDetection: config 파일 불러오기-> config 수정 -> 모델, 데이터셋 build -> 학습
Detectron2: 데이터셋 등록 -> config 파일 불러오기 -> config 수정 -> Augmentation mapper 정의 -> Trainer 정의 -> 학습