Я пытаюсь реализовать исследование NIMA Research от Google, в котором они оценивают качество изображения. Я использую набор данных TID2013. У меня есть 3000 изображений, каждое из которых имеет оценку от 0,00 до 9,00
df.head()
>>
Image Name Score
0 I01_01_1.bmp 5.51429
1 i01_01_2.bmp 5.56757
2 i01_01_3.bmp 4.94444
3 i01_01_4.bmp 4.37838
4 i01_01_5.bmp 3.86486
I НАЙДЕНО код функции потерь, приведенный ниже
def earth_mover_loss(y_true, y_pred):
cdf_true = K.cumsum(y_true, axis=-1)
cdf_pred = K.cumsum(y_pred, axis=-1)
emd = K.sqrt(K.mean(K.square(cdf_true - cdf_pred), axis=-1))
return K.mean(emd)
, и я написал код для построения модели:
base_model = InceptionResNetV2(input_shape=(W,H, 3),include_top=False,pooling='avg',weights='imagenet')
for layer in base_model.layers:
layer.trainable = False
x = Dropout(0.45)(base_model.output)
out = Dense(10, activation='softmax')(x) # there are 10 classes
model = Model(base_model.input, out)
optimizer = Adam(lr=0.001)
model.compile(optimizer,loss=earth_mover_loss,)
ПРОБЛЕМА : Когда я использую ImageDataGenerator
как:
gen=ImageDataGenerator(validation_split=0.15,preprocessing_function=preprocess_input)
train = gen.flow_from_dataframe(df,TRAIN_PATH,x_col='Image Name',y_col='Score',subset='training',class_mode='sparse')
val = gen.flow_from_dataframe(df,TRAIN_PATH,x_col='Image Name',y_col='Score',subset='validation',class_mode='sparse')
, это либо дает ошибку во время обучения, либо значение потери of nan
Я пробовал несколько методов:
- Создание оценок как
rounded = math.round(score)
и использование class_mode=sparse
- Создание оценок как
str(rounded)
а затем используйте class_mode=categorical
, но у меня каждый раз возникает ошибка.
ПОЖАЛУЙСТА, помогите мне с загрузкой изображений, используя ImageDataGenerator
о том, как я должен загрузить изображения в эту модель .
Структура модели не должна измениться.