본문 바로가기
  • 책상 밖 세상을 경험할 수 있는 Playground를 제공하고, 수동적 학습에서 창조의 삶으로의 전환을 위한 새로운 라이프 스타일을 제시합니다.
Computer Vision

[2024-1] 홍연선 - ImageNet Classification with Deep Convolutional Neural Networks

by Yeonsunn 2024. 6. 29.

1. Introduction

더 많은 이미지 데이터를 학습하기 위해서는 그만큼의 더 큰 학습량을 가진 모델이 필요하다. 하지만 객체 인식 작업의 복잡성 때문에 그 대용량 데이터셋으로도 잘 인식해내기에 부족할 수 있으므로, 모델은 부족한 데이터를 보완할 수 있는 사전지식을 더 많이 가져야한다고 말한다.  합성곱신경망(convolutional neural networks; CNNs)이 그러한 모델중에 하나이다.

CNN은 이러한 모델 클래스 중 하나로, 이들의 용량은 깊이와 너비를 조절하여 관리할 수 있다. 또한 CNN은 이미지의 특성에 대해 강력하고 대체로 정확한 가정을 하며, 따라서 유사한 크기의 층을 가진 표준 피드포워드 신경망보다 훨씬 적은 연결과 파라미터를 가지고 있어 훈련하기가 더 쉽다.

※ Feedforward neural networks(FNNs)
 : 들어오는 정보가 입력층, 은닉층, 출력층을 순서대로 거치는 형태의 가장 기본적인 인공신경망이다. 은닉층에서 가중치와 바이어스를 적용해 활성화 함수를 통과시킨 후, 다음 층으로 전달하는 과정을 반복하는 것으로, 정보는 역방향으로 흐르거나 순환하지 않는 특징을 가진다.은닉층의 뉴런들은 가중치(weight)와 바이어스(bias)를 사용해 입력 데이터를 변환하고, 활성화 함수(Activation Function)를 적용해 비선형성을 추가한다. 은닉층의 수와 각 층의 뉴런 수는 네트워크의 구조를 정의한다. 활성화함수는 각 뉴런의 출력을 결정하는 함수로, 비선형성을 추가해 신경망이 복잡한 패턴을 학습할 수 있게 도와준다. ReLU(Rectified Linear Unit), Sigmoid, Tanh 등이 있다. 손실함수는 네트워크의 출력이 실제 값과 얼마나 차이나는지를 측정하는 함수이다. 손실 함수를 최소화하는 방향으로 네트워크를 학습시킨다. 이 때 역전파 알고리즘이 사용되는데, 이는 손실 함수를 최소화하기 위해 가중치와 바이어스를 조정하는 과정이라고 할 수 있다. 출력층에서 입력층 방향으로 오류를 역전파시켜 가중치들을 업데이트한다. 

 

이러한 CNN의 능력으로도 고해상도 이미지에 적용하기에는 너무 비싸고 복잡했지만  현재 GPU와 최적화된 2D 컨볼루션 구현 덕분에 큰 CNN을 훈련할 수 있게 되었고, ImageNet 같은 대규모 데이터셋이 충분한 레이블 예시를 제공하여 과적합을 피할 수 있게 되었다고 한다.  해당 논문에서 네트워크는 두 개의 GTX 580 3GB GPU에서 5~6일 동안 훈련을 진행했으며, 더 빠른 GPU와 더 많은 데이터셋이 제공되면 더 좋은 결과를 낼 수 있을 것이라고 말한다. 

2. The Dataset

논문에서 사용된 데이터셋에 대해 설명한다. ImageNet은 약 22000개의 카테고리에 속하는 1500만 개 이상의 고해상도 이미지로 구성된 데이터셋이다. 이 이미지는 웹에서 수집되어 Amazon의 Mechanical Turk를 통해 라벨이 지정되었다. 2010년부터 매년 ImageNet Large-Scale Visual Recognition Challenge (ILSVRC)가 개최되었으며, ILSVRC는 ImageNet의 일부를 사용해 총 120만 개의 훈련 이미지, 5만 개의 검증 이미지, 15만 개의 테스트 이미지로 구성된다. ILSVRC-2010은 테스트 세트 라벨이 공개된 유일한 버전으로, 대부분의 실험이 이 버전에서 수행되었다. ImageNet에서는 top-1과 top-5 오류율을 보고하며, top-5 오류율은 모델이 예측한 상위 5개의 라벨 중 정답이 포함되지 않은 테스트 이미지의 비율을 나타낸다. 

ImageNet은 다양한 해상도의 이미지를 포함하고 있지만, 이 시스템은 일정한 입력 차원을 필요로 하기 때문에 이미지를 고정된 256 × 256 해상도로 다운샘플링했다. 직사각형 이미지를 주어진 경우, 짧은 쪽을 256 길이로 맞추고, 중앙에서 256 × 256 크기의 패치를 잘라냈다. 이미지를 전처리하지 않았으며, 각 픽셀에서 훈련 세트의 평균 활동을 뺀 것 외에는 특별한 처리를 하지 않고, 논문에서는 (중심화된) 원시 RGB 값으로 네트워크를 훈련시켰다.

3. The Architecture

네트워크의 구조의 특징에 대해 설명하고 있다. 여덟 개의 학습된 레이어로 이루어져 있는데, 이중 다섯개는 컨볼루션 레이어와 세 개의 완전 연결 레이어로 구성된다. 

CNN에서 convolution/pooling layer는 이미지를 형상으로 분할하고 분석하는 역할을 하고, fully connected layer는 이미지를 분류 및 설명하는데 가장 적합한 예측을 하는 역할을 한다. 자세히 설명하자면, convolution layer의 필터라고 불리는 것에 이미지를 통과하여 한 번에 몇 Pixel(NxN)을 스캔하고, 각 형상이 속하는 클래스를 예측하는 형상 맵을 만든 후, pooling layer에서 가장 중요한 정보는 유지하고 피쳐의 크기를 줄인다.그 후 fully connected layer에서 convolution/pooling 단계의 결과를 취하여 이미지를 정의된 라벨로 분류한다. 즉, 한층의 모든 뉴런이 다음층이 모든 뉴런과 연결된 상태로 2차원의 배열 형태 이미지를 1차원의 평탄화 작업을 통해 이미지를 분류하는데 사용되는 계층이다. 

3.1 ReLU Nonlinearity

non-saturating nonlinearity 함수는 어떤 입력 x가 무한대로 갈때 함수의 값이 무한대로 가는 것이고 saturating nonlinearity 함수는 어떤 입력 x가 무한대로 갈때 함수의 값이 어떤 범위내에서만 움직이는 것이다. non-saturating 함수의 대표적인 예로는 ReLU(Rectified Linear Unit)가 있다. ReLU 함수는 입력값이 0보다 크면 그 값을 그대로 출력하고, 0보다 작으면 0을 출력하는 방식으로 f(x)=max(0,x)과 같이 표현된다.

ReLU는 입력값이 증가할수록 출력값도 선형적으로 증가하기 때문에, '포화'되지 않는다. 이는 전통적인 활성화 함수인 시그모이드(sigmoid)나 탄젠트 하이퍼볼릭(tanh)와 대조적이다. 시그모이드나 탄젠트 하이퍼볼릭은 saturating nonlinearity함수로써 입력값이 일정 범위를 넘으면 출력값이 0 또는 1에 가까워지면서 학습이 느려지는 문제가 있다. 하지만 ReLU는 효율적인 계산이 가능하다. 논문에서도 ReLU를 이용했을 때는 training error가 25%까지 떨어지는데 걸리는 반복횟수가 tanh를 사용했을 때 보다 훨씬 적었다.

 

이렇게 학습 속도가 빠르다는 것은 모델이 훈련 데이터를 더 빨리 학습하고, 더 좋은 성능을 낼 수 있다는 의미이다. 이는 과적합의 우려가 있다. Jarrett 등의 연구에서는 다른 비선형 함수를 사용했는데, 그 연구의 주요 목표는 과적합을 방지하는 것이었기에 그 연구에서 관찰된 효과는 이 논문에서의 결과와 달리, 주로 모델이 과적합을 방지하도록 도와주는 방향으로 나타났다. 하지만 논문에서는 빠른 학습이 대규모 모델에서 대규모 데이터셋을 다룰 때 성능에 큰 영향을 미친다는 점을 강조하고 있다. 

3.2 Training on Multiple GPUs

GTX 580 GPU 한 대는 3GB의 메모리만 가지고 있어서 네트워크의 최대 크기가 제한된다. 그래서 네트워크를 두 개의 GPU에 나눠서 훈련했다. 현재 GPU들은 서로의 메모리에 직접 접근할 수 있어서, 호스트 컴퓨터의 메모리를 거치지 않아도 된다. 논문에서 사용한 병렬화 방식은 각 GPU에 절반의 커널(또는 뉴런)을 할당하고, 특정 층에서만 GPU 간 통신을 하도록 했다. 예를 들어, 3층의 커널은 2층의 모든 커널 맵에서 입력을 받지만, 4층의 커널은 같은 GPU에 있는 3층의 커널 맵에서만 입력을 받는다. 이 연결 패턴을 선택하는 것은 교차 검증의 문제지만, 이를 통해 통신량을 계산량의 적절한 비율로 조정할 수 있었다. 이 결과로 나온 아키텍처는 Ciresan 등에서 사용한 "columnar" CNN과 유사하지만, 우리의 경우 각 열이 독립적이지 않다. 이 방식은 하나의 GPU로 훈련한 네트워크에 비해 top-1과 top-5 에러율을 각각 1.7%와 1.2% 줄였고, 두 GPU를 사용한 네트워크는 하나의 GPU를 사용한 네트워크보다 훈련 시간이 조금 덜 걸렸다.

3.3 Local Response Normalization

신경망에서 ReLU 활성화 함수를 사용하는 경우, 일부 뉴런의 출력이 너무 커지는 것을 방지하기 위해 사용되는 정규화 기법이다. 이렇게 하면 모델이 일반화(generalization)를 더 잘하게 되어 새로운 데이터를 잘 예측할 수 있도록 도와주는 역할을 한다.

local response normalization의 수식은 위와 같다. 이 수식에서 각 뉴런의 출력 a_(i,x,y) (x,y)위치에서 이웃한 개의 다른 커널 출력의 제곱합으로 나눠서 정규화한다. 이 과정은 큰 출력을 가진 뉴런들이 서로 경쟁하도록 해서, 너무 큰 값으로 치우치지 않게 만들어 준다. 실제 뇌에서의 측면 억제(lateral inhibition)를 모방한 것이다.

3.4 Overlapping Pooling

CNN에서 pooling layer는 이웃한 뉴런들의 그룹의 output을 같은 커널 맵에 요약하는 역할을 한다. 전통적으로 인접한 풀링 유닛들이 요약하는 영역은 겹치지 않는다. 풀링 계층은 s 픽셀 간격으로 배치된 풀링 유닛 그리드로 생각할 수 있으며, 각 유닛은 z × z 크기의 이웃을 요약한다. s = z로 설정하면 전통적인 로컬 풀링이 되고, s < z로 설정하면 겹치는 풀링이 된다. 네트워크 전체에서 s = 2, z = 3의 overlappnig pooling을 사용했는데, 이 방식은 s = 2, z = 2의 non-overlapping에 비해 top-1과 top-5 에러율을 각각 0.4%와 0.3% 줄였다. 또한, overlapping pooling을 사용한 모델이 훈련 중 과적합이 약간 더 어려운 것을 관찰했다. 이는 1, 2, 5번째 convolutional layer에만 적용했다. 

3.5 Overall Architecture

3개의 fullly connected layers중 마지막 fully-connected layer에는 1000-way softmax를 적용했다고 하는데, 소프트맥스는 여러 클래스 중 하나를 선택해야 할 때 사용되는 함수이다. 각 클래스에 대한 확률을 계산해서 전체 합이 1이 되도록 만들어주어 이를 통해 가장 높은 확률을 가진 클래스를 선택할 수 있게 한다. 1000-way라는 것은 1000개의 클래스 라벨에 대한 분포를 생성한다는 의미이다. 본 논문에서 사용한 네트워크는 다항 로지스틱 회귀 목적 함수를 최대화하는데, 이는 예측 분포에서 정답 라벨의 로그 확률의 평균을 최대화하는 것과 같다고 한다. 다항 로지스틱 회귀 함수는 3개 이상의 클래스에서 어느 곳에 속하는지, 그 확률이 큰 곳으로 결정할 때 사용하는 함수이며, 로그확률을 사용하는 이유는 확률의 곱셈을 덧셈으로 바꿔주어 계산적으로 이점이 있고, 수치의 불안정성을 줄여주기 때문이다. 

네트워크의 구조 모형과 각 계층의 특징은 아래와 같다.

  1. Convolutional layer 1
    Input size : 224x224x3
    Kernel : size - 11x11x3, count - 96, stride - 4
  2. Convolutional layer 2
    Input : 첫 번째 convolution layer의 Response-Normalized & Pooled output
    Kernel : size - 5x5x48, count - 256
  3. Convolutional layer - 3
    Input : 두 번째 convolution layer의 Response-Normalized & Pooled output
    Kernel : size - 3x3x256, count - 384
  4. Convolutional layer - 4
    Input : 세 번째 convolution layer의 output
    Kernel : size - 3x3x192, count - 384
  5. Convolutional layer - 5
    Input : 네 번째 convolution layer 의 output
    Kernel : size - 3x3x192, count - 256
  6. Fully-Connected layer - 1
    Input : 다섯 번째 convolution layer 의 Pooled output
    Neurons - 4096
  7. Fully-Connected layer - 2
    Input : FC layer-1의 output
    Neurons - 4096
  8. Fully-Connected layer - 3
    Input : FC layer-2의 output
    Output : 1000-way Softmax   

Stride는 필터가 이미지를 이동하는 간격을 말한다. 예를 들어, stride가 1이면 필터가 한 칸씩 이동하고, stride가 2면 두 칸씩 이동한다. 이렇게 하면 출력 크기가 줄어들어 계산량을 줄일 수 있다. 두 번째, 네 번째, 다섯 번째 convolutional layers의 커널은 같은 GPU안에 있는 이전 단계의 커널맵과만 연결된다. 세 번째 convolutional layer는 두 번째 층의 모든 커널맵과 연결된다. 

여기서 커널은 이미지에서 특정 패턴이나 특징을 감지하는 작은 필터이다. 합성곱 연산을 통해 입력 이미지의 여러 위치에 적용되면서, 각 위치의 특징을 추출하는 역할을 한다. 입력이미지와 convolutional layer에서의 연산(ReLU)을 통해 특징맵을 형성한다. 

fully connected layers안의 뉴런들은 이전 단계의 모든 뉴런과 연결되어있다. Response-normalization layers는 첫 번째와 두 번째 convolution layer 뒤에 위치하며, Max-pooling layer는 각 Response-normalization layers와 다섯 번째 convolutional layer뒤에 ReLU non-linearity는 모든 합성곱 계층과 완전 연결 계층에 적용된다. 

4. Reducing Overfitting

4.1 Data Augmentation

과적합 방지를 위해 사용한 첫 번째 방법은 data augmentation(데이터 증강) 이다. 이는 레이블을 보존하면서 데이터셋을 인위적으로 확장하는 방법이다. GPU가 이전 배치의 이미지를 학습하는 동안 CPU에서 파이썬 코드로 변형된 이미지를 생성할 수 있어서 이 데이터 증강 방법은 사실상 계산 비용이 무료이다. 논문에서는 두 가지 형태의 데이터 증강을 사용했다. 

  • 이미지 변환과 수평 반전
    • 256×256 크기의 원본 이미지에서 임의의 224×224 패치를 추출하고, 그 패치들을 수평으로 반전해서 학습에 사용.
    • 이렇게 하면 학습 셋의 크기가 2048배 증가한다.
    • 테스트 시에는 5개의 패치(4개의 코너 패치와 중앙 패치)와 그 수평 반전을 사용하여 총 10개의 패치로 예측을 평균 낸다.
  • RGB 채널 강도 변경
    • 이미지넷의 RGB 픽셀 값을 통해 주성분 분석(PCA)을 수행한다. 주성분 분석이란, 개별 자료의 상관관계를 사용해 차원을 줄이는 방법이다. 많은 데이터 중 대표할 데이터를 선언하는 방식으로 데이터의 크기를 줄인다. 
    • PCA를 이용해 각 RGB 이미지 픽셀에 [p1,p2,p3][α1λ1,α2λ2,α3λ3]T 를 더해준다.
      • : RGB 픽셀 값 공분산 행렬의 i번째 고유벡터
      • λi : i번째 고유값
      • αi : 평균이 0이고 표준편차가 0.1인 가우시안 분포에서 추출된 랜덤 변수  
    • 각 이미지에 주성분과 그 고유값에 랜덤하게 생성된 값의 곱을 더한다. 이는 밝기와 색상 변화에 대한 이미지를 보존하는 데 도움이 된다.
    • 이 방법은 탑-1 오류율을 1% 이상 줄이는 데 기여한다.
    • 이미지의 밝기나 색상 변화에도 불구하고 물체의 정체성을 유지할 수 있게 한다. 이 방법은 이미지 데이터의 다양한 변화를 학습 데이터로 사용함으로써 모델이 더 일반화된 학습을 하도록 하여 결과적으로 모델이 새로운 데이터에 더 잘 대응할 수 있게 한다.
     

4.2 Dropout

Dropout은 훈련시 hidden neuron의 output을 50% 확률로 0으로 설정한다. 이렇게 0으로 설정되어 드롭된 뉴런은 forward pass(순전파)와 backpropagation(역전파)과정에 참여하지 않는다.

순전파는 입력 데이터를 신경망에 넣어서 예측 결과를 얻는 과정으로 각 뉴런은 입력 값을 받아서 가중치를 곱하고, 비선형 함수를 적용해서 다음 층으로 넘기는 과정이다. 드롭된 뉴런이 이 단계에 참여하지 않는다는 뜻은 그 뉴런이 아예 없는 것처럼 작동한다는 것과 같다. 따라서 그 뉴런의 결과는 다음 층에 영향을 주지 않는다.

역전파는 신경망의 출력값과 실제값 간의 오차를 계산하고, 이 오차를 네트워크의 가중치를 업데이트하는데 사용되는 과정이다. 출력층에서부터 시작해서 입력층 방향으로 오차를 전파하면서 가중치를 조정한다. 드롭된 뉴런은 이 과정에도 참여하지 않기 때문에 네트워크는 매번 입력을 받을 때마다 다른 구조를 샘플링하게 되고, 모든 구조가 가중치를 공유한다. 따라서 특정 뉴런들에 의존하지 않고 더 강력한 특징들을 학습하게 된다. 

본 논문에서는 처음 두 fully-connected layer뒤에 dropout을 적용했다. 

 

5. Details of learning

이 부분에서는 학습 과정에 대하여 설명하고 있다. 본 논문에서는 모델 학습시 확률적 경사 하강법을 사용했다. 배치 크기가 128이라는 의미는, 한 번에 128개의 예시를 학습시켰다는 것이다. 모멘텀은 0.9로 설정했는데, 이는 이전 업데이트 방향을 조금 더 고려해서 안정적으로 수렴하게 하는 방법이다. 가중치 감쇠(weight decay)는 0.0005로 했는데, 이는 과적합을 막기 위한 정규화 기법이면서 동시에 훈련 오류도 줄여주는 효과가 있다. 이 때 weight decay가 작은 값이 모델 학습에 중요함을 밝혀냈다. 업데이트 규칙은 아래와 같다.

 

i는 반복 횟수, v는 모멘텀 변수, 앱실론은 학습률을 의미한다. 위 방식으로 주기마다 업데이트 했다. 초기의 learning rate는 0.01로 설정하고 학습 동안 validation error rate가 개선되지 않을 시 10배씩 줄여서 총 3번 감소시켰다.

6. Results

1. ILSVRC-2010

이텔릭체로 표시된 것은 이전의 최고 성능을 나타냄

 2. ILSVRC-2012

*표시가 된 모델은 하나의 convolution layer를 추가하고 2011년의 이미지넷으로 pre-trained한 후 2012 데이터셋에 맞게 fine-tuning한 모델을 의미한다. 이렇게 했을 때, 2012년 데이터셋으로만 훈련했을 때보다 더 좋은 성과를 냈음을 보여주고 있다. CNN앞의 숫자는 몇 개의 CNN을 평균내었는지를 뜻한다. 단일 CNN보다 여러개의 CNN을 조합한 것이 성능이 더 좋았다. 

6.1 Qualitative Evaluations

GPU1에서는 색상 비특이적인 필터를 주로 학습하여 흑백이나 모형을 인식하고, GPU2의 커널은 색상 특이적 필터를 학습하였다. 이렇게 서로 특화된 것이 다르다. 한 GPU가 다른 GPU의 출력을 직접 받지 않기 때문에 각각 독립적으로 학습할 수 있다.

왼쪽 표에서는 네트워크가 학습한 내용을 평가하기 위해 8개의 테스트 이미지에 대해 상위 5개 예측을 계산한 것을 보여주고 있다. 예측은 대체로 합리적이다. 예를 들어 표범에 대해서는 다른 고양이 종류만 가능한 레이블로 판단했다. 일부 이미지(예: 그릴, 체리)는 사진의 초점이 애매해서 예측이 혼란스러울 수 있다.

오른쪽 표에서는 테스트 이미지 5개와 이들과 가장 유사한 훈련 이미지 6개를 보여주고 있다. 픽셀 수준에서는 유사하지 않지만, 높은 수준의 특성에서는 유사성을 나타내고 있다. 이 때 4096-차원 은닉층에서의 피처 활성화를 이용해 이미지 간의 유사성을 평가했다. 두 이미지의 피처 벡터 간의 유클리드 거리가 작다면, 네트워크는 두 이미지를 유사하다고 판단한다. 4096차원 벡터의 유클리드 거리를 계산하는 건 비효율적이지만, 오토인코더를 사용해 벡터를 짧은 이진 코드로 압축하면 효율성을 높일 수 있다고 말한다. 

 

 

 

 

 

https://wikidocs.net/64066

 

11-01 합성곱 신경망(Convolution Neural Network)

합성곱 신경망(Convolutional Neural Network)은 이미지 처리에 탁월한 성능을 보이는 신경망입니다. 하지만 합성곱 신경망으로 텍스트 처리를 하기 위한 시도들이…

wikidocs.net