Study/머신러닝

Backbone

김 도경 2025. 1. 6. 16:27
CNN
  • Convolution Filter
    - Filter
       - 이미지처리를 위해 사용되는 행렬
         - 주로 edge detection, blurring 등을 위해 사용되었음
         - Kernel, mask라고도 불림
       - 같은 filter로 이미지 전체에 sliding window로 convolution 연산 수행

    - Convolution 연산
       - Convolution이란 이미지와 filter간의 합성곱 연산을 의미
       - Convolution된 결과를 feature map 또는 activation map이라고 함
       - 특수한 목적으로 고안된 filter를 사용하면 원하는 activation map을 얻을 수 있음

    - 학습 가능한 Convolutional Filte
       - 고정된 filter대신에, 우리가 원하는 방향으로 filter 값을 학습하는 것이 CNN의 목적

    - Channel
        - Grayscale 이미지는 1개의 채널 (흑백)을 갖지만, 일반적인 이미지는 3개의 채널 (RGB)로 이루어져 있음
        - Convolution filter를 적용할때 channel 수를 고려해야함
        - 32x32x3 이미지에 5x5x3 Filter를 적용한다고 했을 때, 한 번의 연산에 5x5x3영역만큼 연산
        - Sliding window로 이미지 전체를 연산하면 32x32x1크기의 feature map을 얻음
        - 더 깊은 feature map을 얻고싶다면, 더 많은 convolution filter를 사용

    - Feature Map 크기 변화
        - Convolution 연산을 수행하면 feature map 크기가 점점 작아짐
        - 동일한 크기 또는 원하는 크기의 feature map을 만들 수 없음

    - Stride와 Padding
       - Feature map 크기를 조절할 수 있도록 stride와 padding 사용
       - Stride: Sliding window에서 한 step의 거리를 조절
       - Padding: 이미지 주변에 값 0의 빈칸을 추가
       - Pooling : Parameter를 사용하지 않고 feature map의 크기 축소
           - Convolution filter와 같이 sliding window 방식으로 연산
           -  MaxPooling: filter가 적용되는 영역 중 가장 큰 값만 선택
           -  AveragePooling: filter가 적용되는 영역의 평균값 선택
CNN Backbone
  • Convolutional Neural Network (CNN)
    - Convolution filter들을 사용하여 feature map의 크기 축소
          - 한 개의 feature map이 수용하는 이미지의 영역은 증가 (receptive field)
    - 최종 feature map을 flatten하여 이미지 분류를 위한 fully connected layer 적용

  • AlexNet
    - 2012년 ILSVRC 우승
    - CNN을 사용한 최초의 모델이자 GPU사용을 고려한 딥러닝 모델
    - ReLU : 입력값이 0보다 작을 경우 0을 반환하고, 0보다 크거나 같을 경우 입력값 그대로를 반환하는 activation function
            - ReLU(x) = Max(0, x)
            - 비선형 특성으로 비선형 패턴을 학습할 수 있음
            - 계산이 간단하고 효율적
    - Dropout
            - 학습 과정 중에 무작위로 일부 뉴런을 선택하여 그 뉴런들의 활성화를 중지
            - 신경망이 특정 뉴런에 과도하게 의존하는 것을 방지 및 일반화된 모델 학습 가능 (과적합 방지)

  • VGG
    - 2014년 ILSVRC 준우승
    - 단순한 구조이지만, 깊은 네트워크의 중요성을 알림
    - VGG-F, VGG-M, VGG-S, VGG-16, VGG-19
          - VGG-F, VGG-M, VGG-S는 각각 fast, medium, slow
          - VGG-16: 13개의 CNN layer, 3개의 FCN layer
          - VGG-19: 16개의 CNN layer, 3개의 FCN layer
    - 1개의 5x5 conv filter VS. 2개의 conv 3x3 filter
          - 같은 크기의 receptive field
          - Parameter 수 (input, output 채널 크기가 C일 때)
                  - 1개의 5x5 필터 : 1x5x5xC² = 25C²
                  - 2개의 3x3 필터 : 2x3x3xC² = 18C²
    - 3x3 conv filter로만 이미지를 7x7x512까지 축소

  • ResNet- CNN은 이론상 네트워크가 깊을수록 좋지만, 실제로는 그렇지 않음
    - 네트워크가 깊어질수록 gradient의 vanishing problem
          - 역전파 알고리즘은 출력층에서 입력층으로 오차를 전파
          - 이때, chain rule에 의해 각 함수의 미분값이 곱해지는 구조
          - 따라서 네트워크가 깊어지면 깊어질수록 값이 0에 가까워짐
    - ResNet은 이런 문제를 해결하기 위해 identity shortcut을 이용
          - 네트워크 깊게 쌓을 수 있음
          - 계산이 용이함
    - AlexNet (8 layers), VGG (19 layers)에 비해 ResNet은 최대 152 layer
    - Residual block (skip connection)
          - 각 block의 input을 x, convolution 연산을 F라고 가정
          -  F(x) + x를 output으로 사용
    - 역전파를 진행할 때 vanishing gradient를 막을 수 있음
    - 또한, gradient 연산이 용이함
    - ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152

  • EfficientNet
    - ResNet 이후 backbone 연구의 중요 한 축으로 wide & deep
    - 그 결과 CNN backbone의 이미지 이해 성능은 증가 했지만, parameter 크기가 커지고 속도가 느려짐
         - 성능은 좋지만, 속도가 빠르고 크기가 작은 모델에 대한 요구 증가
    - 일반적으로 효율성, 정확도 사이에 trade off
    - 지금까지 모델 크기를 scale up하는 과정에 비효율이 있었던 것은 아닐까?
                   → 효율적으로 scale up하는 방법을 찾아보자! → EfficientNet의 등장
    - 크게 세 가지 방향의 scale up이 있음
       - Width Scaling
          - Channel 사이즈를 키우는 방향
          - Channel의 사이즈를 크게 하면 이미지의 미세한 특징을 잘 잡아내는 경향이 있음
          - Wide하고 shallow한 네트워크는 이미지의 high-level feature를 이해하는 데 한계가 있음
       - Depth Scaling
          - ResNet과 같이 네트워크를 깊게 쌓으면 high-level feature를 이해하는 데 도움이 됨
          - 하지만 네트워크가 깊어질수록 gradient vanishing의 위험이 있음
       - Resolution Scaling
          - 이미지가 고화질인 경우 이미지의 미세한 특징들을 잘 잡아낼 수 있음
          - 이미지 사이즈가 커짐에 따라 연산량 증가
          - 증가되는 연산량에 비해 accuracy가 많이 향상되지는 않음
Transformer
  • Transformer
    - 최근 computer vision domain에서도 transformer backbone이 주류가 됨
    - Natural Language Processing (NLP)에서 생기는 문제점을 해결하기 위해 고안
    - Long-term dependency
        - 기존 모델들은 sequence data를 처리할 때 데이터를 순차적으로 처리함
        - 데이터 길이가 길어지면 정보 손실이 발생함
    - Attention: Next token을 예측할 때, sequence 내의 다른 위치에 있는 정보들과의 상관 관계가 중요함
           a) The animal didn’t cross the street because it was too tired
           b) The animal didn’t cross the street because it was too wide
          - 위의 두 예시에서 ‘it’이 나타내는 단어가 다름
               - 각각의 ‘it’은 ‘tired’ 또는 ‘wide’와 직접적인 관련이 있음
               - 예시 a) 에서는 ‘animal’, 예시 b) 에서는 ‘street’을 나타냄
               - 예시 a)에서는 ‘animal’과 ‘tired’가, 예시 b)에서는 ‘street’과 ‘wide’가 관련있음

    - Long-term dependency를 해결하고 attention을 고려하기 위한 transformer 개발
    - CNN의 한계점 : Computer vision 분야에서도 NLP와 같은 문제에 발생
       - Long-range dependency: 멀리 떨어진 두 물체에 대한 context를 학습하기 힘듦
       - Attention: 이미지 내의 여러 object들에 대한 상관 관계를 알 수가 없음
    - Transformer가 기존 NLP의 문제점을 어떻게 해결했는지 분석
    - 이후, 동일한 메커니즘을 computer vision에도 적용 (ViT)

    - 중요점
        - 긴 문장에서 생기는 long-term dependency 문제를 해결
        - Self-attention을 통해 단어간 연관성 및 단어의 중요도 파악
        - 높은 연산 효율성과 확장성이 있음
        - 데이터셋과 모델 크기가 계속 커져도 모델 성능이 포화되지 않고 지속적으로 증가
                 - 추후 Large Language Model 발전의 발판이 됨

  • Transformer의 구조
    - Sentence to Embedding
       - “Write a story” → 컴퓨터가 이해할 수 있는 무언가
       - 컴퓨터는 무엇을 이해할 수 있을까? : “Write a story” → 0,0,1,0,1,0,1,0,...,1 → Embedding
       - Sentence를 embedding으로 변환할 필요가 있음

    - Tokenization
       - 문장을 토큰 단위로 분할
       - Token은 단어, 구두점 등 ‘의미 있는 단위'를 나타냄
       - 문장의 시작이나 끝을 나타내는 token도 추가
       - 각 token에 사전에 정의된 단어번호 할당

    - Word Embedding
       - Token을 embedding으로 변환

    - Positional Encoding
       - Word embedding은 단어의 위치까지 반영하지는 않음
       - 그러나 다른 위치에 있는 같은 단어는 다른 의미를 가질 수 있음
       - 위치 정보(positional encoding)를 word embedding에 더하여 위치 정보를 추가
       - 최근에는 위치 정보 역시 학습 가능한 파라미터로 두는 경우가 많음
       - 즉, nn.Embedding을 정의하고, 모델 업데이트 과정에서 이를 학습

    - Self Attention
       - Input embedding이 query, key, value로 mapping
           - Query: Attention을 확인하고 싶은 단어
           - Key: Input embedding의 모든 단어
           - Value: Input embedding 갖고 있는 정보

       - Attention score
            - Query와 key를 통해 attention score를 계산
            - Value를 곱함으로써 각각의 key가 가진 정보를 통합
            - 각 query를 대표하는 attention value를 얻음
            - Hidden size에 따라 query, key 내적값이 커질 수 있음
            - 이는 softmax 연산할 때 vanishing gradient 문제를 야기할 수 있음
            - 안정적인 학습을 위해 hidden_size 크기에 패널티 추가
            - Multi-head attention : 다양하고 복잡한 context를 학습 가능

       - Feed forward
            - Add & Norm: Attention이 반영된 embedding + 반영되기 전 embedding
            - 이후, sequence context가 반영된 embedding을 fully connected layer에 통과
            - Multi-head attention과 feed forward를 합하여 encoder라고 정의함
            - Encoder를 여러개 쌓아 깊은 네트워크를 만들 수 있음

Vision Transformer
  • Transformer in Computer Vision
    - 기존 NLP와 동일한 문제점을 computer vision에도 생각해 볼 수 있음
    - CNN에서 convolution filter의 receptive field를 늘린다고 해도 위의 문제를 해결할 수는 없음
    - 모든 픽셀에 대해 attention weight을 계산하는 것은 매우 비효율적
        → N개의 픽셀을 묶어서 token으로 사용 → NxN patch를 만들어서 token으로 사용
        :  An IMAGE IS WORTH 16x16 WORDS
    - 이후 만들어진 token을 transformer input으로 이용
    - Transformer 구조를 이미지 도메인에 성공적으로 적용

  • Vision Transformer Methods
    - Image → Patch → Embedding → Transformer Encoder → Task Head

    - Patching
        - (H, W, C) 크기의 이미지를 크기가 (P, P)인 패치 N개로 자름
        - N=HW/P² 로 계산되며, 논문에서는 P=14, 16, 32 를 사용
        - 이후 각각의 패치를 flatten

    - Linear Projection
        - Linear projection으로 D 크기의 feature로 변환 (D= 768, 1024, 1280)

    - CLS Token
        -  Projection 된 이미지 embedding 앞에 cls token을 하나 추가
        -  마찬가지로 학습 가능한 embedding
        -  추후 이미지 전체에 대한 representation을 나타냄

    - Positional Embedding
        -  Flatten된 이미지가 위치 정보를 가질 수 있도록 위치 정보 추가
        -  Positional encoding or positional embedding

    - Transformer Encoder
        -  기존 Transformer와 동일한 방식으로 encoding
        -  Transformer와 동일한 방식으로 self-attention 계산 및 multi-head 적용

    - MLP Head
        -  2개의 hidden layer와 GELU activation function으로 구성
        -  CLS 토큰에 대해 classification head 적용

    - Limitations
        -  CNN의 경우 image-specific한 inductive bias가 있음
            - Locality
            - Two-dimensional neighborhood structure
            - Translation equivariance
        - Attention은 global한 관계를 파악하는데 집중하여, 이미지의 국소적인 특징을 잡기에 어려움
        - 또한 positional embedding으로 위치 정보를 고려하지만, image를 patch하는 과정에서 neighborhood structure 파괴

  • Vision Transformer의 문제점
    - 이미지 해상도가 증가
             → Self-attention을 계산해야하는 patch 당 픽셀 갯수가 매우 많아짐
    - Segmentation이나 detection처럼 세밀한 픽셀 분류가 필요한 task
            → Patch의 크기가 크면 세밀한 representation을 생성하- 기 어려움
    - Image에 대한 inductive bias가 많이 사라짐
    - Transformer 적용할 때, CNN과 유사한 구조로 설계할 수 있을까?
    - Inductive bias를 가지고 모델 구조를 설계해볼 수 있을까?
    - Patch를 더 효율적으로 설계할 수 있는 transformer 구조는 없을까?
    - Transformer에서도 inductive bias 고려하여 모델 구조를 설계해볼 수 있을까?
             → Transformer 적용할 때, CNN의 구조적 이점을 반영하게 설계할 수 있을까?

Swin Transformer
  • Swin Transformer 구조
    - Hierarchical 구조: 작은 단위의 patch부터 시작해서 점점 merge 해나가는 방식
    - 계층적 구조로 각 단계마다 다른 representation을 갖기 때문에 다양한 크기의 객체를 다뤄야 하는 태스크에 유리

  • methods
    - Patch Partitioning: 이미지를 patch로 분할할 때 RGB 채널은 concatenation
          - Patch 크기가 4x4 이므로 4x4x3=48 channel 크기
    - Linear Embedding : ViT의 embedding 방식과 동일하나 classification token을 추가하지 않음
    - Relative Position Bias : Architecture를 살펴보면 Transformer, ViT와 다르게 positional embedding이 없음
           - Attention을 계산할 때 relative position bias term을 더함
           - 이미지 내에 절대적인 위치를 할당하는 것 보다, patch 간의 상대적인 위치에 집중
    - Swin Transformer Block
    - Self Attention
           - W-MSA : Window-Multi-head Self-Attention
           - SW-MSA : Shifted Window-Multi-head Self-Attention
    - Shifted Window
           - 계산 복잡도를 줄이기 위해 shifted window 개념 도입
           - 일정 크기의 window를 정하고, window 내에 있는 patch들끼리만 self-attention을 계산하도록 함
           - 하지만 window간 계산이 없기 때문에 인접 patch들끼리 연결성이 끊어짐
           - Window 간의 연결성을 반영하면서, 계산의 효율성도 높임
    - Cyclic Shift
           - Shifted window는 계산하기가 어렵고 전체 window 수도 증가
           - A,B,C 파트가 사라지도록 이미지를 왼쪽 상단 방향으로 shift
           - A, B, C가 이미지의 반대 방향에서 나타나도록 함 (cyclic shift)
           - 새로 등장한 A, B, C는 같이 계산되는 window의 patch들과는 관련이 없으므로 masking하여 계산에서 제외
    - Swin Transformer Block
           - W-MSA와 SW-MSA를 순차적으로 연결한 것이 하나의 swin transformer block
    - Patch Merging
           - 이전 stage에서 인접한 4개의 (2x2) Patch들을 하나로 합쳐 하나의 큰 patch로 merge
           - Channel-wise merging
           - Patch를 합치는 과정에서 dimension이 4C로 늘어나기 때문에 linear layer를 거쳐 2C개로 조절
    - Computational Complexity
           - 이미지 내의 모든 patch끼리 계산했던 기존 multi-head self-attention
                      → Window 내의 patch끼리만 계산함으로써 computational complexity 감소
           - h, w ,C: 이미지의 높이, 폭, 채널 수 ○ M: window 내의 patch 수

'Study > 머신러닝' 카테고리의 다른 글

CV 트렌드  (1) 2025.01.09
Segmentation  (0) 2025.01.09
Object Detection  (3) 2025.01.06
CV Metrics  (0) 2025.01.06
Semantic Segmentation  (0) 2025.01.03