Caffe-Python介面常用API參考
阿新 • • 發佈:2018-12-18
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))
參考: