2017-07-19 1 views
3

J'ai un fichier caffemodel qui contient des couches qui ne sont pas supportées par l'utilitaire de conversion caffe-tensorflow d'ethereon. Je voudrais générer une représentation numpy de mon caffemodel.Comment charger un modèle caffe et le convertir en un tableau numpy?

Ma question est, comment puis-je convertir un fichier caffemodel (j'ai aussi le prototxt, si cela est utile) à un fichier numpy? Informations supplémentaires: J'ai python, caffe avec interfaces python etc installé. Je n'ai clairement pas d'expérience avec le café.

Répondre

6

est ici une fonction bien qui convertit un filet caffe à une liste de python de dictionnaires, de sorte que vous pouvez décaper et lire de toute façon que vous voulez:

import caffe 

def shai_net_to_py_readable(prototxt_filename, caffemodel_filename): 
    net = caffe.Net(prototxt_filename, caffemodel_filename, caffe.TEST) # read the net + weights 
    pynet_ = [] 
    for li in xrange(len(net.layers)): # for each layer in the net 
    layer = {} # store layer's information 
    layer['name'] = net._layer_names[li] 
    # for each input to the layer (aka "bottom") store its name and shape 
    layer['bottoms'] = [(net._blob_names[bi], net.blobs[net._blob_names[bi]].data.shape) 
         for bi in list(net._bottom_ids(li))] 
    # for each output of the layer (aka "top") store its name and shape 
    layer['tops'] = [(net._blob_names[bi], net.blobs[net._blob_names[bi]].data.shape) 
         for bi in list(net._top_ids(li))] 
    layer['type'] = net.layers[li].type # type of the layer 
    # the internal parameters of the layer. not all layers has weights. 
    layer['weights'] = [net.layers[li].blobs[bi].data[...] 
         for bi in xrange(len(net.layers[li].blobs))] 
    pynet_.append(layer) 
return pynet_