Adore__

[Boost Course CV] 2.2 Image Classification (1) 본문

AI Learner/Computer Vision

[Boost Course CV] 2.2 Image Classification (1)

3_GreenHeart 2023. 4. 7. 00:01
728x90

Source:  Boost Course 'Computer Vision의 모든 것'

 

 

 

 

▪️ What is Classifier?

입력이 '영상'으로 들어오면 출력이 그 영상에 해당하는 'class'로 나오게 만든다. 즉, 영상 속에 어떤 물체가 들어있는지 분류해주는 mapping을 말한다.

 

 

▪️ 구현 방법? 가상 이상적인 분류 모델?

이 세상의 모든 데이터를 다 갖고 있다고 가정하면, 입력으로 들어온 이미지와 가장 비슷한 사진을 찾으면 된다. 이 상황에 가장 적합한 방법은 k-NN이 될 것이다.

 

https://www.jcchouinard.com/k-nearest-neighbors/

하지만 데이터가 너무 많아지면 Time complexity와 Memory complextiy 문제가 있기때문에 현실적이지 않다.

또한 knn을 사용하려면 영상간의 유사도를 정의해야 하는데, 그 기준이 모호해서 쉬운 일이 아니다.

 

 

▪️ 현실은? CNN!

우리가 실제로 사용하는 모델은 이러한 방데한 데이터를 압축하여 neural network parameter로  녹여내는 것이다.

 

먼저 단일 layer를 가진 single layer nn (fully connected layer)을 살펴보자.

모든 pixel들을 서로 다른 가중치로 weighted sum (내적)을 한다. 이후 활성화 함수를 통해 분류 score를 얻는다.

하지만 이러한 간단한 모델들은 이미지 분류 문제에 잘 작동하지 못한다.

 

single layer의 문제 2가지

1) 해당 클래스의 평균적인 이미지 이외에는 표현이 되지 않는다.

2) test time의 문제 : 조금이라도 기존 학습했던 이미지와 다르거나 template의 위치가 다르면, 잘못된 예측을 한다.

 

이를 해결하고자하는 관점에서 CNN이 등장한다.

FC layer는 하나의 특징을 뽑기 위해 모든 pixel을 고려하는 반면, CNN은 국부적인 영역만 connection을 고려한다. 이런 지역적인 특징들이 영상 여러 군데에서 서로 비슷할 수 있기때문에, 이를 slide로 순회하면서 특징을 뽑는다. 따라서 더 적은 parameter로 효과적인 특징을 추출하고 overfitting도 방지할 수 있다.

 

 

 

 

 

History of CNN architecture


▪️ AlexNet

- 5 conv layer + 3 dense layer (총 8 layers)

- convolution filter size가 크다 (11x11)

  : parameter 수 관점으로 봤을 때, 11x11은 좋은 선택이 아니다. receptive field는 커지지만 상대적으로 더 많은 parameter가 필요하게 된다.

 

왜 성공했나?

- ReLU activation 함수 사용

   : non linear이며, layer를 깊게 쌓았을 때 gradient가 사라지는 문제가 없다 (sigmoid, tanh 활성화 함수의 문제점)

- 2개의 GPU

- LRN (이제는 사용하지 않는다.)

- Data Augmentation

- Dropout 사용

 

 

▪️ VGGNet ( repeated 3x3 blocks)

- deep layer (16,19)

- Dropout (p=0.5)

- 일반화 성능이 좋다

 

- 3x3 conv filter / 2x2 max pooling layer 

: 5x5 filter 를 한번 거치는 것과 3x3 filter 를 2번 거치는 것은, recpetive field 차원에서는 같다.

하지만 5x5 filter를 사용할 경우 parameter 수가 상대적으로 매우 많다. 따라서 작은 크기의 filter를 여러번 사용하는 것이 parameter의 수를 줄일 수 있는 좋은 방법이다. (VGGNet에서 얻어가는 가장 중요한 부분!)

 

kaggle

 

▪️ GoogLeNet (1x1 convolution)

- 총 21 layers로 이루어져 있다.

 

중요한 부분, inception block (1x1 convolution)

- 하나의 입력에 대해서 여러 response들을 compact할 수 있다.

- 1x1 convolution 이 추가로 들어가면서 parameter 수를 줄일 수 있다. (channel, width 방향으로 dimension을 줄인다)

https://www.oreilly.com

 

여기서 어떻게 1x1 filter가 channel 방향으로의 dimension을 줄인다는 것일까?

아래 그림을 참고하면 이해하기 쉽다.

Naver Connect Foundation

 

▪️ ResNet (skip-connection)

Deeper neural network에서 layer를 점점 더 깊게 쌓을수록, overfitting은 아니지만 network 너무 커짐에 따라서 학습이 이루어지지 않는 문제점이 발생한다.

이를 해결하기 위해 ResNet는 identity map이란 것을 nonlinear activation 이후에 추가한다.

입력값 x를 넣을 때 출력값 f(x)가 나오면, 활성화 함수 이전에 x를 더해준다. 따라서 f(x)는 residual, 차이만 학습하게 된다.

논문 결과를 보면, 이 방법을 추가했을 때 더 깊은 layer일수록 성능이 좋게 나온다. 덕분에 layer를 더 깊게 쌓을 수 있는 가능성을 제시해준 방법이다.

Naver Connect Foundation

 

여기서 특징적인 것은, batch norm이 convolution 다음에 나온다는 것이다.

Naver Connect Foundation

 

 

* Bottleneck architecture

ResNet은 Bottlenect 구조에도 사용된다.

이 구조의 핵심은 1x1 convolution을 활용하여 channel을 줄이고, 줄어든 channel에서 3x3 convolution으로 receptive field를 키우고, 다시 1x1 convolution 으로 원하는 크기로 맞추어, parameter를 줄임과 동시에 layer를 깊게 쌓아 receptive field를 키우는 게 전략이다.

 

* Batch normalization

이 개념에 대해서는 다음 블로그를 참고하였다.

https://gaussian37.github.io/dl-concept-batchnorm/

 

'AI Learner > Computer Vision' 카테고리의 다른 글

[Boost Course DL] 5. Computer Vision Applications  (0) 2023.04.18
[BoostCourse CV] 1.Start  (0) 2023.04.06
Comments