Paper Review: You Only Look Once: Unified, Real-Time Object Detection
0. 배경 지식
출처: 📺동빈나 유튜브
(R-CNN 계열 설명을 아주 아주 잘 해주신다 !)
R-CNN은
1. CPU 기반의 selective search 진행으로 많은 시간이 소요되고,
2. 전체 아키텍처에서 SVM, Regressor 모듈이 CNN과 분리 되어 있어 End-to-End 방식으로 학습할 수 없으며
3. 모든 Roi를 CNN에 넣어야하기 때문에 많은 CNN 연산이 필요하다
는 단점이 있다.
R-CNN의 단점을 보완하여 나온 것이 Fast R-CNN인데
Fast R-CNN은 End-to-End 방식으로 학습이 가능하게 되었지만
여전히 Region Proposal은 CPU에서 수행되기 때문에 속도가 느리다.
따라서 Faster R-CNN에서는
RPN(Region Proposal Network)를 제안하여 feature map을 보고 어느 곳에 물체가 있을 법한지 예측할 수 있도록
만들었다.
1. Key point
YOLO의 key point 3가지
- 빠르다: 2-stage-detector --> 1-stage-detector
real time으로 object detection을 가능하게 했다. (45 frames per second)
(30frame 이상이면 빠르다고 판단) - background 에서의 False Positive 최소화
- 좋은 일반화 성능: CNN을 통해 객체의 feature를 추출
2. YOLO
YOLO가 진행되는 단계를 3개의 step으로 나눠보았다.
Step 1. input image를 S x S grid로 나눈다.
Step 2. B개의 bounding box 좌표(x, y, w, h)와 confidence score를 구한다.
(bounding box score 계산)
본 논문에서는 S를 7로 설정하여 7 x 7 grid로 나누었다. 그리고 각 bounding box의 좌표(x, y, w, h) 와 confidence score를 구한다. confidence score를 구하는 방법은 object의 유/무(1/0)과 IoU score를 곱한다. 위 그림처럼 grid cell에 object가 없다면 0이 나오게 되고, grid cell에 object가 있다면 1과 IoU 값이 곱해져 최종적으로 IoU score와 동일한 값이 나오게 된다.
(train시에는 B개의 bounding box 사용, test시에는 2개의 bounding box 라고 논문에 나와있는데 train시에도 B=2 인 것 같다.)
Step3. Class probability를 구한다.
conditional class probability와 box confidence score를 곱하여 최종적으로 class confidence score를 구하게 된다.
(논문에서는 test 시에 conditional class probability와 box confidence predict를 곱한다고 되어있는데, train에서도 동일한건지 의문)
3. Network
network를 보면 imageNet data로 pretrain 된 GoogLeNet을 가져오고, 뒤에 4개의 convolution layer와 2개의 fully connected layers 가 붙는데 4개의 conv 와 2개의 fc는 train 된다. 또한 GoogleNet의 inception modules 대신 1x1 reduction layer 와 3x3 conv layer를 사용한다.pretrain된 GoogLeNet은 이미지 분류에 사용했던 network인데, input image에 대한 spatial information 추출이 가능하다는 특성 때문에 object detection에서 사용될 수 있다고 한다.
train network를 거친 후 output tensor shape은 7x7x30이 된다.
<< 설정값 >>
식: S x S x (B * 5 + C)
- S x S (: grid cell) = 7
- B (: bounding box 개수) = 2
- C (: class 개수) = 20
S x S (7x7)로 나눈 grid cell을 살펴보면, 각 grid cell 당 B개(B=2)의 bounding box 가 존재하고 각 bounding box 당 좌표값(x, y, w, h) 과 confidence score 즉, 총 5가지의 정보가 나오게 된다. 본 논문에서는 PASCAL VOC dataset을 사용하므로 class 개수 C는 20이 된다. 따라서 식을 따라 적어보면 7 x 7 x (2 * 5 + 20) = 7x7x30 이라는 결과를 얻을 수 있다.
4. Unified detection
(bounding box)
본 논문에서는 448x448 size의 이미지를 사용하여 7x7x30의 feature map을 추출한다. 7x7의 각 grid 하나 하나는 5개의 bounding box 정보 (x, y, w, h, confidence score)를 담고 있다. 30 차원이 어떻게 이루어지는지 살펴보면 1 - 5 차원은 두 개의 bounding box 중 첫번째 bounding box 정보가 담긴다. 6 - 10 차원은 두번째 bounding box의 정보가 담긴다. 11 - 30 차원은 첫번째 bounding box에서 탐지된 object의 20개의 class에 대한 확률값이 담기게 된다 (PASCAL VOC dataset의 class가 20개 이기 때문).
(class confidence score)
이렇게 나온 bounding box의 confidence socre와 class probability를 곱하여 bounding box들의 confidence score를 구한다. 본 논문에서 7x7 grid 당 2개의 bounding box로 구성하였으므로 7x7x2=98개의 bounding box에 대한 정보를 얻을 수 있다.
(NMS(Non-max suppression))
위 과정을 거쳐 나온 98개의 정보들에 대해서 NMS를 수행한다. NMS를 수행하여 detect된 object의 예측값을 얻게 된다.
💡Non maximum suppresion(NMS)
: 제일 큰 IoU를 가진 bounding box를 제외하고 나머지는 압축시킨다.
(IoU가 특정 threshold 이상인 중복 box 제거)
5. Loss Function
전체 loss는 위 그림과 같고, 검색을 통해 공부한 것을 토대로 loss 함수를 3개로 나누어 볼 수 있다
- Localization loss
맨 위 두 줄은 bounding box의 좌표값들과 confidence score에 대한 loss이다.
그림에서
- 초록색 동그라미 부분: i번째 grid cell에서 j번째 bounding box가 object를 예측하도록
responsible for (할당) 받았을 때 1, 그렇지 않으면 0이 된다.
- 파란색 동그라미 부분: object를 포함하지 않는 grid cell의 confidence score가 0이 되어
gradient에 영향을 주는 것을 방지하여 객체를 포함하는 grid cell에
가중치를 주게 된다. (본 논문 setting = 5)
큰 bounding box의 작은 오류가 작은 bounding box의 오류보다 덜 중요하기 때문에, 이를 반영하기 위해 w, h에 루트를 씌워준다.
- confidence loss
가운데 두 줄은 bounding box의 confidence score C에 대한 loss로, 객체가 포함되어 있을 경우엔 1, 그렇지 않으면 0 이 되고 C^은 예측한 bounding box의 confidence score이다.
그림에서
- 초록색 동그라미 부분: object가 존재하지 않는 grid cell에 가중치 0.5를 곱하여 loss에 영향이 덜 가도록 한다.
- classification loss
P는 실제 class probability, p^은 예측한 class probability가 된다.
6. Experiment
-
Comparison to Other Real-Time Systems
-
Error Analysis
-
Generalizability: Person Detection in Artwork
7. Result
- YOLO는 구성이 간단하다.
- 이미지 전체에 대해 학습 된다.
- 이전의 모델들 보다 굉장히 빠른 속도를 보인다.
- 꽤 준수한 detection 성능을 낸다.
8. Limitation of YOLO
- Grid cell 당 하나의 class만 예측이 가능하다.
- Object가 겹쳐져 있다면 정확한 예측이 불가능하다.
(ex – 새 떼와 같은 그룹으로 나타나는 작은 object) - Bounding box의 형태가 training data를 통해서만 학습되므로,
새로운/독특한 가로 세로 비율 등의 bounding box의 경우 정확히 예측하지 못한다. - 작은 bounding box와 큰 bounding box의 error를 동일하게 처리함
작은 bounding box의 loss term이 IoU에 더 민감하게 영향을 줌 (localization이 다소 부정확)
Author And Source
이 문제에 관하여(Paper Review: You Only Look Once: Unified, Real-Time Object Detection), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dlth508/Paper-Review-You-Only-Look-Once-Unified-Real-Time-Object-Detection저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)