prim.ko 3 Report post Posted September 5, 2017 Добрый вечер. Интересует как можно обучить модель с использованием vgg-16 предобученной? В keras это как говорит @ternaus из ods "делается мизинцем левой ноги". Причем вообще не глядя в монитор. https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html . А для Caffe можно так же просто? Интуитивно догадываюсь, что нужно как-то замораживать слои все сверточные и обучать только выход. И еще, например входы vgg-16 224*244*3. Моя сетка запрашивает на вход изображение 256*256. Изменять свою сеть? Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 5, 2017 Я делал в DIGITS, там при создании сетки указывается модель для загрузки (под окошком с текстом модели). Он прогрузит все слои которые имеют то же имя что и в caffemodel файле. Если не нужно их учить, что скорость обучения ставим в 0. param { lr_mult: 0.0 decay_mult: 1.0 } param { lr_mult: 0.0 decay_mult: 0.0 } и учим, по поводу входного блоба, думаю лучше смастабировать входное изображение до размера входа сети. А после выход смасштабировать обратно. Хотя у меня сейчас вход 600х800 на vgg19 и ничего, учится. 1 Share this post Link to post Share on other sites
prim.ko 3 Report post Posted September 5, 2017 1 час назад, Smorodov сказал: Он прогрузит все слои которые имеют то же имя что и в caffemodel файле При этом память GPU больше потребляется, в отличие от обучения своей сеткой с нуля? В Keras понравилось, что мы предсказываем с VGG-16 в отдельной итерации на трогая память GPU. А тут как? Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 5, 2017 Тут с замороженными слоями тоже меньше памяти лопает и учится быстрее. Share this post Link to post Share on other sites
prim.ko 3 Report post Posted September 5, 2017 То есть подход следующий, я правильно понял? 1) загружаем веса 2) Изменяем свою сеть. Объявляем столько слоев из прототипа модели VGG-16 сколько необходимо, в своем прототипе модели. Вот на этом моменте замораживаем добавленные слои. Здесь попрошу подробнее разъяснить. Свои слои при этом выбрасываются? Оставляются только выходы из своей модели? 3) Получили необходимый loss, возвращаем все слои на место? Share this post Link to post Share on other sites
mrgloom 242 Report post Posted September 5, 2017 Я файнтюнил без замораживания слоев просто с learning rate меньше в 10 раз и норм, но возможно это не самое оптимально решение и зависит от кол-ва данных. Судя по табличке finetuned acc всегда больше получалась https://github.com/mrgloom/kaggle-dogs-vs-cats-solution Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 5, 2017 Как я понял, он читает vgg19.caffemodel и смотрит совпадают ли названия и свойства слоев, если все совпадает грузятся веса. Прототип сетки уже содержит нужный кусок из VGG19, вот туда и грузятся веса, а все что осталось не тронутым инициализируется случайными числами (надо прописать свойства weight_filler { type: "xavier" } bias_filler { type: "constant" } ). Приаттачил свою сетку, которую сейчас мучаю. Там первые слои как раз VGG можно узнать по нулевой скорости обучения. train_val(1).prototxt 1 Share this post Link to post Share on other sites
prim.ko 3 Report post Posted September 5, 2017 Интересная сетка. Для сегментации? С какой целью делаются множественные crop? Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 5, 2017 Да, для бинарной сегментации, это FCN8s немного переделанная. Там к изображению вначале поля приделываются, наверное для лучшей свертки. А потом кропается постепенно. Хотел еще повороты приделать но питонский слой не осилил, лень пока копаться пока учится вроде нормально. Share this post Link to post Share on other sites
prim.ko 3 Report post Posted September 5, 2017 7 минут назад, Smorodov сказал: Хотел еще повороты приделать но питонский слой На этот счет хочу еще проверить возможно ли будет загружать несколько классов в один модуль, используя один файл, но несколько python layers. Удобно для ошибки и data test aug будет использовать Share this post Link to post Share on other sites