[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 CNN

Convolution Neural Network(CNN)

이미지 처리에 특화된 딥러닝 모델이다.

MLP(Multi-Layer Perceptron)의 한계점

  • MLP는 입력 데이터로 1차원 벡터만 사용 가능
  • 2차원 이상의 데이터는 평탄화 과정 사용 
  • 데이터가 한 줄로 늘어서면 시간이 느려지고, '데이터의 형상(색감과 거리감)이 무시'된다.

CNN의 특징

  • Translation Invariance한 특징을 파악 할 수 있다.
  • Fully Connected layer 대비 적은 Parameter를 사용한다.

컨볼루션 연산(Convolution Operation)

필터(filter)

  • 커널(kernel)이라고도 한다.
  • 필터의 사이즈는 거의 홀수이다.
  • 과적합을 방지한다.
  • 사람이 미리 정해 놓는 것이 아니라 네트워크 학습을 통해 자동으로 추출
  • 코드에서 지정해야 하는 것은 필터의 각 픽셀 값이 아니라 필터의 개수이다.

필터(filter) 연산

  • 입력 데이터에 필터를 통해 필터에 대응하는 원소끼리 곱하고, 그 합을 구한다.
  • 연산이 완료된 결과 데이터를 특징 맵(feature map)이라고 부른다.

패딩(Padding)과 스트라이드(Stride)

패딩(padding)

입력 데이터의 주변을 특정 값으로 채우는 기법 : 주로 0

valid

  • 패딩을 주지 않음

same

  • 패딩을 주어 입력 데이터의 크기와 연산 후의 이미지 크기를 같도록 유지
  • 만약, 필터의 크기가 k이면, 패딩의 크기는 (k-1)/2가 된다.(단, stride=1)

스트라이드(Stride)

필터를 적용하는 간격을 의미한다.

output size

  • (N+2P-F) / stride + 1
  • n: 입력 데이터의 크기
  • f: 필터(커널)의 크기
  • p : 패딩 크기

step1.png

풀링(pooling)

  • 필터 사이즈 내에서 특정 값을 추출하는 과정
  • 모델의 파라미터 개수를 줄여주고, 연산 속도를 빠르게 한다.

맥스 풀링

  • 가장 많이 사용한다.
  • 필터 안의 대표값만 추출한다.(사람의 눈도 특징적인 면만 캐치한다.)

애버리지 풀링

  • 필터 안의 평군 값을 추출한다.
  • 물체의 전체적인 특징보다 평균과 분산 개념으로 위치 파악에 요긴하여 object detection 분야에 많이 쓰인다.

pooling.png

Fashion Mnist

데이터 불러오기

cnn1.png

데이터 전처리 및 이미지 불러오기

12.png
13.png

모델링

cnn1.png

Filter 개수 설정

64개의 filter를 쓴다는건 96개의 서로다른 filter로 64개의 features를 뽑아내겠다는 의미이다.

filter 종류의 예시 

cnn filter.png

만약 6개의 feature를 사용하면 6개의 결과값이 산출된다.

poolling layer

Convolution 연산이 된 결과값들을 Maxpooling 하자.

이 산출된 값을 fully-connected layer를 사용하여 하나하나 연결하여 분류하여 보자.

Dense 층 추가하기

cnn2.png

합성곱 층에 이어 뒷부분는 분류를 담당하는 Dense 층(Fully-connected layer) 세 개를 추가한다.

Fully-connected layer는 완전히 연결된 계층이라는 뜻으로

한층의 모든 뉴런이 다음층이 모든 뉴련과 연결된 상태로

2차원의 배열 형태 이미지를 1차원의 평탄화 작업을 통해 이미지를 분류하는데 사용되는 계층입니다.

Fully-Connected layer의 과정

1. 2차원 배열 형태의 이미지를 1차원 배열로 평탄화

2. 활성화 함수(Relu, Leaky Relu, Tanh등)로 가중치를 주어 뉴런을 활성화

3. 분류기(Softmax) 함수로 분류

Fully-Connected layer 중간에 Dropout 레이어를 추가한다.

마지막 결과값을 확률 기반의 softmax 함수를 통해 결과값을 분류한다.

모델 학습

model3.png
40.png

모델 시각화

33.png
35.png

최종 학습된 모델을 테스트셋으로 검증한 결과 85.9%의 정확도를 보였다.

이미지 보강(Augmentation)

훈련 데이터에 없는 이미지새롭게 만들어서 훈련데이터 보강하기

※ ImageDataGenerator 하이퍼파라미터

- rotation_range = 이미지 각도, zoom_range = 줌 비율 설정,

- shear_range = 이미지를 어느정도로 찌그러 트릴지

- width_shift_range = 사진 좌우 이동 비율, height_shift_range = 이미지 상하 이동 비율

- horizontal_flip = 좌우반전 설정, vertical_flip = 상하반전 설정 (True or False

이미지 증강.png

x_augmented = image_generator.flow(np.tile(train_X[0].reshape(28*28),100).reshape(-1,28,28,1), np.zeros(augment_size), batch_size=augment_size, shuffle=False).next()[0]

cnn3.png
augmentation4.png

TensorBoard

  • 시각화에 도움이 된다.
  • 콜백 함수를 설정하여 Tensorboard를 불러올 수 있다.

tensorboard1.png

history = model.fit(train_X, train_Y, epochs=25, validation_split=0.25, callbacks=[early_stopping_callback, tensorboard_callback])

tensorboard2.png

Tensorboard 불러오기

edited_edited_edited_edited_tensorboard4.png