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".
Obrigada!
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
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
Comentários muito úteis
808