2016-06-01 12 views
1

Gibt es einen relativ einfachen Weg, um Gewichte in Python aus einem der vielen vortrainierten Modelle in Caffe Zoo OHNE KOFFE (noch pyCaffe) zu extrahieren? d. h. Parsing .caffemodel zu hdf5/numpy oder welches Format auch immer, das von Python gelesen werden kann?Gewichte aus .caffemodel extrahieren ohne caffe in Python installiert

Alle Antworten, die ich fand, verwenden C++ - Code mit Caffe-Klassen oder Pycaffe. Ich habe den Code von Pycaffe geschaut es sieht aus wie Sie brauchen wirklich Caffe, um Sinn der binären ist das, dass die einzige Lösung?

+0

Sie konnten Caffe-Tensorflow-Konverter (https://github.com/ethereon/caffe-tensorflow) verwenden. Gewichte aus einem Caffe-Modell zu extrahieren? Ich bin kürzlich auf das gleiche Problem gestoßen: Ich würde gerne das Gewicht eines vortrainierten Modells verwenden, um mein eigenes Modell über Python zu optimieren (ich benutze Keras + Tensorflow). Aber das vortrainierte Modell, das ich gerne benutzen würde, hat nur Caffemodell ... – Ruby

+0

Ja, dieses kaffe Ding funktioniert gut, wenn es aus irgendwelchen Gründen nicht funktioniert. Du kannst immer noch zu mrry repo auf github gehen und sein vgg16 anschauen Caffe zu Tensorflow Code ist es ziemlich einfach, die Umwandlung zu tun, wenn Sie Pycaffe gebaut haben. – jean

+0

Vielen Dank! Vgg16 ist was ich sehe. – Ruby

Antwort

2

Wie es passiert, hat Ethereon eine wunderbare Bibliothek namens caffe-tensorflow gemacht, um Caffe-Modelle in Tensorflow-Code umzuwandeln, aber das ist nicht alles! Es ermöglicht dem Benutzer auch, .caffemodel Dateien in .npy Dateien zu konvertieren, ohne Pycaffe zu bauen! Es testet, ob Caffe gebaut wurde und wenn nicht, greift es auf eine reine Google-Protobuf-Implementierung zurück.

3

Heutzutage kann Caffe die Gewichte in zwei Formaten speichern: BINARYPROTO oder HDF5. Binärgewichte Dateien mit der Erweiterung .caffemodel sind im Format BINARYPROTO, während die Erweiterung .caffemodel.h5 im HDF5-Format sind. Da das HDF5-Format vor kurzem in Caffe eingeführt wurde, erwarte ich, dass die meisten Modelle, auf die Sie im "Modell-Zoo" stoßen, im eher "traditionellen" BINARYPROTO-Format sind.

Wenn die Gewichtungen im HDF5-Format gespeichert sind, können Sie sie unter Verwendung des h5py Pakets auswählen. Das BINARYPROTO-Format basiert jedoch auf einer binären Serialisierung des Google-Protokollpufferformats, das durch definiert wird. Ich bin kein Experte in Protokoll-Puffer, aber ich vermute, Sie haben eine wirklich harte Zeit Entschlüsselung der Binärdatei ohne explizit "kompilieren" die caffe.proto protobuf Definitionsdateien (die Teil von Caffe Build ist).

Ich nehme an, der einfachste Weg, um in die Gewichte zu wählen, ist durch die Installation von Caffe und die Verwendung seiner Python/C++ - Schnittstelle. Warum tust du das nicht einfach?

+0

Ich wusste nicht, dass Caffe begann, hdf5 zu benutzen Ich weiß von h5py und es ist großartig, dass ich es sehr oft benutze, seit ich davon erfahren habe. Ja, ich denke, die Antworten zu sehen, es muss nicht einfach sein, Google-Protokoll-Puffer zu parsen, oder zumindest habe ich nicht die Gewissheit, dies zu tun. Danke für deine Antwort. Ich werde versuchen, ein neues Modell mit der Endung .h5 zu finden, oder ich werde pycaffe verwenden, wenn es kein Entrinnen gibt. – jean

+0

. @ Shai - Wenn ich das von 'Caffe' erzeugte Log analysiere, dann bekomme ich' Lernrate' und 'Verlust'.Wenn sich diese nicht bei jedem neuen Lauf von "Caffe" ändern, ist es richtig anzunehmen, dass "Gewichte", die in ".caffemodel" für verschiedene Läufe gespeichert sind, genau gleich sind? –

+0

@ChetanArvindPatil warum sollten sie gleich sein? Selbst wenn der Verlust derselbe ist, bedeutet dies nicht notwendigerweise, dass die * Gradienten * Null sind. – Shai

1

Ich verstehe nicht, warum Sie das ohne caffe/pycaffe machen wollen, vielleicht sind Sie es leid, coffe auf einer neuen Maschine zu installieren? Da das Caffemodel jedoch ein spezieller binärer Datentyp ist, macht das Verwenden anderer Tools das Leben nicht einfacher.

Wenn Sie darauf bestehen, dies zu tun, gibt es ein anderes Framework: Mocha on Julia, die eine Methode zum Extrahieren von Caffemodel zu hdf5 bietet. Ich hoffe, das könnte dir helfen.

+0

Es ist in der Tat Caffes Installation, die ein bisschen gruselig ist, ich habe es gerade auf meinem persönlichen Computer installiert und pycaffe gebaut, aber nie die Installation getestet (abgesehen davon, dass Import Caffe ohne Fehlermeldungen zu schreiben). Außerdem verwende ich nur wenige andere Frameworks und könnte den freien Speicherplatz nutzen. Ich werde einen Blick in Mocha auf Julia werfen, aber ich wette, dass du Julia installieren musst ... Es ist schade, dass es keinen einfachen Weg gibt, es mit reinem Python durchzubeißen. – jean

+0

Danke für Ihre Antwort! – jean