개요:
논문 링크: https://arxiv.org/abs/1506.02640
이미지에서 물체를 찾는 방식 중 R-CNN 같은 방식들은 우선 물체가 있을법한 영역들을 먼저 찾고 (region proposal), 그 영역들에 대해서 물체가 있는지, 또한 어떤 물체들이 있는지 classifier을 통해서 구하고, 영역에 대해서 post processing을 합니다. 이렇게 다소 복잡한 파이프라인을 통과시키는 방식과는 대조적으로 YOLO (you only look once)에서는 단 한 번에 어떤 물체가 어디에 있는지 예측합니다.
특징:
- 한번에 예측을 하기 때문에 단순하고 빠름
- 이미지 전체를 보고 예측을 함 (R-CNN 같은 경우 region proposal에서 나온 영역만 보기 때문에 이미지 전체에 대한 정보를 사용하지 않는 문제가 있음)
- 다른 domain 으로 일반화가 더 잘 된다고 함 (정확한 이유는 잘 모르겠음)
방법:
학습하는 값들:
우선 이미지를 S x S 영역 (grid cell)로 나눕니다. 어떠한 물체의 중심이 S x S개의 영역 중 한 영역에 들어오면, 그 영역이 이 물체를 감지하는 것을 담당하게 됩니다. 구체적으로 각 영역은 물체의 bounding box (물체를 둘러싸는 상자), confidence score (물체가 있는지 얼마나 확실한가), 그리고 conditional class probability (어떠한 물체가 있는가)를 예측하게 됩니다.
- bounding box 정보는 x, y, w, h로 나타냅니다. 여기서 x, y 값은 bounding box의 중심의 위치인데, grid cell의 크기로 normalize 해서 0에서 1 사이의 값을 갖습니다. 예를 들어 밑에 그림처럼 S=2 (총 2x2=4 grid cells) 일 때, 왼쪽 위에 있는 grid cell이 별을 감지하는 것을 담당하게 되고, x, y 값은 (0.5, 0.5)입니다. 비슷하게 w, h (width, height)도 0에서 1 사이의 값을 갖게 되는데, 이 때는 이미지의 사이즈로 normalize 합니다. 밑에 그림 같은 경우, w=0.25, h=0.25가 됩니다 (이미지 width, height의 1/4 값).
- Confidence score은 다음과 같이 정의됩니다: \( Pr(object) \times IOU^{truth}_{pred} \) .여기서 \( Pr(object) \)는 물체가 grid cell에 있을 확률이고, \( IOU^{truth}_{pred} \)는
- Conditional class probability는 \( Pr(Class_i | Object) \)를 뜻합니다 (i=1,2,..., C). 학습 과정을 보면 더 명확해지는데, 물체가 있을 때만 이 값을 학습시키기 때문에 조건부 확률이라고 부릅니다.
Network structure:
논문에서는 input image의 사이즈로 448 x 448 x 3을 사용합니다. S=7을 사용하고, cell마다 B=2개의 bounding box와 confidence score을 예측합니다. 또한 사용하는 dataset (Pascal VOC)는 20개 종류의 물체가 있어서 C=20을 사용합니다. 따라서 neural net이 예측해야 하는 값의 크기는 7 x 7 x 30 = S x S x (5 x B + C)입니다:
Loss:
기본적으로 square error을 사용합니다.
- \( \mathbb{1}^{obj}_{ij}\): cell i의 j번째 bounding box가 물체를 감지하는 것을 담당할 때만 1, 나머지 경우는 0인 함수입니다. 여기서 담당 기준은 예측된 bounding box가 실제 bounding box와 IOU 가 가장 큰 경우가 됩니다.
- \( \mathbb{1}^{obj}_{i}\): 물체가 i번째 cell에 있을 경우만 1인 함수입니다.
- x, y, 등등 hat (^)이 있으면 실제 값, hat이 없으면 예측 값이라고 생각하면 됩니다.
- w. h에 square root가 있는 이유: bounding box의 사이즈가 클 때와 작을 때 box size에 동일한 오류가 있을 때, bounding box가 더 큰 경우 loss에 영향을 더 조금 주게 만들기 위해
- \( \lambda_{coord} \)=5를 사용.
- \( C_i \)는 confidence score.
- 물체가 없는 경우가 많기 때문에 confidence score을 0으로 학습하는 경향이 있습니다. 이것을 해결하기 위해서 물체가 없는 경우 loss에 영향을 덜 주게 하기 위해서 \( \lambda_{noobj}=0.5\) 로 설정. 참고로 \( \mathbb{1}^{noobj}_{ij} = 1 - \mathbb{1}^{obj}_{ij}\)
- \( p_i(c) \): conditional class probability. 물체가 있을 때만 학습시키기 때문에 conditional probability.
학습 과정:
ImageNet pre-training
- 앞에 20개의 convolutional layer을 ImageNet 1000-class dataset에 pretraining시킴 (최종 top 5 accuracy가 validation set에 88%).
- 이때 224 x 224 이미지로 학습
Detection 학습:
- 448 x 448 이미지로 학습
- Pascal VOC dataset
- batch size = 64, momentum = 0.9, decay = 0.0005, lr scheduler (warmup + decay)
- 첫 번째 fully connected layer 뒤에 dropout (0.5 확률)
- augmentation: random crop, random adjustment of exposure & saturation
사용 법:
7 x 7 x 2 = 98개의 bounding box가 예측됩니다.
Non-maximal suppression을 사용:
- Threshold confidence score을 지정해서 이것보다 높은 bounding box만 keep list에 넣습니다.
- keep list에 있는 bounding box 중 가장 높은 confidence score을 갖는 bounding box를 빼서 final prediction list에 넣습니다.
- 이 bounding box와 keep list에 남아있는 bounding box와 각각 IOU를 계산합니다. threshold IOU를 지정하고, threshold IOU보다 높은 IOU 값을 갖는 bounding box를 keep list에서 제거합니다. (threshold IOU보다 높으면 서로 같은 물체에 대한 bounding box라고 간주하고 제거함)
- keep list에 아직 bounding box가 남아있으면 2로 돌아가서 반복합니다.
문제점:
- 각 grid cell에서 2개밖에 예측을 못하기 때문에 작고 다닥다닥 붙어있는 물체들을 제대로 감지 못함.
- 물체가 학습 데이터에 있는 pose 또는 모양이 다르면 잘 감지하지 못함 (학습 데이터의 bounding box의 distribution에 크게 영향을 받음
- 학습할 때 w, h에 square root을 취하는 trick을 사용하기는 하였지만, 작은 물체에 작은 오류가 큰 영향을 주는 문제는 여전히 해결이 안 됨. 이런 오류들 때문에 잘못된 localization이 많음 (밑에 참고)
- Correct: class 가 맞고 & ground truth bounding box와 IOU > 0.5
- Localization: class가 맞고, 0.1 < IOU < 0.5
- Similar: class가 맞지는 않지만 비슷하고 IOU > 0.1
- Other: class가 틀리면서 IOU>0.1
- Background: IOU < 0.1
보다시피 localization 문제가 큰 것을 알 수 있습니다.
'논문 리뷰 > object detection' 카테고리의 다른 글
[논문 리뷰] PP-YOLO v1 (+v2) (3) | 2023.05.26 |
---|---|
YOLOv5 정리 (2) | 2023.05.19 |
[논문 리뷰] YOLOv4 (상세 리뷰) (0) | 2023.04.11 |
[논문 리뷰] YOLOv3 (0) | 2023.02.22 |
[논문 리뷰] YOLOv2 (0) | 2023.01.31 |