Keras: Bagaimana cara mengubah model caffe ke tipe Keras?

Dibuat pada 14 Mei 2015  ·  10Komentar  ·  Sumber: keras-team/keras

Halo semua,

Saya ingin menggunakan Keras untuk melatih model CNN untuk klasifikasi. Seperti yang saya tahu, ada banyak model CNN pra-terlatih publik, seperti VGG, ImageNet dll. Tapi sayangnya, model pra-terlatih ini dihasilkan dengan kerangka CNN lain, seperti caffe atau cuda-convnet. Bagaimana kita bisa menggunakan model atau bobot pra-pelatihan semacam ini untuk menginisialisasi model sekuensial Keras dan kemudian melakukan pelatihan finetuning?

Terima kasih
Dr Wu

stale

Komentar yang paling membantu

Kami sedang mengerjakannya. Ini jelas salah satu fitur yang ingin kami tambahkan segera. https://github.com/fchollet/keras/issues/100

Semua 10 komentar

Saya juga berharap untuk melihat tutorial untuk menggambarkan hal ini.

Kami sedang mengerjakannya. Ini jelas salah satu fitur yang ingin kami tambahkan segera. https://github.com/fchollet/keras/issues/100

Jika ada yang masih tertarik, Anda dapat menggunakan garpu Keras ini yang memiliki modul konversi:
https://github.com/MarcBS/keras

Terbaik,
Marc

Hai,
Saya mencoba modul konversi caffe ke keras yang Anda sebutkan tetapi saya mendapatkan kesalahan ini ketika saya menjalankan caffe2keras.py

nama global 'network_input' tidak ditentukan

Ada bantuan?

@dhruvjain jika Anda mengacu pada garpu ini , silakan buka masalah baru di sini .

Selain itu, akan sangat membantu jika Anda dapat menyertakan file model yang ingin Anda konversi, atau setidaknya .prototxt.

Saya menggunakannya untuk mengonversi model caffenet, prototxt adalah yang ini:
nama: "CaffeNet"

force_backward: benar
memasukan data"
masukan_redup: 1
masukan_redup: 3
masukan_redup: 227
masukan_redup: 227

masukan: "label"
masukan_redup: 1
masukan_redup: 1
masukan_redup: 1
masukan_redup: 1

lapisan {
nama: "konv1"
ketik: "Konvolusi"
bawah: "data"
atas: "konv1"
konvolusi_param {
jumlah_keluaran: 96
kernel_size: 11
langkah: 4
}
}

lapisan {
nama: "relu1"
ketik: "ReLU"
bawah: "konv1"
atas: "konv1"
}
lapisan {
nama: "kolam 1"
jenis: "Pengumpulan"
bawah: "konv1"
atas: "kolam 1"
pooling_param {
kolam renang: MAX
kernel_size: 3
langkah: 2
}
}
lapisan {
nama: "norma1"
jenis: "LRN"
bawah: "kolam1"
atas: "norma1"
lrn_param {
ukuran_lokal: 5
alfa: 0,0001
beta: 0,75
}
}
lapisan {
nama: "konv2"
ketik: "Konvolusi"
bawah: "norma1"
atas: "konv2"
konvolusi_param {
jumlah_keluaran: 256
alas: 2
kernel_size: 5
grup: 2
}
}
lapisan {
nama: "relu2"
ketik: "ReLU"
bawah: "konv2"
atas: "konv2"
}
lapisan {
nama: "kolam2"
jenis: "Pengumpulan"
bawah: "konv2"
atas: "kolam renang2"
pooling_param {
kolam renang: MAX
kernel_size: 3
langkah: 2
}
}
lapisan {
nama: "norma2"
jenis: "LRN"
bawah: "kolam2"
atas: "norma2"
lrn_param {
ukuran_lokal: 5
alfa: 0,0001
beta: 0,75
}
}
lapisan {
nama: "conv3"
ketik: "Konvolusi"
bawah: "norma2"
atas: "conv3"
konvolusi_param {
jumlah_keluaran: 384
alas: 1
kernel_size: 3
}
}
lapisan {
nama: "relu3"
ketik: "ReLU"
bawah: "conv3"
atas: "conv3"
}
lapisan {
nama: "konv4"
ketik: "Konvolusi"
bawah: "conv3"
atas: "konv4"
konvolusi_param {
jumlah_keluaran: 384
alas: 1
kernel_size: 3
grup: 2
}
}
lapisan {
nama: "relu4"
ketik: "ReLU"
bawah: "konv4"
atas: "konv4"
}
lapisan {
nama: "konv5"
ketik: "Konvolusi"
bawah: "konv4"
atas: "konv5"
konvolusi_param {
jumlah_keluaran: 256
alas: 1
kernel_size: 3
grup: 2
}
}
lapisan {
nama: "relu5"
ketik: "ReLU"
bawah: "konv5"
atas: "konv5"
}
lapisan {
nama: "kolam 5"
jenis: "Pengumpulan"
bawah: "konv5"
atas: "kolam 5"
pooling_param {
kolam renang: MAX
kernel_size: 3
langkah: 2
}
}
lapisan {
nama: "fc6"
jenis: "Produk Dalam"
bawah: "kolam 5"
atas: "fc6"
parameter_produk_dalam {
jumlah_keluaran: 4096
}
}
lapisan {
nama: "relu6"
ketik: "ReLU"
bawah: "fc6"
atas: "fc6"
}
lapisan {
nama: "drop6"
jenis: "Keluar"
bawah: "fc6"
atas: "fc6"
putus_param {
dropout_ratio: 0,5
}
}
lapisan {
nama: "fc7"
jenis: "Produk Dalam"
bawah: "fc6"
atas: "fc7"
parameter_produk_dalam {
jumlah_keluaran: 4096
}
}

lapisan {
nama: "relu7"
ketik: "ReLU"
bawah: "fc7"
atas: "fc7"
}

lapisan {
nama: "drop7"
jenis: "Keluar"
bawah: "fc7"
atas: "fc7"
putus_param {
dropout_ratio: 0,5
}
}

lapisan {
nama: "fc8"
jenis: "Produk Dalam"
bawah: "fc7"
atas: "fc8"
parameter_produk_dalam {
jumlah_keluaran: 1000
}
}

Benar-benar fitur yang penting...

Konverter berat Caffe-to-Keras ini adalah yang Anda cari:

https://github.com/pierluigiferrari/caffe_weight_converter

Itu mengkonversi .caffemodel file ke .h5 file berat badan. Ini hanya mengonversi bobot, bukan definisi model, tetapi bobotnya benar-benar semua yang Anda butuhkan.

Untuk model apa pun, definisi model hanya memerlukan lapisan pustaka inti Keras, dalam hal ini sangat mudah untuk menulis di Keras secara manual, atau definisi model rumit dan memiliki jenis lapisan khusus, dalam hal ini konverter definisi model mungkin akan gagal omong-omong.

input bentuk apa yang diharapkan oleh model keras baru yang dikonversi? (3.224.224) atau (224.224,3)? karena caffe bekerja dengan (3.224.224) dan keras dengan (224.224.3)...

Apakah halaman ini membantu?
0 / 5 - 0 peringkat