no image
Object Detection Wrap-Up
Object Detection 개인적으로 헷갈리기 쉬운 내용들🔑 Detector 구조의 구성 요소, loss, evaluation metric, Precision & Recall, Corner Pooling, DarkNet Output, AP 계산하기Detector 구조의 구성 요소CornerNetAnchor-free 방식의 one-stage detectorRPN을 사용하지 않음[Input → Backbone → Dense prediction] 구조Fast R-CNNRPN이 없음 (selective search 사용)Neck 구조가 없음[Input → Backbone → Sparse prediction] 구조YOLOOne-stage detector로 RPN 없음[Input → Backbone → Den..
2025.04.05
no image
Advanced Object Detection
🔑 Cascade RCNN, ViT, YOLO, M2Det, CornerNetCascade RCNNCascade RCNN은 학습할 bounding box의 IOU threshold를 0.5에서 더 높여보면 어떨까라는 아이디어에서 출발했음. Cascade RCNN은 Iterative BBox at Inference와 Intergral Loss를 결합하여 기존의 Faster RCNN보다 더 좋은 성능을 나타낸다Cascade RCNN은 Iterative BBox at Inference와 Intergral Loss를 사용해서 Bbox pooling을 반복 수행할 시 성능 향상되는 것, IOU threshold가 다른 Classifier가 반복될 때 성능 향상 되는 것을, IOU threshold가 다른 Ro..
2025.04.02
no image
EfficientNet & EfficientDet
EfficientNet다음은 EfficientNet에서 parameter를 통해 스케일을 설정하는 방법이다. EfficientNet은 b0부터 b7까지 다양한 모델 구조가 존재하는데, 이 구조의 종류를 결정하는 parameter → phi(φ)alpha(α)→ α는 depth scaling을 조절하는 상수이며, 그리드 서치를 통해 미리 정해진 값임beta(β)→ β는 width scaling을 조절하는 상수이며, 그리드 서치를 통해 미리 정해진 값임gamma(γ)→ γ는 resolution scaling을 조절하는 상수이며, 그리드 서치를 통해 미리 정해진 값임phi(φ)→ φ는 compound coefficientb0~b7 모델의 크기를 결정하는 핵심 파라미터φ 값이 커질수록 모델의 크기가 커짐dep..
2025.02.04
no image
Neck
NeckNeck의 등장 배경Backbone에서 나온 여러 feature map을 함께 활용하여 다양한 scale의 객체를 더 잘 탐지하기 위해Neck(예: FPN)의 주요 목적다양한 level의 feature map 활용서로 다른 scale의 정보를 결합상향식, 하향식 정보 전달을 통한 feature 보강결과적으로 다양한 크기의 객체 검출 성능 향상FPN 구현FPN (Feature Pyramid Network)에서 (1) 다양한 feature map들의 채널을 동일하게 맞춰주는 단계, (2) channel을 맞춰준 feature map들을 top-down형식으로 적절히 섞어주는 단계, (3) 최종 3x3 convolution을 통과하여 RPN으로 입력될 feature를 만들어주는 단계에 해당하는 코드im..
2025.01.27
no image
Object Detection Library : MMDetection, Detectron
🔑 Object Detection Library, MMDetection, DetectronObject Detection LibraryMMdetectionMMDetection GithubMMDetection의 주요 config 구성model: 모델 구조 정의data: 데이터 관련 설정optimizer: 최적화 방법 설정scheduler: learning rate 스케줄링runtime: 학습 환경 설정MMdetection pipelineBackbone: 입력 이미지를 특징 맵으로 변형한다→ Backbone은 입력 이미지로부터 hierarchical한 feature map을 추출하는 역할을 수행함.NeckBackbone에서 추출된 feature map들을 재구성하고 보강함FPN(Feature Pyramid ..
2025.01.24
no image
Object Detection Overview
🔑 Object Detection, Detector, One-Stage Detector, Two-Stage Detector, Precision & RecallObject Detecion객체의 위치를 찾는 localization과 객체의 종류를 분류하는 classification을 모두 수행하는 task객체의 위치를 탐지하고 객체의 종류를 분류하는 2가지 과정을 나누지 않고 한번에 수행하면 detection 속도가 훨씬 빠르다.YOLO와 같은 one-stage detector가 이런 방식을 사용하며 더 빠른 속도를 실현함Object detection은 자율 주행, OCR, CCTV 보안에 사용될 수 있는 기술객체의 위치를 완전히 결정하기 위해서 필요한 정보class 종류bounding box의 중심점 좌..
2025.01.17

Object Detection 개인적으로 헷갈리기 쉬운 내용들



Detector 구조의 구성 요소

  • CornerNet
    • Anchor-free 방식의 one-stage detector
    • RPN을 사용하지 않음
    • [Input → Backbone → Dense prediction] 구조
  • Fast R-CNN
    • RPN이 없음 (selective search 사용)
    • Neck 구조가 없음
    • [Input → Backbone → Sparse prediction] 구조
  • YOLO
    • One-stage detector로 RPN 없음
    • [Input → Backbone → Dense prediction] 구조
    • Sparse prediction 대신 Dense prediction 사용
  • Faster R-CNN + FPN
    • Input: 입력 이미지
    • Backbone: 특징 추출 (ResNet 등)
    • Neck: FPN (Feature Pyramid Network)
    • RPN: Region Proposal Network
    • Sparse prediction: RoI Head에서의 예측
    • 문제에서 제시한 5가지 구성요소를 모두 포함
  • RetinaNet
    • One-stage detector로 RPN 없음
    • [Input → Backbone → Neck → Dense prediction] 구조
    • Focal loss를 사용하는 것이 특징





YOLO v1 loss

  1. 첫 번째 부분
    • (x,y) 좌표와 (w,h) 크기에 대한 loss
    • 박스의 위치와 크기를 예측하는 localization loss
  2. 두 번째 부분
    • 객체가 있을 확률(C)에 대한 loss
    • confidence score를 예측하는 confidence loss
  3. 세 번째 부분
    • 클래스 확률(p)에 대한 loss
    • 객체의 클래스를 분류하는 classification loss

localization / confidence / classification

  • 수식의 순서와 정확히 일치
  • 각 loss의 역할을 정확히 반영





Object detection evaluation metric

  • FLOPS (Floating Point Operations Per Second)
    → Object detection에서 사용되는 metric
    • 모델의 연산량을 측정
    • 모델의 효율성 평가
    • 실제 구현 시 중요한 고려사항

  • FPS (Frames Per Second)
    → Object detection에서 사용되는 metric
    • 실시간 처리 속도 측정
    • 초당 처리할 수 있는 프레임 수
    • 실시간 응용에서 중요한 지표

  • FID (Fréchet Inception Distance)
    → Object detection metric이 아님
    • GAN 모델의 성능 평가에 사용되는 지표
    • 생성된 이미지의 품질 평가
    • Object detection과는 관련이 없음

  • mIoU (mean Intersection over Union)
    → Object detection에서 사용되는 metric
    • 예측 박스와 실제 박스의 겹침 정도 측정
    • 위치 예측의 정확도 평가
    • Segmentation에서도 사용됨

  • mAP (mean Average Precision)
    → Object detection에서 사용되는 metric임
    • 검출 정확도를 종합적으로 평가
    • PR 커브의 면적 계산
    • 가장 널리 사용되는 평가 지표





Precision & Recall

  • 먼저 각 요소를 파악
    • Ground truth (실제 고양이): 4마리
    • Positive prediction (빨간 박스): 4개
    • True Positive (TP): (실제 고양이를 맞게 예측)
    • False Positive (FP): (고양이가 아닌 것을 고양이로 예측)
    • False Negative (FN): (놓친 고양이)
  • 총 8개를 검출하고 그 중 3개가 옳은 검출이므로, precision = 3/8 = 0.375
  • 총 4개의 GT가 있고 그 중 3개를 검출했으므로, recall = 3/4 = 0.75





Corner Pooling

CornerNet에서는 corner를 결정하기 위해 corner pooling이라는 방법을 사용한다. 그림과 같은 두 개의 feature maps의 일부가 주어지고 각각에 대해 수직, 수평방향으로 pooling을 할 때, corner pooling의 output map에서 (a), (b), (c), (d) 에 들어갈 숫자의 순서로 옳은 것

Corner pooling은 각 feature map에 대해 horizontal pooling, vertical pooling을 수행한 후 element-wise summation을 수행한다.





DarkNet Output

YOLO v1에서는 입력 이미지를 SxS의 grid cell로 분할하며, 각 cell마다 B개의 bounding box와 confidence score, 그리고 각 cell마다 C개의 class에 대한 conditional class probabilities를 예측한다. Input image의 shape은 288x288x3이며 S=12, B=3, C=100일 경우, YOLO v1 DarkNet의 최종 output으로 나오는 feature map의 shape (W, H, C)이다. 이 때 W+H+C의 값으로 옳은 것

주어진 조건

  • Input image: 288x288x3
  • Grid cell: SxS (S=12)
  • 각 cell당 B개의 bounding box와 confidence score (B=3)
  • 각 cell당 C개의 클래스에 대한 확률 (C=100)

Output shape 계산

  1. 각 Grid cell당 예측해야 하는 값

    • B개의 bounding box 좌표 (x,y,w,h): 4×B
    • B개의 confidence score: 1×B
    • C개의 클래스 확률: C
  2. 전체 계산

    • Cell당 필요한 값 = (4+1)×B + C
    • = 5×3 + 100
    • = 15 + 100
    • = 115
  3. 최종 output shape

    • W = H = S = 12 (grid size)
    • C = 115 (각 cell당 예측값)
    • 따라서 12×12×115 = 139

YOLO v1은 각 grid cell별로 B개의 bounding box(4개의 좌표)와 confidence score, 그리고 C개의 conditional class probabilities를 예측한다. 즉, 각 cell마다 B5+C 개의 예측값이 나오기 때문에 DarkNet의 최종 output shape은 (S, S, (B5+C))이다. 따라서 문제에서 주어진 것처럼 S=12, B=3, C=100일 경우 output shape은 (W, H, C) = (12, 12, (3*5+100)) = (12, 12, 115)이며, W+H+C = 12+12+115 = 139이다





Computing AP

PR Curve를 그리기 위한 표를 보고 실제 AP가 어떻게 계산되는지 직접 계산해 보자.

1x0.2 + 0.8x0.2 + 0.71x0.1 + 0.6x0.1 = 0.49



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

Advanced Object Detection  (0) 2025.04.02
EfficientNet & EfficientDet  (0) 2025.02.04
Neck  (0) 2025.01.27
Object Detection Library : MMDetection, Detectron  (0) 2025.01.24
Object Detection Overview  (0) 2025.01.17



Cascade RCNN

Cascade RCNN은 학습할 bounding box의 IOU threshold를 0.5에서 더 높여보면 어떨까라는 아이디어에서 출발했음. Cascade RCNN은 Iterative BBox at Inference와 Intergral Loss를 결합하여 기존의 Faster RCNN보다 더 좋은 성능을 나타낸다

  • Cascade RCNN은 Iterative BBox at Inference와 Intergral Loss를 사용해서 Bbox pooling을 반복 수행할 시 성능 향상되는 것, IOU threshold가 다른 Classifier가 반복될 때 성능 향상 되는 것을, IOU threshold가 다른 RoI head를 cascade로 쌓을 시 성능 향상되는 것을 증명했다.

Deformable convolution

  • Cascade R-CNN의 주요 특징
    • 기존 컨볼루션의 고정된 수용 영역을 개선
    • 객체의 형태에 따라 동적으로 수용 영역을 조절
    • Iterative BBox와 결합하여 성능 향상
    • 특히 변형이 있는 객체 검출에 효과적

Integral Loss

  • 주로 human pose estimation에서 사용되는 loss 함수임

Transformer

  • DETR 등에서 사용됨

Sliding window

  • Cascade R-CNN의 구성 요소가 아님
  • Region proposal 기반 방식을 사용함

Window Multi-Head Attention

  • Transformer 계열의 기술임
  • Swin Transformer 등에서 사용됨





ViT based detector

ViT를 사용하는 Detection network

  • Swin은 Shifted Window Multi-Head Attention를 통해 receptive field가 제한되는 단점을 해결했다
    • Window 기반 self-attention의 한계를 극복
    • Shifted window 방식으로 window 간 정보 교환 가능
  • Swin은 Shifted Window Multi-Head Attention와 Window Multi-Head Attention를 동시에 사용한다
    • 두 가지 attention 메커니즘을 번갈아가며 사용
    • 연산 효율성과 성능을 모두 확보
  • Swin은 position embedding은 사용하나 class embedding은 사용하지 않는다
    • Position embedding으로 위치 정보 인코딩
    • Class embedding은 사용하지 않는 특징
  • 기타 등등
    • DETR은 end-to-end 학습이 가능
    • NMS와 같은 후처리 과정이 필요없음
    • Set prediction으로 직접 고정된 수의 객체 예측

Transformer & ViT

  • Self attention mechanism의 attention 수식에는 softmax를 포함한다

    • Attention(Q,K,V) = softmax(QK^T/√d)V
    • Softmax로 attention score를 정규화
  • MLP head에는 class embedding vector를 입력하여 최종 결과를 추출한다

    • [CLS] 토큰의 출력을 MLP head에 입력
    • 최종 분류 결과 도출
  • ViT는 learnable embedding앞에 class embedding을 추가 해준다

    • [CLS] 토큰을 patch embedding 시퀀스의 맨 앞에 추가
    • 이 토큰이 전체 이미지의 특징을 종합
  • Transformer는 self attention 메커니즘을 활용 NLP에서 long range dependency를 해결한다

    • Self attention으로 모든 위치 간의 관계 고려
    • RNN의 장거리 의존성 문제 해결
  • ViT는 image를 flatten해 3d로 변형 후 learnable embedding 처리를 한다?
    → 틀린 설명

    • Image는 patch 단위로 분할 후 flatten하여 1D로 변형됨
    • 3D가 아닌 2D embedding으로 변환
    • 순서: Image → Patch분할 → Flatten(1D) → Linear Projection → Embedding





YOLO v4

  • Enhancement of receptive field
    → BOS
    • SPP, ASPP, RFB 등의 기법
    • 연산량이 증가하며 receptive field 확장
    • Inference 시간에 영향을 미침
  • Activation function
    → BOS
    • Mish 등의 새로운 활성화 함수
    • 추가 연산이 필요함
    • Inference 속도에 영향을 미침
  • Data augmentation
    → BOF
    • Cutmix, Mosaic 등
    • 학습 시에만 사용되고 추론 시에는 사용되지 않음
    • Inference 비용 증가 없이 성능 향상
  • Feature Integration
    → BOS
    • FPN, PAN, BiFPN 등
    • 추가적인 네트워크 구조 필요
    • Inference 시간 증가
  • Post-processing method
    → BOS
    • DIoU-NMS 등
    • 추가 연산 필요
    • Inference 시간에 영향을 미침





M2Det

M2Det 모델의 FFM(Feature Fusion Module) 구조가 다음 그림과 같이 구성되어 있고 각각의 input shape이 (512, 32, 32), (256, 128, 128)일 때, output feature map의 shape인 (C, H, W)

입력값

  1. (512, 32, 32)
  2. (256, 128, 128)

과정

  1. 첫 번째 입력 (512, 32, 32)의 처리
    • Conv: 512→128채널, 3x3, padding=1
      • (512, 32, 32) → (128, 32, 32)
    • Upsample 4x4
      • (128, 32, 32) → (128, 128, 128)
  2. 두 번째 입력 (256, 128, 128)의 처리
    • Conv: 256→64채널, 3x3, padding=1
      • (256, 128, 128) → (64, 128, 128)
  3. Concat 연산
    • 첫 번째 경로: (128, 128, 128)
    • 두 번째 경로: (64, 128, 128)
    • Concat 결과: (192, 128, 128)

따라서 output feature map의 shape는 (192, 128, 128)이 됨





CornerNet

  • Anchor box의 주요 단점:
    • Box의 크기, 비율 등 많은 hyperparameter 필요
    • 이러한 설계 과정이 복잡하고 번거로움
    • 많은 수의 anchor box 생성 필요
    • 대부분이 negative sample로 class imbalance 문제 발생
    • 학습 효율성이 떨어짐



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

Object Detection Wrap-Up  (0) 2025.04.05
EfficientNet & EfficientDet  (0) 2025.02.04
Neck  (0) 2025.01.27
Object Detection Library : MMDetection, Detectron  (0) 2025.01.24
Object Detection Overview  (0) 2025.01.17

EfficientNet

다음은 EfficientNet에서 parameter를 통해 스케일을 설정하는 방법이다. EfficientNet은 b0부터 b7까지 다양한 모델 구조가 존재하는데, 이 구조의 종류를 결정하는 parameter → phi(φ)

  • alpha(α)
    → α는 depth scaling을 조절하는 상수이며, 그리드 서치를 통해 미리 정해진 값임
  • beta(β)
    → β는 width scaling을 조절하는 상수이며, 그리드 서치를 통해 미리 정해진 값임
  • gamma(γ)
    → γ는 resolution scaling을 조절하는 상수이며, 그리드 서치를 통해 미리 정해진 값임
  • phi(φ)
    → φ는 compound coefficient
    • b0~b7 모델의 크기를 결정하는 핵심 파라미터
    • φ 값이 커질수록 모델의 크기가 커짐
    • depth, width, resolution 모두를 동시에 조절
    • b0는 φ=0, b7은 φ=7을 의미

α, β, γ는 그리드 서치로 미리 정해지는 상수값으로,

  • 모델 구조를 결정하지 않음
  • 제약조건 α·β²·γ²≈2를 만족하도록 설정됨





EfficientDet

  • EfficientDet b0부터 b7까지 증가함에 따라 input image의 해상도는 증가한다
    • b0: 512x512
    • b7: 1536x1536
    • compound scaling에 따라 resolution도 증가
  • EfficientNet과 동일한 scaling 방식을 활용하기 위해, backbone으로 efficientNet b0~b6을 사용한다
    • EfficientNet을 backbone으로 사용
    • Compound scaling 방식 적용
  • Object detection은 실생활에 사용되기 위해 efficiency가 중요하기 때문에, 더 높은 정확도와 효율성을 가지는 구조를 만들고자 제안되었다
    • 실시간 처리가 필요한 응용
    • 정확도와 효율성의 균형 추구
  • 서로 다른 feature map을 단순합하지 않고, 각각의 input을 위한 학습 가능한 weight를 두는 BiFPN을 사용한다
    • Feature map 간의 가중치 학습
    • 더 효과적인 feature fusion
  • BiFPN에서 weight는 softmax를 통과하므로 항상 양수임
    • 이는 각 레이어의 상대적 중요도를 나타냄
    • 음수값이 될 수 없도록 설계됨





Scailing

딥러닝 모델의 성능을 효율적으로 올리기 위해 사용하는 scale up 방식으로는 대표적으로 (1) width scaling, (2) depth scaling, (3) resolution scaling 이 있다. EfficientNet에서는 이 세가지를 모두 사용하여 최적의 scaling 방법을 제안했는데, 해당 scaling 방식은 Compound Scailing

  1. Width Scaling (네트워크 너비 조절)
    • 각 레이어의 채널 수(필터 수)를 늘리는 방식
    • 더 많은 특징을 병렬적으로 학습할 수 있음
    • 예: 32채널 → 64채널로 증가
    • 장점: 더 풍부한 특징 추출 가능
    • 단점: 파라미터 수가 크게 증가
  2. Depth Scaling (네트워크 깊이 조절):
    • 레이어의 수를 늘리는 방식
    • 더 복잡한 특징을 순차적으로 학습할 수 있음
    • 예: ResNet-18 → ResNet-50처럼 레이어 수 증가
    • 장점: 더 복잡한 패턴 학습 가능
    • 단점: 그래디언트 소실 문제 발생 가능
  3. Resolution Scaling (입력 해상도 조절):
    • 입력 이미지의 해상도를 키우는 방식
    • 더 세밀한 특징을 포착할 수 있음
    • 예: 224×224 → 380×380으로 증가
    • 장점: 미세한 디테일 포착 가능
    • 단점: 메모리 사용량과 연산량 증가

Compound Scaling의 특징:

  • 위 세 가지 방식을 동시에 균형있게 조절
  • φ(compound coefficient)를 통해 통합적으로 제어
  • depth: d = α^φ
  • width: w = β^φ
  • resolution: r = γ^φ
  • α, β, γ는 작은 그리드 서치로 찾은 상수
  • 세 가지 scaling이 서로 상호작용하며 최적의 성능 도출



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

Object Detection Wrap-Up  (0) 2025.04.05
Advanced Object Detection  (0) 2025.04.02
Neck  (0) 2025.01.27
Object Detection Library : MMDetection, Detectron  (0) 2025.01.24
Object Detection Overview  (0) 2025.01.17

Neck

Ja2Hw
|2025. 1. 27. 23:00

Neck

Neck의 등장 배경

Backbone에서 나온 여러 feature map을 함께 활용하여 다양한 scale의 객체를 더 잘 탐지하기 위해

Neck(예: FPN)의 주요 목적

  • 다양한 level의 feature map 활용
  • 서로 다른 scale의 정보를 결합
  • 상향식, 하향식 정보 전달을 통한 feature 보강
  • 결과적으로 다양한 크기의 객체 검출 성능 향상

FPN 구현

FPN (Feature Pyramid Network)에서 (1) 다양한 feature map들의 채널을 동일하게 맞춰주는 단계, (2) channel을 맞춰준 feature map들을 top-down형식으로 적절히 섞어주는 단계, (3) 최종 3x3 convolution을 통과하여 RPN으로 입력될 feature를 만들어주는 단계에 해당하는 코드

import torch.nn.functional as F

laterals = [ lateral_conv(inputs[i]) for i, lateral_conv in enumerate(self.lateral_convs) ]

for i in range(3, 0, -1):
        prev_shape = laterals[i-1].shape[2:]
        laterals[i-1] += F.interpolate(laterals[i], size=prev_shape)  # Fill this line

outs = [ self.fpn_convs[i](laterals[i]) for i in range(4) ]
  • laterals[i]를 이전 레벨의 크기(prev_shape)로 interpolate
  • 크기가 맞춰진 feature map을 더해줌 (+=)
  • 이를 통해 상위 레벨의 의미론적 정보와 하위 레벨의 세부 정보가 결합됨

DetectoRS

Recursive Feature Pyramid (RFP) : neck의 정보를 다시 backbone에 입력하여 feature pyramid를 반복함으로써, backbone의 low level에서도 high level의 정보를 학습할 수 있도록 하는 모듈

DetectoRS의 주요 특징

  • Neck의 output을 다시 backbone에 feedback
  • Feature pyramid를 반복적(recursive)으로 생성
  • 저수준 특징에도 고수준 정보를 포함시킴
  • 이를 통해 더 풍부한 특징 표현이 가능



'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
Object Detection Library : MMDetection, Detectron  (0) 2025.01.24
Object Detection Overview  (0) 2025.01.17



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

🔑 Object Detection, Detector, One-Stage Detector, Two-Stage Detector, Precision & Recall


Object Detecion

  • 객체의 위치를 찾는 localization과 객체의 종류를 분류하는 classification을 모두 수행하는 task
  • 객체의 위치를 탐지하고 객체의 종류를 분류하는 2가지 과정을 나누지 않고 한번에 수행하면 detection 속도가 훨씬 빠르다.
    • YOLO와 같은 one-stage detector가 이런 방식을 사용하며 더 빠른 속도를 실현함
  • Object detection은 자율 주행, OCR, CCTV 보안에 사용될 수 있는 기술
  • 객체의 위치를 완전히 결정하기 위해서 필요한 정보
    • class 종류
    • bounding box의 중심점 좌표 (x, y)
    • height
    • width
  • Segmentation은 모든 pixel을 분류하여 객체를 탐지하는 반면, object detection은 bounding box를 통해 객체의 위치를 지정함





Object Detector

  • DETR
    → 2020년 Facebook AI에서 발표한 모델로, Transformer 구조를 object detection에 처음 적용한 모델. end-to-end로 학습이 가능하며, NMS(Non-Maximum Suppression)와 같은 후처리 과정이 필요없다는 장점이 있음
  • SSD (Single Shot Detector)
    → CNN 기반의 one-stage detector. 여러 scale의 feature map을 사용하여 다양한 크기의 객체를 검출할 수 있음
  • YOLO (You Only Look Once)
    → CNN 기반의 대표적인 one-stage detector. 이미지를 그리드로 나누어 한 번에 객체를 검출하는 방식을 사용.
  • R-CNN (Region-based CNN)
    → CNN 기반의 초기 two-stage detector. selective search를 통해 region proposal을 생성하고, 각 영역에 대해 CNN을 적용함
  • Faster R-CNN
    → CNN 기반의 two-stage detector로, R-CNN의 개선된 버전. Region Proposal Network (RPN)를 도입하여 proposal 생성 속도를 크게 향상시켰음

Detector 구조의 구성 요소

  • Fast R-CNN
    → RPN이 없음. selective search를 사용하여 region proposal을 생성함. [Input → Backbone → Sparse prediction] 구조를 가짐.
  • RetinaNet
    → One-stage detector로 RPN이 없음. [Input → Backbone → Neck(FPN) → Dense prediction] 구조를 가짐. Focal Loss를 도입하여 class imbalance 문제를 해결한 모델임.
  • CornerNet
    → One-stage detector로 RPN이 없음. [Input → Backbone → Dense prediction] 구조를 가짐. 객체의 왼쪽 상단과 오른쪽 하단 corner를 예측하는 방식을 사용함.
  • YOLO
    → One-stage detector로 RPN이 없음. [Input → Backbone → Dense prediction] 구조를 가짐. 단순한 구조로 빠른 속도를 보여줌.
  • Faster R-CNN + FPN
    → Two-stage detector로 문제에서 제시한 모든 구성요소를 포함함. [Input → Backbone → Neck(FPN) → RPN → Sparse prediction]의 구조를 가지며, FPN을 통해 다양한 scale의 feature를 효과적으로 활용할 수 있음.

Object detection evaluation metric

  • mIoU (mean Intersection over Union)
    → Object detection의 metric임. 예측한 bounding box와 실제 ground truth box 간의 겹치는 영역을 평가하는 지표임. segmentation에서도 사용됨.
  • FID (Fréchet Inception Distance)
    → GAN과 같은 생성 모델의 성능을 평가하는 metric임. 생성된 이미지와 실제 이미지의 특징 분포 간의 차이를 측정함. Object detection과는 관련이 없음.
  • FPS (Frames Per Second)
    → Object detection의 metric임. 모델의 실시간 처리 능력을 나타내는 속도 지표임. 특히 실시간 객체 탐지가 필요한 응용에서 중요함.
  • mAP (mean Average Precision)
    → Object detection의 가장 대표적인 metric임. 각 클래스별 AP(Average Precision)의 평균값을 계산한 것으로, 검출 정확도를 평가함.
  • FLOPS (Floating Point Operations Per Second)
    → Object detection의 metric임. 모델의 연산량을 나타내는 지표로, 모델의 효율성을 평가할 때 사용함.

One/Two-stage detectors

  • SSD (Single Shot Detector)
    → One-stage detector임. 단일 네트워크에서 바로 객체 검출을 수행하며, region proposal 과정이 없음.
  • FasterRCNN
    → Two-stage detector임. 1단계에서 RPN으로 region proposal을 생성하고, 2단계에서 classification과 box regression을 수행함.
  • R-CNN
    → Two-stage detector임. 1단계에서 selective search로 region proposal을 생성하고, 2단계에서 CNN을 통해 특징을 추출하여 분류를 수행함.
  • RetinaNet
    → One-stage detector임. FPN 구조와 Focal Loss를 사용하여 class imbalance 문제를 해결한 모델임.
  • YOLO
    → One-stage detector임. 이미지를 그리드로 나누어 한 번에 객체를 검출하는 방식을 사용하며, 빠른 속도가 특징임.





Precision & Recall

TP: 10

TN: 15

FP: 15

FN: 15

precision : TP/(TP+FP) = 10 / (10+15)

precision은 모델이 찾은 모든 detections 중에 정답의 비율을 의미

recall : TP/(TP+FN) = 10 / (10+15)

recall은 모든 정답들 중에 모델이 맞춘 정답의 비율을 의미

Evaluation metric in OD

Object detection 에 평가지표에는 단순히 성능 뿐만 아니라 속도를 평가하는 지표들

→ Recall, AP, IoU 은 모두 성능을 평가하는 지표 중 하나인 mAP를 계산하기 위해 필요한FF 개념

FLOPs

FLOPs 는 model이 얼마나 빠르게 동작하는지 측정하는 metric이다. 아래 그림과 같은 행렬곱에 대하여 FLOPs를 계산했을 때 옳게된 FLOPs

MUL(3x2, 2x3) = 3x3

  • 각 셀 당 연산: 𝑎11 ∗ 𝑏11 + 𝑎12 ∗ 𝑏21
  • 곱셈 • 한 셀 당 2번, 3 x 3 x 2 = 18번
  • 덧셈 • 한 셀 당 1번, 3 x 3 x 1 = 9번 이기 때문에 총 FLOPS는 27





1-Stage Detectors

  • 전체 이미지에 대해 특징 추출, 객체 검출이 이루어진다.
  • 1 stage detector의 예시로는 다음과 같은 모델들이 있음 : YOLO, SSD, RetinaNet, ...
  • 속도가 매우 빠르다 (Real-time detection)
  • Localization, Classification이 동시에 진행한다.
  • 1 stage detector도 충분한 맥락적 이해가 가능함
  • RetinaNet과 같은 모델은 높은 정확도를 보여줌
  • FPN과 같은 구조를 통해 다양한 scale의 정보를 활용
  • 최신 1 stage detector는 2 stage와 비슷하거나 더 나은 성능을 보이기도 함





2-Stage Detectors

R-CNN

R-CNN은 object detection 분야에 CNN을 적용시킨 2-stage detector의 초기 모델로, 다음과 같은 pipeline으로 동작한다

  1. 입력 이미지에서 Selective Search를 통해 약 2k개의 후보 영역(RoI)을 추출한다.
  2. 추출된 RoI를 모두 동일한 사이즈로 warping한다.
  3. Warping된 RoI를 모두 CNN에 넣어 feature vector를 추출한다.

4-1. 추출된 feature vector를 SVM에 넣어 각 영역의 클래스를 예측한다.

4-2. 추출된 feature vector를 Regression에 넣어 각 영역의 bounding box를 예측한다.


Fast R-CNN

2 stage 초기 모델인 R-CNN은 1) 약 2000개의 RoI마다 모두 CNN 연산을 따로 수행해야 하며, 2) CNN의 fc layer의 입력 사이즈에 맞추기 위해 RoI를 강제로 warping해야한다는 단점이 있었다.

Fast R-CNN은 이 단점들을 해결하기 위해 1) 단일 CNN 연산으로 feature map을 추출하고, RoI를 이 feature map상에 매핑하는 RoI projection를 사용하여 연산량을 크게 줄였으며, 2) 매핑된 feature map상의 각 RoI들은 고정된 크기의 vector로 변환해주는 RoI pooling를 사용하여 성능과 속도를 모두 개선할 수 있었다.

  • RoI projection: 입력 이미지를 통째로 CNN에 통과시켜 feature map을 추출하고, 입력 이미지로부터 따로 추출한 RoI를 feature map 위에 그대로 매핑하는 방법을 사용하여 약 2000번의 CNN 연산을 단 한번으로 줄일 수 있었다.
  • RoI pooling: CNN의 fc layer에 입력하기 위해서는 고정된 크기의 벡터가 필요하기 때문에 R-CNN에서는 강제 warping을 사용하였다. 이 방식은 정보 또는 성능의 손실 가능성이 있기 때문에, SPPNet의 아이디어를 차용하여 고정된 크기의 vector로 변환해주는 RoI pooling 방식으로 대체하였다.

Faster R-CNN

Faster R-CNN에서 제안된 RPN(Region Proposal Network)의 동작 과정이다. 지정된 anchor box의 개수가 12개일 경우, 다음 (A,B,C)에 들어갈 숫자

  1. CNN에서 나온 feature map을 input으로 받음.
  2. Input feature map에 3x3x512 convolution을 수행하여 intermediate layer 생성.

3-1. Intermediate layer에 AxAxB convolution을 수행하여 binary classification 수행.

3-2. Intermediate layer에 AxAxC convolution을 수행하여 bounding box regression 수행.

  • A=1, B=24, C=48



'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 Library : MMDetection, Detectron  (0) 2025.01.24