1. 程式人生 > >基於Caffe-Int8-Convert-Tools進行caffe模型轉int8量化日常記錄

基於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深度學習框架
以上都準備妥當了,那麼就可以進行模型的轉換了。

  1. 針對輸入為三通道模型
    若模型輸入為三通道影象直接根據官方教程直接轉換即可。
$ 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
  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模型)KerasCaffe教程

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