基於Caffe-Int8-Convert-Tools進行caffe模型轉int8量化日常記錄
最近在中低端嵌入式裝置上進行人臉識別移植,雖然針對模型引數儘量壓縮,但模型依然有6M左右,在低端嵌入式裝置上載入速度和執行速度都讓人淚流滿面。查閱資料後,目前針對嵌入式裝置可通過float32轉int8進行模型壓縮和速度提升,所以本人也進行了實驗,並將實驗過程進行記錄,分享給大家。
準備材料:
(1)測試網路的prototxt檔案
(2)訓練生成的caffemodel檔案
(3)驗證集影象檔案
(4)git clone https://github.com/lyk125/caffe-int8-convert-tools.git
(5)caffe深度學習框架
以上都準備妥當了,那麼就可以進行模型的轉換了。
- 針對輸入為三通道模型
若模型輸入為三通道影象直接根據官方教程直接轉換即可。
$ python caffe-int8-convert-tool.py --help
usage: caffe-int8-convert-tool.py [-h] [--proto PROTO] [--model MODEL]
[--mean MEAN MEAN MEAN] [--norm NORM]
[--images IMAGES] [--output OUTPUT]
[ --gpu GPU]
find the pretrained caffe models int8 quantize scale value
optional arguments:
-h, --help show this help message and exit
--proto PROTO path to deploy prototxt.
--model MODEL path to pretrained weights
--mean MEAN value of mean
--norm NORM value of normalize
- -images IMAGES path to calibration images
--output OUTPUT path to output calibration table file
--gpu GPU use gpu to forward
$ python caffe-int8-convert-tool.py --proto=squeezenet_v1.1.prototxt --model=squeezenet.caffemodel --mean 104 117 123 --images=ILSVRC2012_1k --output=squeezenet_v1.1.table --gpu=1
- 針對輸入為灰度影象模型
若模型輸入為灰度圖將需要修改caffe-int8-convert-tool.py檔案,共有兩處修改:
(1)由於灰度圖是沒有均值的 所以如果不加任何修改,會報Mean channels incompatible with input.所以做一下修改,遮蔽均值處理。
def network_prepare(net, mean, norm):
"""
instance the prepare process param of caffe network inference
Args:
net: the instance of Caffe inference
mean: the value of mean
norm: the value of normalize
Returns:
none
"""
print("Network initial")
#img_mean = np.array(mean)
# initial transformer
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
# convert shape from RBG to BGR
#transformer.set_transpose('data', (2,0,1))
# load meanfile
#transformer.set_mean('data', img_mean)
# resize image data from [0,1] to [0,255]
transformer.set_raw_scale('data', 255)
# convert RGB -> BGR
#transformer.set_channel_swap('data', (2,1,0))
# normalize
transformer.set_input_scale('data', norm)
return transformer
(2)將需要載入影象進行灰度化處理或者resize操作,以與網路模型相對應。
def net_forward(net, image_path, transformer):
"""
network inference and statistics the cost time
Args:
net: the instance of Caffe inference
image_path: a image need to be inference
transformer:
Returns:
none
"""
# load image
image = caffe.io.load_image(image_path)
# transformer.preprocess the image
# -------add code int here to gray or resize------
img_gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#-------------------------------------------------
net.blobs['data'].data[...] = transformer.preprocess('data',img_gray)
# net forward
start = time.clock()
output = net.forward()
end = time.clock()
print("%s forward time : %.3f s" % (image_path, end - start))
繼續執行程式碼,即可執行輸入為灰度圖的模型。
python caffe-int8-convert-tool.py --proto=squeezenet_v1.1.prototxt --model=squeezenet.caffemodel --mean 104 117 123 --images=ILSVRC2012_1k --output=squeezenet_v1.1.table --gpu=1
跑完之後就可獲得.table檔案。
最後,通過執行
./caffe2ncnn xx.prototxt xx.caffemodel yy.param yy.bin 256 xx.table
即可獲得壓縮之後的模型。本人壓縮後模型大小為1.6M。
相關推薦
基於Caffe-Int8-Convert-Tools進行caffe模型轉int8量化日常記錄
最近在中低端嵌入式裝置上進行人臉識別移植,雖然針對模型引數儘量壓縮,但模型依然有6M左右,在低端嵌入式裝置上載入速度和執行速度都讓人淚流滿面。查閱資料後,目前針對嵌入式裝置可通過float32轉int8進行模型壓縮和速度提升,所以本人也進行了實驗,並將實驗過程進
基於駕駛行為資料的UBI車險模型(轉)
作者:陳星(中央財經大學統計與數學學院,北京) 潘蕊(中央財經大學統計與數學學院,北京) 黃亮(彩虹無線(北京)新技術有限公司,北京) 摘要:本文的研究內容為UBI車險業務。本文通過車輛前裝裝置採集駕駛行為資料,並與同期車輛出險情況建立Logistic迴歸
Caffe訓練個人資料並呼叫模型進行分類
最近有份作業,需要用到cafee做一些圖片分類方面的,用慣Tensorflow了就gg,圖片集用了華南理工大學的圖片集。 一開始的安裝由於我懶,所以讓個有經驗的同學幫我裝了下,本來想親力親為的我,真香 由於我之前裝了tensorflow-gpu,CUDA版本9.0,caffe現在好像支援最高
【TensorFlow】Caffe模型轉tensorflow模型並使用模型進行預測
做了一個Caffe模型轉tensorflow的實驗,把ResNet模型和prototxt轉為tensorflow模型和tensorflow程式碼,挺有意思的。 主要參考: https://my.oschina.net/yilian/blog/672135 這個開源專案
Caffe:利用訓練好的模型進行分類
以大神訓練好的模型為基礎,利用自己的資料進行了finetune之後,下一步就可以真正使用模型來進行分類操作了。具體步驟如下: 1. 編輯分類網路的配置檔案deploy.prototxt deploy檔案是真正使用模型時候用的,其結構與train_v
Ubuntu18.04下安裝配置Caffe-SSD-GPU版本並MNIST模型測試和matlab caffe介面測試
Ubuntu18.04->sogou->顯示卡驅動->matlab2018a->cuda9.0->cudnn5.01->opencv3.4.1->caffe opencv 和caffe 比較難裝。其中opencv最為慢,主要make 一次太久。
使用caffe的python介面進行特徵提取和人臉驗證,修改程式碼dis=1-dis 使用caffe的python介面進行特徵提取和人臉驗證
原 使用caffe的python介面進行特徵提取和人臉驗證 置頂 2017年03月09日 10:39:07 csuwujiyang 閱讀數:4
Caffe(13)--(SSRNet模型)Keras轉Caffe教程
SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation paper:https://github.com/shamangary/SSR-Net/blob/master/ijcai18_ssrnet_p
caffe 13 caffe vs2015 在tools中新增自己程式碼
01 使用cmake編譯的新增程式碼方式 閱讀caffe\tools\CMakeLists.txt # Collect source files file(GLOB_RECURSE srcs ${CMAKE_CURRENT_SOURCE_DIR}/*.c
學習Caffe(二)使用Caffe:Caffe載入模型+Caffe新增新層+Caffe finetune
如何使用Caffe 預備知識 Google Protocol Buffer https://developers.google.com/protocol-buffers/docs/cpptutorial Caffe資料的讀取、運算、儲存都是採
Caffe學習系列(1): 繪製網路模型
1、安裝必要的庫。 $ sudo apt-get install GraphViz $ sudo pip install pydot 2、繪製網路 引數說明: draw_net.py執行的時候帶三個引數 第一個引數:網路模型的prototxt
caffe----訓練自己的圖片caffenet模型
學習的caffe的目的,不是簡單的做幾個練習,而是最終落實到自己的專案或科研中去。因此,本文介紹一下,從自己的原始圖片到lmdb資料,再到訓練和測試的整個流程。 一、資料的準備 有條件的同學,可以去ImageNet的官網點選開啟連結,下載ImageNet
如何基於谷歌的最強 NLP 模型進行影評分析?
谷歌此前釋出的NLP模型BERT,在知乎、Reddit上都引起了轟動。其模型效果極好,BERT論文的作者在論文裡做的幾個實驗資料集都被轟平了。要做那幾個資料集的人可以洗洗睡啦,直接被明明白白地安排了一波。 坊間流傳BERT之於自然語言處理有如ResNet之於計算機視覺。谷歌還
python 進行caffe 資料視覺化的 “No to_python (by-value)” 問題解決
使用python 進行caffe 資料視覺化的時候可能會遇到下面的錯誤: No to_python (by-value) converter found for C++ type: boost::sh
caffe 模型轉tensorflow
下載模型轉換程式碼: caffe-tensorflow模型轉換檔案為convert.py,可以將caffe的模型定義檔案.prototxt和訓練好的模型分別轉換為tensorflow類,和tensorflow模型檔案.在example資料夾下提供了exam
caffe中 對caffemodel進行結構修改並儲存
問題綜述:利用matlab,在編譯matcaffe的前提下,對已有的caffemodel進行結構修改,例如,刪除一些層等 問題描述:在深度學習過程中,自己的目標任務往往需要基於物體識別等等其他任務的
使用python進行Caffe資料來源lmdb的製作
我們把需要做的資料放在Caffe_DataMaker 資料夾中,並且將資料按比例分為測試集資料夾train和訓練集資料夾val;在測試集資料夾中按照類別放在相應的資料夾中,資料夾命名為0,1,…..(從0開始命名),在測試集資料夾中進行同樣的操作,使用的pyth
[caffe]深度學習之影象分類模型VGG解讀
一、簡介 vgg和googlenet是2014年imagenet競賽的雙雄,這兩類模型結構有一個共同特點是go deeper。跟googlenet不同的是,vgg繼承了lenet以及alexnet的一些框架,尤其是跟alexnet框架非常像,vgg也是5個group的卷積、
Tensorflow模型轉caffe
整個過程可以分兩步: 找到對應的層名字(如:tensorflow 模型中的conv1_1和caffe中的conv1_1)。 把weights 和biases 中的值賦給相對應的層。賦值的時候要注意T
caffe隨記(八)---使用caffe訓練FCN的pascalcontext-fcn32s模型(pascal-context資料集)
本篇討論利用caffe進行FCN訓練(採用的是pascal-context資料集) 1、下載FCN的框架 如圖是我在windows下的檢視 因為不同的資料來源和不同的FCN型別的網路結構並不同,對資料來源的讀取方式也不同,因此有很多分支,本篇博文以pascalcont