정리노트

Deep Learning (13)_ Object Detection 본문

AI/Deep Learning

Deep Learning (13)_ Object Detection

Krex_Kim 2022. 6. 18. 03:25

지난 포스팅에서

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)

 

Sliding window는 무엇일까?[object detection]

3팀-최웅준, 송근영, 김정민 회의 날짜 : 02/07 금요일 회의장소 : 능곡역 지노스 카페 회의 내용 : Sliding Window에 대한 팀원들 간의 질문이나 생각들이 가장 많이 겹친 부분이었으며 중요하다고 판

metar.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으로 비슷하게 대체해서 사용이 가능하다.

이전 이미지에서 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

 

[딥러닝 개념] 1x1 convolution에 대한 고찰(FC와의 차이점, 공통점)

[C,H,W] 크기의 입력 tensor에 대하여 1x1 convolution을 거칠때와 FC(linear) layer를 거칠때는 무슨 차이가 있을까? 둘은 똑같은 연산이라고 할 수 있을까? 둘은 똑같지는 않지만 그 결과가 비슷한 의미를

powerofsummary.tistory.com

기존 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

 

OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

We present an integrated framework for using Convolutional Networks for classification, localization and detection. We show how a multiscale and sliding window approach can be efficiently implemented within a ConvNet. We also introduce a novel deep learnin

arxiv.org

 

 

Comments