2. Confidential + Proprietary
배경
딥러닝에서 배운 것을 써먹어 보자
일본에 인디 개발자가 혼자 개발한 사례
“만만할거 같다.”
연예인 얼굴 45명에 대해서 CNN 기반으
로 분류하는 로직을 개발
http://memo.sugyan.com/entry/20160328/1459094743
5. Confidential + Proprietary
퍼블릭 데이타 PubFig에서 데이타 수집
얼굴 데이타가 많은데? 데이타는 다 됐
어 → 비극의 시작
얼굴 분리
얼굴만 VISION API로 따내기 시작함
두명 이상일때 엉뚱한 사람이 들어옴
404 Not Found
노가다
일일이 눈으로 판별하기 시작함
연예인의 평생 얼굴(화장 전후, 살찐 얼
http://www.cs.columbia.edu/CAVE/databases/pubfig/
7. Confidential + Proprietary
라벨 변환이 안된다.
가독성을 좋게하기 위해서 라벨을 문자열로 했음. ‘배열에 넣고 나중에 바꿀 생각을 했
는데..’
텐서플로우에서는 잘 안됨
/Users/terrycho/training_data_class5_40/training/jesi-jessica371.jpeg,Alba
/Users/terrycho/training_data_class5_40/training/jesi-jessica376.jpeg,Alba
/Users/terrycho/training_data_class5_40/training/jesi-jessica379.jpeg,Alba
/Users/terrycho/training_data_class5_40/training/an-2384379443_77fdb5566a.jpg,Jolie
/Users/terrycho/training_data_class5_40/training/an-244912461_63f694f004_o.jpg,Jolie
/Users/terrycho/training_data_class5_40/training/jesi-jessica371.jpeg,Alba,0
/Users/terrycho/training_data_class5_40/training/jesi-jessica376.jpeg,Alba,0
/Users/terrycho/training_data_class5_40/training/jesi-jessica379.jpeg,Alba,0
/Users/terrycho/training_data_class5_40/training/an-2384379443_77fdb5566a.jpg,Jolie,1
/Users/terrycho/training_data_class5_40/training/an-244912461_63f694f004_o.jpg,Jolie,1
결국은 숫자 라벨을 사용함
10. Confidential + Proprietary
쏠림의 원인은 학습 순서
학습 데이타 파일
/Users/terrycho/training_data_class5_40/training/jesi-jessica371.jpeg,Alba,0
/Users/terrycho/training_data_class5_40/training/jesi-jessica376.jpeg,Alba,0
/Users/terrycho/training_data_class5_40/training/jesi-jessica379.jpeg,Alba,0
/Users/terrycho/training_data_class5_40/training/an-2384379443_77fdb5566a.jpg,Jolie,1
/Users/terrycho/training_data_class5_40/training/an-244912461_63f694f004_o.jpg,Jolie,1
def get_input_queue(csv_file_name,num_epochs = None):
train_images = []
train_labels = []
for line in open(csv_file_name,'r'):
cols = re.split(',|n',line)
train_images.append(cols[0])
# 3rd column is label and needs to be converted to int type
train_labels.append(int(cols[2]) )
input_queue = tf.train.slice_input_producer([train_images,train_labels],
num_epochs = num_epochs,shuffle = True)
return input_queue
셔플링
12. Confidential + Proprietary
문제는 데이타 분포
불규칙적인 데이타 분포
클래스 데이타 수
브래드 피트 400
안젤리나 졸리 100
제시카 알바 50
“ 일일이 수동으로 데이타를 골라내다 보
니, 나중에는 지겨워서 대충…. ”
클래스 데이타 수
브래드 피트 50
안젤리나 졸리 50
제시카 알바 50
“ 작은 수의 데이타로 다 맞춤.. ”
14. Confidential + Proprietary
필터링 1. 독사진만 걸러냄
눈으로 일일이 골라내는게 힘들어서 필터링 자동화 → 구글 VISION API
if 'faceAnnotations' not in response['responses'][0]:
print('[Error] %s: Cannot find face ' % image_file)
return None
face = response['responses'][0]['faceAnnotations']
label = response['responses'][0]['labelAnnotations']
if len(face) > 1 :
print('[Error] %s: It has more than 2 faces in a file' % image_file)
return None
19. Confidential + Proprietary
필터링 2. 얼굴 각도 필터링
얼굴 각도 필터링 (구글 VISION API)
roll_angle = face[0]['rollAngle']
pan_angle = face[0]['panAngle']
tilt_angle = face[0]['tiltAngle']
angle = [roll_angle,pan_angle,tilt_angle]
# check angle
# if face skew angle is greater than > 20, it will skip the data
if abs(roll_angle) > MAX_ROLL or abs(pan_angle) > MAX_PAN or abs(tilt_angle) > MAX_TILT:
print('[Error] %s: face skew angle is big' % image_file)
return None
23. Confidential + Proprietary
빅토리아 누님...
구글 VISION API Label Detection
# check sunglasses
for l in label:
if 'sunglasses' in l['description']:
print('[Error] %s: sunglass is detected' % image_file)
return None
25. Confidential + Proprietary
학습에 좋은 데이타
해보니...
화장 안하고 얼굴 다 들어나고 되도록이면 정면을 보는 사진 → 프로필 사진류
시상식, 펜싸인회, CF 사진 → 스포츠 신문 사이트에 많음
동영상이나 움짤에서 프레임을 잘라내는 것도 좋을듯 (안해봤음. 구찮아서..)
26. Confidential + Proprietary
그외에도...
한글 파일명으로 인해서 윈도우에서 Charset 문제 → 학습 파일은 영어로..
학습 파일에 Full Path를 썼음
“/Users/terrycho/training_data_class5_40/training/jesi-1zdcfbt.jpg”
→ 학습 파일명만 쓰는게 좋음
(CloudML → gs:// , 다른 컴퓨터로 옮길때..)
27. Confidential + Proprietary
Lesson learned
꽃같이 단순한 데이타를 하지 않기 잘했
음. 얼굴 인식이 어렵고 많은 삽질이
있었음 → 약간의 깨달음 (ML은 삽질
과 노가다)
좋은 양질의 데이타 확보가 중요하다.
ML 모델도 중요하지만, 데이타 수집 및 필
터링 파이프라인도 중요
30. Confidential + Proprietary
앞으로 과제
CloudML 적용
Prediction 엔진을 이용하여 REST API 개발
CIFAR-10, VGG 등 검증된 모델 포팅
트랜스퍼 러닝 시도
Image Segmentation
GAN → 메이크업 해주기