2018年8月30日 星期四

筆記:Porting AI ( QCS605 QCS603 & Android )

  • 深度學習概念(連結)
  • CNN及眾多應用(連結)
  • RNN及眾多應用(連結)
  • TensorFlow安裝(連結)
  • TensorFlow語法與使用(連結)
  • Porting AI ( QCS605 QCS603 & Android )(連結)


深度學習程式,都需要伺服器等級主機來處理大量運算。但在這幾種狀況如,安全考慮資料不能外流(保全),必須減少網路資料傳輸量(影像影片資料檔案太大),需要即時反應(自動駕駛),這三種狀況下,都需要在終端裝置完成深度學習的結果分析。

成功的Deep Learning包含三部分,資料來源、演算法和面向使用者的設備,前兩項不是我們的強項。第三項,微型Deep Learning裝置的製造,或許是我們的機會。試想,當無人機可辨識前方景物、保全系統可由臉部辨識追蹤人員進出、工廠產線可自動辨識產品瑕疵,這些技術上已經成熟,卻受限於現今IOT裝置效能,類似QCS605等裝置普及後,將會產生多少科幻小說中才會出現的應用。

雖然我的專長不是人工智慧,而且這幾年精力都消耗在冗長的醫療開發流程中,感覺是有些心有餘力不足,不過基本的好奇心還是有的,且身邊就有QCS,就先架設起環境,且戰且走。初期先從Caffe和TensorFlow針對iOS和Android平台移植方案入手,將原本在伺服器主機執行的測試功能移植到手機等小型裝置。

QCS605 603



圖片來原
公司最近投入精力,為高通兩款新世代晶片QCS605和QCS603,開發從EE到SW的整合方案(連結)。對ODM廠來說,類似開發流程並不少見,但此次高通QCS605和QCS603較特殊,挾著IOT、專業影像和專屬AI三大功能,尤其強調AI效能有顯著提昇,消息一出,自然吸引許多品牌大廠的眼球,紛紛前來探詢這個整合方案的可用性。

QCS605和QCS603究竟有何特色,又要如何使用呢?回答這問題之前,要先有深度學習基本概念,才能評估深度學習程式在一般手持裝置運行狀況,最後才是在QCS605和QCS603上驗證執行成效。

高通為自家晶片開發專有類神經網路Qualcomm Neural Processing SDK,包括Snapdragon 845, 820, 835, 632, 625, 626, 650, 652, 653, 660, 630, 636, 450, 439, and 429。
高通QCS605 QCS603,特別考量IOT使用場景,特別針對影像和AI推出高效晶片。介紹
    1)Getting Started  連結 連結
    2)API Detail 連結


移植Android平台TensorFlow版本


MNIST
參考範例mnist範例。其他 MNIST範例1  MNIST範例2
test13.py以CNN為基礎,可以在loal製造graph.db。

作業步驟
  1. 下載github範例
  2. TRAIN部分,在根目錄執行test13.py,會執行train和test,並且在最後產生graph.pb檔案。
    附帶值得一提是,可用test14.py觀察graph.pb檔案(用TensorBoard打開它)
    步驟一,python test14.py --model_dir graph.pb --log_dir tensor/logs/convnet/
    步驟二,tensorboard --logdir=tensor/logs/convnet/
    步驟三,由瀏覽器開啟http://localhost:6006/。透過瀏覽器的互動觀察,可發現pb檔案中,不僅包含input到conv2d等等的處理過程,也包括teain時設定的各層和降階方式。所以測試程式難度比想像要單純,會寫訓練程式就一定能寫測試程式。
  3. ANDROID部分,以android studio直接匯入,必須經歷gradle更新下載,sync,ndk更新等等,逐一排除仍有問題,新生成空白專案my application4,用加入的方式。
  4. app程式和tensorflow溝通,需要二個基本檔。案,libandroid_tensorflow_inference_java.jar和更底層的.so。
  5. so會因為不同建製環境而有不同(這部份耽誤非常久),名稱都是libtensorflow_inference.so,參考下圖,目前手邊機器是Note8是屬於arm64-v8a,so檔案是tensorflow最基本由C移植過來的程式,當然可以自己編譯,但大多數都是用預先編譯好的版本
  6. libandroid_tensorflow_inference_java.jar,是JAVA和so版本的中間溝通層,由google提供,經過幾個版本後,使用方式已經慢慢穩定,相關介紹,基本API是
  7. import org.tensorflow.contrib.android.TensorFlowInferenceInterface;
    init
        private TensorFlowInferenceInterface tfHelper;
        c.tfHelper = new TensorFlowInferenceInterface();
        c.tfHelper.initializeTensorFlow(assetManager, modelPath)
    run test
        tfHelper.fillNodeFloat(inputName, new int[]{inputSize * inputSize}, pixels);
        tfHelper.runInference(outputNames);
        tfHelper.readNodeFloat(outputName, output);
     


手機執行tensorflow程式


yolo
參考範例
目前正在進行tensor目錄下Yolo-Android-master的porting,遇到很多問題
發現主要是r18版本後,ndk編譯有問題 文字描述
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android 應該是r18版本之後的問題
file - project structure - project-  4.6   3.2.1 兩種版本,其他讓需要更新處全部依照建議更新
就可port到手機順利多物件同時偵測



電腦和運動鞋
從程式角度來看,有幾個要處理問題
1.為什麼沒有 libtensorflow_inference.so
2.因為速度關係,所有的範例都使用了object track,事實上可以移除
3.換上自己的pb檔案 多增加物件進行測試
4.仔細看code

其他: 版本    yolo版本,使用pb檔案  yolo2版本


Caffee準備資料

範例連結

Movidius MA2450 : AIY

範例

沒有留言:

張貼留言