Всем привет,
Я хочу использовать Keras для обучения модели CNN для классификации. Насколько мне известно, существует множество общедоступных предварительно обученных моделей CNN, таких как VGG, ImageNet и т. Д. Но, к сожалению, эти предварительно обученные модели генерируются с помощью другой структуры CNN, такой как caffe или cuda-convnet. Как мы можем использовать эти виды предварительно обученных моделей или весов для инициализации последовательной модели Keras, а затем выполнить обучение тонкой настройке?
Спасибо
Доктор Ву
Я также надеюсь увидеть учебник, чтобы проиллюстрировать это.
Мы работаем над этим. Это определенно одна из тех функций, которые мы хотим добавить в ближайшее время. https://github.com/fchollet/keras/issues/100
Если кому-то все еще интересно, вы можете использовать эту вилку Keras, в которой есть модуль преобразования:
https://github.com/MarcBS/keras
Лучший,
Марк
Привет,
Я пробовал модуль преобразования caffe в keras, о котором вы упомянули, но я получаю эту ошибку, когда запускаю caffe2keras.py
глобальное имя network_input не определено
Любая помощь?
Я использовал его для преобразования модели 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) ...
Самый полезный комментарий
Мы работаем над этим. Это определенно одна из тех функций, которые мы хотим добавить в ближайшее время. https://github.com/fchollet/keras/issues/100