일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- coursera
- 평가지표
- EC2
- MySQL
- Homogeneous Coordinates
- object detection
- NRMSE
- ml
- 동차좌표계
- error
- kernel
- nodejs
- FSL
- AWS
- ssl
- Dual energy X-ray
- relaxation time
- https
- pm2
- Anaconda
- Emoji
- procedure
- MRI
- ubuntu
- CT
- Map-reduce
- x-ray
- Cost Function
- pytorch
- git
- Today
- Total
Pay it Forward
[Object Detection] YOLO 논문 정리 본문
요약
- image detection을 위한 알고리즘
- one stage method에 속하는 알고리즘
한 번에 image detection을 완료한다
- single NN
image를 input으로 받아서 하나의 신경망(single NN)을 통과하면 물체의 bounding Box와 해당 물체의 class를 output으로 내놓는다.
Regression으로 bounding Box와 그 물체의 종류를 동시에 파악하고자 했다.
- 장점
빠르고 좋은 정확도를 가지며 여러 도메인에서도 좋은 성능을 보인다
- 단점
object가 겹쳐있으면 제대로 예측이 안된다. 학습정도와 이미지 크기에 따라서 따라 모델의 성능이 크게 달라진다.
(이미지 크기에 따른 단점은 YOLO v3에서 개선된다.)
전체적인 모델 구성
전체적인 모델 구성은 다음과 같다
적절한 Model에 img를 input으로 넣으면 해당 image의 object들에 대한 bounding Box와 class가 output으로 산출되는데 이와 실제 Label을 비교하여 오차(Loss)를 구한다.
이 Loss를 최소화 시키고자 최적화 알고리즘을 통해 Model 내의 param (=weight)를 수정하고 이 과정을 반복한다.
YOLO v1에서는 이 적절한 Model에 약간 변형된 GoogleNet을 사용하였고 YOLO v3에서는 역시 GoogleNet기반의 Darknet을 사용하였다
YOLO Model 구성
YOLO Model에 대해서 조금더 살펴보자
YOLO는 24개의 Conv Layer + 2개의 Fully connected Layer 를 가진다.
+ YOLO 9000에서는 기존 2개의 Fully connected Layer를 없애고 conv Layer로 바꾸었다
(YOLO v2와 YOLO 9000은 동시에 발표한 모델로 9000은 9000개의 object를 검출하는데 성공한 모델이다)
YOLO의 output
Output = S * S * (B * 5 + C) 이다.
S는 전체 이미지를 S * S개로 나눴을 때의 그리드의 개수, B는 bounding Box의 개수, C는 검출할 class의 개수이다.
5는 각 그리드 셀 안의 x, y, w, h, c 값을 의미하는데 각각의 의미는 다음과 같다
x, y : 중심 좌표
w, h : bounding Box의 width, height 정보
c : confidence score로 물체가 있을 확률과 실제로 물체가 현재의 bounding Box와 얼마나 겹치는지를 계산한 값
YOLO는 이 S*S*(B*5+C)의 output중에서 NMS 알고리즘을 통해 최종 bounding Box를 추출한다.
YOLO의 output - NMS 알고리즘
NMS(non-maximal subpression) 알고리즘은 S*S*(B*5+C)개의 결과들 중에서 따로 지정한 threshold 값보다 작은 값을 모두 0으로 만들어서 없앤다.
이후에 내림차순 정렬을 하면 각 클래스 별로 가장 높은 값의 bounding Box(이하 box_max) 값이 앞에 위치하게 된다.
이를 기준으로 나머지 bounding Box(이하 box_cur)와의 IOU(Intersection Of Union = 두 개의 box의 겹치는 면적을 나타냄)를 계산하고 이 값이 0.5보다 크다면 이 두 개의 bouning Box(box_max와 box_cur)는 서로 같은 object를 바라보고 있다고 판단하고 box_cur값을 0으로 만들어서 없앤다.
반대로 IOU가 0.5보다 작다면 서로 다른 object를 예측하고 있다고 판단하고 그냥 둔다.
이 과정을 끝낸 후 각 bounding Box에 대해서 0보다 큰 가장 큰 예측값을 추출해내면 다음과 같이 각 object에 대한 가장 score가 높은 bounding Box만 남게된다.
YOLO의 단점은 위의 YOLO의 메커니즘을 보면 알 수 있겠지만 각 그리드 셀(grid cell)에서 단 하나의 class를 예측하기 때문에 object가 겹쳐있으면 제대로 예측이 안된다는 것이다.
YOLO v1에 비한 v2의 개선점
- 정확도와 mAP의 증가
- Darknet 사용으로 인한 속도 증가
(대부분의 object detection model들은 classifier net으로 VGG Net을 많이 사용하는데 YOLO v2는 Google Net기반의 Darknet을 사용하여 계산량을 현저히 줄이고 정확도 역시 VGG-16과 2%밖에 차이가 나지 않을 만큼 좋은 성능을 보였다)
논문 및 참고 사이트
[YOLO v1] https://arxiv.org/pdf/1506.02640.pdf
[YOLO v3] https://pjreddie.com/media/files/papers/YOLOv3.pdf