코딩일기

[논문리뷰] You Only Look Once (feat. YOLO v1, Deep learning VISION) 본문

Paper Reviews

[논문리뷰] You Only Look Once (feat. YOLO v1, Deep learning VISION)

daje 2021. 5. 6. 21:47
728x90
반응형

 

 

출처 : 이미지 링크 참조

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 어마어마하게 인용이 된 You Only Look Once 논문리뷰를 진행토록 하겠습니다. 

 

해당 리뷰는 You Only Look Once논문과 여러 블로그들을 참고하여 작성되었습니다. 

부족한 부분이나 잘못 해석한 부분이 있다면 댓글 부탁드립니다. 

 

 


 

 

1. 등장배경

Vision Deep Learning의 궁극적인 목표는 사람처럼 인지하는 컴퓨터 모델을 만드는 것입니다. 

사람은 이미지를 한번 보면 이것은 어떤 객체이고, 어디에 있고, 배경은 무엇인지 한번에 알 수 있습니다. 

R-CNN과 같은 Detection System들은 복잡한 처리과정으로 Human Visual System을 모방하기에는 한계점이 있었습니다. 

 

<이미지 처리 발전 과정>

① 사진을 주고 Object가 있는지 없는지 분류하고

② 있다면 어디에 있는지

③ 여러 개의 Object가 있다면 어떻게 찾는지 

④ 사람처럼 인식할 수 있도록 연산속도를 올리는 방법은 없는지

⑤ Object의 모양까지 인지할 수 없는지 

 

오늘은 ④ 고민에 해당하는 "연산속도를 어떻게 높였는지"에 대해서 알아보도록 하겠습니다. 

먼저 YOLO는 Object detection을 회귀의 관점으로 접근하여 성능을 향상시켰다는 점에서 신선한 충격을 주었습니다. ( 기존에는 모두 분류의 관점을 접근하였습니다. ) 성능을 평가하는 방법으로는 mAP와 FPS라는 척도를 사용하는데요.  mAP는 mean average Precision의 약자로 평균적인 정확도, FPS는 1초에 몇개의 이미지를 처리하는지를 나타냅니다. 일반적으로 사람은 30fps가 넘는다면 사람이 인식하는 것처럼 실시간 처리가 된다고 말합니다. 즉, YOLO는 30FPS를 넘기에 실시간 처리가 가능하게 되는 것이죠!

논문에 기재된 속도측정 결과를 한번 보고 넘어가도록 하겠습니다. 

 

 

 

2. YOLO v1의 장점 

 -. 처리 속도 빠름 

 -. end-to-end 형태의 inference(One-Stage Detector)

 -. 낮은 backgound error(배경에 대한 error가 낮아짐)

 -. 좋은 일반화 성능(인물, 자연, 그림 등에서도 좋은 성능)

 

 

3. YOLO v1의 단점

 -. 작은 물체에 대해 Detection 성능이 떨어짐

 -. state-of-the-art에는 미치지 못한 성능( 등장 당시, 최고의 성능을 보인 것은 아님 )

 

 

4. 작동원리

 

(1) Input image를 S X S개의 grid(그리드)로 나눕니다.

 

YOLO에는 기존의 모델에는 없었던 다양한 이점들이 있습니다. 우선 모델이 이미지 전체를 보고 바운딩 박스를 예측할 수 있습니다. 즉 모델이 이미지의 전역적인 특징을 잘 이용해서 추론할 수 있습니다. 그리고 Unified Detection이라는 용어 그대로 모델은 bounding box regression과 multi-class classification을 동시에 수행할 수 있습니다. 

 

(2) 각 grid에서는 B개의 Bounding Box와 Conditional Class Probability(확률)를 예측합니다. 

 

  1) B개의 Bounding Box는 각각 Confidence Score를 계산하여 가장 높은 값을 가진  Bounding Box가 해당 grid의 대표 값이 됩니다.

    * Confidence Score는 Bounding Box가 예측하는 5가지(x, y, w, h, Confidence) 값들에 의해서 결정됩니다. 

    * (x,y) : Bounding box의 중심점을 의미하며, grid의 범위에 대한 상대값으로 표현됩니다. 
    * (w,h) : w,h는 Bounding box의 너비와 높이로써 전체 이미지에 대해 상대값으로 표현됩니다.  

    * Confidence Score : $Pr(Object)∗IOU^{truth}_{pred}$ 는 아래 그림과 함께 보도록 하겠습니다. 

    * $Pr(Object)$ : Bounding Box 안에 물체가 있을 확률 

    * $IOU^{truth}_{pred}$ : 학습데이터의 Bounding Box와 predicted Box의 교집합 / 학습데이터의 Bounding Box와 predicted Box의 합집합 ( 아래 그림에서는 Detection Box = 학습데이터의 Bounding Box)

 

출처 : 이미지링크 참조

 

  2) Conditional Class Probability(확률) 예측 방법 

  -. Conditional Class Probability(확률)는 분류한 클래스의 확률입니다.

  -. 기호로는 Conditional Class Probability : $Pr(Class_{i}|Object)$로 표현하며 B가 배경이 아닌 객체를 포함하는 경우의 각 클래스의 조건부 확률입니다.

  -. B가 배경을 예측했다면 확률은 0이 된다. 최종적으로 클래스 조건부 확률 C와 각 바운딩 박스의 Confidence 예측 값을 곱하면 각 박스의 클래스별 Confidence Score 수치를 구할 수 있습니다.

 

 3) class-specific confidence score는 confidence score와 Conditional Class Probability을 곱하여 얻게 됩니다. 

  -. $ClassSpecificConfidenceScore$

  $=ConfidenceScore * ConditionalClassProbability$

  $=Pr(Class_{i}|Object) * Pr(Object) * IOU^{truth}_{pred}$

  $=Pr(Class_{i}) * IOU^{truth}_{pred}$

 

 

5. Network Design

출처 : 이미지링크 참조

 

지금부터 YOLO가 이미지를 학습하고, 예측하는데 이용하는 전체 네트워크 디자인과 손실 함수(Loss Function)을 간단히 소개하고자 합니다. 위 그림은 YOLO의 전체 네트워크 구조를 보여줍니다. YOLO는 24개의 Convolutional Layer(Conv Layer)와 2개의 Fully-Connected Layer(FC Layer)로 연결된 구조를 사용하고 있습니다. 설명을 쉽게 하기 위해서 논문에서 제공한 그림에서 크게 Pre-trained Network, Training Network 그리고 Reduction Layer 영역을 그려서 구분하였고 지금부터 각 영역을 소개드리겠습니다. 

 

5-1. [Pre-trained Network]


주황색 테두리로 표현한 부분은 GoogLeNet을 이용하여 ImageNet 1000-class dataset을 사전에 학습한 결과를 Fine-Tuning한 네트워크를 말한다.이 네트워크는 20개의 Conv Layer로 구성되어 있다. 이미지는 448 x 448 x 3 shape으로 넣어주어야 한다. 

 

또한, 여기서 위 그림 맨 왼쪽 하단에 기록된 것을 보시면 여러가지 숫자가 기재되어 있는 것을 보실 수 있습니다. 

저는 처음에 이부분을 이해하지 못하였는데, 제 동기분께서 친절히 설명해주셔서 이해하게 되었습니다. 간단히 설명 드리겠습니다. 

 -. Conv Layer 7x7x64-s-2는 7 x 7filter를 가지고 64개의 Feature Map을 만들게 됩니다. 

 -. 이때 filter는 stride를 2로 설정되어 있으며, 2칸씩 움직이게 됩니다. 

 -. Max pooling-s-2도 pooling방식은 Max pooling이고 stride는 2라는 의미입니다. 

 -. 그 다음보시면 122 x 122 x 64로 기재되어야 할거 같은데 122 x 122 x 192로 기재가 되어 있습니다. 

 -. 이것은 122 x 122 x 64를 122 x 122 x192로 변경하겠다 라는 의미에서 이렇게 그림이 도식화되어 있는 것 입니다.이와 같은 방법으로 쭉쭉 Conv가 진행이 됩니다.

 

 

5-2. [Reduction Layer]


보통 네트워크는 깊을 수록 더 많은 특징을 학습하기 때문에 정확도가 높아지는 경향이 있습니다. 하지만 Conv Layer를 통과할 때 사용하는 Filter 연산이 수행시간을 많이 잡아 먹기 때문에 무작정 네트워크를 깊게 쌓기에는 부담이 됩니다.
이 문제를 해결하기 위해 ResNet, GoogLeNet 등의 기법이 제안되었는데 위 그림에 오렌지 색 테두리로 된 영역에서는 GoogLeNet의 기법을 응용 하여 연산량은 감소하면서 층은 깊게 쌓는 방식을 이용하였다.

이 부분이 잘 이해가 되지 않으실텐데 이렇게 한번 생각해보겠습니다. 

Layer1(5개 노드)가 있고 Layer2(5개 노드)가 있습니다.  그렇다면 이들의 가중치는 몇개가 될까요? 25개죠?

 

 

5 * 5 노드(가중치 25) - 직접제작한 이미지

 

그런데 이들 사이에 1개의 노드를 가지고 있는 층이 넣어보겠습니다. 

그렇다면 가중치가 확 주는 것을 보실 수 있습니다. 이제 노드가 1만개 이상 된다고 생각해보시면 연산량은 정말 어마무시하게 줄어들게 됩니다. 그렇다면 당연히 연산속도는 상승될 수 밖에 없습니다. 이 개념을 구글넷에서 처음도입하였고, 해당 논문의 저자는 이를 차용하였다고 밝혔습니다. 위 그림에서 보시면 중간중간 1 x 1 계산이 들어가 있는 것을 보실 수 있습니다. 모두 이러한 개념이 적용된 것입니다. 

 

5 * 1 * 5 노드(가중치 5) - 직접제작한 이미지 

 

5-3. [Training Network]


[그림 8]에 파란색 영역인 Training Network는 Pre-trained Network에서 학습한 feature를 이용하여 Class probability와 Bounding box를 학습하고 예측하는 네트워크입니다. 위에서 저희 살표본 살짝 복잡한 내용이 모두 끝나 있는 상태입니다. 이 pre-train하기 위해 무려 7일이나 학습을 진행했다고 합니다. 그러니, 전 너무 감사한 마음으로 사용하고자 합니다!

 

이렇게 학습된 모델로 예측을 하게되면 YOLO의 예측 모델은 S x S x (B * 5 + C) 개의 파라미터를 결과로 출력이 됩니다. 해당 논문에서는 S를 7로 주고 B(Bounding Box)는 2로 주고 C(분류)는 20로 설정하였기 때문에 7 x 7 x 30의 Conv가 완성이 된다. 

 

 

이렇게 까지 따라오셨으면 다 따라오신 겁니다. 

그런데, 여러분 먼가 직관적인 이해가 안되시지 않나요? 

저는 잘 안되더라구요 이게 도대체 그래서 어떻게 되는건데? 라는 생각이 들었습니다. 

 

5-4. [추가적인 설명]

 

이에, 어느 러시아분들께서 정말 기똥차게 만들어놓은 PPT로 추가적인 설명을 드리겠습니다. 

참고슬라이드: Deep System’s YOLO - 15~70p

 

 

 

이 그림으로 7 x 7 x 30이라는 Conv에서 30이 과연 무엇을 말하는지부터 설명드리겠습니다. 

위에서 해당 논문은 BB(Bounding Box)를 2개 사용하였고, Bounding Box 1개당 5개의 정보를 예측한다고 설명드린바 있습니다. 이 내용을 그림으로 도식화해보면 위와 같이 5개가 나열되는 것을 보실 수 있습니다. 

 

 

BB(Bounding Box)를 2개 사용하였으므로 2번째 BB(Bounding Box)가 나열되는 것을 보실 수 있습니다. 

 

30에서 10개가 BB(Bounding Box)이고 나머지 20개가 있는데요. 20이라는 숫자 우리가 위에서 살펴본 바 있습니다. 

네! 맞습니다. 바로 분류의 갯수 입니다. 이렇게 5+5+20 = 30이 완성이 됩니다. 즉, 분류중에 개를 예측했겠지요?

 

 

이렇게 예측을 하였다면 저희는 Confidence Score와 Conditional Class Probability를 이용하여 Class Specific Confidence Score를 구할 수 있습니다.

 

이 49개의 grid에 2개씩 Bounding Box가 생성되므로 총 98의 BB(Bounding Box)가 계산되며, 98개의 Class Specific Confidence Score를 얻을 수 있습니다.

이 98개의 Class Specific Confidence Score에 대해 각 20개의 클래스를 기준으로 non-maximum suppression을 하여, Object에 대한 Class 및 bounding box Location를 결정합니다.

 

6. Loss Function

 

이제 진짜 마지막으로 Loss Function에 대해서만 살펴보면 끝이 납니다.

조금만 더 힘을 내어주세요!!

 

6-1. Loss function에 사용된 기호들을 먼저 설명드리겠습니다. 

 -. $1^{obj}_{ij}$ : Object가 존재하는 grid cell i의 predictor bounding box j
 -. $1^{noobj}_{ij}$ : Object가 존재하지 않는 grid cell i의 bounding box j
 -. $1^{obj}_{i}$ : Object가 존재하는 grid cell i
 -. Ground-truth box의 중심점이 어떤 grid cell 내부에 위치하면, 그 grid cell에는 Object가 존재한다고 여깁니다. 

 

6-2. Loss Function:

 (1) Object가 존재하는 grid cell i의 predictor bounding box j에 대해, x와 y의 loss를 계산
 (2) Object가 존재하는 grid cell i의 predictor bounding box j에 대해, w와 h의 loss를 계산

   -. 큰 box에 대해서는 small deviation을 반영하기 위해 제곱근을 취한 후, sum-squared error를 한다

   -. 같은 error라도 larger box의 경우 상대적으로 IOU에 영향을 적게 준다
 (3) Object가 존재하는 grid cell i의 predictor bounding box j에 대해, confidence score의 loss를 계산
 (4) Object가 존재하지 않는 grid cell i의 bounding box j에 대해, confidence score의 loss를 계산
 (5) Object가 존재하는 grid cell i에 대해, conditional class probability의 loss 계산

$λ_{coord}$ : coordinates(x,y,w,h)에 대한 loss와 다른 loss들과의 균형을 위한 balancing parameter
$λ_{noobj}$ : obj가 있는 box와 없는 box간에 균형을 위한 balancing parameter

 

 

7. Conclusion : YOLO v1의 한계는 다음버전에서 모두 수정하였기에 빠르고 좋은 모델이다

논문에 기재된 분석 이미지 사진

 

8. 참고문헌

 -. 논문링크

 -. 논문리뷰 블로그

 -. 논문리뷰 블로그

 -. 논문리뷰 블로그

 

 

지금까지 긴 글을 읽어주셔서 감사드립니다. 

 

혹시 도움이 되셨다면 공감 부탁드립니다. 

 

감사합니다. 

728x90
반응형
Comments