코딩하는 해맑은 거북이

[컴퓨터비전] Computer Vision 개요, Image Classification 본문

AI

[컴퓨터비전] Computer Vision 개요, Image Classification

#CJE 2023. 3. 27.
본 게시물의 내용은 '부스트캠프 AI Tech - CV (오태현)' 강의를 듣고 작성하였다.
해당 글은 아래의 3가지를 다룬다.
📌 Computer Vision 과 AI
📌 Image Classification
📌 Image Classification 발전과정

 

📌 Computer Vision 과 AI

- AI는 사람의 지능을 컴퓨터시스템으로 구현하는 것.
- 지능 = 인지능력 + 지각능력 + 기억 + 이해 + 사고능력
- 지각능력이 제공하는 것 = 입력(input)과 출력(output)의 데이터에 관련된 것
- 사람은 오감 + multi-model 감각 + social(face, touch, speech) 을 통해 상호작용 한다.
- 사람은 오감 중 시각에 많이 의존하면서 살아가고 있음
 
- 인식하는 과정 EX : Visual World → Sensing device → Interpreting device → Interpretation
  사람) 일상장면을 눈으로 관찰하고 → 수정체 뒷면에 상이 맺힘 → 뇌에 전달 → 해석
  컴퓨터) 카메라로 장면을 찍어서 → 영상을 만듦 → 알고리즘을 통해 GPU에 올려서 연산 → 자료구조로 해석
  * 인공지능에선 자료구조를 Representation로 표현한다.
 
- 컴퓨터그래픽스 : representation으로 해석한 정보를 다시 장면의 이미지로 변환하는 것 → Rendering
- 컴퓨터비전 : 컴퓨터그래픽스를 하는 것을 반대로 하는 것 → Inverse Rendering
 
- 컴퓨터비전은 visual data (image or video)를 input으로 Machine Visual Perception 만드는 것.
- 컴퓨터비전은 사람의 시각 능력에 대한 이해를 바탕으로 한 알고리즘 연구도 포함된다.
  (사람의 시각 기능 자체에도 불완전한 부분이 많이 있기 때문에)
 
- 컴퓨터비전 수행과정
* Machine Learning
Input → Feature Extraction → Classification → Output
* Deep Learning
Input → (Feature Extraction + Classification) → Output
 
 

📌 Image Classification

- Classifier : input의 영상에 대해 ouput으로 영상에 어떤 물체가 있는지 매핑하여 클래스로 분류하는 것.
- Classifier는 방대한 데이터를 제한된 시스템에 압축해서 Neural Networks에 녹여넣는것이라 할 수 있음.

Q. 모든 데이터를 가지고 있다면?
k Nearest Neighbors(k-NN)로 비슷한 값을 찾으면 된다.
이와 같이 분류문제가 검색문제로 바뀌게 된다.
But, 데이터가 커지면, 검색 시간이 커지고 사용되는 메모리 용량도 커지게 된다.
즉, 모든 데이터에 대해 찾는 것은 비현실적임.
또한, k-NN의 알고리즘을 사용하려면, 영상 간의 유사도를 정의해야한다. 그런데 유사도를 찾는 것도 쉬운 문제가 아니다.

 
 
- Single Fully Connected Layer Networks
문제점1) 레이어가 한층이라 단순해서, 평균이미지들 이외에는 표현이 안된다.
문제점2) 학습시에 사용된 전체이미지와 달리 Cropped된 이미지에 대해서는 제대로 해석하지 못함

 
 
- Locally Connected Neural Networks
하나의 특징을 뽑기 위해 모든 픽셀을 고려하는 Fully Connected Neural Network 대신에!
하나의 특징을 공간적인 특성을 고려해서 국부적인 영역에서 connection을 고려하는 것이 Locally Connected Neural Network 이다. Sliding Window 방식으로 필터를 순회하면서 특징을 추출한다. 즉, 필요한 파라미터가 엄청 준다!!
connection을 다 공유해서 전 영역을 순회하면서 feature를 뽑는 것인 CNN(Convolutional Neural Networks)을 사용한다.

  • Local feature learning
  • Parameter sharing

 
 
- CNN (Convolutional Neural Networks)
영상에 적합한 특징으로 CNN은 컴퓨터비전의 많은 task에서 기본적인 backbone network로 활용하게 된다.
컴퓨터비전의 디자인 : 영상의 특징을 추출하는 backbone network 위에 target task의 head를 적합하게 디자인해서 사용.
* target task : Image-level classification, Classification+Regression, Pixel-level classification, etc..
 
 

📌 Image Classification 발전과정

🔷 2012 : AlexNet
🔷 2014 : VGGNet
🔷 2015 : GoogLeNet
🔷 2016 : ResNet
🔷 이후 : DenseNet, SENet, EfficientNet ...

 
🔷 2012 : AlexNet

- LeNet-5(1998)의 simple CNN architecture에서 영감받음.
- LeNet-5과 다른점

  • 7개의 hidden layer, 파라미터 수도 증가
  • ImageNet으로 학습 (학습데이터 증가)
  • activation function으로 ReLU, regularization 기술로 dropout 사용

 
- Overall architecture
Conv-Pool-LRN-Conv-Pool-LRN-Conv-Conv-Conv-Pool-FC-FC-FC

  • 2-Networks (GPU 2개)

AlexNet : 2-Networks

  • Single-Network
    • 여기서 LRN은 편의상 없앰
    • Single-Network로 했을 때, FC의 dimension 값이 4096이다.

AlexNet : Single-Network

 
- Local Response Normalization (LRN)
명암을 넣어주는 역할을 했는데, 지금은 사용하지 않음.
대신 Batch Normalization이 사용된다.
 
- filter size가 11x11 convolution filter로 큰 필터를 사용했는데, 최근 네트워크 구조는 이러한 큰 필터를 사용하지않음.
 
- Receptive field in CNN
output 중 한 개의 element를 나오게 해준 input pixel의 영역을 나타냄.
즉, 해당 input space를 receptive field라고 한다.
ex) 2-layer에서의 receptive field 계산 공식 : (P+K-1)×(P+K-1)

Suppose K×K conv. filters with stride1, and a pooling layer of size P×P

 
 

🔷 2014 : VGGNet

- 16 and 19 layers로 깊은 아키텍처 → Deeper architecture
- LRN은 사용하지 않음, 3x3 convolution filter와 2x2 max pooling 만을 사용한다. → Simpler architecture
- 간단한 구조에서 좋은 성능을 보임 (ILSVRC14에서 2등) → Better performance
- 다른 태스크에 일반화가 잘됨. → Better generalization
 
- Overall architecture

  • Input
    • 224x224 RGB images
    • 학습이미지의 RGB values의 평균값을 각 채널에서 빼줌
  • Key design choices
    • 3x3 convolution filters with stride 1
    • 2x2 max pooling operations
  • 3 fully-connected (FC) layers
  • other details
    • ReLU for non-linearity
    • No local response normalization

VGGNet

 
Q. '큰 conv filter 적게 사용하는 것'보다 '3x3 conv layers를 많이 사용하는 것'이 왜 나은지?
1) 3x3 conv layer를 많이 쌓으면 receptive field size를 충분히 크게 유지할 수 있다.
2) 비선형성을 증가시켜, 모델이 이미지를 더 잘 식별할 수 있도록 해준다.
3) 파라미터의 갯수를 줄일 수 있다.
결론 : receptive field에 영향을 미치지 않으면서, 모델의 비선형성을 증가시키고 파라미터의 갯수는 줄일 수 있음.
 
 Q. 네트워크를 더 깊게 쌓으면 성능이 좋아질까? NO! 

*네트워크를 깊게 쌓을수록 아래와 같은 문제점이 발생한다.

  • Gradient vanishing / exploding
  • Computationally complex (계산복잡도 증가)
  • Degradation problem

 

🔷 2015 : GoogLeNet

- Inception module 제안

  : 하나의 레이어에 다양한 크기의 convolution filter를 사용해서 여러 층면에서 activation 관찰 (수평확장)

    이러한 결과인 activation map으로 채널축으로 concatenation 해서 다음 layer로 넘겨준다.

 

그런데, 한 층에 여러 필터를 많이 사용하게 되면 계산복잡도나 용량이 커지게된다. 그래서 나온 방법이 1x1 convolution 을 사용하는 것이다. 1x1 Conv를 통해 압축하고 다음 Conv에서 연산할 때 메모리와 계산에 이득을 가져온다.

또한, Max-Pooling 할 때도 1x1 Conv을 통해서 channel dimension을 바꿔줬다.

이것은 1x1 Conv는 bottleneck layer로써 구현된다.

 

- 1x1 Convolutions

feature vector와 filter vector를 내적해서 다시 값을 넣어준다.

만약 filter vector의 갯수가 2개(m=2)라면 filter의 갯수만큼 activation map이 생성된다.

공간 크기는 변하지 않고, 각 픽셀이 독립적으로 채널 수만 바꿔준다고 생각하면 된다.

 

- Overall architecture

  • Stem network : vanilla convolution networks
  • Stacked inception modules
  • Auxiliary classifiers : gradient vanishing 문제를 해결하기 위함
  • Classifier ouput (a single FC layer)

 

* Auxiliary classifiers

- vanishing gradient 문제 방지

- 중간 결과를 출력하기 위해서 2개의 FC - 1x1 Conv - softmax 사용

- 학습 도중에만 사용하고, 테스트 중에는 Auxiliary classifiers를 사용하지 않는다

 

 

🔷 2016 : ResNet

- 최초로 100개 이상의 layer를 쌓으면서, 깊은 layer를 쌓을수록 성능이 높아진다는 것을 보여준 첫 논문

- 처음으로 ImageNet에서 인간 레벨을 뛰어넘음

- Classification 뿐만 아니라 다른 태스크에서도 1등을 차지함

 

- Degradation problem

깊은 layer가 얕은 layer보다 error가 더 크다? overfitting 문제가 아니라 최적화문제로 학습이 잘 안된것.

 

- 가설

*Plain layer : layer를 깊게 쌓을수록 H(x)에 바로 도달하는 것은 어렵다.

*Residual block : indentity와 F(x)를 이용해서 학습하면 학습 부담을 줄인다.

  • target function : H(x) = F(x) + x
  • residual function : F(x) = H(x) - x

→ 이것을 구현하기 위한 해결책 : Shortcut connection

back propagation을 할 때, X identity 가 있는 옆길과 바로 X 쪽으로 가는 길 둘다 통할 수 있도록 하는 것.

길이 2개이기 때문에, 직선 길에서 gradient vanishing 문제가 발생해도 옆길에서 X mapping을 통해 해결할 수 있엇다.

 

Q. Shortcut connection 방법이 왜 성능이 좋을까?

\(2^n\)의 경우의 수로 input-ouput을 지나는 경로가 생기기 때문이다.

Conventional 3-block residual network

 

- Overall architecture

  • He initialization
  • Additional convlayer at the beginning

 

  • Stack residual blocks
  • Every residual block has two 3x3 conv layers
  • Batch norm after every conv layer

 

  • Doubling the number of filters and spatially down-sampling by stride 2 instead of spatial pooling

 

  • Only a single FC layer for output classes

 

🔷 이후 : DenseNet, SENet, EfficientNet

🔹 DenseNet

채널축으로 concatenated한다(feature의 정보를 그대로 보존).

또한, 바로 직전의 블록에 전달하는 것 뿐만 아니라 훨씬 이전의 블록의 정보를 넘겨줄수도 있다.

  • Alleviate vanishing gradient problem
  • Strengthen feature propagation
  • Encourage the reuse of features

 

 

🔹 SENet

현재 주어진 activation 간의 관계가 명확해질 수 있도록 채널간의 관계를 모델링하고, 중요도를 파악하고 중요한 특징을 attention 할 수 있게끔 만들어주는 방법

* attention을 생성하는 방법

  • Squeeze : global average pooling 을 통해 각 채널의 공간정보를 없애고 평균정보만 가진 분포를 구함
  • Excitation : 1개의 FC layer를 통해서 채널간의 연관성을 고려해서 채널을 gating하기 위한 attention score 생성

 

 

🔹 EfficientNet

width, depth, high resolution 등 네트워크 구조를 여러가지 적절한 비율로 동시에 scaling해서 아키텍처를 설계하면 더 효율적인 방법을 찾을 수 있지 않을까에서 나왔다. 적은 FLOPS에서도 좋은 성능을 내는 구조.

 

 

* Deformable convolution

2D spatial offset을 만들어서 각각의 weight를 물체의 위치에 맞게끔 펼쳐준다. 

Irregular grid sampling을 통해서 activation과 Irregular filter를 내적해서 하나의 output을 도출한다.

 

 

 

<Summary>

  • AlexNet
    • simple CNN architecture, Simple computation, but heavy memory size, Low accuracy
  • VGGNet
    • simple with 3x3 convolutions, Highest memory, the heaviest computation
  • GoogLeNet
    • inception module and auxiliary classifier
  • ResNet
    • deeper layers with residual blocks, Moderate efficiency (depending on the model)

 

 

 

Comments