Python(Colab) 파이토치(Pytorch) + 딥러닝 + CNN기초(이미지)

2023. 6. 21. 22:28파이썬/머신러닝 및 딥러닝

✔️ CNN(Convolutional Neural Networks)

- 합성곱 뉴런 신경망

- 형태: 전통적인 뉴럴 네트워크 + 컨볼루셔널 레이어 

- 컨볼루셔널 레이어를 통해 입력받은 이미지의 특징을 추출  -> 추출한 특징을 기반으로 기존 뉴럴 네트워크 이용
- 이미지 분류 / 예측에 많이 사용

특징)
* 특히 이미지를 분류할 때 DNN(Deep Neural Network)의 문제점을 가지고 있다.
    * 일반적인 DNN은 1차원 형태의 데이터를 사용
    * 2차원 이상의 데이터가 입력되는 경우는 flatten 시켜서 한줄로 데이터를 변환 후 넣어야함.

    * 이미지의 공간적/지역적 정보가 손실된다.
    * 따라서 DNN의 문제점을 해결하기 위해
       이미지를 그대로 (Raw Input) 받음으로 공간적 / 지역적 정보를 유지하기 위해 CNN을 사용


https://i.imgur.com/yn9B3Et.jpg
✔️ 이미지 데이터

- 컬러 이미지는 rgb 3개의 채널 혹은 rgba의 4개의 채널로 이루어진 텐서
- 컴퓨터는 이미지를 숫자로 인식하여 연산을 한다.

https://i.imgur.com/mD4nKK1.png

 

https://i.imgur.com/bljeUqc.png

 


 

CNN을 이해하기 위한 용어

Convolutional Layer

Pooling

stride

padding

Dropout Layer

Fc Layer

 

 

✔️ 컨볼루셔널 연산

- input 데이터를 Filter 크기만큼 연산후 Result(벡터)에 그 값들의 합 1개로 저장
- 컨볼루션 연산시 출력 텐서 크기는 점차 작아짐 

대안)
출력 크기를 동일하게 하기 위해서 패딩을 사용한다 

 

좌측: padding X , 우측 zero_padding

 


 

컬러이미지 연산

 

 

https://i.imgur.com/AzbJCgg.gif

컬러이미지 연산에는 convolutional 2D를 사용한다 

 



Pooling(풀링)

✔️ Pooling(풀링)

중요한 특징을 추출하고 차원을 축소하기 위해 사용

stride(스트라이드)사용 - 필터에 적용하는 간격의 설정을 의미
밑에 그림은 (2,2)로 설정되어있어서 필터가 한번 이동시 가로2 세로2가 이동된다.

종류)
MaxPooling (MaxPool2D)
AvgPooling (AvgPool2D)

https://i.imgur.com/Ve8xWUh.gif

 

 

✔️ 드롭아웃 레이어(Dropout Layer)

- 과적합(overfitting)을 막기위해 사용하는 레이어
- 학습 중일 때 랜덤한 값을 발생시켜, 학습을 방해함으로 학습용 데이터쪽으로 결과가 치우치지 않게 한다.
✔️ Fc Layer(Fully Connected Layer)

- 이미지를 분류 or 설명하기 위해 예측하는 레이어

종류)
Flatten Layer: 데이터 타입을 Fully Connection 네트워크 형태로 변경 (입력 데이터의 shape 변경만 수행)
Softmax Layer: 분류에서만 수행

 

 

CNN은 Convolution와 pooling을 통해 세분화해서 특징을 찾고, 그 특징을 fc 레이어를 통해 분류한다 ! 
728x90