정리노트
Deep Learning (13)_ Object Detection 본문
지난 포스팅에서
CNN에 대해 3번에 걸쳐서 다뤄보았다.
Convolution Layer는 해당 이미지 Pixel 안의 Data를 Input으로
특징정보를 추출 해주는 일종의 Filter고,
이런 Convolution Layer를 이용해 만든 Neural Network를 바로 CNN이라고 한다.
이번 포스팅에서는 CNN을 이용해서
객체 탐지, 즉 Object Detection을 진행하는 것에 대해 다뤄보도록 하겠다.
◆ 목차
◎ Localization & Detection
◎ Classification With Localization
○ Loss Function
◎ Convolution implementation of Sliding Windows
○ Replace FC Layer to Convolution Layer
◎ Localization & Detection
먼저 아래 그림을 이해해보도록 하자.
단순히 들어온 Pixel 데이터로 해당 영역의 Pixel 정보가 무엇을 담는 정보인지 Classification하는
"Image Classification"
여기에 해당 객체 주변에 Bounding Box를 그려서 "Localization" 해주는
"Classification with Localization",
이 Localization개념을 이용해 이미지에서 하나의 Object가 아닌 여러 Object를 인식하는 것을
"(Object) Detection"
이라고 한다.
◎ Classification With Localization
Object Detection을한다는 것을 한마디로 정리하면
이미지 내의 Pixel정보에서 하나 이상의 객체에 대해서 Classification과 Localization을 진행하는 것을 말한다.
이를 처리하는 방법은 아래와 같다.
보통 Supervised Learning에서는
Classification과 Regression으로 나눌 수 있는데,
Object Detection에서는 특이하게도 두가지가 섞인 Label을 사용한다.
이미지 내 어떤 부분을 Localization할 것인가?
-> bx,by(Location) , bh, bw(Box Size)
Numeric Value를 예측하는 Regression.
Localization된 이미지는 어떤 Class인가?
-> Class Classification
Bounding Box내 Pixel정보가 어떤 Class인지 알아맞추는 Classification.
이에대한 Target Label은
Pc : Object가 존재하는가? (0 or 1)
bx : Bounding Box의 중심점 x 위치
by : Bounding Box의 중심점 y 위치
bw : Bounding Box에서 x width
bh : Bounding Box에서 y height
c1~c3 : 각 Class에 대해
* Class는 4개인데 왜 c1~3로 3개뿐인가?
-> Background 라는 Class는 No Object인 경우로, Pc = 0일경우다. 이경우 나머지 벡터값은 모조리 무시된다.
* Pc = Pc1+Pc2+Pc3에 대한 값과 같아진다.
○ Loss Function
그리고 이에대한 Loss Function은 아래와 같다.
(일반적으로 Machine Learning에 쓰이는 Loss와는 다른것을 알 수 있다.)
y1 = 1인경우,
y1 Clssification ... : Binary Classification 에서 Loss Function으로 주로 쓰이는 Binary Cross Entropy
y2~y5 Regression : Regressoion Loss Functin으로 쓰이는 MSE (L2 Loss)
y6~y9 n-ary Classification : n-ary Classification에 쓰이는 Cross Entropy
y1 =0 인경우,
' Don' Care', 즉 신경쓰지 않는 Case로 , y1 Binary Classification에대한 Loss Function인 CrossEntropy만 고려한다.
◎ Convolution implementation of Sliding Windows
Sliding window는 무엇일까?[object detection] (tistory.com)
CNN을 이용해 Object Detection을 진행할때, CNN을 무작정 적용하는 것이 아니라
아래와 같이 Sliding Window를 이용해 적용하게된다
그런데 위와같이 Sliding Window를 그대로 적용하면
Computational Cost가 너무 커지는 문제가 있다.
이를 CNN Layer의 구조를 조금 바꿈으로서 Sliding Window를 사용하는것과 같은 효과를 보도록 할 수 있는데
아래의 내용을 통해 이를 설명해보도록 하겠다.
○ Replace FC Layer to Convolution Layer
CNN이 Object Detection에 적용될때 중요하게 다루는 개념중 하나로
아래와 같이 일반적인 CNN구조에서는
Output Layer 근처에서 FC Layer를 이용해 Flatten해주는 것이 보통인데,
FC Layer는 1X1 Convolution Layer으로 비슷하게 대체해서 사용이 가능하다.
Max Pooling Layer에서 5X5X16 Size의 Output이 출력되고,
여기서 FC Layer대신 5*5*16=400개의 정보를 1X1 Convolution Filter에 통과시키는 Layer를 사용한다면,
수학적으로 FC Layer와 완전히 동일한 구조의 Layer가된다.
무슨 말인지는 이제 알겠는데,
이게 도데체 Sliding Window와 무슨관련이 있길래
수학적으로 동일하다면서 Computational Cost를 줄여준다는 걸까?
아래 그림을 통해 좀더 자세히 들여다보자
아까전 처럼 1X1을 사용하는게 아니라 2X2를 사용하면, Output결과는 각 Filter당 2X2 grid Output으로 출력되고,
Output에서 Filter개수를 Output label의 Vector Size(예측해야하는 데이터 개수)와 동일하게 설정해주면,
Output label중, 한개의 데이터를 예측할때 2X2 Grid에 각 Grid값이 의미하는 것은,
Input 이미지에서 Computationally Shared된 2X2영역에대한 Prediction Value라고 이해할 수 있게된다.
https://powerofsummary.tistory.com/171
기존 Sliding Window에서는 Window 영역안에있는 Pixel내에서만 예측을 하다보니 일일이 window를 옮겨가며 예측해야했는데, Convolution Layer의 사이즈를 조절함으로서 Computationally Shared하게끔 Output을 뽑아내서
마치 Sliding Window를 이용한 것과 비슷한 효과가 나게 만드는 것이다.
위에서 봤던 4개의 Class에대한 상황에 이를 적용해보면 아래와같다.
Input image Size가 28X28이라고 하면
최종 Output이 8X8X4이므로, Computationally Shared된 8x8영역을 Sliding 해가며
4개의 label값에대한(하나의 y label에 있는 4개의 Preidiction 값) 값을 뽑아내는 것과 같아지게 된다.
* 참고논문
https://arxiv.org/abs/1312.6229
'AI > Deep Learning' 카테고리의 다른 글
Deep Learning (12)_CNN_3 : ResNet (0) | 2022.06.15 |
---|---|
Deep Learning (11)_CNN_2.. LeNet-5, Alex Net, VGG Net (0) | 2022.05.22 |
Deep Learning (10)_CNN (Convolution Neural Network)_1 (0) | 2022.05.22 |
Deep Learning (9)_Convolution Layer (0) | 2022.05.22 |
Deep Learning (8)_Tensorboard & Tuning Parameter (0) | 2022.05.21 |