[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 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 : 패딩 크기

풀링(pooling)

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

맥스 풀링

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

애버리지 풀링

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

Fashion Mnist

데이터 불러오기

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

모델링

Filter 개수 설정

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

filter 종류의 예시 

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

poolling layer

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

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

Dense 층 추가하기

합성곱 층에 이어 뒷부분는 분류를 담당하는 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 함수를 통해 결과값을 분류한다.

모델 학습

모델 시각화

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

이미지 보강(Augmentation)

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

※ ImageDataGenerator 하이퍼파라미터

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

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

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

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

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]

TensorBoard

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

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

Tensorboard 불러오기