主要是定義了乙個transformer,preprocess和deprocess操作,完成caffe和python之間資料的格式轉換等,
注意caffe: bgr,0-255,c*h*w,而python是rgb, 0-1,h*w*c的資料格式,所以一般python讀取的資料要轉換成適合caffe用的資料。
python介面可以重點看[2][3]
net.params對應網路中的引數(卷積核引數,全連線層引數等),有兩個字典值,net.params[0]是權值(weights),net.params[1]是偏移量(biases),權值引數的維度表示是(output_channels, input_channels, filter_height, filter_width),偏移量引數的維度表示(output_channels,)
net.blobs對應網路每一層資料,對於每一層,都是四個維度:(batch_size, channel_dim, height, width)
import numpy as np # 載入numpy
import matplotlib.pyplot as plt # 載入matplotlib
%matplotlib inline # 此處是為了能在notebook中直接顯示影象
# rcparams是乙個包含各種引數的字典結構,含有多個key-value,可修改其中部分值
plt.rcparams['figure.figsize'] = (10, 10) # 影象顯示大小,單位是英吋
plt.rcparams['image.interpolation'] = 'nearest' # 最近鄰差值,畫素為正方形
plt.rcparams['image.cmap'] = 'gray' # 使用灰度輸出而不是彩色輸出
載入caffe
import sys
caffe_root = '../' # caffe根目錄,此處為相對路徑,如果失靈,可換成絕對路徑
sys.path.insert(0, caffe_root + 'python') # 載入caffe的python模組
import caffe # 載入caffe
import os
if os.path.isfile(caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'):
print 'caffenet found.'
else:
print 'downloading pre-trained caffenet model...'
!../scripts/download_model_binary.py ../models/bvlc_reference_caffenet
# 載入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的均值畫素值 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()
# 以下都是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))
參考:
pycaffe學習之(一):io.py原始碼解讀
caffe學習筆記(1)--python介面
caffe-python介面常用api參考
caffe中python介面的使用
caffe Python特徵抽取
caffe大家一般用到的深度學習平台都是這個,關於caffe的訓練通常一般都可以通過一些命令來執行,但是在deploy階段,如果是做實際的工程,那麼c 介面用得會相對比較多。但是caffe是支援python和matlab介面的,所以用python來做一些相關的特徵的處理以及額外的任務比較方便 這裡我...
Caffe Python特徵抽取
caffe大家一般用到的深度學習平台都是這個,關於caffe的訓練通常一般都可以通過一些命令來執行,但是在deploy階段,如果是做實際的工程,那麼c 介面用得會相對比較多。但是caffe是支援python和matlab介面的,所以用python來做一些相關的特徵的處理以及額外的任務比較方便 這裡我...
Caffe Python開發環境設定
由於安裝 python 的第三方庫的時候需要編譯,所以需要安裝下面兩個庫 sudo yum install python devel numpy設定virtualenv環境 virtualenv caffeenv cd caffeenv bin activate安裝 python 第三方庫 cd c...