Caffe: Como converter binaryproto em npy (como ilsvrc_2012_mean.npy)?

Criado em 3 abr. 2014  ·  9Comentários  ·  Fonte: BVLC/caffe

Quando executo o modelo ImageNet pré-treinado, descobri que o wrapper Python (wrapper.py) irá ler este arquivo:
python / caffe / imagenet / ilsvrc_2012_mean.npy
No meu entendimento, o arquivo é a versão numpy do arquivo "imagenet_mean.binaryproto".

  1. Alguém sabe como converter "imagenet_mean.binaryproto" em "ilsvrc_2012_mean.npy"?
  2. Se o arquivo médio ("ilsvrc_2012_mean.npy") for um parâmetro em imagenet_deploy.prototxt, será melhor?

Obrigada!

question

Comentários muito úteis

808

import caffe
import numpy as np
import sys

if len(sys.argv) != 3:
print "Usage: python convert_protomean.py proto.mean out.npy"
sys.exit()

blob = caffe.proto.caffe_pb2.BlobProto()
data = open( sys.argv[1] , 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( sys.argv[2] , out )

Todos 9 comentários

1: Para conversão binaryproto / numpy, consulte convert.py e suas funções de utilitário. Carregue o binaryproto em python, produzindo um blob, então chame blobproto_to_array e salve o array numpy como quiser (por exemplo, como um npy).

2: A média seria idealmente incorporada na definição da rede, de modo que não precise ser carregada para outro lugar. Há um trabalho em andamento # 148 # 244 e uma mudança planejada para um meio de canal que poderia ser facilmente escrito em prototxt (ou seja, cada canal teria um valor médio invariante de espaço, que tem desempenho comparável a uma média de imagem completa e simplifica o processamento) .

Caro Evan Shelhamer,

Obrigado pela ajuda! Eu li convert.py e descobri que a função 'blobproto_to_array'. Para converter o formato, acho que deveria ser:
Passo 1: dat = to_load_datum ('imagenet_mean.binaryproto')
Passo 2: arr = blobproto_to_array (dat)
Etapa 3: ny.save ('ilsvrc_2012_mean.npy', arr)
Como não estou familiarizado com datum e python o suficiente, não sei como carregar o arquivo 'imagenet_mean.binaryproto'. Você poderia gentilmente me fornecer algumas linhas de código para fazer isso? Obrigada.

O arquivo binaryproto é um protobuf para BlobProto . Consulte o tutorial protobuf python e faça from caffe.proto import caffe_pb2 para fazer um blob = caffe_pb2.BlobProto() .

Como uma dica para quem está lendo isso agora, o arquivo: convert.py não existe mais, em vez disso, sua função blobproto_to_array foi movida para o módulo caffe.io .

Acho que @mezN significa o módulo caffe / python / caffe / io.py

808

import caffe
import numpy as np
import sys

if len(sys.argv) != 3:
print "Usage: python convert_protomean.py proto.mean out.npy"
sys.exit()

blob = caffe.proto.caffe_pb2.BlobProto()
data = open( sys.argv[1] , 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( sys.argv[2] , out )

onde estão todos esses arquivos? 404 ou não existe agora

As funções do utilitário para ler protofiles e gravá-los em outros formatos estão no módulo io. Você pode encontrar o código aqui:
CPP:
https://github.com/BVLC/caffe/blob/master/src/caffe/util/io.cpp
Pitão:
https://github.com/BVLC/caffe/blob/master/python/caffe/io.py

Muito obrigado a

Esta página foi útil?
0 / 5 - 0 avaliações