귀퉁이 서재

컴퓨터 비전 - 10. MMDetection 개요 본문

딥러닝 컴퓨터 비전

컴퓨터 비전 - 10. MMDetection 개요

Baek Kyun Shin 2022. 5. 18. 23:09

※ 이 글은 권철민 님의 딥러닝 컴퓨터 비전 완벽 가이드 강의를 바탕으로 작성했습니다.

이번 글에는 MMDetection을 간단히 알아보겠습니다.


MMDetection이란?

MMDetection은 PyTorch 기반의 객체 탐지 오픈소스 패키지입니다. COCO 2018 대회에서 우승한 MMDet 팀이 맨 처음 개발했죠. 점차 발전해서 지금은 MMDetection 패키지로 객체 탐지나 세그멘테이션, 분류 등 다양한 딥러닝 작업을 할 수 있습니다. 훈련이나 추론(inference) 코드 외에도 300개 이상의 사전 훈련 딥러닝 모델도 제공합니다.

MMDetection은 여러 장점이 있는 패키지입니다.

  1. 모듈화 되어서 모듈별로 커스터마이징할 수 있습니다.
  2. 다양한 모델을 지원합니다.
  3. 모든 연산을 GPU에서 구동할 수 있어서 빠릅니다.
  4. 데이터 준비 - config 설정 - 모델 학습/추론으로 이어지는 파이프라인이 간단해서 사용하기 편리합니다.

MMDetection 구조

MMDetection의 모델은 백본(Backbone)과 넥(Neck), 헤드(Head)로 이루어져 있습니다.

  • Backbone: 이미지를 피처 맵으로 바꾸는 부분입니다. 피처 추출기(feature extractor)라고 보시면 됩니다. backbone으로는 VGG나 ResNet 네트워크를 주로 사용합니다.
  • Neck: backbone과 head를 연결하는 부분입니다. backbone이 만든 피처 맵을 정제/재구성하는 작업을 합니다. head가 피처 맵의 특성을 잘 해석하도록 하기 위해서죠. 가령, FPN(Feature Pyramid Network)이 Neck입니다.

여기서 잠깐! FPN이란 무엇인지 알아보죠. 기존 객체 탐지 모델들은 작은 물체를 제대로 찾지 못한다는 단점이 있습니다. 이 문제를 해결한 기법이 FPN입니다. 작은 객체를 잘 탐지하기 위해서 다양한 크기의 피처 맵을 활용하는 방법으로, 피처 맵을 피라미드처럼 쌓아서 활용합니다. 그래서 이름이 FPN(Feature Pyramid Network)입니다. 피라미드 상위 피처 맵은 추상화된 정보를 담고 있습니다. 그 이유로 작은 물체를 찾기 어렵습니다. 그런데 여러 크기를 갖는 피처 맵을 사용하면 작은 물체까지 쉽게 찾을 수 있습니다. 상위 피처 맵의 추상화된 정보와 하위 피처 맵의 작은 물체에 관한 정보를 효과적으로 결합해서 사용하기 때문이죠. 아래는 FPN의 구조입니다.

FPN 구조

  • DenseHead (AnchorHead/AnchorFreeHead): 객체 위치 찾기와 분류를 처리하는 부분입니다. Neck의 피처 맵을 사용해서 말이죠.
  • RoIHead (BBoxHead/MaskHead): RoI 피처를 입력받아 객체 분류와 경계 박스 회귀(객체 좌표 예측)을 수행하는 부분입니다. 

1-stage 모델은 Backbone - Neck - DenseHead 모듈로 구성되며, 2-stage 모델은 여기에 RoIHead 모듈이 추가됩니다.

1-stage와 2-stage 모델의 MMDetection 프레임워크

MMDetection 훈련 파이프라인

MMDetection의 훈련 파이프라인은 다음과 같습니다. 파이프라인의 각 지점마다 Hook이 걸려있습니다. Hook은 해당 지점에서 특정한 이벤트를 수행하는 역할을 합니다. 콜백(callback) 기능이라고 보시면 됩니다. 다음 그림을 보시죠. 예를 들어, 에폭 전에 수행할 이벤트(before_train_epoch)는 DistSamplerHook이 있습니다. 모델 순전파 전에 수행할 이벤트(before_train_iter)는 LrUpdaterHook, IterTimerHook이 있고요. 각 Hook은 config에서 미리 설정할 수 있습니다.

훈련 파이프라인

config 설정

MMDetection을 사용할 땐 config를 잘 설정하는 일이 중요합니다. 거의 대부분이 config로 이루어져 있습니다. config를 바탕으로 데이터셋 설정부터 모델 설정, 학습/평가 설정까지 세팅할 수 있죠. 예컨대, 데이터셋은 Dataset Config로, 모델은 Model Config로, 훈련이나 검증, 테스트는 Train/Valid/Test Config로 설정합니다. config를 어떻게 설정하는지는 다음 글에서 실습을 하며 알아보겠습니다.

2 Comments
댓글쓰기 폼