Summary
정리해보자면, neutral face는 openArt를 이용하여 제작된 상태이고, 이를 Gemini 2.5 Flash Image(nano-banana)를 사용해 표정을 바꾼 상황. 변환한 정서는 총 6종으로
- angry
- sad
- happy
- disgust
- surprised
임.
Todo
- 변환 후 사람의 identity가 불변인지 체크 필요.
- 변환 target인 정서에 제대로 입혀졌는지 검증 필요.
- Human Rating
- AI Rating
Multi column
Verification
표정 변환간 identity 보존 여부 check
Analysis
변환된 표정이 실제로 그 표정인지 check.
Trial
Example
Models
Face Recognition Models
Face Detection
Face Analyze
- deepface.analyze()의 return은 (age, emotion, gender, race) 등
Summary
Age, race, gender는 아래와 같이 예상됨.
- VGG-Face base로 한 backbone에
- age : backbone + 101-class output classifier
- race: backbone + 6-class classifier
- (“asian”, “indian”, “black”, “white”, “middle eastern”, “latino hispanic”)
- gender: backbone + 2-class classifier
Summary
Emotion 같은 경우는 custom model을 사용한 것으로 추정.
소형 CNN
- input dimension으로 보아, 48 x 48로 cropping 혹은 resizing을 거친 뒤, gray-scaling도 거친 듯
model = Sequential() # 1st convolution layer model.add(Conv2D(64, (5, 5), activation="relu", input_shape=(48, 48, 1))) model.add(MaxPooling2D(pool_size=(5, 5), strides=(2, 2))) # 2nd convolution layer model.add(Conv2D(64, (3, 3), activation="relu")) model.add(Conv2D(64, (3, 3), activation="relu")) model.add(AveragePooling2D(pool_size=(3, 3), strides=(2, 2))) # 3rd convolution layer model.add(Conv2D(128, (3, 3), activation="relu")) model.add(Conv2D(128, (3, 3), activation="relu")) model.add(AveragePooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(Flatten()) # fully connected neural networks model.add(Dense(1024, activation="relu")) model.add(Dropout(0.2)) model.add(Dense(1024, activation="relu")) model.add(Dropout(0.2)) model.add(Dense(num_classes, activation="softmax"))
Similarity Metric
Summary
- 실험 상으로는 어떠한 지표를 쓰던 차이는 없다고 한다.
TODO
Todo
Cumulative confusion matrix 그리기. probability distribution을 단순 누적해서 confusion matrix 형태로 그리기.

표정 변환간 identity 보존 여부 check
변환된 표정이 실제로 그 표정인지 check.

