[U] Week 4 - Image Classification

JaeJun Lee ·2022년 10월 12일
0

부스트캠프 AI Tech

목록 보기
23/30

AI는 사람의 지능을 컴퓨터 시스템으로 구현을 하는 것인데 이때 지능은 인지 능력과 지각 능력, 사고 능력까지도 포함하는 넓은 영역을 말한다.

Computer Vision

사람으로 따지면 시각 능력을 사용하는 분야로 시각 정보를 사용해 데이터로 표현 혹은 분석하는 것으로 말할 수 있을 거 같다. 반대로 분석해놓은 정보를 이용해서 장면에 해당하는 이미지나 3D scene을 재구성 하는 것을 Computer Graphics라 부르고 Rendering Technic이라고 볼 수 있다.

  • Computer Vision: Inverse rendering
  • Computer Graphics: Rendering

어떤 시각 능력을 컴퓨터로 표현하기 위해서는 시작점을 잘 모르기 때문에 사람의 구조를 모방하는 것이 자연스러운 시작이 될 수 있다.

  • 사람의 시각 능력에 장단점을 이해함으로써 불안정성을 보완할 수 있는 방법을 모색할 수 있다

Image Classification

입력 영상 데이터로부터 영상을 분류하는 것이다.

  • K Nearest Neighbors (K-NN): 쿼리 데이터가 입력되면 데이터 근방에 K개의 이웃한 데이터들에 label 값을 사용해서 분류하는 방법
    • 데이터들의 유사도를 계산해야할 거 같다

Single FC Layer (Linear Regression)를 사용해 분류 문제를 해결하고자 할 때 한 예로 학습 시 이미지 전체를 사용하고 테스트 시 crop된 이미지를 사용한다면 특징을 잘못잡아 예측 정확도가 떨어질 확률이 높다.

  • Fully connected neural net: 하나의 특징을 추출하기 위해 모든 픽셀을 고려한다

  • Locally connected neural net: 하나의 특징을 추출하기 위해 영상의 공간적인 특성을 활용해 국소적인 영역들만 고려한다

    • CNN: 이를 활용해 sliding window처럼 connection을 공유해서 전 영역을 순회하면서 특징을 추출하는 방법

      • 하나의 필터를 공유해서 파라미터를 재활용할 수 있어서 적은 파라미터로 효과적으로 특징을 추출할 수 있고 overfitting도 방지할 수 있게 된다
    • Image-Level: Classification

    • Classification + Regression: Obejct Detection

    • Pixel-level Classification: Segmentation

CNN Architectures

CV Task를 위해 다양한 CNN 모델 구조들이 제안되었고 2014 이전에 제안되었던 대표적인 모델들은 다음과 같다.

LeNet-5

2개의 CNN 네트워크와 2개의 FC레이어를 사용한 모델로 5x5 필터를 사용했으며 한 글자단위를 인식하는데 사용되었고 우편 번호 인식에서 크게 기여했다.

AlexNet

7개의 레이어를 사용하고 ReLu 활성화 함수와 Drop out을 사용하였고 당시 GPU 메모리를 고려해 모델이 2개의 경로로 구성된다.

  • 지금은 잘 사용되지 않은 LRN을 사용했는데 activation map에서 명암을 normalization하는 효과가 있다
  • 인풋 레이어에서 11x11를 사용했었고 이 또한 큰 크기의 필터는 사용하지 않는다

VGGNet

CNN 레이어에서 3x3 필터와 2x2 max pooling 만을 사용하는 간단한 구조로 ILSVRC 2014에서 2등을 할 정도로 좋은 성능을 발휘하였고 다른 task에서 적용할 수 있도록 일반화가 잘되는 특징 추출이 되는 것을 입증했다. 당시 1등은 GoogleNet이지만 구조가 다소 복잡하다.

  • Receptive field 개념이 등장했는데 이는 하나의 output을 출력하기 위해 input space에서 어느 정도의 영역을 참조했는지 공간 크기를 말한다
    • 큰 receptive field를 얻었다는 것은 이미지 영역에서 많은 부분을 고려하여 output을 출력했다는 뜻이다

Data Augmentation

모델의 성능을 향상시키위한 여러 방법들 중 적용이 쉬운 한 가지가 데이터 증강이다. 모델은 데이터를 통해 패턴 혹은 특징을 분석하여 결론을 내는데 학습 데이터만으로는 실제로 존재하는 모든 데이터들을 모두 표현할 수 없기 때문에 이를 보완하기 위한 방법이 필요하다. 즉, 실제 데이터와의 gap을 줄이기 위해 사용한다.

  • Rotate, Flip, Crop, Affine 등 다양한 증강 기법들이 존재한다
    • 영상들의 일부를 잘라 합성하는 CutMix 방법도 존재한다 (label도 합성한다)

Trnasfer learning

전이 학습이라는 방법이 존재한다. 한 데이터에서 배운 지식을 다른 데이터셋에서 활용하는 방법으로 데이터셋이 다르지만 영상이라는 공통점을 통해 비슷한 지식이 존재할 수 있다는 가능성을 가지고 사용한다.

Fine-tuning

Fine-tuning 방법으로는 주로 두 가지를 사용한다.

  • 전이 모델의 가중치를 freezing 하고 fc layer만 학습하는 방법
  • 전이 모델의 가중치는 작은 learning rate를 사용해 학습하고 fc layer는 보다 높은 learning rate를 사용해 학습한다.
    • 모델 전체를 학습하기 때문에 이전 방법보다 데이터가 더 필요할 거 같다

Knowledge distillation

이미 학습된 큰 모델인 teacher 모델의 지식을 작은 모델인 student 모델에게 주입하여 학습하는 방법이다. 큰 모델에서 작은 모델로 지식을 전달함으로써 모델 압축에 유용하게 사용할 수도 있다.

  • Teacher model, student model 각각의 출력을 통해 KL-div Loss를 계산해 student model만을 업데이트 한다 즉, student 모델이 teacher 모델의 행동을 따라하게 만드는 학습법이라고 할 수 있다
    • Distillation Loss: KLdiv loss (Soft label, Soft prediction)
    • Student Loss: CrossEntropy (Hard label, Soft prediction)
  • 모델의 출력은 각각의 값들에 경향성을 확인하기 위해 hard label(one-hot)이 아닌 soft label을 사용한다
    • 일반적인 softmax는 한 값이 1에 가깝다면 다른 값들이 0에 가까우므로 치우친 경향이 있어 temperature(TT)를 사용해 극단적인 값이 없고 전반적인 분포를 확인할 수 있도록 한다
  • 이 방법은 pseudo-labeld 데이터셋을 활용할 수도 있다

Semi-supervised learning

Labeled된 데이터의 개수는 한정적이므로 Unlabeld된 많은 데이터와 labeled된 적은 데이터를 사용해 학습하는 방법이다. labeld된 데이터를 사용해 먼저 모델을 학습해 pseudo-labeld 데이터셋을 생성하고 labeld된 데이터와 합쳐서 새로운 모델을 학습 혹은 이전 모델을 재학습한다.

  • 예로 EfficientNet에서 사용되었다
  • Self-training으로도 불린다

Deeper Networks

AlexNet, GoogleNet, VGGNet 모델 등으로 인해 레이어가 깊을수록, receptive field 크게 가져갈수록 성능이 향상되는 점을 발견했는데 이때 레이어가 단순히 깊어지기만 하면 vanishing/exploding gradient 문제가 발생할 수 있고 연산 복잡도가 높아지느 등 문제가 발생한다.

GoogLeNet

GoogLeNet에서는 1x1 컨볼루션을 사용한 bottle-neck 구조를 사용해 계산 복잡도를 줄이고자 했다.

  • Auxiliary classifiers: 학습 시에 레이어가 깊어짐에 따라 vanishing gradient 문제가 발생할 수 있어 중간중간 gradient를 입력해주는 구조를 추가로 사용한다

ResNet

최초로 100개 이상의 레이어를 쌓은 모델은 제안하였다. 이때 identity map을 사용하는 shortcut connection을 사용하였고 지금도 많은 모델의 backbone이 되는 구조이다.

  • 20 layer와 56 layer의 실험 비교를 통해 깊은 레이어의 test error가 높은 것이 overfitting 문제가 아니라 레이어가 깊어짐에 따라 optimization이 제대로 이루어지지 않는 것이 문제라는 것을 인지했다

DenseNet

identity map을 더하는 것이 아닌 concatenation 연산을 사용해 상위 레이어에서의 특징도 하위 레이어에서 사용할 수 있는 구조를 제안하였다. 이때 채널 축으로 기하급수적으로 수가 증가할 수 있어 이를 조절하기 위해 Transition Block 구조를 사용한다.

SENet

채널 간의 관계를 모델링하고 중요도를 파악해서 중요한 특징을 attention할 수 있는 구조를 제안하였다. 이때 attention은 global average pooling을 사용한 squeeze step과 FC layer 하나를 통해 채널 간의 연관성을 고려해 attention score를 생성하는 excitation step으로 구성된다.

  • gating을 통해 중요한 것은 강조하고 그렇지 않은 것은 0에 가깝게 만드는 방법을 사용해 activation map을 rescaling 한다

EfficientNet

baseline 모델이 있을 때 width/depth/resolution scaling 등을 다양하게 실험했고 각각의 방법들이 saturation되는 증가폭이 서로 다르다는 것을 통해 적절한 비율로 동시에 사용하는 구조를 제안하였다.

  • width scaling: GoogleNet, DenseNet
  • depth scaling: ResNet
  • resolution scaling: high resolution를 가지는 input data 사용

Beyond ResNets

자동차나 물건 같은 정형적인 데이터 이외에도 사람이나 동물같은 데이터에서도 잘 동작할 수 있도록 deformable 컨볼루션을 제안하였다. 기존의 grid receptive field를 가지는 것이 아닌 더 변형된 receptive field를 가진다.

0개의 댓글