Object Detection Library

MMdetection

MMDetection Github

MMDetection의 주요 config 구성

  • model: 모델 구조 정의
  • data: 데이터 관련 설정
  • optimizer: 최적화 방법 설정
  • scheduler: learning rate 스케줄링
  • runtime: 학습 환경 설정

MMdetection pipeline

  • Backbone: 입력 이미지를 특징 맵으로 변형한다
    → Backbone은 입력 이미지로부터 hierarchical한 feature map을 추출하는 역할을 수행함.
  • Neck
    • Backbone에서 추출된 feature map들을 재구성하고 보강함
    • FPN(Feature Pyramid Network)과 같은 구조가 대표적임
    • Anchor 생성은 DenseHead(RPN)의 역할임
  • DenseHead: 특징 맵의 dense location을 수행하는 부분이다
    → 올바른 설명임. Dense prediction을 수행하며, RPN(Region Proposal Network)이 여기에 해당함.
  • RoIHead: RoI 특징을 입력으로 받아 box 분류, 좌표 회귀 등을 예측하는 부분이다
    → RoI pooling/align을 통해 얻은 특징을 바탕으로 최종 객체 분류와 box 위치를 예측함.
  • Backbone: 예시로는 ResNet, VGG 등이 있다
    → 대표적인 CNN 백본 네트워크들

간단한 코드 분석

register_all_modules()

from mmdet.utils import register_all_modules

register_all_modules()

# 이후 MMDetection의 다른 기능들을 사용...

register_all_modules() 함수는 MMDetection 프레임워크에서 중요한 역할을 하는 함수임…

  1. 모듈 등록: MMDetection에서 사용되는 다양한 모듈들(예: 백본 네트워크, 디텍션 헤드, 로스 함수 등)을 자동으로 등록함
  2. 동적 임포트: 필요한 모듈들을 동적으로 임포트하여 시스템에 로드함
  3. 설정 용이성: 사용자가 직접 모든 모듈을 수동으로 임포트하지 않아도 되게 해줌
  4. 확장성: 새로운 모듈을 추가했을 때 자동으로 인식되도록 함

이 함수를 호출함으로써, MMDetection의 모든 컴포넌트들이 시스템에 등록되어 설정 파일에서 쉽게 사용할 수 있게 됨.

일반적으로 MMDetection을 사용하는 스크립트의 시작 부분에서 이 함수를 호출하여 필요한 모든 모듈을 초기화함


setup_cache_size_limit_of_dynamo()

from mmdet.utils import setup_cache_size_limit_of_dynamo

setup_cache_size_limit_of_dynamo()
  • PyTorch의 DynamoCache 크기를 제한하는 데 사용된다
  • 메모리 사용을 최적화하기 위해 DynamoCache의 크기를 제한함
  • 메모리 최적화가 필요한 경우에 사용된다
  • PyTorch의 Dynamo 컴파일러 캐시에 특화된 기능

Runner.from_cfg(cfg) vs RUNNERS.build(cfg)

결과적으로는 두 방법 모두 동일한 Runner 인스턴스를 생선함

→ cfg(설정)이 같다면 생성된 내용도 같을 것!

  1. 메서드 출처

    • Runner.from_cfg(cfg): Runner 클래스의 클래스 메서드
    • RUNNERS.build(cfg): RUNNERS 레지스트리의 build 메서드
  2. 유연성

    • Runner.from_cfg(cfg): 특정 Runner 클래스에 종속적
    • RUNNERS.build(cfg): 더 유연하며, 설정에 따라 다양한 Runner 유형을 생성할 수 있음
  3. 사용 방식

    • Runner.from_cfg(cfg): 직접 Runner 클래스를 통해 인스턴스를 생성
    • RUNNERS.build(cfg): 레지스트리를 통해 간접적으로 Runner 인스턴스를 생성
  4. 확장성

    • Runner.from_cfg(cfg): Runner 클래스 확장 시 새로운 메서드 구현이 필요할 수 있음
    • RUNNERS.build(cfg): 새로운 Runner 유형을 쉽게 추가하고 레지스트리에 등록할 수 있음
  5. 설정 의존성

    • Runner.from_cfg(cfg): 설정에 특정 Runner 클래스가 명시되어 있어야 함
    • RUNNERS.build(cfg): 설정에 Runner 유형이 지정되어 있으면, 그에 따라 적절한 Runner를 생성
  6. 일반적인 사용

     # Runner.from_cfg(cfg) 사용
     from mmdet.engine import Runner
     runner = Runner.from_cfg(cfg)
    
     # RUNNERS.build(cfg) 사용
     from mmdet.registry import RUNNERS
     runner = RUNNERS.build(cfg)

→ RUNNERS.build(cfg)는 최근 MMDetection 버전에서 더 선호되는 방식이라고 함. 이 방법은 모듈화와 확장성을 개선하며, 다양한 Runner 구현을 더 쉽게 지원할 수 있게 해준다





Detectron2

Detectron2 Github

Detectron2의 주요 config 구조

  • MODEL: 모델 구조 관련 설정
  • SOLVER: 학습 관련 설정
  • DATASETS: 데이터 관련 설정
  • INPUT: 입력 처리 관련 설정

solver : 모델 관련 config가 아닌 학습 관련 config

  • 학습률, optimizer 등 학습 관련 설정을 포함
  • MODEL이 아닌 SOLVER 카테고리에 속함
  • 모델의 구조나 파라미터와는 직접적인 관련이 없음
  • IMS_PER_BATCH : 배치당 이미지 수
  • BASE_LR : Learning Rate
  • MAX_ITER : 최대 학습 iteration 수



'Study - AI > Object Detection' 카테고리의 다른 글

Object Detection Wrap-Up  (0) 2025.04.05
Advanced Object Detection  (0) 2025.04.02
EfficientNet & EfficientDet  (0) 2025.02.04
Neck  (0) 2025.01.27
Object Detection Overview  (0) 2025.01.17