Faster R-CNN
- two stage 방식 (당연히 real-time은 어려움..)
- 이미지 전체에 대해 backbone NW + region proposal NW 쭉 통과시키고
- 각 region에 대해 cropping (rol-pool, rol-align) + class prediction + bbox translate prediction
YOLO Introduction
- 기존 모델들의 한계
- DPM(Deformable Parts Model): sliding window approach + 각각에 대해 classifier 돌아감 (비효율적)
- R-CNN: generate potential bbox(region proposal) + then run classifier, 느리고 optimize하기 어렵다
- single conv network가 multiple bbox들과 그들의 class probabilities를 동시에 예측한다 = 빠르다
- region proposal + feature extraction + classification + bbox regression을 하나로 통합
- 이미지 전체를 한 번에 본다 = 예측 시 global하게 reasoning을 한다, background error가 적다
Unified Detection
- 우선 input 이미지를 S x S grid로 나눈다. 각각의 grid cell은
- 1) B개의 bbox와 confidence score for each bbox를 예측하고
- x,y,w,h,confidence (confidence는 predicted bbox와 gt bbox간 IoU와 관련이 있음)
- confidence score = 물체가 있을 확률 * IoU
- 2) C개의 conditional class probability를 예측한다 // Pr(Class_i | Object)
- 각 grid cell이 몇 개의 bboxes를 예측하든 class probabilities는 한 세트만!
- 1) 에서의 confidence와 2)에서의 conditional prob을 곱하면 class-specific confidence score for each bbox
- 즉 이러한 prediction은 S x S x (B * 5 + C) tensor 로 모델링될 수 있겠다
cf) 특정 object에 대해 responsible한 cell은 gt box의 중심 좌표가 위치하는 cell.
Network Design
PASCAL VOC detection dataset에 대해 evaluate를 했다 (class 20개 dataset)
-
GoogLeNet model 구조에서 영감을 받아 24개의 Conv layer + 2 FC layer 조합으로 구성 (Fast YOLO는 9개의 Conv layer)
- backbone = 앞의 20개의 conv layer (빨간색 왼쪽 부분)
- backbone의 주된 목적은 feature extraction. 하지만 당시의 classification SOTA model인 VGG16 사용하지 않음
- 자신들만의 backbone 모델인 DarkNet framework 도입
- fine-grained visual information을 위해 input resolution을 224x224 → 448x448로 증가시킴
- final output은 7x7x30 크기의 3차원 tensor (prediction)
- 출력값의 셀 하나가 원본 이미지의 64x64 영역을 cover (represent) 한다
- 각 grid(cell)은 해당 영역을 중심으로 하는 object bbox 2개 (10) + object의 class score 20개 (20)
- 즉 총 98개의 bbox를 검출하겠죠
Training
- pretrain backbone (DarkNet framework)
- first 20 conv layers에 대해 ImageNet 1000-class competition dataset으로 pretrain 시킴
- transfer learning
- detection을 수행하도록 model을 바꾸기 위해 4 conv layer와 2 FC layer 추가 (with random weights)
- Pascal VOC 데이터로 fine tuning
- 그 외 디테일들?
- bbox의 width와 height를 이미지의 width/height 기반으로 normalize (0~1)
- leaky rectified linear activation 사용
- sum-squared error 사용 (단순 계산상의 편의, average precision maximize와 정확히 align하지는 않음)
-
bbox 좌표 예측 loss의 영향을 증가시키고 object가 없는 box의 confidence prediction loss의 영향을 감소시킨다 => object가 없는 cell의 confidence가 overpower 하는 것을 방지하기 위해
- bbox width/height의 square root 값을 predict => 큰 bbox보다 작은 bbox에서의 deviation의 영향이 훨씬 큰데 이걸 어느정도 보정하기 위해
- overfitting 방지하기 위해 dropout, data augmentation 적용 (random scaling / translation, adjust exposure / saturation in HSV space)
- inference 시
- one network evaluation만 거치면 됨
- 크거나 border 근처의 object에 대해서는 multiple celld에서 검출될수도
- non-maximum suppression을 활용해 IoU가 임계값보다 큰 bbox는 모두 제거해나감 (동일한 detection)
- multi-task loss function
- bbox regression loss (localization loss) + confidence score loss + class score loss
YOLO 모델의 한계
- 각 셀이 2개의 bbox와 1개의 answer label만 예측 => 모여있는 object들이나 엄청 작은 object를 잘 감지 못함
- 완전히 새롭거나 unusual한 aspect ratio를 가진 object에 대해 잘 동작하지 않을 수 있다
- small bbox와 large bbox에서의 error가 loss function에서 동일하게 간주된다
real time 가능해서 webcam 같은 경우에 tracker 처럼 동작하기도 하더라
'AI > vision' 카테고리의 다른 글
[논문 리뷰] Flamingo: a Visual Language Model for Few-Shot Learning (0) | 2025.01.03 |
---|---|
[논문 리뷰] AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE (1) | 2025.01.03 |
[논문 리뷰] Reducing Hallucinations in Vision-Language Models via Latent Space Steering (0) | 2024.10.31 |
Vision Encoder - SIGLIP (1) | 2024.10.30 |
camera calibration using OpenCV (0) | 2024.08.29 |