[네이버 부스트 캠프] AI-Tech - Lv2 week4(3)
학습기록 - 41
오늘 할 일
- Object Detection Library
- MMDetection
- Detectron2
1. 강의 복습 내용
-
MMDetection Pytorch 기반의 Object Detection 오픈소스 라이브러리
-
MMDetection의 기본적인 구조
-
Pipeline
위의 구조를 다음과 같은 모듈로 나타낼 수 있다. 모듈 단위로 커스터 마이징이 가능 config 파일에 의해 통제
모듈 설명
Backbone - 입력 이미지를 특징 맵으로 변형 Neck - backbone 과 head를 연결, feature map을 재구성 DenseHead 특징 맵의 dense location 을 수행하는 부분임 RoIHead RoI 특징을 입력으로 받아 box 분류, 좌표 회귀 등을 예측하는 부분임
정의되어 있는 config 파일을 가져와서 dataset의 구조를 바꿔보고 build한다.
-
Config file 구조
- configs를 통해 데이터셋부터 모델, scheduler, optimizer 등 정의 가능
- 다양한 object detection 모델들의 config 파일 정의
- 그 중, configs/base/ 폴더에 가장 기본이 되는 config 파일이 존재
- dataset, model, schedule, default_runtime 4 가지 기본 구성요소 존재
- 각각의 base/폴더에는 여러 버전의 config들이 담겨있다.
- Dataset COCO, VOC, Cityscape 등
- Model faster_rcnn , retinanet , rpn 등 MMdetection 링크
-
config file 이용은 다음과 같다. 이용할 모델의 config를 선언
-
선언
cfg = Config.fromfile('./configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py') root='../dataset/'
-
faster_rcnn_r50_fpn_1x_coco.py 아래와 같이 모든 config는
_base_
폴더에 가장 기본이 되는 config 파일이 존재한다._base_ = [ '../_base_/models/faster_rcnn_r50_fpn.py', '../_base_/datasets/coco_detection.py', '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'\ ]
-
/datasets/coco_detection.py train, val, test 파이프 라인이 따로 존재한다.
- /models/faster_rcnn_r50_fpn.py
2stage model로 이루어진다.
-
type, backbone, neck, rpn_head, roi_head, bbox_head, train_cfg, test_cfg3
-
사용가능한 모델에 대해서는
mmdetection/mmdet/models/backbones/__init__.py
에서 정의한다. + 모델 custom 또한 가능
-
../_base_/schedules/schedule_1x.py
,../_base_/default_runtime.py
optim, scheduler에 대해서 정의한다.- optimizer, training schedules
-
-
-
Detectron2
Facebook AI Research 의 Pytorch 기반 라이브러리
Object Detection 외에도 Segmentation, Pose prediction 등 알고리즘도 제공
mmdetection과 구조가 유사하다. 차이점은 Dataset을 등록하고 Augmentation 하는 부분이 빠져있고,- Pipeline
- Setup Config
- Setup Trainer
- Setup Training
- Config File
- MMDetection과 유사하게 config 파일을 수정하고 파이프 라인을 build하고 학습한다.
-
config를 상속받은 후, 필요한 부분만 상속받아서 사용한다.
-
불러오기
cfg = get_cfg() cfg.merge_from_file(model_zoo.get_config_file('COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml'))
- Config Default - detectron2/config/defaults.py
- Defaults Config에 대한 정의가 되어있다.
- Dataset
- Config (defaults.py)
-
defaults.py - # Dataset
데이터셋, 데이터로더와 관련된 config 존재 -
Dataset 등록
class, 파일명 등록 가능, Dataset 명시try: register_coco_instances('coco_trash_train', {}, '../dataset/train.json', '../dataset/') except AssertionError: pass try: register_coco_instances('coco_trash_test', {}, '../dataset/test.json', '../dataset/') except AssertionError: pass MetadataCatalog.get('coco_trash_train').thing_classes = ["General trash", "Paper", "Paper pack", "Metal", "Glass", "Plastic", "Styrofoam", "Plastic bag", "Battery", "Clothing"]
-
Data Augmentation
MyMapper를 통해서 Data Augmentation을 진행, Train시 호출import detectron2.data.transforms as T def MyMapper(dataset_dict): dataset_dict = copy.deepcopy(dataset_dict) image = utils.read_image(dataset_dict['file_name'], format='BGR') ...
class MyTrainer(DefaultTrainer): def build_train_loader(cls, cfg, sampler=None): return build_detection_train_loader( cfg, mapper = MyMapper, sampler = sampler ) ...
-
- Config (defaults.py)
- Model
- Config (defaults.py)
- BACKBONE, FPN, ANCHOR_GENERATOR, RPN, ROI_HEADS, ROI_BOX_HEAD
-
Custom Backbone 모델 등록 가능
- Config (defaults.py)
- Solver
- Config (defaults.py)
- LR_SCHEDULER, WEIGHT_DECAY, CLIP_GRADIENTS
- Config (defaults.py)
- Pipeline