Keras: Wie konvertiert man ein Caffe-Modell in den Keras-Typ?

Erstellt am 14. Mai 2015  ·  10Kommentare  ·  Quelle: keras-team/keras

Hallo zusammen,

Ich möchte Keras verwenden, um ein CNN-Modell für die Klassifizierung zu trainieren. Wie ich weiß, gibt es viele öffentliche vortrainierte CNN-Modelle, wie VGG, ImageNet usw. Aber leider werden diese vortrainierten Modelle mit anderen CNN-Frameworks wie caffe oder cuda-convnet generiert. Wie können wir diese Art von vortrainierten Modellen oder Gewichtungen verwenden, um ein sequentielles Keras-Modell zu initialisieren und dann das Finetuning-Training durchzuführen?

Danke
Dr. Wu

stale

Hilfreichster Kommentar

Wir arbeiten daran. Dies gehört definitiv zu den Funktionen, die wir bald hinzufügen möchten. https://github.com/fchollet/keras/issues/100

Alle 10 Kommentare

Ich hoffe auch, ein Tutorial zu sehen, um dies zu veranschaulichen.

Wir arbeiten daran. Dies gehört definitiv zu den Funktionen, die wir bald hinzufügen möchten. https://github.com/fchollet/keras/issues/100

Wenn noch jemand interessiert ist, können Sie diesen Fork von Keras verwenden, der ein Konvertierungsmodul hat:
https://github.com/MarcBS/keras

Am besten,
Marc

Hallo,
Ich habe das von Ihnen erwähnte Caffe-zu-Keras-Konvertierungsmodul ausprobiert, aber ich erhalte diesen Fehler, wenn ich die Datei "caffe2keras.py" ausführe

globaler Name 'network_input' ist nicht definiert

Irgendeine Hilfe?

@dhruvjain Wenn Sie sich auf diese Abzweigung beziehen, öffnen Sie bitte hier eine neue Ausgabe.

Außerdem wäre es sehr hilfreich, wenn Sie die zu konvertierenden Modelldateien oder zumindest die .prototxt-Datei einbinden könnten.

Ich habe es verwendet, um das Caffenet-Modell zu konvertieren, das Prototxt ist dieses:
Name: "CaffeNet"

force_backward: wahr
Eingabedaten"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227

Eingabe: "Etikett"
input_dim: 1
input_dim: 1
input_dim: 1
input_dim: 1

Schicht {
Name: "conv1"
Typ: "Faltung"
unten: "Daten"
oben: "conv1"
Faltungsparameter {
Anzahl_Ausgabe: 96
Kernelgröße: 11
Schritt: 4
}
}

Schicht {
Name: "relu1"
Typ: "ReLU"
unten: "conv1"
oben: "conv1"
}
Schicht {
Name: "pool1"
Typ: "Pooling"
unten: "conv1"
oben: "pool1"
pooling_param {
Becken: MAX
Kernelgröße: 3
Schritt: 2
}
}
Schicht {
Name: "norm1"
Typ: "LRN"
unten: "pool1"
oben: "norm1"
lrn_param {
local_size: 5
Alpha: 0,0001
Beta: 0,75
}
}
Schicht {
Name: "conv2"
Typ: "Faltung"
unten: "norm1"
oben: "conv2"
Faltungsparameter {
Anzahl_Ausgabe: 256
Auflage: 2
Kernelgröße: 5
Gruppe: 2
}
}
Schicht {
Name: "relu2"
Typ: "ReLU"
unten: "conv2"
oben: "conv2"
}
Schicht {
Name: "pool2"
Typ: "Pooling"
unten: "conv2"
oben: "pool2"
pooling_param {
Becken: MAX
Kernelgröße: 3
Schritt: 2
}
}
Schicht {
Name: "norm2"
Typ: "LRN"
unten: "pool2"
oben: "norm2"
lrn_param {
local_size: 5
Alpha: 0,0001
Beta: 0,75
}
}
Schicht {
Name: "conv3"
Typ: "Faltung"
unten: "norm2"
oben: "conv3"
Faltungsparameter {
Anzahl_Ausgabe: 384
Auflage: 1
Kernelgröße: 3
}
}
Schicht {
Name: "relu3"
Typ: "ReLU"
unten: "conv3"
oben: "conv3"
}
Schicht {
Name: "conv4"
Typ: "Faltung"
unten: "conv3"
oben: "conv4"
Faltungsparameter {
Anzahl_Ausgabe: 384
Auflage: 1
Kernelgröße: 3
Gruppe: 2
}
}
Schicht {
Name: "relu4"
Typ: "ReLU"
unten: "conv4"
oben: "conv4"
}
Schicht {
Name: "conv5"
Typ: "Faltung"
unten: "conv4"
oben: "conv5"
Faltungsparameter {
Anzahl_Ausgabe: 256
Auflage: 1
Kernelgröße: 3
Gruppe: 2
}
}
Schicht {
Name: "relu5"
Typ: "ReLU"
unten: "conv5"
oben: "conv5"
}
Schicht {
Name: "pool5"
Typ: "Pooling"
unten: "conv5"
oben: "pool5"
pooling_param {
Becken: MAX
Kernelgröße: 3
Schritt: 2
}
}
Schicht {
Name: "fc6"
Typ: "InnerProdukt"
unten: "pool5"
oben: "fc6"
inner_product_param {
Anzahl_Ausgabe: 4096
}
}
Schicht {
Name: "relu6"
Typ: "ReLU"
unten: "fc6"
oben: "fc6"
}
Schicht {
Name: "drop6"
Typ: "Ausfall"
unten: "fc6"
oben: "fc6"
dropout_param {
Dropout_Verhältnis: 0.5
}
}
Schicht {
Name: "fc7"
Typ: "InnerProdukt"
unten: "fc6"
oben: "fc7"
inner_product_param {
Anzahl_Ausgabe: 4096
}
}

Schicht {
Name: "relu7"
Typ: "ReLU"
unten: "fc7"
oben: "fc7"
}

Schicht {
Name: "drop7"
Typ: "Ausfall"
unten: "fc7"
oben: "fc7"
dropout_param {
Dropout_Verhältnis: 0.5
}
}

Schicht {
Name: "fc8"
Typ: "InnerProdukt"
unten: "fc7"
oben: "fc8"
inner_product_param {
Anzahl_Ausgabe: 1000
}
}

Wirklich ein wichtiges Feature...

Dieser Caffe-zu-Keras-Gewichtsumrechner ist das, wonach Sie suchen:

https://github.com/pierluigiferrari/caffe_weight_converter

Es konvertiert .caffemodel Dateien in .h5 Gewichtsdateien. Es konvertiert nur Gewichte, nicht die Modelldefinition, aber die Gewichte sind sowieso alles, was Sie brauchen.

Für ein bestimmtes Modell erfordert die Modelldefinition entweder nur Keras-Kernbibliotheksebenen, in diesem Fall ist es sehr einfach, Keras manuell zu schreiben, oder die Modelldefinition ist komplex und hat benutzerdefinierte Ebenentypen, in diesem Fall würde ein Modelldefinitionskonverter wahrscheinlich fehlschlagen ohnehin.

Welche Formeingabe wird vom konvertierten neuen Keras-Modell erwartet? (3,224,224) oder (224,224,3)? weil caffe mit (3,224,224) und keras mit (224,224,3) arbeitet...

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen