CS 공부/AI

[Object Detection] MMDetection과 Detectron2

imsmile2000 2023. 5. 3. 14:10

MMDetection과 Detectron2

 

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 파일을 통해 커스터마이징 

 

  • 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

출처: naver ai tech

 

  • 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 모델 등록도 가능

# 커스텀 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 정의 -> 학습