關於將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 分散式 DistributedStrategy 之基礎篇原始碼分散式
- 一次基於AST的大規模程式碼遷移實踐AST
- 基於VGG的遷移學習遷移學習
- 使用DistCp將Hadoop進行雲遷移時注意事項TCPHadoop
- 遷移學習系列---基於例項方法的遷移學習遷移學習
- 關於 Laravel 遷移遇到的問題Laravel
- 關於禪道的資料遷移
- 基於Mindspore2.0的GPT2預訓練模型遷移教程GPT模型
- 線上redis遷移思路Redis
- 將ABAP On-Premises系統連線到中央檢查系統以進行自定義程式碼遷移REM
- 昇騰遷移丨4個TensorFlow模型訓練案例解讀模型
- 一文詳解TensorFlow模型遷移及模型訓練實操步驟模型
- 關於安卓 sdk 測試安卓
- [原始碼解析] 模型並行分散式訓練Megatron (1) --- 論文 & 基礎原始碼模型並行分散式
- 用SVN遷移 程式碼並在pycharm中進行程式碼提交的詳細配置PyCharm行程
- Laravel核心程式碼學習 — 模型關聯底層程式碼實現Laravel模型
- Laravel核心程式碼學習 -- 模型關聯底層程式碼實現Laravel模型
- 使用PyTorch進行主動遷移學習:讓模型預測自身的錯誤PyTorch遷移學習模型
- Go modules基礎精進,六大核心概念全解析(上)Go
- 關於安卓app的webview設定本地代理以及webview開發環境的搭建安卓APPWebView開發環境
- [譯] TensorFlow 教程 #08 – 遷移學習遷移學習
- [譯] TensorFlow 教程 #15 – 風格遷移
- 使用JAXP對xml文件進行DOM解析基礎XML
- java基礎 關於執行緒安全Java執行緒
- 關於vim看linux 核心原始碼時的程式碼補全Linux原始碼
- 基於飛槳復現 SRGAN 模型,對影像進行超解析度重構模型
- 關於hive的基礎Hive
- 使用LSTM模型做股票預測【基於Tensorflow】模型
- 如何將模型部署到安卓移動端,這裡有一份簡單教程模型安卓
- 【python基礎】input函式的基礎使用以及進階Python函式
- Laravel核心程式碼學習 -- Database 基礎介紹LaravelDatabase
- 安卓(Android)開發基礎知識安卓Android
- PaddleHub 1.0正式釋出: 一鍵模型載入,十行程式碼完成遷移學習模型行程遷移學習
- 深度學習趣談:什麼是遷移學習?(附帶Tensorflow程式碼實現)深度學習遷移學習
- 關於FFMPEG的解碼模型模型
- 執行緒和程式基礎以及多執行緒的基本使用(iOS)執行緒iOS