이전에 Object Dection 모델은 여러 객체들이 존재하는 이미지 내에서 각각의 객체가 있는 위치(Regression 문제), BBox 내의 객체에 대한 클래스 분류(Classification 문제) 수행한다고 배웠다.
YOLO는 기존의 image segmentation기법, 다른 object detection모델 중 2-stage 방식인 R-CNN계열과 비교했을 때, 비슷한 성능을 기준으로 훨씬 빠른 속도를 자랑한다!
You Only Look Once : 한 번만 봐도 된다!
- 주어진 이미지에서 Bounding Box(BBox)의 위치, classification을 한번에 수행하는 object detection model이다.
현재 YOLO v1~v8 버전까지 나와있다.
모델이 어떻게 발전했는지에 대해 조금만 알아보고, 나중에 자세히 논문보고 더 공부해보자!
오픈소스 모델 구현해보기
모델을 불러와보자. 요즘은 모델들을 쉽게 사용할 수 있도록 공유되어 있어서 github 주소만 알고, readme를 잘 읽고 따라하기만하면 쉽게 모델 구현이 가능하다. https://github.com/ultralytics/yolov5 이용
YOLO v1
bbox Regression문제, class Classification문제를 하나로 통합해 regression문제로 해결한다.
Basic모델(45frames/sec), Fast모델(155frames/sec)로 구성되어있다.
- 입력 이미지를 7x7 grid로 나눠준다.
- 각 grid에서 2개의 bbox 생성한다. 각 bbox는 (x,y,w,h,score)벡터로 표현된다. (중심좌표x,y / 크기w,h / confidence score:해당 grid에서 객체가 존재할 확률) 따라서, 각 grid는 총 10개의 벡터를 가지고있다.
- 각 grid에서 class별로 조건부 확률을 가진다. 이는 grid셀 내의 bbox가 해당 class에 속할 확률을 의미한다.
- 평가 시, 각 bbox에 대해 방금 말한 조건부 클래스 확률과 bbox의 클래스 특정 confidence score를 곱해 점수 계산한다. 점수는 bbox내에 class가 존재하는지와 bbox가 object에 얼마나 적합한지를 나타낸다.
- 얇은 경계박스는 지워지고, 굵은 경계박스만 남는다. 이는 ROI라 할 수 있는 경계박스를 얻기 위한 과정으로, 남은 경계박스들은 사용자가 지정한 threshold보다 작으면 지워진다.
- 남은 후보 경계 박스들을 NMS 알고리즘을 사용해 최종적 bbox구한다. 위 이미지에서는 3개의 bbox가 최종적으로 남는다. 각 bbox마다 색깔별로 나타내주며 다른 class를 가지고있는 것도 확인 가능하다.
Network Design
24개의 conv layer, 2개의 FC layer로 구성되어있다. Darknet Network라고도 부른다.
Pre-trained model로 ImageNet을 feature extraction모델로 활용한다.
1x1, 3x3 conv layer의 교차를 통해 parameter를 감소시킨다. (fast, basic 모델의 차이는 이 레이어들의 채널 수의 차이가 있다.)
- 실험 평가 지표 : mAP(mean Average Precision), FPS(Frames per second)
YOLO v2 - “YOLO9000: Better, Faster, Stronger”
YOLO v1과의 차이를 보자.
각각의 체크표시가 기존의 YOLO를 강화하기 위해서 추가된 옵션들이다.
- batch normalization
데이터가 batch단위로 따로따로 들어올 때, 각 데이터 그룹간의 ‘차이’를 줄이고자 batch별로 정규화를 진행해주는 것인 batchnorm 적용.
- High Resolution Classifier
pre-train모델인 ImageNet의 원본 이미지는 224x224 형태로 구성된 데이터셋인데, YOLO v2에서는 이 모델을 448x448이미지로 fine tuning해서 사용한다.
- Convolutional with anchor boxes(경계 박스)
YOLOv1에서는 grid 당 2개 bbox 예측하는 방식이었다면, YOLOv2에서는 grid당 5개 bbox 찾음.
yolo v2에서는 좌표 대신 미리 지정된 Anchor box의 offset(size, ratio)를 예측해 문제가 훨씬 간단해져 학습을 조금 더 쉽게 할 수 있다.
anchor box를 도입해 성능이 다소 감소하지만 recall이 증가하기 때문에 사용하는 것이 좋다고한다.
- Dimension Clusters
anchor box를 도입할 때 R-CNN에서 사람이 직접 offset을 설정했다고 하는데, 그 설정 방식을 clustering 방식으로 바꿨다.
k-means clustering을 하면 Euclidean 거리를 사용하게 되어 큰 박스에서 더 오차가 크게 된다. 따라서 박스 크기와 상관없는 IOU를 clustering의 기준으로 삼는다.
- Fine-grained features
중간 feature map과 최종 feature map을 합쳐 이용한다.
앞 convolution layer의 high resolution feature map을 뒷 단의 conv layer의 low resolution feature map에 추가한다.
중간 feature map은 지역적 특성을 잘 반영하기 때문이다. 즉, high resolution feature은 작은 객체에 대한 정보를 함축하고 있어 작은 객체 검출에 강하도록 했다.
- Multi-scale Training
매 배치마다 입력값의 사이즈를 다르게 넣어주었다. 랜덤하게 새로운 해상도로 선택해 학습을 진행하였고, 각 해상도마다 성능이 다르게 기록되었다.
당연하게도, 해상도를 높이니 처리속도가 줄었다.
Faster - DarkNet-19
기존의 Darknet을 개선한 Darknet19를 제안했다.
VGG-16만큼 정확하면서, GoogLeNet처럼 빠른 CNN 구현했다.
Stronger - Hierarchical Classification
ImageNet의 label은 WordNet기반으로 구성되어있다. 구조화된 분류학습을 통해, Word Tree를 만들어서, 공동의 뿌리를 갖는 class들을 만들어냈다. 같은 맥락끼리 묶어냈다고 생각하면 된다.
위와 같이, 9000개의 class로 확장해서 학습을 시키고 실험이 진행되었다. 동물들은 잘 구분했지만, clothing, equipment관련된 것들은 성능이 좋지 않았다고 한다.
YOLO v3
YOLO v2에 비해 탐지 속도는 약간 느려졌지만, 탐지 성능을 대폭 개선하엿다.
Darknet19 → Darknet-53
YOLO v2의 Bounding box prediction 활용, softmax 활용하지 않고, independent logistic classifier활용해 분류 수행함.
v2에서는 여러가지 scale 활용했지만, v3에서는 3가지 scale 활용
Box는 3개 활용하며, 80개 class 다룸.
더 공부 할 것
'Machine Learning' 카테고리의 다른 글
[CV 5] AutoEncoder (0) | 2023.05.07 |
---|---|
[CV 3] Beyond Classification - Segmentation, Object Dectection (0) | 2023.05.07 |
[CV 2] Image Augmentation (0) | 2023.05.07 |
[CV] CNN, Tranfer Learning (0) | 2023.05.07 |
[Neural Networks 4] Hyperparameter Tuning (0) | 2023.04.24 |