티스토리 뷰

 

"해당 포스팅은 Coursera 에서 수강한 Andew Ng 의 deep learning specialization 코스를 요약한 것입니다." 


1. Object Detection 의 Y 라벨 

우선 object localization &Classification 을 할 때 주어지는 Y label 을 살펴보면 다음의 3가지이다. 

  • 해당 box 에 object 가 있을 확률 (background 제외) 

  • bounding box 좌표

  • Class probability

예를 들면 이렇다. 

$$Y = \begin{bmatrix}
P_c\\ 
b_x\\ 
b_y\\ 
b_w\\ 
b_h\\ 
c_1\\ 
c_2\\ 
c_3\\
\end{bmatrix}$$

 

여기서 $P_c$ 가 object 가 있을 확률 

$b$ 로 시작하는 것들이 bounding box 좌표와, width 랑 height 이고 

$c$ 로 시작하는 것들이 각 class 에 대한 probability 

 

+ 저 3가지 종류의 Label 의  cost 를 구하기 위해서는 각기 다른 cost 함수를 쓴다. 

예를 들어서 $P_c$ 는 logistic regressions error, 좌표의 경우는 squared error, 그리고 class probability (classification) 의 경우는 log likelihood error 를 사용해서 cost 를 구한다. 

2. Landmark Detection 과 Y 라벨 

Object detection 의 하위 분야로는 Landmark detection 이라는 게 있는데, 말그대로 주어진 이미지에서 여러개의 Landmark 를 detect 하는 것을 의미한다. 이게 어디서 쓰이냐면, 예를 들어서 face swapping 할 때, 눈 / 코/ 입을 감지해서 그 부분만 감지해서 스와핑을 하고 이런식임. 마찬가지로 pose detection (자세 감지)를 할 때도 머리/ 팔/ 손/ 다리 / 발을 detect 에서 자세를 classify 하는 거임.

 

이런 Landmark 의 Y Label 은 무엇으로 이루어져 있을까? 우선 bounding box 가 아니라 콕콕 점을 찍어서 (예. 왼쪽 눈의 왼쪽 모서리, 왼쪽 눈의 오른쪽 모서리) 나타내는 거기 때문에 x,y 좌표만 있으면 된다. 

 

위와 같이 여러개의 주어진 좌표가 있고, $l_1x$ $l_1y$ 부터 $l_64x$, $l_64y$ 가 있다. 이 때 각 좌표가 감지하는 부위는 고정이다. 즉, $l_1x$, $l_1y$ 는 항상 왼쪽 눈의 왼쪽 모서리, $l_2x$, $l_2y$ 는 항상 왼쪽 눈의 오른쪽 모서리를 나타내는 좌표여야 한다는 거임. 

그리고 여기에 하나 더해서 해당 이미지에 원하는 object 가 있을 확률 $P_c$ 도 있어야 한다. 즉, 총 Y label 은 아래와 같음. 

$$Y = \begin{bmatrix}
P_c\\ 
l_{x1}\\ 
l_{y1}\\ 
l_{x2}\\ 
l_{y2}\\ 
...\\ 
l_{64x}\\ 
l_{64y}\\
\end{bmatrix}$$

 

3. Sliding window 의 한계와 대안 - Convolution Implementation of sliding windows 

복습을 해보자면, Sliding window 는 말 그대로 이미지의 모든 부분을 작은 window 로 훑어가면서 crop 된 부분이 원하는 object 인지 아닌지 (car 인지 아닌지) 를 classify 하는 문제였다 (binary classification).

이 때 사용된 conv net classifier 는 해당 objecct 에 꼭 맞게 crop 된 이미지만을 가지고 훈련된 모델임. 

 

이 때, 각기 다른 사이즈의 window 로 stride 크기를 달리하면서 이미지 전체를 훑고 난 후, 각 이미지 crop 을 classifier 로 패스한다. 이 때, 때, 꼼꼼하게 이미지를 훑기 위해서는 window size 와 stride 크기가 작아야 하는데 그 의미를 crop 이미지가 많다는 의미이고, 이 이미지가 많을 수록 heavy computation 이 된다. (각 이미지를 conv net 에 pass 해야 하므로)

 

그렇기 때문에 이것을 보안하기 위해서 그냥 이미지 전체를 conv net 에 통과시키면 이미지 전체에 대한 representation을 output 으로 얻게 된다. 이 representation 의 각 부분을 한꺼번에 softmax classifier 로 통과시키는 거다.

 

즉, 이전에는 sliding window 를 통해서 4개의 crop 이미지 (맨 왼쪽 이미지에서 빨강, 초록, 노랑, 보라 부분) 를 뽑아서 그걸 각각 conv net 으로 통과시켰는데, 이제 전체 이미지를 한번만 conv net 에 통과시킨 후 얻은 결과를 softmax classifier 로 통과시켜서 한번에  모든 위치를 classify 하는 거임. 

 

Convolution Implementation of sliding windows

좀 더 큰 이미지를 가지고 하면 다음과 같다. 맨 왼쪽 이미지의 첫번째 사각형이, 맨 오른쪽 이미지의 작은 사각형 한칸으로 represent 됨. 

 

4. Bounding box prediction (feat. YOLO) 

이미지 전체를 한번만 conv net 에 pass 함으로써 sliding window 가 가진 heavy computation 의 문제는 해결했다. 그런데 아직도 한가지 문제점이 있음. sliding window 는 크기가 정해져 있기 때문에, 정확한 boudning box 를 그리는 것이 어렵다. window 사이즈가 너무 크면, 여러 개의 object 가 포함될 수도 있고, 너무 작으면 비효율적이다. 

 

결론 => YOLO to the rescue

YOLO 의 장점

  • Bounding box 의 좌표 (x, y, w, h) 를 output 하기 때문에, 각 object 마다 각각 다른 크기, 정확한 좌표 가능. 

  • Input Image 를 한번만 conv net 에 통과 시키기 때문에 스피드도 빠름 

원리를 짧게 이미지로 설명하면 다음과 같다. 

 

최종 output : 각각의 grid 마다, 8개의 y output ($P_c$, 좌표, class probability) 

 

예를 들어, 다음과 같은 Y label 이 가능. 

$$Y = \begin{bmatrix}
1\\ 
0.4\\ 
0.3\\ 
0.9\\ 
0.5\\ 
0\\ 
1\\ 
0\\
\end{bmatrix}$$

 

이 때, $b_x$ 와 $b_y$ 는 항상 0~1 사이의 값이다. 이 좌표는 bounding box 의 가운데 점 (mid point) 를 가리킨다. 그리드의 upper left 를 (0,0) 그리고 lower right 을 (1, 1) 로 보기 때문에 이 좌표는 항상 0~1 사이의 값을 갖는 거임. 반대로 $b_w$ 와  $b_y$ 를 1보다 클 수도 있다. 이건 grid cell 에 상대적인 값이기 때문에, grid cell (= size 1) 보다 크다면 당연히 1보다 큰 값을 갖는다. 

 

5. Bounding box evaluation 

Bounding box 는 어떻게 evaluate 할까? IoU 를 가지고! 아래 슬라이드 한장이면 설명 끝. 간단하게 설명하면 output 과 ground truth 의 겹치는 부분을 평가한다. 

Red box - Gorund truth / Purple box - Output 

6. Bounding box 필터링하기 : Non-max suppression

앞서 각각의 grid 마다, bounding box 의 mid point 좌표와, width 와 height 를 output 한다고 배웠다. 그런데 여기서 문제점은 하나의 object 에 대해서 여러 개의 bounding box 가 생길 수 있다는 것! 그렇기 때문에 비슷한 곳에 위치한 bounding box 는 heighest score 를 가진 것들 빼고는 모두 filter 해줘야 한다. 그런데 어떻게 filtering 하냐고?

 

위와 같은 이미지가 있다고 가정할 때, 각 grid $ \begin{bmatrix}
P_c\\ 
b_x\\ 
b_y\\ 
b_w\\ 
b_h\\ 
\end{bmatrix}$ 의 output 이 있을 거임. 여기서 $P_c$ 가 0.6 이하인 것을 모두 filter 한다. 

그 다음, highest score 를 가진 bounding box 를 prediction 으로 output 하고, stack 에서 제거한다. 그리고 이 box 와 IoU 가 0.5 이상인 박스를 모두 지운다. 이 과정을 remaining box 가 있을 대까지 반복한다. 

 

아래의 이미지가 Non-max suppression algorithm 를 설명한 것인데, 만약에 3 개의 object 를 detect 한다고 하면, 이 알고리즘을 3개의 class 에 대해서 3번 독립적으로 시행해줘야 한다. 

 

7. 그리고 대망의 Anchor box 

여태까지 배운 걸 토대로 하면, 하나의 grid 는 하나의 object image 에만 mapping 됐다. 즉, 하나의 grid 는 한 개의 output ($P_c$ + 좌표 + class probability) 를 return 했다. 한 개의 grid 는, 하나의 object 의 mid point 만을 포함한다고 가정한거다. 근데 만약에 한 개의 grid 에 두 개 이상의 object 의 mid point 가 있으면 어떻게 하지? 이 경우에는 한 개의 object 만 detect 하고 나머지는 다 무시했다. 

 

이것을 보완하기 위해서 anchor box 가 등장했다! 뚜둥

아래 슬라이드에서 보이듯이 이전에는 y 하나에 8개의 값이 있었음 (이미지가 있을 확률 + 좌표 + 클래스 확률). 그런데 이제 이 값을 anchor box 하나당 mapping 시키는 거라, 총 y는 각 anchor box 의 output 을 쌓아올린 값이 됨. anchor box 가 2개면 총 16개의 값을 y 로 ouptut. 

 

여기서 내가 헷갈렸던 부분! 각 anchor box 는 width 랑 height 가 고정값으로 가지고 있을텐데, 왜 $b_w$ 랑 $b_h$ 값을 여전히 반환하는거지? 하는 궁금증이 있었다. 그런데 각 anchor box 마다 width 랑 height 는 초기값이 고정값으로 주어지는 거고 training 을 통해서 update 되는 값이다. anchor box 는 starting baseline guess 라고 보면 됨. 이게 없을 경우 Arbitrary initiali guess 때문에 training 이 안정적이지 않다고 함 (forum 내용) 

앞서서 하나의 grid 에 여러 개의 object 의 mid point 가 있는 것을 대비해 anchor box 를 도입했다고 했다. 하지만 실제로 anchor box 의 장점은 각 anchor box 가 각 객체에 specialized 된 특징을 갖게되는 것이라고 한다. 왜냐면 실제로 여러개의 이미지의 mid-point 가 하나의 grid 에서 겹치는 경우는 많이 없기 때문에... 

8. 이 모든 것을 합친  YOLO 라는 강력한 놈 (bounding box + anchor box + non max suppression

8.1 YOLO Training 

YOLO 에서 쓰이는 ground truth Y 는 아래 슬라이드와 같다. 2개의 anchor box 가 있기 때문에, 총 16개 값. 슬라이드에 보면 총 3개의 output 예시가 있는데 가운데의 ground truth 는 해당 grid 에 object 가 아예 없을 경우 (모든 $P_c$ = 0). 마지막 ground truth 예시는 2번째 anchor box 가 object 를 포함한 경우 (1번째 anchor box 는 2번째 box 랑 같은 object 를 detect 하면서 IoU 가 크기 때문에 1번째 anchor box 의 $P_c$ = 0 으로 설정) 

? 값은, 값이 없는게 아니라 중요하지 않은 값이라는 의미. ?에 어떤 값이 들어가든 cost 를 계산하는데 들어가지 않기 때문이겠지? 

8.2 YOLO Prediction 

위에서 말했듯이 YOLO 는 ? 라는 값을 output 하지 않기 때문에 ... 는 random 한 숫자이지만 cost 계산에는 영향을 미치지 않음. 

8.3 YOLO non-max suppression 

 

9. (Optional) Region Proposal 

귀찮으니까 슬라이드로 대체

Key : sliding window 의 모든 부분을 classification 하는 것이 아니라, 이미지에서 interesting 한 region 만 propose 해서 그걸 classify 하는 방식. 그래서 Region proposal + classification 이라는 2가지 step 이 필요하지만 YOLO 는 한번에 다 처리하기 때문에 더 선호하는 방식. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함