Caffe均值文件mean.binaryproto轉mean.npy

mean.binaryproto轉mean.npy

使用Caffe的C++接口進行操作時,需要的圖像均值文件是pb格式,例如常見的均值文件名爲mean.binaryproto;但在使用python接口進行操作時,需要的圖像均值文件是numpy格式,例如mean.npy。所以在跨語言進行操作時,需要將mean.binaryproto轉換成mean.npy,轉換代碼如下:

import caffe
import numpy as np

MEAN_PROTO_PATH = 'mean.binaryproto'               # 待轉換的pb格式圖像均值文件路徑
MEAN_NPY_PATH = 'mean.npy'                         # 轉換後的numpy格式圖像均值文件路徑

blob = caffe.proto.caffe_pb2.BlobProto()           # 創建protobuf blob
data = open(MEAN_PROTO_PATH, 'rb' ).read()         # 讀入mean.binaryproto文件內容
blob.ParseFromString(data)                         # 解析文件內容到blob

array = np.array(caffe.io.blobproto_to_array(blob))# 將blob中的均值轉換成numpy格式,array的shape (mean_number,channel, hight, width)
mean_npy = array[0]                                # 一個array中可以有多組均值存在,故需要通過下標選擇其中一組均值
np.save(MEAN_NPY_PATH ,mean_npy)

已知圖像均值,構造mean.npy

如果已知圖像中每個通道的均值,例如3通道圖像每個通道的均值分別爲104,117,123,我們也可以通過其構造mean.npy。代碼如下:

import numpy as np

MEAN_NPY_PATH = 'mean.npy'

mean = np.ones([3,256, 256], dtype=np.float)
mean[0,:,:] = 104
mean[1,:,:] = 117
mean[2,:,:] = 123

np.save(MEAN_NPY, mean)

載入mean.npy

上面我們用兩種方式構造了均值文件mean.npy,在使用時載入mean.npy的代碼如下:

import numpy as np

mean_npy = np.load(MEAN_NPY_PATH)
mean = mean_npy.mean(1).mean(1)
發佈了30 篇原創文章 · 獲贊 58 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章