こんにちは、みんな、
Kerasを使用して、分類用のCNNモデルをトレーニングしたいと思います。 私が知っているように、VGG、ImageNetなどの多くの公開された事前トレーニング済みCNNモデルがあります。しかし、残念ながら、これらの事前トレーニング済みモデルは、caffeやcuda-convnetなどの他のCNNフレームワークで生成されます。 これらの種類の事前トレーニング済みモデルまたは重みを使用して、Kerasシーケンシャルモデルを初期化し、微調整トレーニングを行うにはどうすればよいですか?
ありがとう
ウー博士
また、これを説明するためのチュートリアルを見たいと思っています。
我々はそれに取り組んでいます。 これは間違いなく、すぐに追加したい機能の1つです。 https://github.com/fchollet/keras/issues/100
それでも興味がある人は、変換モジュールを備えたこのKerasのフォークを使用できます。
https://github.com/MarcBS/keras
一番、
マーク
こんにちは、
私はあなたが言及したcaffeからkerasへの変換モジュールを試していましたが、caffe2keras.pyを実行するとこのエラーが発生します
グローバル名 'network_input'が定義されていません
何か助けはありますか?
私はカフェネットモデルを変換するためにそれを使用しました、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)で動作するため...
最も参考になるコメント
我々はそれに取り組んでいます。 これは間違いなく、すぐに追加したい機能の1つです。 https://github.com/fchollet/keras/issues/100