Object Localization

첫번째, 두번째는 보통 하나의 오브젝틀 대상으로 함. 반면 세번째는 여러개의 오브젝트.

 

[Classification with localization]

classification 모델에 bounding box를 출력하는 output unit을 추가할 수 있음

 

$b_{x}$, $b_{y}$, $b_{h}$, $b_{w}$ -> detect된 오브젝트의 bounding box

 

이미지 notation

 

학습셋이 라벨 뿐만 아니라 이 네가지 숫자 $b_{x}$, $b_{y}$, $b_{h}$, $b_{w}$ 도 포함하고 있음

--> need to output $b_{x}$, $b_{y}$, $b_{h}$, $b_{w}$, (probability of) class label

 

*사진 속에 오브젝트는 한 개 있다고 가정

 

네 개의 라벨

1 - 보행자

2 - 자동차

3 - 오토바이

4 - 배경

 

$$\begin{bmatrix}P_{c} \\ b_{x} \\ b_{y} \\ b_{h} \\ b_{w} \\ c_{1} \\  c_{2} \\  c_{3} \end{bmatrix} $$

- $P_{c}$ : 오브젝트가 있으면 1, 없으면 0

- $b$ : bounding box 정보

- $c$ : 1, 2, 3번 라벨이다 아니다 (1, 0)

 

예를 들어, output이 $\begin{bmatrix}1 \\ b_{x} \\ b_{y} \\ b_{h} \\ b_{w} \\ 0 \\  1 \\  0 \end{bmatrix} $ 이면 input x에 오브젝트가 있고 자동차로 분류가 된 것임

한편  output이 $\begin{bmatrix}0 \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \end{bmatrix} $ 이면 오브젝트가 이미지에 없으므로 "don't care"

 

이러한 식으로 training set도 정의할 수 있음

 

*Loss Function

$$L(\hat{y}, y) =  \begin{cases}(\hat{y}_{1} - y_{1})^{2} + (\hat{y}_{2} - y_{2})^{2} +  \ldots +(\hat{y}_{8} - y_{8})^{2} & if\ y_{1} = 1\\ (\hat{y}_{1} - y_{1})^{2} &  if\ y_{1} = 0 \end{cases}$$

 

- output 벡터에 8개 요소가 있으므로 예측값도 8개

- $y_{1} = P_{c}$, 즉 오브젝트가 있을 확률. 오브젝트가 있는지 없는지에 따라 loss 계산

- 단순한 표기를 위해 위처럼 표기했지만 실제로는

     - $c$ 값에는 log likelihood loss, bounding box 값에는 squared error, $P_{c}$값에는 logistic regression loss

 

 

Landmark Detection

눈 끝에 대한 정보를 찾고 싶다고 하자 - 좌표값 $l_{x}$, $l_{y}$

 

이번에는 눈 양쪽 모두에 대한 정보를 필요로 한다고 해보자 - 왼쪽부터 좌표값 $l_{1x}$, $l_{1y}$, $l_{2x}$, $l_{2y}$, $l_{3x}$, $l_{3y}$, $l_{4x}$, $l_{4y}$

 

눈, 코, 입을 둘러싼 좌표들을 모두 필요로 한다면?

예를 들어 64개의 얼굴 랜드마크? ... $l_{64x}$, $l_{64y}$

 

이제는 턱라인까지...

 

신경망 구조

- 사람 이미지 입력

- conv net 통과

- output vector : 얼굴이 있는지, $l_{1x}$, $l_{1y}$, ..., $l_{64x}$, $l_{64y}$ --> 총 129개의 output units

 

랜드마크 모두 annotated된 학습 데이터셋 필요, 포즈 detection도 마찬가지

 

 

Object Detection

car detection의 예

 

자동차만을 가까이서 크롭한 이미지로 convnet 학습

 

[Sliding Windows Detection]

학습된 convnet에 빨간 구역을 입력 -> 빨간 네모를 슬라이드하여 이미지의 모든 영역을 살펴보게 함

 

빨간 네모의 크기를 키워서 다시 모든 구역 살펴봄

크기 또 키워서 반복

 

*단점

- computational cost - 네모 박스로 이미지의 모든 영역을 훑어야 함, stride를 덜 촘촘하게 하면 (적은 윈도우수) 좀더 빠르게 할 수 있겠지만 성능에 영향을 줌

 

 

Convolutional Implementation of Sliding Windows

[Turning FC layer into convolutional layers]

softmax 레이어를 통과한 $y$값을 네 개의 클래스로 분류할 네 개의 확률값들로 보기로 함

 

마지막 세 개 레이어(FC, FC, softmax)를 conv layer로 바꾸기?!

 

1) 5 x 5 x 16 볼륨에 5 x 5 (x 16) 모양의 필터 400개를 적용한다

그러면 400개 노드를 가진 FC 레이어는 1 x 1 x 400 볼륨이 된다 -> 수학적으로 다르지 않다고 함

Each of these 400 values is some arbitrary linear function of these 5x5x16 activations from the previous layer

2) 1 x 1 x 400 볼륨에 1 x 1 필터 400개를 적용하고, 거기에 다시 1 x 1 필터를 적용

4개 값을 출력하는 softmax 레이어를 대체할 1 x 1 x 4 볼륨을 출력한다

 

 

[Convolution implementation of sliding windows]

*<Overfeat> 논문

 

위에서 한 거 그대로 가져옴

*볼륨의 전면만 그린 상태

 

test set의 이미지가 16 x 16 x 3 이미지라고 해보자

매우 작은 이미지임에도 불구하고 14 x 14 사이즈의 window를 네 번이나 slide 해가며 conv 연산을 함으로써 네 개의 예측값을 받아냄

- highly duplicative

 

 

네번이나 conv 연산을 수행하는 대신에, 이미지를 그대로 입력해서 동일한 필터들을 적용한다 (한번의 forward computation)

최종 2x2x4 볼륨 - 왼쪽 상단은 window가 파란 영역에 그대로 있을 때, 오른쪽 상단은 window가 오른쪽으로 한번 이동했을 때, 왼쪽 하단은 window가 아래 왼쪽으로 slide 했을 때, 그리고 오른쪽 하단은 window가 오른쪽 아래에 있었을 때로 상응하게 됨

(*색깔 칠해진 거 체크)

 

조금 더 큰 이미지일 때도 마찬가지

이때 중간의 2 x 2 max pooling으로 인해 원본 이미지 위해서 stride =2 로 신경망 작동시키는 것과 마찬가지가 됨

 

두번째 레이어 16 x 16  이 아니라 24 x 24  라고 함

타겟 오브젝트를 발견할 때까지 window를 슬라이딩 해가며 매번 conv 연산을 수행할 필요가 없음

 - 전체 이미지를 하나의 conv 신경망에 한번 통과시켜서 타겟 오브젝트의 위치를 파악할 수 있다

 

 

'인공지능 > DLS' 카테고리의 다른 글

[4.3.] Detection Algorithms(3)  (0) 2022.08.02
[4.3.] Detection Algorithms(2)  (0) 2022.08.01
[4.2.] Practical Advice for Using ConvNets  (0) 2022.07.27
[4.2.] Case Studies(2)  (0) 2022.07.26
[4.2.] Case Studies(1)  (0) 2022.07.24
복사했습니다!