1. Object Detection을 위한 라이브러리
- 통합된 라이브러리의 부재
- 실무 / 캐글에서는 아래 두 라이브러리를 주로 활용
- MMDetection
- Detectron2
2. MMDetection
- Pytorch 기반의 Object Detection 오픈소스 라이브러리
- Pipeline
- 2 Stage 모델은 크게 Backbone / Neck / DenseHead/ RoIHead 모듈로 나눌 수 있음
- 각각의 모듈 단위로 커스터마이징
- 위 시스템은 config 파일을 이용해 통제
- Backbone - 입력 이미지를 특징 맵으로 변형
- Neck - backbone과 head를 연결, Feature map을 재구성 (FPN)
- DenseHead - 특징 맵의 dense location을 수행하는 부분
- RoIHead - RoI 특징을 입력으로 받아 box 분류, 좌표 회귀 등을 예측하는 부분
- Code
- 라이브러리 및 모듈 import
- config 파일 불러오기
- config 파일 수정하기
- 모델, 데이터셋 build
- 학습
- 라이브러리 및 모듈 import
- Config File 구조
- configs를 통해 데이터셋부터 모델, scheduler, optimizer 정의 가능
- 특히, configs에는 다양한 object detection 모델들의 config 파일들이 정의돼 있음
- 그 중, configs/base/ 폴더에 가장 기본이 되는 config 파일이 존재
- dataset, model, schedule, default_runtime 4가지 기본 구성요소 존재
- dataset, model, schedule, default_runtime 4가지 기본 구성요소 존재
- 각각의 base/ 폴더에는 여러 버전의 config들이 담겨있음
- Dataset – COCO, VOC, Cityscape 등
- Model – faster_rcnn, retinanet, rpn 등
- 틀에 갖춰진 config를 상속 받고, 필요한 부분만 수정해 사용함
- Dataset
- samples_per_gpu
- workers_per_gpu
- train
- val
- test
- pipeline=train_pipeline 부분 아키텍쳐
- Model
- type
- 모델 유형
- Ex. FasterRCNN, RetinaNet
- backbone
- 인풋 이미지를 feature map으로 변형해주는 네트워크
- Ex. ResNet, ResNext, HRNet
- Neck
- Backbone과 head를 연결
- Feature map을 재구성
- Ex. FPN, NAS_FPN, PAFPN
- rpn_head
- Region Proposal Network
- RPNHead, Anchor_Free_Head
- Anchor_generator
- Bbox_coder
- Loss_cls
- Loss_bbox
- roi_head
- Region of Interest
- StandardRoIHead, CascadeRoIHead
- bbox_roi_extractor, bbox_head
- bbox_head
- train_cfg
- test_cfg
- type
- 커스텀 backbone 모델 등록
- 새로운 backbone 등록 - @BACKBONES 오버라이딩하여 등록
- 모듈 import
- 등록한 backbone 사용
- 새로운 backbone 등록 - @BACKBONES 오버라이딩하여 등록
- Runtime settings
- Optimizer
- Ex. SGD, Adam, ...
- Ex. SGD, Adam, ...
- Training schedules
- learning rate
- runner
- Optimizer
3. Detectron2
3.1 Detectron
- Facebook AI Research의 Pytorch 기반 라이브러리
- Object Detection 외에도 Segmentation, Pose prediction 등 알고리즘도 제공
- Pipeline : Setup Config / Setup Trainer / Start Training
- Setup config
- Setup Trainer : build_moder / build_detection / build_optimizer / build_lr_scheduler
- Start Training
- Setup config
- 파이프라인 미리보기
- 라이브러리 및 모듈 import하기
- 데이터셋 등록하기
- config 파일 불러오기
- config 수정하기
- Augmentation mapper 정의
- Detectron은 파이프라인이 따로 존재X
- 자유도를 보장하는대신 구현하기 까다로울 수 있음
- Trainer 정의
- 학습
- 라이브러리 및 모듈 import하기
- Config File 구조
- MMDetection과 유사하게 config 파일을 수정, 이를 바탕으로 파이프라인을 build하고 학습함
- 틀이 갖춰진 기본 config를 상속 받고, 필요한 부분만 수정해 사용함
- 디폴트 컨피그를 불러온 후, 기본적인 내용이 채워진 yaml 형식의 config 파일로 채움
- Dataset config
- 데이터셋, 데이터로더와 관련된 config
- TRAIN, TEST에 각각 등록한 train 데이터셋과 test 데이터셋의 이름을 입력함
- Dataset 등록
- 커스텀 데이터셋을 사용하고자 할 때는 데이터셋을 등록해야함
- 전체 데이터셋이 공유하는 정보(ex. class명, 파일 디렉토리 등)을 메타 데이터로 등록할 수 있음
- config 파일에 train 데이터셋과 test(val) 데이터셋을 명시해 사용할 수 있도록 함
- Data Augmentation : augmentation 정보가 담긴 mapper 정의
- Dataloader에 mapper를 input으로 넣어줌
- Dataloader에 mapper를 input으로 넣어줌
- Model config
- BACKBONE
- 인풋 이미지를 특징맵으로 변형해주는 네트워크 Ex. ResNet, RegNet,...
- FPN
- Backbone과 head를 연결, Feature map을 재구성
- ANCHOR_GENERATOR
- RPN
- ROI_HEADS
- ROI_BOX_HEAD
- 커스텀 backbone 모델 등록
- 새로운 backbone 등록
- 등록한 backbone 사용
- 새로운 backbone 등록
- BACKBONE
- Solver config
- LR_SCHEDULER
- WEIGHT_DECAY
- CLIP_GRADIENTS
- LR_SCHEDULER
'부스트캠프 AI Tech > [Week9] Object Detection (1)' 카테고리의 다른 글
[Week9] Object Detection - EfficientDet [Day3] (0) | 2021.09.29 |
---|---|
[Week9] Object Detection - 1 stage detector [Day3] (0) | 2021.09.29 |
[Special Mission3] Detectron2 튜토리얼 (0) | 2021.09.29 |
[Week9] Object Detection - Neck [Day2] (0) | 2021.09.28 |