빅데이타 & 머신러닝/머신러닝

얼굴 인식 모델 - 학습용 데이타 처리에 대해서

Terry Cho 2017. 5. 11. 11:11

얼굴 인식 모델을 CNN 네트워크를 이용하여 학습을 시키고 있는데, 지금까지 최대 정확도가 60% 정도밖에 나오지 않는다.

오히려 dropout을 0.5 비율로 적용했더니, 정확도가 30% 정도로 떨어져 버렸다.


원인을 찾던중에 네트워크보다는 학습 데이타에 문제가 있을 것으로 추정된다.

학습 데이타의 양이 그리 많지 않은데 (4 클래스, 사람당 120장), 데이타가 깔끔하지 않다.

아래와 같은 데이타가 문제가 되는데

  • 회전각이 너무 큰경우
  • 선글라스를 쓴 경우
  • 화장이나 염색
  • 사진이 그레이 스케일 처리가 되어 있거나 특정 색상이 들어간경우 


그래서 데이타 클랜징 모듈에서 구글 클라우드 비젼 API를 이용하여 회전각이 20도 가 넘은 경우 제외하고, 라벨 인식을 이용하여 선글라스가 있을 경우도 데이타에서 제외했다. 다음은 학습후에 효과를 적는걸로

이렇게 튜닝 한 결과, 검증 정확도가 대략 80% 내외가 나온다.
이번에는 데이타를 더 모아서, 인당 200장 정도의 데이타로 학습을 시도해서 정확도를 높여볼 예정인데.

가만 보니, 얼굴 표정에 따라서도 오차가 꽤 있을 것으로 보인데, 심하게 찡그리는 얼굴들. 만약에 표정변화도를 비전 API에서 감정도로 받아들인후에, 이를 기반으로 범위를 정해서 필터 아웃 시키는 것을 만들어볼 필요가 있을듯.



데이타가 모자라서 웹에서 크라울링을 하고 나니, 중복되는 이미지가 많아져서 학습 데이타가 또 정확해지지 않는 현상이 생겼다.

그래서 크롭된 이미지에서 MD5 해쉬를 추출하여 저장하고, 이를 비교하는 방식으로 개선을 하였지만, 웹의 이미지의 특성상 같은 이미지라도 올리는 사람이 편집을해서 색이나 명도등을 바꾼 경우에는 같은 이미지이기는 하지만, 바이너리 데이타상으로는 다른 이미지이기 때문에 중복 체크 로직에 걸리지 않고 통과하는 현상을 보였다.