딥러닝을 통해 연예인 얼굴 인식 모델을 만들고 마지막 레이어에 softmax layer를 추가해 label에 대한 확률을 output으로 출력하게 만들예정입니다. 그리고 연예인이 아닌 일반인의 사진을 입력으로 하였을 때, 출력된 확률을 통해 가장 닮은꼴 연예인을 확인할 수 있습니다.
2. 1. 데이터 수집
여자 연예인 30명
1명당 200장, 400장의 사진
구글 이미지를 크롤링하여 데이터를 수집
3. 2. 데이터 전처리
1. face detection
opencv의 face dectection 기능을 통해 얼굴을 추출
동시에 gif 같은 움직이는 형태의 사진을 제거하고 grayscale로 변환
2. 이상치 제거
해당 연예인의 열애 대상,
배우자, 친한 배우, 동명 이인
직업 특수성에 의한
다른 인물 ???
face detection 과정에서
생긴 잡음과거 사진 !
3. face
옆모습, 시선, 얼굴의 일부가 가려짐, 지나친 표정
4. 2. 데이터 전처리
4. resize image file
PIL(Python Image Library)를 사용해 이미지를 96x96로 리사이즈
5. convert image to array
PIL(Python Image Library)를 사용해 이미지를 array타입으로 변환
* grayscale 이므로 depth는 1이됨 *
동시에 숫자로 라벨링을 하면서 누구인지 알기 위해 사전을 만듦
5. 3. Convolutional Neural Network
1. 5 x 5 크기의 커널 행렬을 64개 사용
2. padding = ‘same’ 로 입력 이미지와 출력 이미지의 사이즈를 갖게함
3. MaxPooling2D( default - 2 x 2 ) 를 이용해 이미지의 주요값만 뽑아 크기가 작은 이미지를 출력
4. 오버피팅을 막기 위해 kernel_regularizer와 Dropout을 사용
5. 단계를 거친 후, 128개의 Fully Connected Layer로 추출된 이미지 전달
6. softmax layer를 이용해서 확률을 출력
6. 연예인 30명 / 200장의 데이터로 학습 시킨 결과
오버피팅을 방지하기 위해 Early Stopping method를 사용
- 20번 실행되는 동안 val_loss가 지속적으로 증가하면 멈춤
3. Convolutional Neural Network
Accuracy - 72.5%
연예인 30명 / 400장의 데이터로 학습 시킨 결과
Image Generator 를 사용하여 이미지의 수를 증가
이전과 동일하게 Early Stopping method 사용
Accuracy - 83%
7. 3. Convolutional Neural Network
Who looks like me the most?
친구 3명(Park, Jeong, Do)의 사진을 입력 이미지로 하여
가장 닮은 연예인이 누가 나오는지 확인을 해보았음
우선 30명의 데이터로 학습을 시켰기 때문에 100%인 것에 비해 닮은
꼴이라는 느낌이 들지는 않음. 다양한 연예인 데이터를 학습시켜야 조
금 더 의미가 있는 닮은꼴을 찾을 수 있을 것으로 판단하였음
얼굴의 모양(사진을 찍는 각도에 따라 달라짐)과 헤어스타일에
영향을 받는 것으로 판단하였음
학습 데이터가 얼굴, 헤어스타일까지 모두 포함하고 있기 때문이라고
판단이 되고, 헤어스타일에 영향을 받지 않도록 얼굴을 조금 더 크롭
할 필요가 있다고 판단하였음
Confusion Matrix using Heatmap
Classificaiton report