장점:
뛰어난 구현 성능
효율적인 모듈
config를 기반으로 구성
백본이란?
백본은 이미지나 비디오 프레임에서 저수준에서 고수준까지의 특징을 추출하는 신경망 구조. 백본은 주로 합성곱 신경망 (CNN) 기반으로 설계되며, 객체 탐지 모델의 초기 단계에서 사용됨.
예를 들어, 이미지에서:
- 색상, 모서리, 질감과 같은 저수준 특징을 먼저 추출하고,
- 이후 사물의 형태, 윤곽, 패턴과 같은 고수준 특징을 학습합니다.
대표적인 백본 모델
1. ResNet (Residual Network)
구조: ResNet-18, ResNet-50, ResNet-101 등 다양한 깊이의 모델
특징: **잔차 연결 (Skip Connection)**을 통해 깊은 네트워크에서도 Gradient Vanishing 문제를 완화합니다.
2. MobileNet
경량 모델로, 모바일 기기나 Edge Device에서 사용하기 적합합니다.
Depthwise Separable Convolution을 사용해 계산량을 줄입니다.
3. VGG (Visual Geometry Group)
간단한 구조의 CNN 백본으로, 고정된 3x3 컨볼루션 필터와 Max Pooling을 사용합니다.
백본이 탐지 모델에서 사용되는 방법
객체 탐지 모델은 일반적으로 다음과 같은 구조로 구성됩니다:
Backbone:
이미지에서 특징을 추출합니다. (예: ResNet, MobileNet)
Neck:
다양한 스케일의 특징을 결합하여 멀티스케일 정보를 제공합니다. (예: FPN, PANet)
Head:
최종적으로 Bounding Box와 클래스 레이블을 예측합니다. (예: Faster R-CNN Head, YOLO Head)
Mmdetection에서 백본 설정 방법
model = dict(
backbone=dict(
type='ResNet', # 사용할 백본 (예: ResNet, MobileNet)
depth=50, # ResNet의 깊이 (예: 50, 101)
num_stages=4,
out_indices=(0, 1, 2, 3),
frozen_stages=1,
norm_cfg=dict(type='BN', requires_grad=True),
norm_eval=True,
style='pytorch'))
mmdetection의 prebuilt모델(객체 탐지 모델)
Fast RCNN
1. Fast R-CNN의 주요 특징
1. Faster Inference (빠른 추론 속도)
R-CNN은 각 후보 영역(Region Proposal)을 개별적으로 처리했지만, Fast R-CNN은 **단일 합성곱 연산 (Single Forward Pass)**을 통해 전체 이미지를 한 번에 처리합니다.
2. 통합 학습 (Unified Training)
Fast R-CNN은 단일 네트워크에서 Bounding Box Regression과 Object Classification을 동시에 학습합니다. R-CNN과 달리 여러 단계의 학습이 필요하지 않습니다.
3. ROI Pooling (Region of Interest Pooling)
ROI Pooling을 사용해 다양한 크기의 후보 영역을 고정된 크기의 피처맵으로 변환합니다. 이를 통해 신경망에 입력할 때 크기 문제를 해결합니다.
Fast R-CNN의 동작 과정
1. Feature Extraction
전체 이미지를 **CNN (예: VGG16, ResNet)**을 통해 한 번에 처리하고 Feature Map을 생성합니다.
2.Region Proposals
Selective Search와 같은 방법을 통해 **후보 영역(Region Proposal)**을 생성합니다.
3. ROI Pooling
생성된 후보 영역을 Feature Map에 매핑하고, ROI Pooling을 사용해 고정된 크기 (예: 7x7)로 변환합니다.
4. Fully Connected Layers
ROI Pooling을 거친 Feature를 Fully Connected Layer에 전달합니다.
5. Classification & Bounding Box Regression
Softmax를 통해 각 영역을 클래스 분류하고, Bounding Box Regression을 통해 경계 상자를 조정합니다.
실제 적용 예제
# configs/fast_rcnn/fast_rcnn_r50_fpn_1x_coco.py
model = dict(
type='FastRCNN',
backbone=dict(
type='ResNet',
depth=50,
num_stages=4,
out_indices=(0, 1, 2, 3),
frozen_stages=1,
norm_cfg=dict(type='BN', requires_grad=True),
norm_eval=True,
style='pytorch'),
roi_head=dict(
type='StandardRoIHead',
bbox_roi_extractor=dict(
type='SingleRoIExtractor',
roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),
out_channels=256,
featmap_strides=[4, 8, 16, 32]),
bbox_head=dict(
type='Shared2FCBBoxHead',
in_channels=256,
fc_out_channels=1024,
roi_feat_size=7,
num_classes=80)))
Selective Search로 인해 속도 제한이 있으며, 이를 해결한 버전이 Faster R-CNN입니다
MMDetection모델 아키텍쳐
MMDetection의 모델은 주로 다음 3가지 주요 구성 요소로 나눌 수 있습니다:
1. Backbone (백본)
기능: 입력 이미지에서 특징을 추출합니다.
구조: 일반적으로 CNN (합성곱 신경망) 기반 네트워크를 사용합니다.
예시 모델:
ResNet (ResNet-50, ResNet-101)
MobileNet
EfficientNet
Swin Transformer
2. Neck (넥)
기능: Backbone에서 추출한 특징 맵을 다양한 해상도로 결합하여 멀티스케일 특징을 제공합니다.
주요 역할: **Feature Pyramid Network (FPN)**와 같은 구조를 통해 객체를 다양한 크기에서 탐지할 수 있게 합니다.
예시 구조:
FPN (Feature Pyramid Network)
PANet (Path Aggregation Network)
NAS-FPN.
3. Head (헤드)
기능: 최종적으로 객체를 탐지하고 분류하며, 경계 상자(Bounding Box) 또는 분할 마스크를 예측합니다.
종류:
RPNHead: 후보 영역(Region Proposal) 생성
BBoxHead: 경계 상자와 클래스 예측 (예: Faster R-CNN)
MaskHead: 인스턴스 분할 마스크 예측 (예: Mask R-CNN)
DenseHead: 전체 피처 맵에서 직접 예측 (예: YOLO, RetinaNet)
4. Region Proposal Network (RPN)
기능: 후보 영역(Region Proposal)을 생성합니다.
Fast R-CNN과 같은 2단계 탐지 모델에서 사용됩니다.
구조: 앵커 기반 방식으로, 이미지에서 객체가 있을 만한 후보 상자를 예측합니다.
faster r-cnn 모델 설정 파일
model = dict(
type='FasterRCNN',
backbone=dict(
type='ResNet',
depth=50,
num_stages=4,
out_indices=(0, 1, 2, 3),
frozen_stages=1,
norm_cfg=dict(type='BN', requires_grad=True),
norm_eval=True,
style='pytorch'),
neck=dict(
type='FPN',
in_channels=[256, 512, 1024, 2048],
out_channels=256,
num_outs=5),
rpn_head=dict(
type='RPNHead',
in_channels=256,
feat_channels=256,
anchor_generator=dict(
type='AnchorGenerator',
scales=[8],
ratios=[0.5, 1.0, 2.0],
strides=[4, 8, 16, 32, 64])),
roi_head=dict(
type='StandardRoIHead',
bbox_roi_extractor=dict(
type='SingleRoIExtractor',
roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),
out_channels=256,
featmap_strides=[4, 8, 16, 32]),
bbox_head=dict(
type='Shared2FCBBoxHead',
in_channels=256,
fc_out_channels=1024,
roi_feat_size=7,
num_classes=80)))
'딥러닝' 카테고리의 다른 글
다운로드 할 파일 총 용량 알아보는 법 (0) | 2024.12.11 |
---|---|
인강) 코렙 시작하기 (4) | 2024.12.11 |
kinetics 600 데이터셋 비디오 특정클래스만 다운받기 (0) | 2024.12.11 |
딥러닝의 평균 전처리 시간, 평균 추론 속도, 평균 후처리 시간이란? (0) | 2024.12.11 |
TSM(Temporal Shift Module) train (0) | 2024.12.10 |