Keras: Как преобразовать модель кафе в тип Кераса?

Созданный на 14 мая 2015  ·  10Комментарии  ·  Источник: keras-team/keras

Всем привет,

Я хочу использовать Keras для обучения модели CNN для классификации. Насколько мне известно, существует множество общедоступных предварительно обученных моделей CNN, таких как VGG, ImageNet и т. Д. Но, к сожалению, эти предварительно обученные модели генерируются с помощью другой структуры CNN, такой как caffe или cuda-convnet. Как мы можем использовать эти виды предварительно обученных моделей или весов для инициализации последовательной модели Keras, а затем выполнить обучение тонкой настройке?

Спасибо
Доктор Ву

Самый полезный комментарий

Мы работаем над этим. Это определенно одна из тех функций, которые мы хотим добавить в ближайшее время. https://github.com/fchollet/keras/issues/100

Все 10 Комментарий

Я также надеюсь увидеть учебник, чтобы проиллюстрировать это.

Мы работаем над этим. Это определенно одна из тех функций, которые мы хотим добавить в ближайшее время. https://github.com/fchollet/keras/issues/100

Если кому-то все еще интересно, вы можете использовать эту вилку Keras, в которой есть модуль преобразования:
https://github.com/MarcBS/keras

Лучший,
Марк

Привет,
Я пробовал модуль преобразования caffe в keras, о котором вы упомянули, но я получаю эту ошибку, когда запускаю caffe2keras.py

глобальное имя network_input не определено

Любая помощь?

@dhruvjain , если вы имеете в виду эту вилку затем открыть новый вопрос здесь , пожалуйста.

Кроме того, было бы очень полезно, если бы вы могли включить файлы модели, которые вы пытаетесь преобразовать, или, по крайней мере, .prototxt.

Я использовал его для преобразования модели caffenet, прототип такой:
название: "CaffeNet"

force_backward: правда
входные данные"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227

ввод: "метка"
input_dim: 1
input_dim: 1
input_dim: 1
input_dim: 1

слой {
имя: "conv1"
тип: "Свертка"
внизу: "данные"
вверху: "conv1"
convolution_param {
num_output: 96
размер_ядра: 11
шаг: 4
}
}

слой {
имя: "relu1"
тип: "ReLU"
внизу: "conv1"
вверху: "conv1"
}
слой {
имя: "пул1"
тип: "Объединение"
внизу: "conv1"
вверху: "pool1"
pooling_param {
бассейн: MAX
размер_ядра: 3
шаг: 2
}
}
слой {
имя: "norm1"
тип: "ЛРН"
внизу: «бассейн1»
вверху: "norm1"
lrn_param {
local_size: 5
альфа: 0,0001
бета: 0,75
}
}
слой {
имя: "conv2"
тип: "Свертка"
внизу: "norm1"
вверху: "conv2"
convolution_param {
num_output: 256
колодка: 2
размер_ядра: 5
группа: 2
}
}
слой {
имя: "relu2"
тип: "ReLU"
внизу: "conv2"
вверху: "conv2"
}
слой {
имя: "пул2"
тип: "Объединение"
внизу: "conv2"
вверху: "pool2"
pooling_param {
бассейн: MAX
размер_ядра: 3
шаг: 2
}
}
слой {
название: "norm2"
тип: "ЛРН"
внизу: "бассейн2"
вверху: "norm2"
lrn_param {
local_size: 5
альфа: 0,0001
бета: 0,75
}
}
слой {
имя: "conv3"
тип: "Свертка"
внизу: "norm2"
вверху: "conv3"
convolution_param {
num_output: 384
колодка: 1
размер_ядра: 3
}
}
слой {
имя: "relu3"
тип: "ReLU"
внизу: "conv3"
вверху: "conv3"
}
слой {
имя: "conv4"
тип: "Свертка"
внизу: "conv3"
вверху: "conv4"
convolution_param {
num_output: 384
колодка: 1
размер_ядра: 3
группа: 2
}
}
слой {
имя: "relu4"
тип: "ReLU"
внизу: "conv4"
вверху: "conv4"
}
слой {
имя: "conv5"
тип: "Свертка"
внизу: "conv4"
вверху: "conv5"
convolution_param {
num_output: 256
колодка: 1
размер_ядра: 3
группа: 2
}
}
слой {
имя: "relu5"
тип: "ReLU"
внизу: "conv5"
вверху: "conv5"
}
слой {
имя: "pool5"
тип: "Объединение"
внизу: "conv5"
вверху: "pool5"
pooling_param {
бассейн: MAX
размер_ядра: 3
шаг: 2
}
}
слой {
имя: "fc6"
тип: "Внутренний продукт"
внизу: "pool5"
вверху: "fc6"
inner_product_param {
num_output: 4096
}
}
слой {
имя: "relu6"
тип: "ReLU"
внизу: "fc6"
вверху: "fc6"
}
слой {
имя: "drop6"
тип: «Отсев»
внизу: "fc6"
вверху: "fc6"
dropout_param {
dropout_ratio: 0,5
}
}
слой {
имя: "fc7"
тип: "Внутренний продукт"
внизу: "fc6"
вверху: "fc7"
inner_product_param {
num_output: 4096
}
}

слой {
имя: "relu7"
тип: "ReLU"
внизу: "fc7"
вверху: "fc7"
}

слой {
имя: "drop7"
тип: «Отсев»
внизу: "fc7"
вверху: "fc7"
dropout_param {
dropout_ratio: 0,5
}
}

слой {
имя: "fc8"
тип: "Внутренний продукт"
внизу: "fc7"
вверху: "fc8"
inner_product_param {
num_output: 1000
}
}

Действительно важная особенность ...

Этот конвертер веса Caffe-to-Keras - это то, что вы ищете:

https://github.com/pierluigiferrari/caffe_weight_converter

Он конвертирует файлы .caffemodel файлы с весом .h5 . Он преобразует только веса, а не определение модели, но веса действительно все, что вам нужно.

Для любой данной модели определение модели требует либо только слоев базовой библиотеки Keras, и в этом случае очень легко написать в Keras вручную, либо определение модели является сложным и имеет настраиваемые типы слоев, и в этом случае преобразователь определения модели, вероятно, выйдет из строя. так или иначе.

какой ввод формы ожидается от преобразованной новой модели keras? (3,224,224) или (224,224,3)? потому что caffe работает с (3,224,224), а keras - с (224,224,3) ...

Была ли эта страница полезной?
0 / 5 - 0 рейтинги