Используйте предварительно обученную модель с другой формой ввода и моделью класса - PullRequest
0 голосов
/ 01 сентября 2018

Я работаю над проблемой классификации, используя CNN, где мой размер входного изображения равен 64X64, и я хочу использовать предварительно подготовленную модель, такую ​​как VGG16 , COCO или любую другую , Но проблема в том, что размер входного изображения предварительно обученной модели составляет 224X224. Как мне разобраться в этом вопросе. Есть ли способ увеличения данных для размера входного изображения.

Если я изменю размер моего входного изображения до 224X224, тогда очень высока вероятность того, что изображение станет размытым, что может повлиять на тренировку. Пожалуйста, поправьте меня, если я ошибаюсь.

Другой вопрос связан с предварительно обученной моделью. Если я использую transfer learning, то, как правило, я должен замораживать слои из предварительно обученной модели. Учитывая, что моя классификация сильно отличается от заранее подготовленных моделей классов. Но я думаю, что первые несколько слоев мы можем заморозить, чтобы получить края, кривые и т. Д. Изображений, что очень часто встречается на всех изображениях.

1 Ответ

0 голосов
/ 01 сентября 2018

Но проблема в том, что размер входного изображения предварительно подготовленной модели составляет 224X224.

Я предполагаю, что вы работаете с Keras / Tensorflow (то же самое для других платформ DL). Согласно документам в приложении Keras :

input_shape : необязательный кортеж формы, указывается только в случае include_top Неверно (иначе входная форма должна быть (224, 224, 3) (с формат данных channel_last) или (3, 224, 224) (с помощью channel_first) формат данных). Он должен иметь ровно 3 входных канала, а ширина и высота должна быть не менее 48. Например, (200, 200, 3) будет один

Итак, есть два варианта решения вашей проблемы:

1) Измените размер входного изображения до 244*244 с помощью существующей библиотеки и используйте VGG классификатор [include=true].

2) Тренируйте свой собственный классификатор поверх моделей VGG. Как упомянуто в вышеупомянутой документации в Keras, если ваше изображение отличается от 244 * 244, вы должны обучить свой собственный классификатор [include=false]. Вы можете легко делать такие вещи с помощью:

    inp = keras.layers.Input(shape=(64, 64, 3), name='image_input')

    vgg_model = VGG19(weights='imagenet', include_top=False)
    vgg_model.trainable = False

    x = keras.layers.Flatten(name='flatten')(vgg_model)
    x = keras.layers.Dense(512, activation='relu', name='fc1')(x)
    x = keras.layers.Dense(512, activation='relu', name='fc2')(x)
    x = keras.layers.Dense(10, activation='softmax', name='predictions')(x)
    new_model = keras.models.Model(inputs=inp, outputs=x)
    new_model.compile(optimizer='adam', loss='categorical_crossentropy', 
                      metrics=['accuracy'])

Если я использую трансферное обучение, то, как правило, мне нужно заморозка от предварительно обученной модели

Это действительно зависит от того, какое у вас новое задание, сколько у вас тренировочных примеров, какая у вас модель с подготовкой и многое другое. Если бы я был тобой, я бы сначала выбросил предварительно обученный модельный классификатор. Затем, если это не помогло, удалите другой слой Convolution и делайте это шаг за шагом, пока я не получу хорошую производительность.

...