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

[2025-1] 정성윤 - Very Deep Convolutional Networks for Large scale image recognition

by SeongYoon1339 2025. 1. 18.

[P1] Very Deep Convolutional Networks For Large-Scale Image Recognition.pdf
0.19MB

https://troubled-popcorn-a03.notion.site/Very-Deep-Convolutional-Networks-for-Large-scale-image-recognition-17e392d1016e80d09e3ee0b24d624822

CNN

  1. 신경 다발(Connection)을 잘 끊어낸다.
  2. 위치별 특징을 추출함 : 위치의 정보는 유지한 채로 특정 패턴(특징)을 찾는다.
  • 모든 픽셀들의 연결 = Connection 3 X (3 X 100 X 100) ⇒ 총 9만개
  • 정해진 Weight Set으로 데이터 값들을 긁어낸다.
  • 가까이 있는 값들만 연결 → 위치 정보를 잃지 않음 → 담당 노드라는 “의미”가 생김
  • Kernel(Filter) + bias : 스캔을 통해 필터와 비슷한 특징(패턴)을 찾는다(내적)
  • CNN에서는 kernel, bias가 학습 파라미터가 된다. 각 필터가 어떤 특징을 추출할지를 AI가 정하도록 한다.
  • 어떤 특징이 어디에, 얼만큼 강하게 있는가?
  • Feature Map : 각각의 Convolution 결과를 깊이 축으로 쌓는다
  • 필터의 채널 수는 반드시 입력의 채널 수에 맞춰 주어야 한다.
  • 사용한 필터의 개수 = Output의 채널!

ex) 3 x 7 x 7 입력, 3 x 3짜리 kernel의 채널 수 : 3 + 데이터 수는 32개

필터를 10종류 사용하였다 → 그 다음 20종류 사용

  • 3 X 3 필터링 시 행, 열은 각각 2개씩 줄어든다
  • 데이터 수가 늘어난다고 신경망 노드 수가 늘어나지 않음 → 개수에는 필터링이 영향을 안준다
  • if Kernel Size가 1 X 1 이면 : Feature map간의 weighted Sum이 될 것
  • Padding : 입력 데이터 및 주변을 0으로 채우는 기법 → 출력 크기의 조정이 목적
  • Stride : 필터를 적용하는 위치의 간격
  • Pooling : 사이즈를 줄여 넓은 범위를 줄이도록 하는 Layer (Max, Average)
  • Convolution ,Pooling의 반복을 통해 점점 더 넓은 범위, 더 많은 특징을 추출해 낼 수 있다!
  • 강아지 분류 문제
  • Conv1 통과 : 처음에 선의 방향에 따라 특징 추출 → Conv를 반복하며 조합이 많아짐(여러 부분으로 나뉨)

Introduction

  • ImageNet Challenge : 128만 훈련, 5만 Validation, 10만 Test로 1000종의 사진을 분류하는 문제
  • 논문이 나온 2012년에는 Depth(깊이)를 깊게 하는 방식을 통해 CNN의 성능을 늘릴 수 있었다. → 다른 Parameter들은 고정시키고 네트워크의 ‘깊이’를 증가시키며 성능을 평가
  • 깊은 Layer에서 데이터의 크기를 유지하기 위해 매우 작은 필터를 사용(3 X 3)

ConvNet Configurations

Architecture

입력 : 224 x 224 RGB 이미지 → 즉, 채널이 3개(R, G, B)

  • 각 픽셀에 대해 RGB의 평균을 구하는 전처리 과정 수행 → RGB의 평균을 구하고 각각에 대해 빼주어 정규화 과정을 수행한 것
  • 3 x 3 필터를 쓰고 일부 작업에서는 1 x 1을 이용해 feature map의 weighted sum을 구하였다.
  • Stride = 1 , Padding : 1
  • 5 Max Pooling with 2 x 2 → Maxpooling(2) 5번 수행
  • 이후 3번의 Fully Connected Layer → 4096개의 채널이 존재
  • 모든 Layer에서 Activation Function으로 ReLU 사용
  • LRN(Local Response Normalization) 정규화를 사용 → 성능 향상은 없지만 메모리 사용 면에서 도움이 된다.

Configurations

  • depth에 따라 다른 클래스로 분류

Receptive Field

영상의 어느 부분을 보는가에 대한 지표 ⇒ Receptive Field가 클 수록 이미지의 넓은 부분을 본다.

  • 이전 모델들에서는 7 x 7을 한 번만 보는 식이었으나, VGG 모델에서는 3x3을 여러번 보는 식으로 변경 → 성능이 향상되었다.
  • Why? : 2 번을 보면 집중도가 훨씬 커진다. → 하나의 feature map의 부분값은 넓은 면을 더 집중해서 본 것과 같아진다.

“내 위치는 집중해서 보고, 나머지는 덜 해도 넓게 본다.”

심지어 넓게 보는 것 보다 메모리 자원을 적게 사용한다

⇒ 3 X (3 X 3 X C X C) = 27C2 vs (7 X 7) = 49C2 : 7X7은 낮은 성능에 연산량도 많다.

  • 1 X 1 Convolution : 채널별로 합을 구하기에 Linear해 보일 수 있으나, Activation 함수를 통해 Non-Linearity를 증가시키는 역할을 수행 가능

Fully Connected Layer

: Conv, Pooling을 모두 통과한 이후에는, MLP를 통과해야 한다.

  • 처음엔 먼 것과의 연결을 끊었지만, 나중엔 각 영역별 특징을 모두 보고 결정한다.(최종 feature map은 정제된 특징이므로)
  • Max Pooling을 너무 많이 해버리면 공간적인 정보를 잃어버리게 된다.

Training

  • 상대적으로 얕은 A 네트워크를 우선적으로 학습 → 가중치가 정규분포를 따르도록 임의의 값으로 초기화
  • 어느정도 학습이 완료되면 입력층 부분의 4개 층과 마지막 3개의 Fully Connected Layer의 Weight를 학습할 네트워크의 초기값으로 사용.
  • 이미지 크기는 처음에는 크기를 고정하는 Single-Scale 방식과 이미지 크기를 바꾸는 Multi-Scale 방식 2 가지로 나눠진다.

Testing

  • 신경망의 Convolution Layer로만 구성될 경우 입력 이미지의 크기 제약이 없어진다. 이에 따라 하나의 이미지를 다양한 스케일로 사용한 결과들을 Ensemble하여 이미지 분류 정확도를 높일 수 있다.