CNN (Convolution Neural Network)

CNN은 컨볼루션을 이용한 인공 신경망 모델

다차원 배열 데이터 처리에 특화된 모델로 데이터의 공간적 정보를 유지하면서 배열 데이터 정보를 다음 레이어로 보낼 수 있어 이미지 (3차원 배열) 분야에서 적극 활용

 

Convolutional layer

필터는 이미지를 통과하여 한 번에 몇 Pixel(NxN)을 스캔하고 각 형상이 속하는 클래스를 예측하는 형상 맵을 만든다

 

Pooling layer (downsampling)

가장 중요한 정보를 유지하는 동시에, 각 피쳐의 정보량을 줄임 (보통 여러 개의 회전이 있다?)

 

Fully Connected layer 완전 연결 계층

한 층(layer)의 모든 뉴런이 그 다음 층(layer)의 모든 뉴런과 연결된 상태를 의미

1차원 배열의 형태로 평탄화된 행렬을 통해 이미지를 분류하는데 사용되는 계층

Fully connected layer을 Dense layer이라고도 한다. 위의 코드에서는 Flatten을 통해 흑백 이미지, 2자원 벡터의 행렬을 1자원 배열로 평탄화 하고, ReIu함수로 뉴런을 활성화하고 softmax함수로 이미지를 분류하는 것까지가 FuIly connected layer라고 할 수 있다.

 

Fully connected input layer (평탄화)

이전 레이어의 출력을 평탄화하여 다음 스테이지의 입력이 될 수 있는 단일 벡터로 변환

 

The first fully connected layer

이미지 분석의 입력을 취하여 정확한 라벨을 예측하기 위해 가중치를 적용

 

Fully connected output layer

각 라벨에 대한 최종 확률을 제공합

 

AlexNet

Conv-Pool-LRN-Conv-Pool-LRN-Conv-Conv-Conv-Pool-FC-FC-FC




 

CNN architectures for image classification

image classification을 위한 CNN architecture 들에 대한 설명

(Stride 1의 K×K conv. filter와 P×P 의 pooling layer가 있다고 가정)

  • VGGNet은 AlexNet에 존재하던 large conv. filter를 다수의 33 convolutional layer로 변경함으로써, receptive field size를 유지할 수 있었다.
    • 주로 작은 3*3 conv 필터를 여러 층에 걸쳐 사용해서 receptive field를 확장함
    • 작은 필터를 사용하여 더 깊은 네트워크를 구성하는 것이 큰 필터를 사용하는 것보다 성능이 뛰어나다?
  • VGGNet은 AlexNet과 달리 LRN (Local Reponse Normalization)을 사용하지 않는다
    • 대신 배치 정규화 같은 거 쓴다
  • AlexNet 대비 더 깊은 레이어층을 구성하여 성능 향상에 도움을 줄 수 있다
    • VGGNet, ResNet 등의 네트워크는 AlexNet보다 더 깊은 레이어를 통해 성능을 향상시킴
  • AlexNet은 ReLU activation function과 dropout regularization을 사용
    • AlexNet은 ReLU 활성화 함수와 드롭아웃을 사용하여 학습 효율을 높이고 과적합을 방지
  • Pooling layer 내의 한 pixel의 receptive field는 (P+K−1)×(P+K−1)으로 계산할 수 있다?
    • Pooling 레이어의 한 픽셀의 receptive field는 주로 그 픽셀의 위치와 주변 픽셀에 영향을 받긴 하지만 Pooling layer 자체가 receptive field를 증가시키는 역할을 하지는 않음
    • Conv 레이어에 의해 receptive field가 확장되며, Pooling은 그동안 쌓인 receptive field를 요약하는 역할 → 정확한 receptive field 크기를 계산하려면 Conv 레이어의 영향을 고려해야 함

 

Receptive Field의 정의

Receptive field는 신경망에서 특정 뉴런이 입력 이미지의 어느 부분을 보는지 나타내는 개념

네트워크의 출력에 있는 특정 뉴런이 입력 이미지에서 참조하는 영역의 크기

→ CNN에서 한 픽셀의 receptive field는 해당 픽셀이 입력 이미지의 어느 영역에 대응하는지를 의미

  • Pooling layer의 각 픽셀의 receptive field는 단순히 해당 레이어의 파라미터만으로 계산되지 않으며, 이전 convolutional layers와 pooling layers의 연속적인 효과에 따라 결정

 

Convolution Layer와 Pooling Layer의 역할

  • Convolution Layer: 각 레이어가 입력의 작은 영역(필터 크기)에 대해 계산을 수행하며, 여러 레이어를 거치면서 receptive field가 점점 커짐 → 각 픽셀이 점점 더 넓은 입력 영역을 보게 된다
  • Pooling Layer: 일반적으로 Max Pooling 또는 Average Pooling을 사용하여 인접한 픽셀을 하나의 값으로 요약함.
    • pooling 레이어는 입력 특성을 압축하고, 네트워크의 불변성을 강화하는 역할
    • Pooling 자체는 receptive field를 크게 증가시키지 않으며, 주로 크기를 줄인다

 

Receptive Field 계산 방법

한 픽셀의 receptive field 크기는 Convolution 레이어와 Pooling 레이어의 크기, stride, padding 등 여러 요소에 따라 달라진다

  • Convolution 레이어: receptive field를 K×K 필터를 적용하면 receptive field가 넓어짐
  • Pooling 레이어: Pooling 레이어는 receptive field를 더욱 넓히는 데 기여하지는 않지만 이미지의 크기를 줄이면서 전체적으로 네트워크가 인지하는 영역을 더 넓게 만듦
  • Pooling 레이어에서 픽셀의 receptive field는 그 전 레이어에서 결정된 receptive field와 연관이 있으며, 단순히 (P+K−1)×(P+K−1)로 계산되지는 않음
    • 정확히 계산하려면 Pooling 레이어, Conv 레이어의 영향을 모두 고려해야 함
    • Pooling은 receptive field를 줄이지는 않지만, 픽셀의 수를 줄이면서 각 픽셀에 대한 receptive field는 이전 레이어의 receptive field에 기반하여 증가하게 된다

 

Convolutional Layer의 Receptive Field

Convolutional Filter의 영향:

  • K×K 크기의 convolutional filter가 stride 1로 작동하면, 입력 이미지의 각 위치에 대해 K×K 크기의 영역을 탐색

→ Convolutional layer의 각 유닛은 입력 이미지에서 K×K 영역을 본다

 

Pooling Layer의 Receptive Field

Pooling Layer의 영향:

  • P×P 크기의 pooling layer는 입력으로 주어진 영역을 P×P 블록으로 나누고, 각 블록에 대해 하나의 값을 출력 (예: Max Pooling의 경우 최대값).

→ pooling layer의 각 유닛은 그 이전 단계(Convolutional Layer)의 P×P 영역을 참

 

결합된 Receptive Field

  1. 결합된 Receptive Field 계산:
    • Pooling layer의 각 유닛이 참조하는 P×P 영역은 사실상 그 이전 단계의 receptive field
    • Convolutional Layer와 Pooling Layer의 receptive field를 결합해서 계산해 보면, Pooling Layer의 각 유닛이 참조하는 실제 입력 이미지의 영역은 P×P 블록의 각 픽셀이 참조하는 영역의 합이라고 볼 수 있다?
  2. (P+K−1)×(P+K−1)의 의미:
    • 여기서 말하는 (P+K−1)×(P+K−1)은 Pooling layer에서 각 유닛이 입력 이미지에서 참조하는 전체 영역의 크기를 나타내려는 것
      • P는 pooling layer가 보는 영역의 크기
      • K−1은 각 P×P 영역에서 convolutional filter가 적용될 때 추가로 커버되는 영역
    • 이 공식은 Convolutional Layer와 Pooling Layer의 조합으로 인해 Pooling Layer의 각 유닛이 입력 이미지에서 참조하는 영역의 크기를 표현하려는 것

(P+K−1)×(P+K−1) 공식은 Pooling Layer에서 각 유닛이 입력 이미지에서 참조하는 영역의 크기를 나타내며, Convolutional Layer와 Pooling Layer의 조합으로 인해 이와 같은 receptive field가 결정

이 계산은 입력 이미지의 특정 영역에 대해 Pooling Layer의 각 유닛이 얼마나 넓은 영역을 보고 있는지를 보여준다?

 

예시

  • K=3, P=2
    • Convolutional Layer의 각 유닛은 3×3 영역을 참조
    • Pooling Layer에서 2×2 블록을 적용한다고 할 때, 이 블록은 Convolutional Layer의 2×2 유닛을 참조
    • 그러므로, Pooling Layer에서 2×2 블록의 각 유닛이 실제 입력 이미지에서 커버하는 영역은 (2+3−1)×(2+3−1)=4×4
    •  

 

그럼 Pooling layer 내의 한 pixel의 receptive field는 (P+K−1)×(P+K−1)으로 계산할 수 있는가?

  • P+K−1이라는 식은 특정 조건 하에서만 사용될 수 있으며, 일반적인 경우에는 적용되지 않는다
  • convolutional layer의 K×K 필터와 P×P pooling layer가 단일 계층으로 결합되었을 때 적용될 수 있고, 일반적인 경우에는 적용되지 않음
    • 문제의 보기처럼 stride가 1이고 단일 convolution 레이어를 가지면서 pooling 레이어도 stride가 1일 때 → 단 풀링 레이어가 컨볼루션 레이어 바로 뒤에 있어야 함
  • 네트워크의 전체적인 구조(여러 레이어의 조합)를 고려해야 실제 receptive field를 정확히 계산할 수 있다!@

→ 일반적인 CNN 구조에서는 그 공식이 적용되지 않으며, 여러 레이어를 고려한 복잡한 계산이 필요함!





 

Analysis of model behaviors

Embedding feature analysis

모델의 어떤 레이어에서 추출하느냐에 따라 로우 레벨부터 하이 레벨까지의 특징을 모두 추출해서 분석 가능

t-SNE (t-distributed stochastic neighbor embedding)

맥시멀리 액티베이팅 패치

  1. 분석하고자 하는 특정 채널 선택
  2. 준비된 이미지 샘플 DB를 이용해 액티베이션 맵을 추출
  3. 맥스 값에 해당하는 영역의 패치를 뜯어냄 → 이 패치는 어떤 영역의 피쳐를 가지고 가는가?

I = 이미지

argmax = 최적화되는 대상

f(I) = 특정 클래스에 대한 스코어 (ex. 강아지라면 강아지에 대한 소프트맥스 값 등)

f(I)라 되어 있는 이 입력만 최적화?

Gradient ascent

  1. 초기 입력 이미지를 통해 특정 클래스 스코어 추출
  2. 로스 함수를 맥시마이즈 하는 방향으로 그래디언트를 발생시켜 역전파 → 이때 모델은 fix 하고 나서 수정하지 않음 → 인풋 이미지에 대해서만 최적화 하도록 역전파
  3. 입력 이미지 업데이트
  4. 1~3을 수렴할 때까지 반복(스코어를 맥시마이즈하는 방향으로)

특정 채널을 최대화 하는 방식으로도 할 수 있다?



CAM

Class Activation Mapping

CNN(Convolutional Neural Network) 모델이 이미지 분류를 할 때 특정 클래스에 대해 모델이 주목한 이미지의 영역을 시각화하는 방법

맨 마지막 레이어를 풀리 커넥티드(FC) 레이어 대신 Global average pooling(GAP) layer를 삽입

→ 정확히는 풀리 커넥티드 레이어가 GAP 레이어와 결합된 형태로 존재한다.

 

GAP 글로벌 평균 풀링 레이어

1. 글로벌 평균 풀링(GAP) 레이어

구조 및 동작 원리

  • GAP 레이어는 각 특징 맵(feature map)의 전체 공간에 대해 평균을 계산하여 단 하나의 값으로 축소한다
  • 예를 들어, 입력으로 7x7 크기의 특징 맵이 있다면, GAP 레이어는 이 7x7 크기의 모든 값을 평균 내어 하나의 값을 출력함
  • 이 과정은 각 특징 맵을 하나의 숫자로 축소하므로, 마지막 합성곱 층의 출력이 512개의 7x7 크기 특징 맵이라면 GAP 레이어는 512개의 숫자를 출력하게 된다.

장점

  • 모델 파라미터 감소: GAP 레이어는 단순히 평균을 내는 작업을 수행하므로, 학습해야 할 추가적인 파라미터가 없음. 이는 모델의 복잡성을 줄이고 과적합(overfitting)을 방지하는 데 도움을 준다
  • 위치 정보 유지: GAP 레이어는 전체 특징 맵의 정보(공간 정보 포함)를 하나의 값으로 요약하지만, 특징 맵의 전반적인 내용은 반영되므로 특정 클래스와 연관된 중요한 패턴을 잘 보존할 수 있음

 

2. 풀리 커넥티드(FC) 레이어

구조 및 동작 원리

  • FC 레이어는 각 뉴런이 이전 층의 모든 뉴런과 연결된 형태로, 입력 데이터의 모든 요소에 가중치를 적용하여 출력을 생성
  • 예를 들어, 7x7 크기의 특징 맵을 FC 레이어에 입력하려면 먼저 이를 평탄화(flatten)해야 함. 그러면 7x7 크기의 특징 맵이 49개의 값으로 펼쳐지며, 이 값들은 FC 레이어의 입력으로 사용
  • FC 레이어는 학습을 통해 각 입력 값에 대한 최적의 가중치를 찾고, 이를 통해 클래스 예측을 수행

장점

  • 복잡한 결정 경계 학습: FC 레이어는 모든 입력과 출력이 연결되어 있기 때문에, 매우 복잡한 비선형 관계를 학습할 수 있음.. 이는 모델이 매우 세밀한 분류 작업을 수행할 수 있게 해준다

단점

  • 모델 파라미터 증가: FC 레이어는 많은 수의 가중치를 학습해야 하므로, 네트워크의 파라미터 수가 크게 증가함. 이는 모델의 복잡성을 높이고 과적합의 위험을 증가시킬 수 있음
  • 공간 정보 손실: FC 레이어는 입력을 평탄화하여 사용하기 때문에, 이미지의 공간적 구조나 위치 정보를 잃게 됨. 이는 이미지 분석에서는 중요한 단점이 될 수 있음

 

기본 CNN 구조

  • 일반적인 CNN 모델에서는 합성곱 층(convolutional layers) 뒤에 풀리 커넥티드 레이어(fully connected layer)가 연결. 이 풀리 커넥티드 레이어는 모든 입력 뉴런과 출력 뉴런이 연결된 구조로, 마지막 합성곱 층의 출력 특징 맵(feature map)을 한 줄로 펼친(flatten) 후 이들을 클래스별로 분류하는 역할을 한다

CAM의 구조적 특징

  • CAM에서는 마지막 풀리 커넥티드 레이어 대신 글로벌 평균 풀링(GAP) 레이어를 사용. GAP 레이어는 각 특징 맵의 공간 정보를 평균화하여 하나의 값으로 축소
  • 이렇게 만들어진 각 특징 맵의 평균값들은 특정 클래스의 예측에 대한 입력으로 사용된다. 이 과정에서 풀리 커넥티드 레이어가 완전히 제거되는 것은 아니며, 다만, GAP 레이어의 출력이 각 클래스에 해당하는 가중치와 곱해져 최종 클래스 점수를 계산

가중치의 역할

  • CAM에서의 클래스 점수는 GAP 레이어에서 출력된 값(평균값)에 클래스별로 학습된 가중치를 곱해 계산. 이 가중치는 기존의 풀리 커넥티드 레이어에 있던 가중치와 유사한 역할을 하며, 각 특징 맵이 특정 클래스에 얼마나 중요한지를 반영

 

왜 GAP 레이어를 사용하는가? 풀리 커넥티드 레이어와 비교했을 때 장점

1. 모델의 해석 가능성 향상

  • 직접적인 클래스 활성화 맵 생성: GAP 레이어는 각 특징 맵의 평균을 계산하여 직접적으로 클래스 활성화 맵을 생성하는 데 사용된다. 이를 통해 모델이 예측을 내릴 때 어떤 이미지 영역에 주목했는지를 명확하게 시각화할 수 있음. 모델의 예측 과정이 더욱 투명해지고, 사용자가 모델이 왜 특정 결정을 내렸는지 이해하기가 쉬워진다

2. 모델 복잡도 감소

  • 파라미터 수 감소: GAP 레이어는 입력을 단순히 평균 내는 작업을 수행하기 때문에 학습해야 할 파라미터가 없음. 반면에 FC 레이어는 많은 가중치를 학습해야 하므로 모델의 복잡성이 증가하게 된다. GAP 레이어를 사용하면 모델의 전체 파라미터 수가 줄어들어 학습 과정이 간소화되고, 과적합(overfitting) 위험이 줄어든다

3. 공간 정보의 유지

  • 위치 정보 보존: GAP 레이어는 각 특징 맵의 평균을 내어 출력하기 때문에, 원래의 특징 맵에 담긴 공간적 정보를 어느 정도 유지할 수 있음. 반면, FC 레이어는 입력을 평탄화하여 공간적 구조를 무시하게 된다. GAP 레이어를 사용하면 이미지의 패턴이나 객체 위치에 대한 정보가 보존되어, 모델이 이미지의 중요한 부분을 잘 활용할 수 있음

4. 과적합 위험 감소

  • 더 적은 파라미터로 학습: GAP 레이어는 FC 레이어보다 학습해야 할 파라미터가 훨씬 적기 때문에, 훈련 데이터에 과도하게 맞추는 과적합의 위험이 낮아진다. 이는 특히 훈련 데이터가 제한적일 때 유리하며, 모델의 일반화 성능을 향상시킬 수 있음

5. 모델의 간소화

  • 간단하고 효과적인 구조: GAP 레이어는 구조가 단순하기 때문에 구현이 쉽고, 모델을 간소화할 수 있음. 이는 모델을 더 쉽게 유지보수하고, 다양한 하드웨어에서 실행하기 쉽게 만들어 준다
  1. 특징 맵 추출: 이미지가 CNN을 통과하면서 마지막 합성곱 층에서 다양한 특징 맵(feature map)들이 생성
  2. 클래스별 가중치: 각 클래스에 대해 학습된 완전 연결층(fully connected layer)의 가중치가 있고, 이 가중치는 각 특징 맵이 해당 클래스 예측에 얼마나 중요한지를 나타냄
  3. 특징 맵 가중합: 특정 클래스에 대해 각 특징 맵에 가중치를 곱한 후, 이들의 가중합을 계산하여 클래스 활성화 맵을 만든다. 이 맵은 모델이 해당 클래스에 대해 주목한 이미지의 영역을 나타낸다
  4. 시각화: 최종적으로, 이 클래스 활성화 맵을 원본 이미지에 중첩시켜 시각화. 이를 통해 어떤 이미지 영역이 해당 클래스의 예측에 중요한 역할을 했는지 확인할 수 있음
  • 단점: 네트워크 아키텍처의 변형과 재학습이 필요하다
    • CAM은 특정 구조를 요구하기 때문에 글로벌 평균 풀링 층이 있는 모델에서만 적용할 수 있음. 이 때문에 기존의 CNN 구조를 수정해야 하거나, 제한된 모델에서만 CAM을 사용할 수 있다는 단점

 

Grad-CAM

Gradient-weighted Class Activation Mapping

CNN(Convolutional Neural Network) 모델이 이미지에 대해 내린 예측의 근거를 시각화하는 방법

Grad-CAM은 이미지의 특정 부분이 모델의 예측에 얼마나 기여했는지를 확인하기 위해 사용

  • Grad-CAM의 주요 아이디어는 모델의 마지막 합성곱(convolutional) 층을 활용하는 것.
    • 합성곱 층은 이미지에서 위치 정보와 패턴을 보존하면서 특징을 추출하는 역할을 하므로, 이 층의 활성화 맵(activation map)을 통해 모델이 이미지의 어느 부분을 주목했는지를 알 수 있음
  1. 특정 클래스에 대한 예측 점수: 특정 클래스(예: '고양이'가 존재하는지 여부)에 대한 모델의 예측 점수를 계산
  2. 이 클래스 점수에 대한 입력 이미지의 그래디언트 계산: 이 클래스에 대한 예측 점수를 기준으로 입력 이미지의 각 픽셀에 대한 그래디언트를 계산. 이 그래디언트는 모델이 이 클래스의 예측에 얼마나 민감한지를 표현
  3. 특정 합성곱 층의 출력 활성화 맵: 그래디언트를 이용해 마지막 합성곱 층의 출력 활성화 맵을 가중합(weighted sum)한다
    1. 이를 통해 모델이 예측 시 주목한 이미지의 위치 정보를 얻을 수 있음
  4. 결과 시각화: 최종적으로 얻은 맵을 원본 이미지에 중첩하여 시각화
    1. 이 시각화 결과를 통해 모델이 예측에 있어 이미지의 어떤 부분을 주로 사용했는지 알 수 있음

Grad-CAM에서의 ReLU

알고리즘 마지막 단계에서 ReLU 함수를 적용함

  • 클래스에 대한 중요도를 나타내는 가중 합을 계산하는 것이 목적인데 ReLU 활성화 함수를 적용하면 음수 값을 제거하고 양수 값만 남길 수 있기 때문에, 모델이 특정 클래스에 긍정적으로 기여하는 특징들만 강조할 수 있음

CAM의 단점을 보완하기 위해 Grad-CAM이 개발

Grad-CAM은 모델 구조에 대한 제약이 적으며, 마지막 합성곱 층에서 활성화 맵과 클래스에 대한 그라디언트를 결합하여 보다 유연하게 모델의 예측 근거를 시각화할 수 있음

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

Computational Imaging  (0) 2025.01.16
Object Detection & R-CNN  (0) 2025.01.15
Semantic Segmentation  (0) 2025.01.14
ViT & GAN  (0) 2025.01.14