코딩 기록들

[ 딥러닝 기초 ] 08. CNN 본문

Deep Learning 기초

[ 딥러닝 기초 ] 08. CNN

코딩펭귄 2022. 11. 2. 20:56

  CNN (Convolutional Neural Networks)  

- 이미지를 인식하기위해 패턴을 찾는데 특히 유용

- 특징을 수동으로 추출할필요가 없음(데이터에서 직접 학습하고 패턴을 사용해 이미지 분류함)

- 자율주행자동차, 얼굴인식과 같은 객체인식, computer vision이 필요한분야에 많이 사용됨

 

 

  Convolution (합성곱)  레이어  

- 각각 픽셀의 특징을 뽑아낸다

- 특성들을 모아서 확대하는 느낌으로 받아들이기

- 레이어는 영상인식에 주로 사용되며, 필터가 탑재되어있음

Conv2D(32, (5, 5), padding='valid', input_shape=(28, 28, 1), activation='relu')

  주요인자  

  • 첫번째 인자 : 컨볼루션 필터의 수 
  • 두번째 인자 : 컨볼루션 커널의 (행, 열)
  • padding : 경계 처리 방법을 정의함
    • ‘valid’ : 유효한 영역만 출력이 됩니다. 따라서 출력 이미지 사이즈는 입력 사이즈보다 작음
    • ‘same’ : 출력 이미지 사이즈가 입력 이미지 사이즈와 동일
  • input_shape : 샘플 수를 제외한 입력 형태를 정의함. 모델에서 첫 레이어일 때만 정의하면 됨
    • (행, 열, 채널 수)로 정의합니다. 흑백영상인 경우에는 채널이 1이고, 컬러(RGB)영상인 경우에는 채널을 3으로 설정합니다.
  • activation : 활성화 함수 설정
    • ‘linear’ : 디폴트 값, 입력뉴런과 가중치로 계산된 결과값이 그대로 출력으로 나옴
    • ‘relu’ : rectifier 함수, 은익층에 주로 쓰임
    • ‘sigmoid’ :이진 분류 문제에서 출력층에 주로 쓰임
    • ‘softmax’ : 다중 클래스 분류 문제에서 출력층에 주로 쓰임

  Dense  (convolution layer와 비교)

- 모든 네트워크의 경우의수를 다 연결해줌

- 초록색블럭 = 시냅스강도(가중치)

- Dense layer 에서는 총 9*4 = 36개의 가중치가 사용됨

 

 

 

 

 

 

 

 

-> convolution layer(컨볼루션 레이어) 에서의 가중치 = 필터의 크기인 4개의 가중치만이 사용됨

 

--> 즉, Dense 레이어와 비교했을때, 가중치가 많이 줄어들었음을 알수있음

 

 

 

 

 

 

 

 

  경계처리방법  

- convolution 레이어 설정옵션에 'border_mode' 를 'valid', 'same'으로 설정할수있음

 

1.  valid

- 주어진경계 안에서 보는것 = valid, 사용할수록 크기 작아짐

- 출력이미지 크기 < 입력이미지 크기

 

 

 

 

 

 

 

 

2. padding

- 출력이미지와 입력이미지 사이즈가 동일하도록 입력이미지에 빈영역(검정색 블록) 추가해 필터적용

- 3*3 을 4*4로 보는것 , 사용할수록 크기는 그대로지만, 한쪽으로 쏠리는현상 발생 (same 으로 설정)

 

 

 

 

 

 

 

 

 

 

  맥스풀링 레이어   

- 사소한, 중요하지않는값은 무시하는효과 

- 주요인자) pool_size : 수직, 수평 축소 비율을 지정. (2, 2) -> 출력 영상 크기는 입력 영상 크기의 반으로 줄어든다.

해당 풀에서 가장 큰 값을 선택하여 파란 블럭으로 만들면, 그것이 출력 영상이 됨 - (4,4)를 맥스풀링하면 (2,2)됨

 

 

 

  플래튼 (Flatten) 레이어  

 

- 영상을 일차원으로 바꿔줌

- CNN 에서 convolution레이어나 max pooling 레이어는 주로 2차원 자료를 다루지만,

  전결합층에 전달하기위해선 1차원자료로 바꿔줘야함. 이때 사용되는것이 플래튼레이어.

- 이전레이어의 출력정보를 이용해 입력정보를 자동으로 설정.

  출력형태는 입력형태에따라 자동으로 계산되어 별도로 파라미터 지정하지 않아도 됨

3*3 인 영상을 1차원으로 변경했을때

 

참고사이트_ 컨볼루션 신경망 레이어 이야기 (tykimos.github.io)

 

 

 

** 코랩을 사용한다면, (구글드라이브 이용방법)

from google.colab import drive
drive.mount('/content/drive')

이 두줄 넣어주기