1. 程式人生 > >Caffe-Python介面常用API參考

Caffe-Python介面常用API參考

1、io.py原始碼解讀

主要是定義了一個transformer,preprocess和deprocess操作,完成caffe和python之間資料的格式轉換等, 注意caffe: BGR,0-255,C*H*W,而python是RGB, 0-1,H*W*C的資料格式,所以一般python讀取的圖片資料要轉換成適合caffe用的資料。

io.py中涉及的介面:

影象預處理

# 載入ImageNet訓練集的影象均值,預處理需要減去均值
# ilsvrc_2012_mean.npy檔案是numpy格式,其資料維度是(3L, 256L, 256L)
mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy') # 載入均值檔案
mu = mu.mean(1).mean(1)  # 對所有畫素值取平均以此獲取BGR的均值畫素值
print 'mean-subtracted values:', zip('BGR', mu) 
# 取平均後得到BGR均值分別是[104.00698793,116.66876762,122.67891434]

# 對輸入資料進行變換
# caffe.io.transformer是一個類,實體化的時候建構函式__init__(self, inputs)給一個初值
# 其中net.blobs本身是一個字典,每一個key對應每一層的名字,#net.blobs['data'].data.shape計算結果為(10, 3, 227, 227)
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})

# 以下都是caffe.io.transformer類的函式方法
#caffe.io.transformer的類定義放在io.py檔案中,也可用help函式檢視說明
# python讀取的圖片檔案格式為H×W×K(高度,寬度,通道數),需轉化為K×H×W(通道數,高度,寬度)
transformer.set_transpose('data', (2,0,1))    

transformer.set_mean('data', mu)              # 每個通道減去均值

# python中將圖片儲存為[0-1]
# 如果模型輸入用的是0~255的原始格式,則需要做以下轉換,將畫素值從[0,1]變換為[0,255]
# 如果模型輸入用的是0~1的格式,則不需要用到下一句
transformer.set_raw_scale('data', 255)

# caffe中圖片是BGR格式,而原始格式是RGB,所以要轉化
transformer.set_channel_swap('data', (2,1,0))

參考: