【14】Caffe學習系列:計算圖片資料的均值
阿新 • • 發佈:2018-11-09
圖片減去均值後,再進行訓練和測試,會提高速度和精度。因此,一般在各種模型中都會有這個操作。
那麼這個均值怎麼來的呢,實際上就是計算所有訓練樣本的平均值,計算出來後,儲存為一個均值檔案,在以後的測試中,就可以直接使用這個均值來相減,而不需要對測試圖片重新計算。
一、二進位制格式的均值計算
caffe中使用的均值資料格式是binaryproto, 作者為我們提供了一個計算均值的檔案compute_image_mean.cpp,放在caffe根目錄下的tools資料夾裡面。編譯後的可執行體放在 build/tools/ 下面,我們直接呼叫就可以了,下面以mnist資料集為例。
# build/tools/compute_image_mean examples/mnist/mnist_train_lmdb examples/mnist/mean.binaryproto
帶兩個引數:
第一個引數:examples/mnist/mnist_train_lmdb, 表示需要計算均值的資料,格式為lmdb的訓練資料。
第二個引數:examples/mnist/mean.binaryproto, 計算出來的結果儲存檔案。
二、python格式的均值計算
如果我們要使用python介面,或者我們要進行特徵視覺化,可能就要用到python格式的均值檔案了。首先,我們用lmdb格式的資料,計算出二進位制格式的均值,然後,再轉換成python格式的均值。
我們可以編寫一個名稱為convert_mean.py的python指令碼來實現:
#!/usr/bin/env python import numpy as np import sys,caffe if len(sys.argv)!=3: print "Usage: python convert_mean.py mean.binaryproto mean.npy" sys.exit() blob = caffe.proto.caffe_pb2.BlobProto() bin_mean = open( sys.argv[1] , 'rb' ).read() blob.ParseFromString(bin_mean) arr = np.array( caffe.io.blobproto_to_array(blob) ) npy_mean = arr[0] np.save( sys.argv[2] , npy_mean )
呼叫格式為:
# python convert_mean.py mean.binaryproto mean.npy
其中的 mean.binaryproto 就是經過前面步驟計算出來的二進位制均值。
mean.npy就是我們需要的python格式的均值。