3.5기(200104~)/감정인식

3주차_Keras로 구현된 간단한 MobileNet 코드 리뷰 및 학습 시키기

KAU-Deeperent 2020. 3. 21. 00:56

작성자: 윤나라

 

Keras에는 사용할수 있도록 백본 네트워크들이 구현되어 있습니다. MobileNet도 v1, v2모두 구현되어 있고, Xception, VGG, ResNet등 다양한 모델이 있어서 예측, feature extraction, fine tuning 등에 사용할 수 있습니다.

이를 사용하여 표정을 분류할 수 있도록 작동하는 네트워크를 학습하는 코드를 리뷰하고 돌려보았습니다.

 

우선 keras 모듈에서 MobileNet 백본 및 사용할 레이어 등을 import 해줍니다.

 

 

MobileNet은 224x224 이미지에서 작동하도록 설계되었으므로 그를 명시해주고, MobileNet 백본 객체를 하나 선언합니다. imagenet으로 pretrain된 가중치를 가진 것을 가져오도록 했습니다. include_top이 false이므로 네트워크 최상단에 Fully-Connected Layer가 들어가지 않습니다.

 

그리고 MobileNet의 각 layer에 대해 Trainable, 즉 파라미터 조정이 가능할지 말지를 설정해줍니다. 저희는 ImageNet으로 학습된 모바일넷 백본을 사용했다고 했는데요, ImageNet은 1000개 label에 대해 1,281,167개의 이미지를 가진 데이터입니다. 우리가 일반적인 물체나 생물(ex. 개, 고양이)에 대한 classfication을 진행한다고 하면, 백본의 파라미터는 바뀌지 않도록 하고 후반부의 classification head만 파라미터 조정이 되게 하여 fine tuning, 미세한 파라미터의 조정이 가능하도록 하는 방법을 주로 쓰곤 합니다.

 

하지만 표정이라는 일반적 물체, 생물과는 다른 카테고리를 분류해 내야 하기때문에 백본의 모든 레이어 또한 파라미터 조정이 가능하도록 설정을 했습니다.

 

 

그리고 Classification head를 정의해줍니다. 입력층은 백본의 출력층으로 맞춰주고, 출력층은 softmax로 multi-classification 값이 나오도록 합니다.

 

 

classification head 객체를 생성해 준후, 백본과 결합하여 네트워크 모델 객체를 생성해줍니다.

 

 

 

학습시킬 데이터를 불러옵니다. 여러가지 방식으로 이미지가 너무 정형화된 것만 학습되지 않도록 전처리 해줍니다. 이 때 여기서 rescale을 해주는데, 이를 하면 0-255사이의 r,g,b 값들이 모두 0과 1사이의 값으로 변환됩니다. 이는 기존 0과 255사이의 값이 통상적인 learning rate에서 너무 학습하기에 높은 값이기 때문입니다.

 

이 외에도 회전, 반전, 그리고 회전 등으로 생기는 이미지 빈공간의 해결 방법등을 명시해줍니다.

train은 분류기가 제대로 작동할수 있도록 파라미터를 조정하는 것이기 때문에 다양한 데이터일수록 뛰어난 성능을 보여, 여러가지 augmentation 기법등을 적용했지만, 검증을 위한 validation set은 rescaling 만 해줍니다.

 

 

Optimizer와 callback 함수에 쓰일 것들을 import 하고 정의해줍니다.

 

 

 

Epoch: 전체 샘플 데이터를 이용하여 한 바퀴 돌며 학습하는 것이 1 epoch입니다.

Step: Weight Bias 1회 업데이트 하는 것입니다.

Batch size: 1 Step에서 사용한 데이터(이미지)의 수 (=mini batch), 한번 그래디언트를 계산할 때 사용하는 데이터의 숫자입니다.

S = (N * E) / B 

S-스텝, N-전체 학습할 데이터의 개수, E-Epoch, B-배치사이즈

Classification_mobile_net.py
0.00MB

'3.5기(200104~) > 감정인식' 카테고리의 다른 글

6주차_20/04/06_감정인식 프로젝트  (0) 2020.04.11
감정인식팀 5주차  (0) 2020.04.03
감정인식팀 4주차  (0) 2020.03.28
감정인식팀 2주차  (0) 2020.03.14
감정인식 프로젝트 1주차  (0) 2020.03.07