Pytorch

[파이토치] CNN

왕초보코딩러 2024. 12. 26. 14:38
728x90

이미지

  1. Classification: 이미지 한 장을 통째로 보고 ‘이 이미지는 무엇이다‘ 를 분류
  2. Detection: 이미지에서 특정 오브젝트를 찾는다 (대표 모델: 욜로)
  3. Segmentation: 이미지에서 특정 오브젝트를 찾고 영역을 찾는 것

딥러닝

데이터로부터 특징과 패턴을 학습

neural network

뉴런 하나 = 퍼셉트론 = unit

 

ANN: 얕은 인공신경망

 

DNN: 입력층과 출력층 사이에 여러 은닉층으로 이루어진 인공신경망(비선형 활성화 함수를 추가하여 비선형 관계 모델링 가능)

DNN의 문제: 이미지 처리시 이미지를 2차원에서 1차원으로 만들어 정보 손실이 생겨 이미지의 특징을 찾아내기 힘들다, 이미지 사이즈가 커지면 학습할 가중치도 증가

 

-> CNN (Convolutional Neural Network. 합성곱 신경망) 이용

이미지 인식과 처리에 주요 사용되는 인공신경망의 한 종류로, 이미지에서 '필터'로 특징을 찾아낸다! 
딥러닝이 최적의 필터(=가중치)를 찾는다

이미지에 필터를 겹친다.
처음에는 일반적인 거 >> 갈 수록 디테일하게 찾는다

이미지 왜곡(회전 등)에도 괜찮은 성능을 낸다

 


CNN: Feature Extraction 부분과 Classification 부분으로 나뉨

Feature Extraction(특징 추출) : Convolution layer와 Pooling layer

여러 개의 합성곱 레이어(Convolutional layer)와 풀링 레이어(Pooling layer)를 통해 입력 이미지의 특징을 추출

Classification(클래스 분류) : Fully Connected(DNN 사용)

출처: http://taewan.kim/post/cnn/


CNN - Feature Extraction(Conv layer, Pooling layer)

1. Convolution layer

하나의 Convolutional Filter를 이용해 하나의 Feature map을 만든다

Convolutional Filter: w로 구성된 가중치 필터. 특징 패턴을 찾아냄.

Convolution 개수: 추출되는 특징 수(만들어지는 Feature map 수)

 

Filter(Kernel = window = mask) 를 통한 Feature Map 생성

출처: https://developer.nvidia.com/discover/convolution

 

출처: https://www.bouvet.no/bouvet-deler/understanding-convolutional-neural-networks-part-1

 

Feature map 만드는 법: Input 이미지에 Filter를 Convolution 한다

출처: http://taewan.kim/post/cnn/

 

2. Pooling layer:

입력 데이터 크기 줄여줌(이미지는 너무 크니까 기존의 특징은 그대로 가져가되, 축소본을 만들어줌)

(Max Pooling 주로 사용)

생략 가능

출처: http://taewan.kim/post/cnn/

 


CNN - Classification (Fully Connected layer)

Fully Connected layer

Conv, Pooling을 거쳐 나온 feature map을 일자로 쭉 펴서(flatten) DNN에 넣는다

어떤 클래스에 속하는지 예측

마지막 출력 노드 수는 분류할 클래스 수와 동일


Conv layer에서 이루어지는 것

- 합성곱 연산, 패딩, 스트라이드

 

1. 합성곱 연산

2차원 입력 데이터(이미지)와 필터의 연산

입력데이터를 필터가 일정한 간격으로 이동하며 연산

 

각각에 대응하는 원소를 곱한 후 총합을 구해 출력 -> 모든 곳에서 수행

 

 

편향(bias)

하나의 값으로 존재하며 필터 적용 후 값에 편향을 더함

 

학습 과정에서, 주로 역전파(backpropagation) 알고리즘을 통해 손실 함수(loss function)에 대한 기울기(gradient)를 계산하고,

그 기울기를 기반으로 최적화 함수가 필터와 편향을 업데이트한다.

-> 학습을 하면서 필터 값과 편향이 갱신됨

 

2. 패딩(Padding)

Convolution layer에서 필터를 쓰면 이미지가 줄어들어 더이상 합성곱 연산을 못하게 된다 

출력이 줄어드는 것을 방지하기 위해 입력 데이터 외곽에 특정 값(일반적으로 0)을 채워 넣는 것

생략 가능

 

3. 스트라이드(Stride)

필터의 위치를 정하는 간격(필터 몇 칸 이동할지 정해줌)

스트라이드를 크게 하면 이미지가 훨씬 줄어든다

 

stride = 2

일반적으로 풀링 사이즈와 스트라이드 크기를 같게 설정

풀링 사이즈 = 2, 스트라이드 = 2

 

 

fc layer로 들어가기 전에

마지막으로 나온 Conv layer, Pooling layer로부터 나온 feature map(높이, 너비, 채널 수)을 선형(높이 * 너비 * 채널 수)으로 쫙 펼쳐야 함

-> 그 때 feature map 크기를 알아야 함

 

 

 

 


 

http://taewan.kim/post/cnn/

 

CNN, Convolutional Neural Network 요약

Convolutional Neural Network, CNN을 정리합니다.

taewan.kim

https://www.bouvet.no/bouvet-deler/understanding-convolutional-neural-networks-part-1

 

Convolutional Neural Networks : The Theory

Convolutional Neural Networks are the most popular Deep Learning solution for image processing. But how do they work? Read on for a mathematics and jargon free explanation!

www.bouvet.no

https://developer.nvidia.com/discover/convolution

 

Convolution

Convolution is a mathematical operation which describes a rule of how to combine two functions or pieces of information to form a third function. The feature map (or input data) and the kernel are combined to form a transformed feature map. The convolution

developer.nvidia.com