關於將tensorflow進行安卓模型遷移的基礎思路以及核心程式碼解析 -tensorflowinferenceinterface
以SRCNN模型為例:
1.以三色通道為基礎:
模型遷移整體流程(舊):
- 將灰度化後的圖片裁剪成n個33*33的小塊
- 將每個圖片小塊轉化為float陣列
- 將每個float陣列依次輸入至模型中
- 模型將每個小塊陣列進行模型處理,處理結果依次儲存在一個大float陣列 中,最後這個大陣列就是最終的處理結果。
- float陣列轉圖片。以下僅為個人想法,未經實踐。
第一種,將float陣列轉為mat物件,然後將mat物件直接轉化為byte陣列進行byte流輸出圖片。此種方法將MAT物件作為中介,難處是float和Mat這兩個的互相轉化,有些理不清,網上資料也很少。並且在轉化過程中會損失一點清晰度。
第二種方法,將float轉化為Mat物件,用imwrite直接將Mat物件儲存為圖片在記憶體中,再將圖片從相簿取出來放進軟體。困難在於float轉Mat沒整出來,imwrite是opencv的一個儲存函式。
總而言之,float轉Mat是我這兩種方法的關鍵之處,而第二種損失最少,最簡單,但是會加大一丟丟執行時間(可能也不到1s)。
2.以Y通道為基礎:
模型遷移整體流程(新):
- 將圖片陣列的Y通道單獨提取出來,做成float陣列
- 將Y通道的這個陣列傳入模型。經過運算儲存。
- 將新的Y通道陣列直接更新到圖片陣列上去
- 陣列轉圖片
第二種方法如今比較通用,對比第一種方法,第二種方法更加快速和容易實踐。
遷移模型所用到的tensorflowinferenceinterface核心程式碼:
Tensorflowinferenceinterface tf;
static {
//System.loadLibrary("tensorflow_inference");
}
//載入個靜態庫
public void predict1(String blankimage) {
tf.feed(INPUT_NAME,floatValues,1,33,33,1);
//將程式碼feed(喂)進介面,
//inferenceInterface.feed(inputName, floatValues, 1, inputSize, inputSize, 3);
//InputName是輸入節點的名稱,floatValues是圖片的float陣列,在前面已經定義過
/**inputSize, inputSize, 3是輸入節點的shape,floatValues陣列的大小是inputSize*inputSize*3;
輸入的圖片為33 * 33,維度根據輸入資料確定**/
tf.run(new String[]{OUTPUT_NAME});
//執行模型. 定義一個叫OUTPUT_NAME的陣列,並儲存結果。這個只要名字寫對就ok
tf.fetch(OUTPUT_NAME,PREDICTIONS);
//將模型fetch(取)出來,並儲存在PREDICTION這個float陣列裡,OUTPUT_NAME是輸出節點名
}
具體模型遷移過程會在專案完成後詳細理一遍。
相關文章
- TensorFlow Hub--用一行程式碼完成遷移學習行程遷移學習
- [譯] 系列教程:如何將程式碼遷移至 TensorFlow 1.0
- 跪求關於〖執行緒遷移〗的相關資料!執行緒
- 關於行連結和行遷移和消除
- 在安卓上執行TensorFlow:讓深度學習進入移動端安卓深度學習
- 一次基於AST的大規模程式碼遷移實踐AST
- 線上redis遷移思路Redis
- [高翔]關於卷遷移的整理
- [原始碼解析] TensorFlow 分散式 DistributedStrategy 之基礎篇原始碼分散式
- 基於Mindspore2.0的GPT2預訓練模型遷移教程GPT模型
- 遷移學習系列---基於例項方法的遷移學習遷移學習
- 關於 Laravel 遷移遇到的問題Laravel
- 關於禪道的資料遷移
- 基於VGG的遷移學習遷移學習
- 使用DistCp將Hadoop進行雲遷移時注意事項TCPHadoop
- 基於Tensorflow影像分類模型的微服務模型微服務
- [原始碼解析] 模型並行分散式訓練Megatron (1) --- 論文 & 基礎原始碼模型並行分散式
- 關於《Python基礎教程第二版》中4-1程式碼的改進Python
- 將ABAP On-Premises系統連線到中央檢查系統以進行自定義程式碼遷移REM
- 【效能優化】消除行連結和行遷移的思路和方法優化
- 一文詳解TensorFlow模型遷移及模型訓練實操步驟模型
- 使用RMAN進行資料遷移
- 今天晚上進行資料遷移
- 昇騰遷移丨4個TensorFlow模型訓練案例解讀模型
- Go modules基礎精進,六大核心概念全解析(上)Go
- 關於Oracle資料庫中行遷移/行連結的問題Oracle資料庫
- 使用JAXP對xml文件進行DOM解析基礎XML
- 【效能最佳化】消除行連結和行遷移的思路和方法
- 基於飛槳復現 SRGAN 模型,對影像進行超解析度重構模型
- java基礎 關於執行緒安全Java執行緒
- 使用 WebSphere CloudBurst 進行應用程式環境遷移(一)WebCloud
- 使用 WebSphere CloudBurst 進行應用程式環境遷移(二)WebCloud
- 關於hive的基礎Hive
- 關於如何提高銀行核心系統的業務連續性的幾點思路
- Laravel核心程式碼學習 — 模型關聯底層程式碼實現Laravel模型
- Laravel核心程式碼學習 -- 模型關聯底層程式碼實現Laravel模型
- 『深度長文』Tensorflow程式碼解析(一)
- 『深度長文』Tensorflow程式碼解析(二)