Keras: caffeモデルをKerasタイプに変換する方法は?

作成日 2015年05月14日  ·  10コメント  ·  ソース: keras-team/keras

こんにちは、みんな、

Kerasを使用して、分類用のCNNモデルをトレーニングしたいと思います。 私が知っているように、VGG、ImageNetなどの多くの公開された事前トレーニング済みCNNモデルがあります。しかし、残念ながら、これらの事前トレーニング済みモデルは、caffeやcuda-convnetなどの他のCNNフレームワークで生成されます。 これらの種類の事前トレーニング済みモデルまたは重みを使用して、Kerasシーケンシャルモデルを初期化し、微調整トレーニングを行うにはどうすればよいですか?

ありがとう
ウー博士

stale

最も参考になるコメント

我々はそれに取り組んでいます。 これは間違いなく、すぐに追加したい機能の1つです。 https://github.com/fchollet/keras/issues/100

全てのコメント10件

また、これを説明するためのチュートリアルを見たいと思っています。

我々はそれに取り組んでいます。 これは間違いなく、すぐに追加したい機能の1つです。 https://github.com/fchollet/keras/issues/100

それでも興味がある人は、変換モジュールを備えたこのKerasのフォークを使用できます。
https://github.com/MarcBS/keras

一番、
マーク

こんにちは、
私はあなたが言及したcaffeからkerasへの変換モジュールを試していましたが、caffe2keras.pyを実行するとこのエラーが発生します

グローバル名 'network_input'が定義されていません

何か助けはありますか?

@dhruvjainこのフォークを参照している場合は、ここで新しい問題を開いてください。

さらに、変換しようとしているモデルファイル、または少なくとも.prototxtを含めることができれば非常に役立ちます。

私はカフェネットモデルを変換するためにそれを使用しました、prototxtはこれです:
名前:「CaffeNet」

force_backward:true
入力:「データ」
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
kernel_size:11
ストライド:4
}
}

レイヤー{
名前: "relu1"
タイプ:「ReLU」
下:「conv1」
上: "conv1"
}
レイヤー{
名前: "pool1"
タイプ:「プーリング」
下:「conv1」
上:「pool1」
pooling_param {
プール:MAX
kernel_size:3
ストライド:2
}
}
レイヤー{
名前: "norm1"
タイプ:「LRN」
下:「pool1」
上:「norm1」
lrn_param {
local_size:5
アルファ:0.0001
ベータ:0.75
}
}
レイヤー{
名前:「conv2」
タイプ:「コンボリューション」
下:「norm1」
上:「conv2」
convolution_param {
num_output:256
パッド:2
kernel_size:5
グループ:2
}
}
レイヤー{
名前:「relu2」
タイプ:「ReLU」
下:「conv2」
上:「conv2」
}
レイヤー{
名前:「pool2」
タイプ:「プーリング」
下:「conv2」
上:「pool2」
pooling_param {
プール:MAX
kernel_size:3
ストライド:2
}
}
レイヤー{
名前:「norm2」
タイプ:「LRN」
下:「pool2」
上:「norm2」
lrn_param {
local_size:5
アルファ:0.0001
ベータ:0.75
}
}
レイヤー{
名前:「conv3」
タイプ:「コンボリューション」
下:「norm2」
上:「conv3」
convolution_param {
num_output:384
パッド:1
kernel_size:3
}
}
レイヤー{
名前:「relu3」
タイプ:「ReLU」
下:「conv3」
上:「conv3」
}
レイヤー{
名前:「conv4」
タイプ:「コンボリューション」
下:「conv3」
上:「conv4」
convolution_param {
num_output:384
パッド:1
kernel_size:3
グループ:2
}
}
レイヤー{
名前:「relu4」
タイプ:「ReLU」
下:「conv4」
上:「conv4」
}
レイヤー{
名前:「conv5」
タイプ:「コンボリューション」
下:「conv4」
上:「conv5」
convolution_param {
num_output:256
パッド:1
kernel_size:3
グループ:2
}
}
レイヤー{
名前:「relu5」
タイプ:「ReLU」
下:「conv5」
上:「conv5」
}
レイヤー{
名前:「pool5」
タイプ:「プーリング」
下:「conv5」
上:「pool5」
pooling_param {
プール:MAX
kernel_size:3
ストライド:2
}
}
レイヤー{
名前:「fc6」
タイプ:「InnerProduct」
下:「pool5」
上:「fc6」
inner_product_param {
num_output:4096
}
}
レイヤー{
名前:「relu6」
タイプ:「ReLU」
下:「fc6」
上:「fc6」
}
レイヤー{
名前:「drop6」
タイプ:「ドロップアウト」
下:「fc6」
上:「fc6」
dropout_param {
dropout_ratio:0.5
}
}
レイヤー{
名前:「fc7」
タイプ:「InnerProduct」
下:「fc6」
上:「fc7」
inner_product_param {
num_output:4096
}
}

レイヤー{
名前:「relu7」
タイプ:「ReLU」
下:「fc7」
上:「fc7」
}

レイヤー{
名前:「drop7」
タイプ:「ドロップアウト」
下:「fc7」
上:「fc7」
dropout_param {
dropout_ratio:0.5
}
}

レイヤー{
名前:「fc8」
タイプ:「InnerProduct」
下:「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 評価