이미지
- Classification: 이미지 한 장을 통째로 보고 ‘이 이미지는 무엇이다‘ 를 분류
- Detection: 이미지에서 특정 오브젝트를 찾는다 (대표 모델: 욜로)
- 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 사용)
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 생성
Feature map 만드는 법: Input 이미지에 Filter를 Convolution 한다
2. Pooling layer:
입력 데이터 크기 줄여줌(이미지는 너무 크니까 기존의 특징은 그대로 가져가되, 축소본을 만들어줌)
(Max Pooling 주로 사용)
생략 가능
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)
필터의 위치를 정하는 간격(필터 몇 칸 이동할지 정해줌)
스트라이드를 크게 하면 이미지가 훨씬 줄어든다
일반적으로 풀링 사이즈와 스트라이드 크기를 같게 설정
fc layer로 들어가기 전에
마지막으로 나온 Conv layer, Pooling layer로부터 나온 feature map(높이, 너비, 채널 수)을 선형(높이 * 너비 * 채널 수)으로 쫙 펼쳐야 함
-> 그 때 feature map 크기를 알아야 함
https://www.bouvet.no/bouvet-deler/understanding-convolutional-neural-networks-part-1
https://developer.nvidia.com/discover/convolution
'Pytorch' 카테고리의 다른 글
[파이토치] MNIST로 이미지 데이터 처리 (1) | 2024.12.31 |
---|---|
[파이토치] 이미지 데이터 전처리/증강 (1) | 2024.12.28 |
[파이토치] iris 데이터를 위한 신경망 만들어보기 (0) | 2024.12.24 |
[파이토치] 모델 학습하기 (0) | 2024.12.23 |
[파이토치] 모델 만들기 (1) | 2024.12.15 |