-one stage object detector:input image로부터 바로 bounding box를 찾음
-각 grid cell 마다 B개의 bounding box 예측(x,y,w,h,p_c(confidence score))
-class probability는 동일한 grid cell에서 예측된 box일 경우 같은 값 가짐
-localization error로 인해 성능이 타 object detection 방법 보다 낮지만(mAP 63.4), 45fps 정도로 매우 빠름(real-time 기준:30fps)
-two stage object detector
①region proposal network sliding window마다 9개의 anchor box 생성 후 물체유무(물체가 있는지 classification) / object 위치(bounding box의 regression 계산)
②첫번째 단계인 CNN 통해 얻은 feature map에서 proposed region 기반한 ROI로 classification, bbox 좌표를 regression
-one stage detector에 비해 성능은 높지만 mAP 73.2, 7fps 정도로 속도가 매우 느림
-YOLOv1의 단점이 었던 정확도를 높이면서도 빠르게 detection
-Classification dataset과 detection dataset의 joint training을 통해 class 개수를 늘리고 존재 하지 않았던 object에 대한 class 예측도 가능해졌음
-Darknet-19라는 새로운 network를 제시
-pascal2007 + pascal2012 dataset에 대해 성능 향상
YOLOv1 57.9mAP, 45fps
YOLOv2 78.6mAP, 40fps
항목을 추가할 때 마다 mAP가 얼마나 향상되는지 보여주는 표
-YOLO의 경우 Faster R-CNN에 비해 localization error가 상당했는데 이는 객체간 경계의 예측을 잘 못한다는 것이다.
-YOLO의 또 다른 문제점은 region proposal-based method 보다 낮은 recall에 있다.
-따라서 YOLOv2는 localization과 recall를 향상시키고 classification accuracy를 유지하는데 집중했다고 한다.
-Dropout layer 대신에 모든 convolutional layers에 batch normalization을 추가
-정규화 효과가 있어 overfitting 막아줌, mAP 2% 증가
-YOLOv1
224x224 이미지를 classification data를 활용해서 CNN을 통해 pretraining 시키고 detection 할 때 해상도를 448x448로 높인다음 fine-tuning함
-YOLOv2
224x224 해상도로 160epochs 동안 pretraine 한다음 448x448(high resolution)로 10epochs 동안 fine-tuning함
=>filter가 고해상도인 input을 받았을 때 잘 작동할 수 있도록 조정하는 시간을 network에 준다.
=>mAP 4% 증가
-YOLOv1의 Fully Connected Layer를 떼어내고 convolution network로 prediction
-bounding box 예측할 때 anchor box를 사용
-448x448 대신에 416x416 해상도를 사용하고 이를 32배 down sampling하면 13x13 feature map이 얻어진다.
-이렇게 하는 이유는 feature map에서 한개의 center cell을 갖게 하기 위함이다. 크기가 큰 객체는 이미지 내에서 중심을 차지할 경우가 많은데 하나의 center cell이 있으면 이를 잘 포착할 수 있기 때문이다.
-448x448 을 32배 down sampling할 경우 14x14 feature map이 얻어지고 4개의 grid cell이 인접하게 되고 이러한 경우보다 하나의 center cell이 있으면 큰 물체를 더 잘 포착할 수 있다.
-anchor box를 사용
YOLOv1은 이미지당 bounding box를 2개 예측해서 7x7x2=98개 bounding box를 만들어냈는데 anchor box를 사용하니 grid cell마다 5개 anchor box로 예측하여 1000개 이상의 bounding box를 예측하는 것이 가능했다.
-anchor box 없을 때 69.5mAP, 81% recall
anchor box 있을 때 62.2mAP, 88% recall => mAP 조금 감소, recall 증가(anchor box로 잘 맞춘 box 개수가 증가)
*recall 값이 높음: 모델이 실제 객체의 위치를 예측한 비율이 높음
-Faster R-CNN에서 anchor box 정보를 미리 정하는 부분(hand pick)에 대해서 문제를 제기
-YOLOv2는 k-means clustering을 써서 anchor box에 대한 사전 조건(prior)을 선택(automatically)하면 detection 성능이 향상 될 것이라 판단
-따라서 k-means clustering을 통해 GT와 가장 유사한 optimal anchor box 탐색
*K-means clustering: 데이터간 유클리디안 거리 측정해서 가까운 k개씩 데이터를 묶는 클러스터링 모델
-유클리디안 거리를 사용하면 문제가 발생할 수 있다. 위 그림에서 파란색이 ground truth bounding box이고 빨간색이 anchor box라고 하면 왼쪽 그림이 bounding box와 anchor 박스가 가장 유사해 보여도 무시될 가능성이 많고 유클리디안 거리가 짧은 중간, 오른쪽 그림이 같은 cluster로 선택될 가능성이 높다.
-YOLOv2는 IOU 값을 활용해서 거리를 구함
d(box, centroid) = 1 − IOU(box, centroid)
-아래 그림에서 회색 박스가 pascal voc2007이고 보라색이 coco dataset, dataset에 따라 적합한 anchor box를 찾는 방법, dataset 별로 anchor box의 크기 차이 존재
-k=5일때 가장 적합했음
-cluster별 AvgIOU
hand-picked anchor box 9 사용했을 때 보다 clustering을 통해 5개를 사용할 경우 avg IoU 값이 더 좋았다.
이는 5개의 anchor box만 있어도 최적의 prior를 선택하면 detection task를 보다 쉽게 학습함을 의미한다.
-region proposal networks가 (x, y) 구하는 공식
*t_x, t_y: 예측한 anchor box의 x, y 값
t_x=1이면 anchor box의 넓이 만큼 오른쪽으로 이동
t_x=-1이면 anchor box의 넓이 만큼 왼쪽으로 이동
위 공식은 예측값에 대한 제한이 없어 anchor box가 어느쪽으로든 이동이 가능기 때문에 grid cell을 벗어난 anchor box가 생성될 수 있다.
-YOLO v2에서 제안하는 공식
anchor box의 좌표 t_x, t_y에 sigmoid function을 적용하여 grid cell의 중심이 위치하도록해 제약을 준다.
-t_x, t_y, t_w, t_h, t_o:예측해야할 값들
-b_x, b_y, b_w, b_h: 실제 GT와 IOU를 계산할 최종 bounding box의 offset 값
-c_x, c_y: grid cell 왼쪽 상단 offset의 x, y좌표
-p_w, p_h:prior로 찾은 bounding box의 width, height
-YOLO v2는 13x13 feature map을 출력하는데 이는 큰 물체는 detection을 잘하지만 작은 물체를 검출할 때는 불충분
-Faster R-CNN과 SSD는 다양한 크기의 feature map을 활용하는데 비해 YOLO v2는 passthrough layer를 추가하여 high resolution feature map(작은 물체 찾는데 용이)과 low resolution feature map(큰 물체 찾는데 용이)을 합치는 과정
-이전 layer에서 26x26x256 feature map을 가져오고 4조각으로 잘라서 stacking하듯 concat하면 13x13x2048의 feature map 생성 mAP 1% 상승
-YOLOv2는 Fully connected layer 대신 convolutional layer사용해 input size 변화가 가능해 여러 size의 이미지에 robust한 detection 성능을 내기 위함
*robust: 노이즈나 이상치(outlier) 같은 엉뚱한 데이터가 들어와도 흔들리지 않는 모델을 만들기 위한 방법
-고정된 크기의 input 대신 10 bachs 마다 랜덤하게 input size를 변경하고 이를 학습
-input 사이즈의 범위는 32 배수로 결정
input을 32배 downsampling 하므로 모델의 크기는 {320, 350,...,608} 이 범위 내에서 임의로 선택된다.
-mAP와 fps 간의 accuracy-speed tradeoff 존재
-Pascal VOC에 대해 높은 해상도에서 mAP 63.4 -> 78.6 상승, fps 45 -> 40
저해상도 mAP 63.4 -> 69.0 상승, fps 45 -> 91 fps
-COCO data SSD512>Faster R-CNN>YOLOv2
-Pascal VOC2012에 대하여 YOLOv2 73.4 mAP 달성
-COCO data에 대하여 SSD512>Faster R-CNN>YOLOv2 순으로 성능이 좋음
-대부분의 detection framework는 VGG-16을 base feature extractor로 사용하는데 이는 복잡하고 224x224 해상도에서 30.69 billion floating point operation을 필요로 한다.
*floating point operation per second(FLOPS): 단위 시간 (1s)에 얼마나 많은 floating point 연산을 하는지 성능을 나타낸다. 보통 컴퓨터의 성능을 나타내는데 사용된다. 딥러닝에서 FLOPS는 단위 시간이 아닌 절대적인 연산량 (곱하기, 더하기 등)의 횟수를 지칭한다.
-YOLO v2는 GoogleNet을 기반으로한 독자적인 DarkNet-19을 만들어 계산량을 8.52billion으로 줄였다. Top-5accuracy가 91.2%로 VGG-16의 90.0%에 비해 높게 나왔다.
-19개 convolutional layers, 5 max pooling layers
-3x3 filter, 1x1 filter => 3x3 convolution feature map 압축
-maxpooling 이후 channel 수 2배로 만듦
-fully connected layer 제거하고 global average pooling 사용해 parameters 감소 효과
-1x1 filter로 feature representation 압축
-global average pooling 채널별로 average pooling 하여 feature를 1차원 벡터로 만듦
*NIN(network in network):micro neural network(여러겹의 mlpconv layer를 쌓은 것) 를 사용 + global average pooling 사용(regularizer의 역할 overfitting 막아줌)
-class 1000개인 ImageNet 데이터셋 을 학습시킨다. 이는 global average pooling 후 output 수가 1000개인 이유이다.
160 epochs
Stochastic Gradient Descent
learning rate 0.1로 시작해 4 제곱근으로 낮춤
weight decay 0.0005
momentum 0.9
data augmentation: random crops, rotations, hue, saturation, exposure shifts
-처음에 224x224 이미지로 학습을 한 후 더 큰 이미지인 448x448로 학습할 때 10 epochs 동안 학습 할 때 위에 언급한 parameter를 fine-tuning했다. 이때 위와는 다른 점이 시작 learning rate가 0.001이다. 해당 학습 결과 top-1 accuracy 76.5%, top-5 accuracy 93.3% 성능을 보였다.
-detection을 위한 network 구조변경
-마지막 1x1x1000 convolutional layer 제거
-3x3x1024 convolutional layer 추가
-각각 뒤에 1x1x125 convolutional layer(5(Anchor Box)* (5(Coordinate)+20(Class))) 추가
*원본 이미지를 SxS grid로 나누고 각 grid는 5 anchor box 예측, 25 = 5 Coordinate + 20 class, 25 x 5= 125
-Fine-Grained Features의 passthrough의 작업을 실시
160 epochs
learning rate 시작 값 0.001
learning rate는 60과 90epoch 마다 10으로 나눔
weight decy 0.0005
momentum 0.9
data augmentaion:random crops, color shifting...
-YOLO9000
-YOLOv2이 제안하는 접근 방식
학습 할 때 detection data와 classification data를 섞은 후 같이 사용한다.
-위 접근 방식의 문제점
detection label와 classification label의 수준이 다르다는 점이다.
detection label의 예시가 'dog'라면 classification label은 더 높은 수준으로 구성되는데데 예를들어 'dog'의 품종인 'Norfolk terrior', 'Yorkshire terrior'가 있다.
따라서 이러한 label들을 일관성 있게 통합하는 방법을 찾아야했다.
multi-label 사용
softmax layer는 각 클래스들이 상호배타적(mutually exclusive)라는 가정하에 진행한다. detection data와 classification data를 합칠 경우 "Norfolk terrier”(ImageNet Dataset)와 “dog”(Detection Dataset)은 상호배타적이지 않으므로 multi-label 모델을 사용한다.
-ImageNet label로부터 hierarchical tree(계층적 트리) 구축해서 Word Tree를 구성하는 방법을 제안
*ImageNet의 label들은 WordNet 기반으로 구성됨
WordNet은 directed graph 형태
-WordNet 구조로 공통 root를 갖는 label을 묶어 트리를 생성
-Norfolk terrior는 dog, animal도 ground truth label로 propagation
-classification 할 때 conditional probability 사용
트리의 경로를 따라서 모든 노드의 조건부 확률을 곱함 특정 노드까지의 경로가 여러개일 경우에는 가장 짧은 경로를 선택
Pr(physical object) = 1라고 가정
-WordTree를 Darknet-19로 학습
-WordTree 1k를 구축하기 위해 Tree과정에서 369개 노드 생성하여 label을 1000개에서 1369개로 확장
-1369개 벡터를 예측하고 같은 개념의 하의어를 갖는 단어끼리 softmax 계산하는데 이때 softmax가 계산하는 구간의 폭이 다양함
-71% top-1 accuracy, 90.4% top-5 accuracy로 약간 감소
-위 그림은 ImageNet과 COCO dataset 합쳐서 9000개 label을 생성
-joint model 학습
-COCO dataset과 ImageNet data 합쳐 9418개 class를 가진 WordTree 생성
ImageNet dataset이 COCO dataset 보다 훨씬 많기 때문에 4:1 비율로 oversampling 함
YOLO9000 train 할 때 output size 제한하기 위해 5개가 아닌 3개 prior 사용
-Detection dataset는 classification + bbox regression 부분의 loss만 propagate
-classification dataset은 bounding box에 대한 정보는 없기 때문에 classification loss에 대해서만 propagate
-classification loss 계산시 ground truth label의 계층이나 상위 계층만 backpropagation하고 아래 계층에 내려가지 못하도록 error 부과
-COCO data로 detection + ImageNet data를 사용해 9000개 object를 classification
-위 실험에서 사용한 Dataset으 ImageNet Detection task에 사용된 data + COCO dataset
-Detection의 성능 16.0 ~19.7mAP
-동물 classfication 성능 좋음 => COCO data가 동물에 대한 object prediction을 잘하기 때문일 것
-clothing, equipment 성능 낮음
Reference
1.https://hongl.tistory.com/31 (flops)
2.https://velog.io/@whgurwns2003/Network-In-NetworkNIN-%EC%A0%95%EB%A6%AC (NIN)
3.https://www.youtube.com/watch?v=vLdrI8NCFMs&ab_channel=%EA%B3%A0%EB%A0%A4%EB%8C%80%ED%95%99%EA%B5%90%EC%82%B0%EC%97%85%EA%B2%BD%EC%98%81%EA%B3%B5%ED%95%99%EB%B6%80DSBA%EC%97%B0%EA%B5%AC%EC%8B%A4
4.https://arxiv.org/pdf/1612.08242.pdf
5.https://taeu.github.io/paper/deeplearning-paper-yolov2/
6.https://wegonnamakeit.tistory.com/9(robust)