더보기
CS231n 강의 홈페이지: https://cs231n.stanford.edu/
CS231n Spring 2017 유튜브 강의 영상: https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk
강의 슬라이드 & 한글 자막: https://github.com/visionNoob/CS231N_17_KOR_SUB
Recap of Neural Networks
- 신경망의 구조
- 선형 함수(행렬곱)와 비선형 함수(활성 함수)를 쌓아 신경망을 구성
- 이 구조는 신경망이 복잡한 패턴을 학습하고 인식할 수 있게 함
- 문제 해결 능력
- 신경망은 다양한 입력 데이터(자동차 이미지)를 분석하고 분류하는 데 유용
- 중간 단계의 템플릿을 학습함으로써, 신경망은 특정 특성을 인식하고 이를 기반으로 최종 결정을 내림
History of CNN
- 역사적 발전
- Yann LeCun (1998)
- 신경망을 학습시키기 위해 Backpropagation과 gradient-based learning을 적용
- 문서 인식과 우편번호 숫자 인식에 효과적이었으나 신경망을 더 크게 만들 수는 없었음
- AlexNet (2012)
- 현대 CNN의 선구자
- Yann LeCun의 CNN과 구조적으로 비슷하지만 더 크고 깊으며, 대규모 데이터셋인 ImageNet과 GPU의 성능을 활용
- Yann LeCun (1998)
- 응용 분야
- 이미지 검색과 분류
- 객체 탐지(Detection): 영상 내에서 객체를 찾아내고 네모 박스를 정확하게 그림
- 세그멘테이션(Segmentation): 픽셀 단위로 객체를 분류하여 나무나 사람 등의 경계를 구분
- 자율주행 자동차: GPU를 활용하여 효과적으로 훈련되고 실행되며, 임베디드 시스템에서도 동작할 수 있음
- 얼굴 인식: 얼굴 이미지를 입력으로 받아 사람을 식별
- 비디오 처리: 단일 이미지뿐만 아니라 시간적 정보를 활용하여 비디오를 분석
- 포즈 인식: 관절들을 인식해 다양한 사람의 포즈를 잡아냄
- 게임: 강화학습을 통해 Atari 게임을 하거나 바둑을 두는 데 사용
- 의료 영상 분석: 의료 이미지를 해석하고 진단하는 데 사용
- 이미지 캡셔닝(Image Captioning): 이미지를 설명하는 문장 생성
- 예술 창작: Deep Dream, Style Transfer 등
FC Layer vs. CNN
- FC Layer
- 벡터 연산을 통해 입력 데이터를 처리
- 과정
- 예를 들어, 32x32x3 크기의 이미지를 입력으로 받는 경우 이를 3072차원의 벡터로 펼침
- 3072x10 크기의 가중치 행렬 W와 곱함
- (1x3072) (3072x10) = (1x10) 이므로 10개의 출력값을 얻게 됨
- CNN
- CNN는 입력 이미지의 공간적 특성을 반영
- 과정
- FC Layer와 달리 이미지를 벡터로 변환하지 않고, 원래의 이미지 구조를 유지
- 특정 크기의 필터가 이미지를 슬라이딩하며 공간적으로 내적을 수행 (그림에서는 5x5x3 필터)
Convolutional Neural Networks
- How CNN Filters Work
- 필터의 구조
- 필터는 입력 데이터의 깊이(Depth)와 일치함 (무조건 필터 깊이 = 입력 데이터 깊이)
- 예를 들어, 입력 이미지가 32x32x3 크기라면 5x5 필터의 경우는 5x5x3 크기를 가짐
- 내적 연산
- 필터는 이미지의 특정 부분에 겹쳐 놓고, 각 원소와 대응하는 이미지의 픽셀 값을 곱하여 내적을 수행
- 예를 들어, 5x5x3 필터라면 75개의 곱셈 연산이 이루어지며, 여기에는 bias term도 포함됨
- \( W^{T}x + b \)를 계산. 실제로 내적은 전부 펼쳐서 진행됨
- 필터의 구조
- Convolving (Sliding)
- 필터는 이미지의 좌상단부터 시작하여 오른쪽과 아래로 몇 칸씩 이동하며 연산을 수행
- 각 위치에서의 연산 결과는 출력 activation map에 저장됨
- 출력된 activation map의 크기는 필터의 크기와 슬라이딩 방식에 따라 결정됨
- Multiple Filters
- CNN에서는 다양한 특징을 추출하기 위한 여러 개의 필터를 사용
- 필터 한 개가 activation map 한 개를 만들고 각 필터는 서로 다른 특징을 추출
- Structures of CNN
- 여러 개의 Convolutional Layer를 쌓아 올림
- 각 레이어 사이에는 활성 함수(예: ReLU)와 때로는 pooling layer도 포함
- 각 레이어의 출력 → 다음 레이어의 입력
Hierarchical feature learning
- Low-level Features
- 초기 레이어의 필터들은 edge와 같은 단순한 저수준 특징을 학습
- Mid-level Features
- 중간 레이어의 필터들은 corner나 blobs와 같은 중간 수준의 특징을 학습
- High-level Features
- 후반 레이어의 필터들은 객체와 유사한 고수준 특징을 학습
- Activation map 시각화
- 5x5 필터 32개에 대한 이미지(자동차의 한 부분)의 conv & activation 결과를 시각화
- 이미지의 어느 부분에서 필터가 크게 반응하는지를 확인할 수 있음
Spatial Dimensions
- 입력 이미지의 크기가 \( W_{1} \times H_{1} \times D_{1} \)라고 가정
- 필요한 하이퍼파라미터
- 필터의 개수 \( K \)
- 필터의 크기 \( F \)
- stride \( S \)
- zero-padding 정도 \( P \)
- 출력 이미지 \( W_{2} \times H_{2} \times D_{2} \)는 다음과 같음
- \( W_{2} = \frac{W_{1} - F + 2P}{S} + 1 \)
- \( H_{2} = \frac{H_{1} - F + 2P}{S} + 1 \)
- 일반적인 경우에 \( W_{1} = H_{1} \)이므로 \( W_{2} = H_{2} \)
- \( D_{2} = K \) (출력 깊이 = 필터 개수 = Activation map 개수)
- 총 파라미터 개수
- \( (F * F * D_{1}) * K + K = (F * F * D_{1} + 1) * K \)
- 필터 개수만큼 bias 추가
- 예시
- 패딩 적용 X
- 3x3 filter with stride 2 → (7 - 3)/2 + 1 = 3
- 3x3 filter with stride 3 → (7 - 3)/3 + 1 = 2.333... = 2
- 패딩 적용
- 3x3 filter with stride 1 → (7 - 3 + 2)/1 + 1 = 7
- 1 pixel zero-padding을 적용하고 stride를 1로 설정하면 입력 이미지의 크기가 보존됨
- 패딩 적용 X
- 예제
Common to zero-padding
- stride와 필터 크기에 따라 zero-padding은 주로 입력 이미지의 크기를 보존하기 위해 사용됨 (그렇지 않으면 레이어를 지날 수록 지속적으로 크기가 작아짐)
- stride가 1이라고 가정했을 때 입력 이미지의 크기를 보존하기 위한 zero-padding의 양
- F = 3 → zero pad with 1
- F = 5 → zero pad with 2
- F = 7 → zero pad with 3
The brain / neuron view of CONV Layer
- filter = 각 뉴런에 대한 receptive field로 해석할 수 있음
- 32x32x3 입력에 5x5 필터 5개를 적용하면 출력 크기는 28x28x5
- 이때 그림처럼 depth 단위의 5개 출력 결과는 필터(수용체) 5개가 각각 적용된 결과이므로 같은 지역일지라도 다른 효과를 가짐
Pooling Layer
- Basics
- conv layer와 마찬가지로 filter와 stride로 구성됨
- 일반적으로 출력의 크기를 줄이기 위한 downsampling 목적으로 사용
- depth에는 적용되지 않음 (depth 크기 유지)
- 학습되는 파라미터가 없음 (max pooling, average pooling 등의 방법을 사용)
- Why max pooling?
- conv layer를 거쳐 출력되는 값들은 '활성화' 정도를 나타냄
- 이미지를 '인식'한다는 관점에서 봤을 때 그 값들이 어디에 있었는지 보다는 그 값이 얼마나 큰지, 즉 얼마나 활성화 되었는지가 더 중요하다고 볼 수 있음
- 따라서 일반적으로 average pooling 보다는 max pooling을 주로 사용함
'CS231n' 카테고리의 다른 글
[CS231n] Lecture 7 | Training Neural Networks II (0) | 2024.08.13 |
---|---|
[CS231n] Lecture 6 | Training Neural Networks I (0) | 2024.08.08 |
[CS231n] Lecture 4 | Introduction to Neural Networks (0) | 2024.07.29 |
[CS231n] Lecture 3 | Loss Functions and Optimization (0) | 2024.07.26 |
[CS231n] Lecture 2 | Image Classification (0) | 2024.07.24 |