꺼내먹는지식 준

YOLO v3 본문

AI/CV

YOLO v3

알 수 없는 사용자 2022. 3. 19. 14:32

Yolo v3 

An Incremental Improvement 

 

https://www.youtube.com/watch?v=HMgcvgRrDcA 

내가 제일 좋아하는 JinWon 님의 논문 리뷰 

직관적이고, 세세하며, 듣는 사람을 최대로 고려한 발표라 항상 도움이 많이 된다. 

다들 JinWon 님 논문 리뷰 많이 보셔요. 

 

시작전 용어 정리 

IoU, mAP 

IoU:

  • 합집합 분의 교집합

mAP:

Precision: 모델 예측 True 중, 정답 True 비율 (ex 모델 예측 100개 중 정답 10개 0.1)

Recall:  정답 True 중, 모델 예측 True 비율 (ex 정답 10개중 모델이 10개 다 예측 1 )

$\rightarrow$ 같은 상황이라도 다른 값 

  • 내가 친 bbox안에 object가 있을 확률에 대한 metric이 있다.
  • confidence의 threshold를 굉장히 높게 잡고 낮추다보면 bbox가 몇개 안남아도 bbox안에 물체가 거의 있을테니, precision 이 높은 상태에서 시작한다. (대신 Recall 이 낮다.)
  • Threshold를 낮게 잡으면 bbox가 많이 살아남아서 precision이 낮아진다. 대신 모든 물체를 찾을 확률이 높아진다. 즉, recall은 증가한다. $\rightarrow$ precision과 recall은 trade-off 관계이다.
  • 이 때 그래프의 면적을 Average Precision이라하고, class 별로 따로따로 Average Precision을 구한 것을 mAP 라 한다. 

BBox prediction 

Yolo v2와 동일 

 

미리 anchor box 를 정의해놓고, anchor box 를 얼만큼 regression 할지에 대한 부분 prediction

중심 좌표는 기존 위치에서 $\sigmoid (tx)$ $\sigmoid (ty)$ 만큼 움직인다. 즉 중심의 좌표는 [1,1] 로 움직인다는점에서 거의 변하지 않는다. 

반면 width 와 height는 $e^{t_w}$ $e^{t_h}$ 만큼 곱하여 움직인다. 

 

특징

  • bbox 마다 logistic regression으로 object score 를 갖는다. 
  • GT와 가장 overlap이 많이 되는 박스는 confidence level 이 1 이 되어야 한다. 
  • YOLO v3는 각각의 GT에 대해 bbox가 하나씩만 Assign 
  • multi label classification 이 가능 (모든 class에 대해 sigmoid로 binary classification을 통해 수행)
  • Softmax 는 각각 class가 mutaully exclusive하다는 가정 
  • 하지만 person, woman의 경우 exclusive하지 않는다. 이에 따라 multi-label 동시에 logistic regression으로 class score 예측 

 

Anchor Box

Anchor Box: 미리 predefined 된 Bbox 

사용 개수: 3가지 scales, 각 scale에 대해 3개 bbox 

$\rightarrow$ 9개 

Channel 수 255: (anchor box 개수 3 X (Box cordinates 4 X Objectness score 1 X Coco class Score 80) )

 

가지고 있는 training set 분석을 하고 k-means clustering 을 통해 bbox prior 인 anchor box 를 결정 

ex) 사람의 경우 길죽하기에 가로로 긴 bbox 는 필요 없다. 찾고자 하는 물체의 특징을 잘 반영할 수 있다. 

 

COCO data의 경우 9개의 cluster는 다음과 같다. 

작은 물체: (10X13), (16X30), (33X23)

중간 물체: (30X61) ... 

큰 물체:(116X90) ...

 

 

Bounding Box 개수 

성능을 높히려면 bbox 개수를 늘리는 방법 밖에 없다. 

 

Detection의 feature extraction의 backbone: YOLO 저자들은 직접만들어서 쓴다. 

1초 연산량 기준 Darknet-53이 제일 빠르다. 연상량 차이 + layer 수의 차이 (layer가 많아지면 메모리에 데이터 이동이 잦아지고 비슷한 연산량에서도 속도가 느려진다.)

Darknet backbone, 그 후 CNN 을 몇번 거친 후, 압축 된 feature map에서 큰 물체를 찾는다. 

그 후 feature pyramid network를 통해 작은 물체를 찾는다. 

 

Feature pyramid network

기존 SSD의 경우 feature map을 압축하는 과정 속에서 각 크기의 feature map으로부터 Bbox를 뽑아냈는데, 그때 앞단은 충분히 high level의 정보가 담기지 않은 feature map이라는 문제점이 있었다. 이에 따라 pyramid network는 압축된 feature map을 다시 키워가면서 high level의 정보를 담고있는 다양한 크기의 bbox 를 뽑아냈다. 다만 이 과정속에서 spatial 정보가 유실되기 때문에 압축 과정의 feature map과 더하여 high level 정보 + spatial 정보를 유지하였다. 

이 과정을 3번 반복하며 3개의 scale을 뽑아낸다. 당연히 앞부분의 resolution이 작으니 큰 물체를 찾고, 뒷 단이 resolution이 크니, 작은 물체를 찾는다. 

 

negative mining: 보통 detection시, bounding box 를 뽑으면 수천개가 나오고 그 중 물체는 수십개 밖에 안된다. 즉 나머지 대부분은 background 에 bbox가 쳐져있다. 이로 인해 classification할 때 background의 클래스가 너무 많아 data imalance가 심해진다. 

이를 위해 hard negative mining 방식을 사용했는데 YOLO 는 object score를 사용해서 thresholding을 해서 object가 없으면 bbox 를 날려버린다. 

 

Yolo 는 IoU= 0.5 이상이라 할 때 굉장히 강력하다. mAP  지표가 적당한지에 대한 엄청난 의문이 있다. 

IoU가 0.5만 되어도 물체와 bbox가 66% 곂치는 것이다. 또한 이는 classification에 대한 정보도 제대로 제공하지 못한다. 

 

 

둘다 mAP = 1.0 

딱봐도 Detector #1 이 Detector #2 보다 bbox가 명확하다. 하지만 mAP 는 둘다 1이다. 

왜일까? 

일단 mAP 는 class 별로 찾는다는 함정이 있다. 

Detector 2번의 경우 confidence threshold 를 계속 떨어뜨리는 과정을 통해 사람에 대한 recall 이 0에서 0.5로, 또 0.5에서 1로 올라간다. 

근데 사실 하단의 bbox는 이상한 곳에 가서도 많이 쳐졌는데, 이건 전혀 고려가 안되고, 또한 mAP 를 계산할 때 위 그림과 같이 recall값이 높은 기준으로 맞춰 버리기 때문에 1이 되었다. 

이 경우 사람 class 에 대한 precision과 recall 모두 1이 되어버린다. 

이에 따라 저자는 mAP 가 좋은 지표인가에 대해 강력하게 의문을 제기한다. 

'AI > CV' 카테고리의 다른 글

COCO data 처리  (0) 2022.03.22
mAP란? FLOPs 란?  (0) 2022.03.21
3D Understanding  (0) 2022.03.17
Multi modal learning  (0) 2022.03.17
Conditional generative model  (0) 2022.03.16
Comments