데이터 출처: https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=realm&dataSetSn=51
패션 이미지의 스타일을 분류하는 모델링을 진행하였다.
리조트, 모던, 페미닌, 스포티, 컨트리 총 5개의 스타일을 분류하여 예측하는 모델
이미지는 각 10000장씩 사용 - train:val:test 6:2:2
학습 데이터 총 30000장
train = "/content/drive/MyDrive/dataset_tmp/result/train"
val = "/content/drive/MyDrive/dataset_tmp/result/val"
test = "/content/drive/MyDrive/dataset_tmp/result/test"
class_list = ['리조트', '모던', '스포티', '컨트리', '페미닌']
train = tf.keras.preprocessing.image_dataset_from_directory(
train,
labels="inferred",
label_mode="categorical",
class_names=class_list,
)
val = tf.keras.preprocessing.image_dataset_from_directory(
val,
labels="inferred",
label_mode="categorical",
class_names=class_list,
)
test = tf.keras.preprocessing.image_dataset_from_directory(
test,
labels="inferred",
label_mode="categorical",
class_names=class_list,
)
resnet = ResNet50(input_shape= (256,256,3), weights='imagenet')
for layer in resnet.layers:
layer.trainable = False
x = resnet.output
x = GlobalAveragePooling2D()(x)
x = Dense(512, activation='relu')(x)
predictions = Dense(5, activation='softmax')(x)
model = Model(resnet.input, predictions)
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate = 0.001),
loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(train, validation_data=[val], epochs=10, batch_size=32)
resnet.trainable=True
fine_tune_at = 140
for layer in resnet.layers[:fine_tune_at]:
layer.trainable=False
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate = 0.0001), loss='categorical_crossentropy', metrics=['accuracy'])
loss: 1.7704 - accuracy: 0.6104
40~50%대의 정확도에서 조금 개선되었다.
하지만 train 데이터에 과적합, 어느 시점에서 loss 증가 등의 문제가 있어서
trainable을 여러 층에서 조정 시도해보고, learning rate도 바꾸어 보고
dropout도 추가해보았으나 나아지지가 않았다.