이 과정은 많은 양의 이미지(약 50만 이상)을 통해 새로운 DNN 모델을 만들기 위한 가이드 해당 블로그의 개발자에 의하면 Tesla K40을 이용해서 하루가 소요 되었다고 함...
##1 데이터셋 디렉토리 작성 학습 하고자 하는 데이타를 위와 같은 형태의 디렉토리로 작성. 인식하는 확장자는 jpg, png이며 소문자여야 함.
이미지 파일명은 {prefix}_0001.{jpg,png} 형식. {prefix}는 인물 명이나 혹은 다른 명칭으로 대체 가능. 숫자 카운트는 4자리 숫자로 맞춰야 함.
이 형식을 맞추는 이유는 학습후, 모델에 대한 평가(evaloution) 코드에서 저 정보를 이용함.
##2 이미지 전처리
LFW(Labeled Face in th Wild)
LFW의 정확도를 계산 하려고 한다면, 당신의 데이터셋에서 LFW 아이덴티티를 제거 해야 한다.
이를 위해서 다음과 같은 스크립트를 활용
remove-lfw-names.py
사용자 데이터셋에서 rgb 컬러가 아니거나 얼굴을 인식하는데 실패한 모듈을 제거한 데이터를 뽑아내는 코드
for N in {1..8}; do ./util/align-dlib.py <path-to-raw-data> align outerEyesAndNose <path-to-aligned-data> --size 96 & done
위 코드에서 정제된 이미지가 3개(혹은 사용자 정의 수량) 보다 작을 경우 데이터셋을 정리 하는 코드
./util/prune-dataset.py <path-to-aligned-data> --numImagesThreshold 3.
##3 모델 트레이닝
training/main.lua
모듈을 이용하여 학습을 수행.
'training/opts.lua' 모듈은 학습을 수행하기 위한 설정 값
dataset option을 수정 해야 2단계에서 정제된 이미지가 저장된 경로를 액세스 함.
./main.lua -data ./../data/imgs/aligned/ -lfwDir ./../data/imgs/aligned/ -peoplePerBatch 5
data : 데이타 경로 lfwDir : 테스트 데이타 경로 peoplePerBatch : 기본값 15, 클래스가 이 값보다 작을 경우 오류 발생.
오류 발생할 경우 peoplePerBatch 값을 클래스의 수량으로 수정
###평가(evloution) pairs.txt 파일에서 평가를 위한 비교 데이터를 입력 하고 그것을 기준으로 평가함.
####형식
평가횟수 TAB 평가셋 수량 1st match 리스트(평가셋 수량) 1st mismatch 리스트(평가셋 수량) 2nd match 리스트(평가셋 수량) 2nd mismatch 리스트(평가셋 수량)
n th match 리스트 n th mismatch 리스트
#####match 리스트 {prefix} TAB number1 TAB number2
{prefix}_number1 이미지와 {prefix}_number2는 같은 클래스
#####mismatch 리스트 {prefix1} TAB number1 TAB {prefix2} TAB number2
{prefix1}_number1 이미지와 {prefix2}_number2 이미지는 다른 클래스
##4 트레이닝 분석
Epoch당 aacuracy 증가. Epoch당 loss 변화율.#경과 학습률이 떨어져서 데이터셋을 확인 해보니 2단계에서 얼굴 인식해서 데이터 정제 할때 얼굴이 아닌데 인식한 경우가 좀 된다. 결국은 사람 손을 거치긴 해야 한다는 의미..
원본 데이타 일부 필터링된 데이타 일부대부분 얼굴만 잘 가져오기는 하지만.... 일부 오작동 된 부분도 보임..
그래서 수작업으로 걸러내면서 파일명도 일괄 작업 처리...