코딩 기록들

CNN 본문

이미지다루기및 데이터셋 구축

CNN

코딩펭귄 2022. 12. 28. 11:51

딥러닝

-hidden layer 와 활성화함수는 짝꿍

- loss로는 cross-entropy? 사용

 

손실함수 loss function

- 모델을 통해 나온 예측값과 실제데이터 정답의 차이를 수량화하는 함수

- 훈련하는 동안 최소화될 값으로 이 값을 바탕으로 파라미터(가중치 & 편향)를 업데이트함

 

* 해결하려는 문제 종류 따라 표준적인 loss function 존재 *

1. 이진분류

- 두개의 클래스 분류 ex.양성음성 판단

- binary cross entropy loss 젤많이 사용, BCELoss 도 사용함

2. 다중 클래스 분류

- 두개이상의 클래스 분류 ex. 사과 바나나 포도 과일 분류

- cross entropy loss

3. 회귀

- 연속형 값을 예측 ex.주가예측

- Mean squared error

 

CNN 기원

- 고양이 시각피질 검사 : 시각피질의 뉴런이 어떻게 작동하는지 알아보기위해 고양이 시각피질 반응에대한 실험을 진행 : 고양이에게 단순한 모양의 방향 가진 그림 보여주고, 시각피질의 반응을 살펴본다. 이런 패턴에따라 뉴런에대한 정보가 다르다는 사실을 알게된다

Cat Visual Cortex - YouTube

 

CNN ?

- 딥러닝에서 주로 이미지나 영사엗이터 처리할때 쓰임. 

- conveolution이라는 전처리 작업이 들어가는 Neural Network 모델

 

왜 쓰이기 시작했는가

-DNN 의 문제점에서 출발 : DNN은 1차원데이터 사용하기때문에 flatten 과정에서 데이터 손실 생김

 

- CNN 은 DNN과 다르게 이미지의 날것 그대로 받으며 공간적/지연적 정보 유지한채 특성들의 계층을 빌드업한

-CNN의 중요 포인트는 이미지 전체보단 부분을 보는것, 그리고 이미지의 한 픽셀과 주변 픽셀들의 연관성을 살리는것

 

 

CNN 주요 컨셉

1. Convoution

- 2차원 이미지는 픽셀단위로 구성되어있음

- 이미지는 Mnist dataset에서 추출한 샘플중 하나임. 손글씨로 쓰여진 8 의 gray scale

- 이 데이터의 입력값은 28*28 matrix(행렬)로 표현할수있다 :  즉, 2차원 이미지를 matrix 로 표현할수 있다는 뜻

- 이렇게 우리가 넣어줄 입력값은 matrix로 표현된 이미지

 

 

- Convolution 작동원리

- 작동원리 : 이미지와같이 5*5의 matrix로 표현된 이미지의 입력값이 있다고 가정. CNN에는 필터(3*3)(커널)이 존재.

- 3*3 크기의 필터

 

- 이 하나의 필터를 이미지 입력값 전체적으로 훑어준다고 생각.

  즉, 입력값 이미지의 모든 영역에 같은 필터를 반복적용해 패턴을 찾아 처리하는것이 목적.

- 이렇게 이미지위에 필터를 훑어줄때 연산처리(matrix 와 marix 간 내적공간(inner product) 사용)를 해줄때 떤일이 발생할것인가? 

 

2. zero padding

- padding : 0으로 구성된 테두리를 이미지 가장자리에 감싸준다 -> convoution 처리시 5x5크기의 이미지에 필터처리를 하면 결과값의 크기가 3x3로 줄어드는데 (즉 손실되는 부분이 발생), 이러한 문제점을 해결할수있음(입력값의 크기와 결과값의 크기게 같아지기때문)

 

3. Stride

- stride =  필터를 얼마만큼 움직여주는가 ex. stride=1 : 필터를 한칸씩 움직여준다 (stride-1 = 기본값)

- stride값이 커진다 = 필터가 이미지 건너뛰는 칸이 커짐 = 결과값이미지 크기는 작아짐

- 입력 데이터 크기, padding, stride 고려하여

  출력데이터 크기 계산하는 수식

 

 

 

 

CNN in pytorch 실습

[ convolution layers ]

Conv1d - Text-CNN에서 많이 사용  : 1차원

Conv2d - 이미지 분류에서 많이 사용  : 2차원

Conv3d - 3d 모델에서 많이 사용  3차원

파라미터에서 kernel_size : 필터 size : 3*3 or 5 or 7 많이 사용

 

 

CNN

1. 첫번째 convolutional layer

- 우리에게 주어진 입력값 :  28*28 이미지 -> 이 이미지를 대상으로 여러개의 필터(kernel)를 이용해 결과값(feature mapping) 얻는다

하나의 convolution layer = convolution + activation 이 함께 있어야한다

 

- 왜 활성함수 써야할까? : 선형함수인 convolution에 비선형을 추가하기 위해 사용!

-> 따라서 MLP는 활성화함수를 이용한 non-linear 시스템을 여러 laye로 쌓는 개념

What, Why and Which?? Activation Functions | by Snehal Gharat | Medium _ 참고사이

 

What, Why and Which?? Activation Functions

While studying neural network, we often come across the term — “Activation functions”. What are these activation functions?

medium.com

 

* 활성화함수 * 

- Sigmoid, Leaky ReLU, tanh, Maxout, ReLU(젤 많이 사용됨), ELU

 

 

1. Sigmoid

- output 값을 0에서 1 사이로 만들어준다

- input값이 어느정도 크거나 작으면 기울기가 아주 작아짐 -> vanishing gradient 현상이 나타남 (입력층쪽 노드들 기울기가 0에 가까워져서 학습이 되지 않게 되는 현상)  -> 그래서 보통 sigmoid 함수는 맨 마지막에 한번만 사용한

 

 

'이미지다루기및 데이터셋 구축' 카테고리의 다른 글

[Dataset 구현] 2. Dataloader  (0) 2023.01.05
[Dataset 구현] 1. customdataset  (1) 2023.01.05
인공신경망  (0) 2022.12.23
04. Image augmentation  (0) 2022.12.16
이미지다루기_넘파이에 대하여  (0) 2022.12.06