일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- computervision
- cnn 역사
- yolov3
- 서포트벡터머신이란
- 데이터 전처리
- Computer Vision
- Faster R-CNN
- CNN
- pytorch
- SVM margin
- RCNN
- pytorch project
- TCP
- 논문분석
- self-supervision
- CS231n
- support vector machine 리뷰
- fast r-cnn
- SVM hard margin
- yolo
- EfficientNet
- svdd
- cs231n lecture5
- Deep Learning
- darknet
- DeepLearning
- SVM 이란
- pytorch c++
- libtorch
- Object Detection
- Today
- Total
아롱이 탐험대
YOLOv3: An Incremental Improvement 본문
YOLOv3: An Incremental Improvement
Joseph Redmon, Ali Farhadi University of Washington
1. Introduction
YOLOv3는 YOLO9000 (YOLOv2)에서 조금 수정한 버전이라고 생각하면 된다. YOLOv3는 2018년도에 나왔는데 이 당시 나왔던 RetinaNet보다는 성능면에서 좋지 않았지만 속도 방면에서는 더 좋은 모델이다. 심지어 YOLOv3는 SSD보다 약 3배가 더 빠르다고 한다. 이런 측면에서 YOLOv3는 매우 효율적인 모델이라고 정의할 수 있다.
또한 아직까지도 자주 사용되고 있는 모델이라는 점과 구현되어 있는 코드들이 많다는 점이 장점이다.
YOLOv3를 보기 전 YOLOv1과 YOLOv2를 꼭 보고오길 바란다.
2. Detail
(1) Bounding Box Prediction
YOLOv3에서도 YOLOv2와 마찬가지로 anchor box를 적용시킨다. YOLOv2 네트워크는 각 bounding box의 4개 tx, ty, tw, th를 예측하여 bx, by, bw, bh parameter를 얻고, 이 값들을 통해 L2 loss를 구하면서 학습을 진행한다.
하지만 YOLOv3에서는 기존식의 역함수를 구하여 L1 loss를 구하게 된다. 이는 v2와는 달리 각 bounding box에 대한 score를 logistic regression으로 측정하기 때문이다. 설명하자면 만약 예측된 box가 다른 box들보다 IOU가 높다면 그 값은 1이 되어야 한다. 하지만 만약 box의 IOU가 best score는 아니지만 특정 threshold보다 높다면 그냥 그 값을 무시해버린다고 한다. v3에서는 threshold를 0.5로 설정하고 하나의 bounding box에 하나의 GT box만 할당된다. 만약 해당 bounding box에 GT가 할당되지 않는다면 Objectness에 대한 손실 값만 적용된다.
(2) Class Prediction
v3의 bounding box에 대한 class값 예측은 multi label classification으로 진행된다. softmax 함수보다 더 성능이 좋은 logistic classifier 함수를 사용한다고한다. 그 이유는 만약 open image data와 같은 경우에는 너무 많은 label들이 겹치게 된다고 한다. 이 경우에 softmax를 사용하게 된다면 사람과 여자를 구별하는 문제와 같이 너무 많은 overlapping label들이 존재하여 비효율적으로 계산이 된다. 따라서 이러한 이유 때문에 multi label 방식으로 classification을 진행하게 된다.
(3) Predictions Across Scales
v3에서는 fature pyramid network와 유사하게 3개의 다른 scale에서 feature map을 추출한다. 이는 기본적인 feature 추출기에 몇개의 conv layer만 추가하면 된다. paper에서는 COCO data를 가지고 실험을 하였는데 scale이 다른 3개의 box에 대한 tensor는 N*N*[3*(4+1+80)]이라고 한다. 여기서 N은 feature map의 grid 개수, 3은 anchor box의 개수, (4+1+80)은 4개의 box shift and scaling value, 1개의 objectness score, 80개의 class 예측이라고 한다. 그다음으로는 이전 2번째 layer에서 feature map을 가져와 2배로 upscaling을 하고, 제일 앞단의 feature map을 가져와 둘을 concatenation을 사용해서 upsampling 된 feature map과 합친다. 이렇게 되면 의미 있는 semantic information을 이전 layer의 feature map으로 얻을 수 있고, finer-grained information을 제일 앞단의 feature map으로부터 얻을 수 있다. 결국은 skip layer와 개념이 유사하다. 무튼 size는 2배가 되지만 유사한 tensor들을 더욱더 잘 예측할 수 있다.
하지만 여전히 v3에서도 k-means를 이용하여 anchor box의 size를 정한다고 한다.
(4) Feature Extractor
v3에서는 v2의 network와 darknet-19, newfangled residual network를 조합하여 새롭게 만들었다. feature extractor는 3*3, 1*1 conv layer를 적용하였지만, shortcut connection으로 인하여 size가 증가하였다. 무려 layer의 개수가 53개여서 이를 darknet-53이라고 한다.
ResNet, Darknet-19와는 다르게 조금더 효율적이라고 한다. 우선 정확도 측면에서는 darknet-19보다는 우수하고, res net과는 비슷하다.
하지만 floating point operation/second에서는 최고의 성능을 달성하였다. 이 의미는 해당 네트워크가 gpu를 잘 활용한다는 뜻이다.
3. Result
YOLOv3는 COCO의 mAP metric을 기준으로 측정할때 SSD와 비슷하며, 속도적인 측면에서는 3배 더 빠르다. RetinaNet에 비해 성능은 떨어지지만 만약 AP50을 사용하게 된다면 RetinaNet과 성능이 비슷해지면서 SSD보다는 훨씬 좋은 성능을 갖게 된다.
새로운 multi-scale 예측으로 인해 굉장히 높은 APs 성능을 보이지만 아직까지는 중간 크그나 더 큰 object를 예측하는 성능보다는 현저히 떨어지는 성능을 보인다.
이 논문의 저자는 YOLOv3의 성능을 더욱 향상시키기위해 다른 방법도 많이 시도해보았다고 한다.
(a) Anchor box x, y offset predictions
linear activation을 사용하여 multiple box의 너비와 높이의 x, y, offset을 일반적인 anchor box prediction machanism을 사용하려고 했지만 이는 모델의 안정성을 떨어뜨리고, 잘 동작도 되지 않았다.
(b) Linear x,y predictions instead of logistic
logistic activation 대신 x, y offset을 예측하기 위해 linear activation을 사용했지만 이는 mAP를 더욱 하락시켰다.
(c) Focal loss
focal loss를 사용했지만 2 point의 mAP를 떨어뜨렸다고 한다. Focal loss는 다음 RetinaNet 분석을 할 때 알아보도록 하자
4. Reference
https://pjreddie.com/media/files/papers/YOLOv3.pdf
https://dhhwang89.tistory.com/138
'study > paper reviews' 카테고리의 다른 글
EfficientDet: Scalable and Efficient Object Detection 분석 (0) | 2020.09.14 |
---|---|
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 분석 (0) | 2020.09.11 |
YOLO9000: Better, Faster, Stronger (YOLOv2) (0) | 2020.05.07 |
SSD: Single Shot Multibox Detector (0) | 2020.03.23 |
YOLO: You Only Look Once: Unified, Real-Time Object Detection (0) | 2020.03.18 |