MindSpore21天實戰營(1):基於MindSpore Lite開發目標檢測的安卓APP實戰

2021-02-15 胡琦
基於MindSpore Lite開發目標檢測的安卓APP實戰

「零」基礎的Copy攻城獅居然敢實戰MindSpore Lite開發目標檢測的安卓APP,誰給的勇氣?是梁靜茹嗎?

前言

大家好,我是Copy攻城獅胡琦,有幸參與華為業界首個全場景AI實戰營,今天是第1天學習,也是從小白到大牛邁出的第一步,俗話說「萬事難開頭,只怕有心人」,但願今天的實戰能一把過。先說說我的基本情況,本人男,今年27歲,屬猴,身高1米75,體重……不好意思,走錯片場了。說正經的,我是一隻前端猿,掐指一算這是我從業的第四個年頭了,對於AI、Python完全是小白,更別說全場景深度學習框架MindSpore,在此之前,只完成了「Hello MindSpore」--在華為雲虛擬主機上安裝MindSpore的Docker鏡像跑通了LeNet模型(視頻連結:https://www.bilibili.com/video/BV1Ga4y1L7kU ),實實在在的H(ello)W(orld)攻城獅。對於安卓開發,也是一知半解,儘管有豐富的React Native開發經驗,但涉及到APP原生開發,思維邏輯基本靠蒙,實現代碼基本靠抄。這次基於MindSpore Lite開發目標檢測的安卓APP實戰,我是十分有信心拿下的,要是不簡單怎麼可能放在第一課呢?不囉嗦,開始今日份的Copy學習吧!

準備

既然是端側AI(On-Device AI),本次用到的端側就是安卓設備啦。其他的我們按照實踐操作的流程捋一捋(感謝MindSpores實戰營助教的疼愛):

1️⃣模型訓練導出與轉換

需要具備的軟體基礎❶編程基礎(Python):參考連結:https://www.liaoxuefeng.com/wiki/1016959663602400/1017063413904832❷Docker基礎:參考連結:https://www.runoob.com/docker/docker-command-manual.html需要準備的硬體環境❶Ubuntu 16.04及以上 (GPU Cuda 10.1)

2️⃣端側推理框架編譯

需要具備的軟體基礎❶git及shell腳本命令基礎: 參考連結:https://www.runoob.com/git/git-tutorial.htmlhttps://www.runoob.com/w3cnote/shell-quick-start.html

需要準備的硬體環境❶Ubuntu 16.04及以上 (GPU Cuda 10.1)

3️⃣APP編譯與運行

需要具備的軟體基礎❶編程基礎(Java): 參考連結:https://www.runoob.com/java/java-tutorial.html❷Android基礎知識(開發工具也需準備): 參考連結:https://www.runoob.com/w3cnote/android-tutorial-intro.html需要準備的硬體環境❶Window / MacBook Pro❷安卓手機

直播地址:在B站搜索『MindSpore官方』帳號,進直播間上課:https://live.bilibili.com/22127570

為了整這個GPU環境,一宿沒睡,嘗試了各種方案,終於採用了論壇大佬的windows安裝wsl ubuntu的方案--在Win10遊戲本中搭建MindSpore-GPU的深度學習環境。雖然我的機器不是遊戲本,而且還是4年前的筆記本,為了信仰,值得冒險!當然整個過程也並不是順利,最終環境搭建還是失敗了,這次的確是硬體的問題。我那老人筆記本,在安裝完Ubuntu之後,硬碟空間不到1G了,儘管能安裝mindspore-gpu鏡像,但由於一些nvida的依賴無法再安裝,導致無法使用GPU。總體來說,社區大佬的指導是有意義的,如果想在windows上體驗mindspore-gpu,按照他的教程指導做就行了,前提是硬體最好足夠硬!雖然,本地搭建環境失敗,離成功可能只有1%,正是這1%讓我意識到:「有多大能耐,吃多少飯」,差點撐死了!當然,Copy攻城獅有個不服輸的個性--屢敗屢戰,無論走多少彎路,我依舊還能勉強堅持,於是轉戰雲環境,想通過ModelArts使用mindspore訓練一個模型出來,再進行轉換編譯給到安卓App端能夠調用,可惜,礙於自己的實力短缺,瞎折騰了幾天,最後萬念俱灰,只好悻悻離去,不經反問自己:小白學什麼AI?

儘管對訓練物體檢測模型並轉換編譯為mindspore-lite可用的這次實踐,最終以失敗告終,但是沒有澆滅我學習mindspore的熱情,起碼加持mindspore-lite的安卓應用我還是能跑起來的。對於從模型訓練到模型轉換再到編譯整個過程,我也算是有一定的理解了,下面基於小白的理解,回顧並鞏固一下Mindspore 21天訓練營的第一天學習。

模型訓練導出與轉換

鑑於我本地環境沒有搭建成功,我直接使用官網提供的預置終端模型--ssd.ms。訪問https://download.mindspore.cn/model_zoo/official/lite/可以獲取更多mindspore-lite模型,如googlenet、resnext50等。當然您還可以使用預置模型做遷移學習,以實現自己的模型,不過需要將模型導出為.mindir格式。然後使用MindSpore Lite模型轉換工具將.mindir模型轉換成.ms格式。Mindspore當前支持基於靜態圖,且不包含控制流語義的推理網絡導出。導出.mindir格式的代碼以resnet50為例:

from mindspore.train.serialization import export
import numpy as np
resnet = ResNet50()
# return a parameter dict for model
param_dict = load_checkpoint("resnet50-2_32.ckpt")
# load the parameter into net
load_param_into_net(resnet, param_dict)
input = np.random.uniform(0.0, 1.0, size=[32, 3, 224, 224]).astype(np.float32)
export(resnet, Tensor(input), file_name='resnet50-2_32.mindir', file_format='MINDIR')

然後我們還需要將.mindir模型轉換為端側可用的.ms模型,也就一行代碼的事:

./converter_lite --fmk=MINDIR --modelFile=ssd.mindir --outputFile=ssd.ms

不過這行代碼能夠正常的運行的基礎離不開基礎環境的搭建,由於我這邊沒有成功搭建環境,那就只能直接用官方提供的預置模型了。

端側推理框架編譯

轉換模型後執行推理前,我們可以使用Benchmark工具對MindSpore Lite模型進行基準測試。它不僅可以對MindSpore Lite模型前向推理執行耗時進行定量分析(性能),還可以通過指定模型輸出進行可對比的誤差分析(精度)。本次實踐由於環境受限,就沒有實操基準測試部分,有興趣的小夥伴請移步官方文檔,有詳細的指導。端側推理部分可以使用C++的Runtime或者java的Runtime進行推理,本次實踐採用MindSpore Lite C++ API(Android JNI)以及MindSpore Lite 目標檢測模型完成端側推理,代碼來自MindSpore gitee倉庫。大概涉及到以下幾個步驟:

文件準備

文件準備這裡我們配置MindSpore Lite依賴項和下載及部署模型文件。Android JNI層調用MIndSpore C++ API時需要引入相關的依賴,如MIndSpore Lite源碼編譯生成mindspore-lite-{version}-minddata-{os}-{device}.tar.gz庫文件包並解壓縮(包含libmindspore-lite.so庫文件和相關頭文件)。當然,源碼中提供download.gradle自動下載MindSpore Lite 版本文件,並放置在app/src/main/cpp/目錄下,如果您遇到自動下載失敗的情況可手動下載解壓並放置在對應的位置。此外還需在app/build.gradle文件中配置CMake編譯支持,以及arm64-v8a的編譯支持,最後還需在app/CMakeLists.txt文件中建立.so庫文件連結。同樣的在download.gradle文件中會自動下載模型文件並放置在app/src/main/assets目錄下,如自動下載失敗可手動下載模型文件。

讀取模型及創建會話

在MindSpore Lite中,模型文件是從模型轉換工具轉換得到的.ms文件。進行模型推理時,需要從文件系統加載模型,並進行模型解析。使用MindSpore Lite執行推理時,Session是推理的主入口,通過Session我們可以進行圖編譯、圖執行。儘管我是小白,不會寫也看不懂代碼,不過結合文檔說明勉強能找到代碼的注釋,那麼究竟要不要學C++呢?

圖編譯

在圖執行前,需要調用LiteSession的CompileGraph接口進行圖編譯,進一步解析從文件中加載的Model實例,主要進行子圖切分、算子選型調度。這部分會耗費較多時間,官方文檔建議LiteSession創建一次,編譯一次,多次執行。

輸入數據

在圖執行前,需要將輸入數據拷貝到模型的輸入Tensor。MindSpore Lite提供兩種方法來獲取模型的輸入Tensor:使用GetInputsByTensorName方法,根據模型輸入Tensor的名稱來獲取模型輸入Tensor中連接到輸入節點的Tensor;使用GetInputs方法,直接獲取所有的模型輸入Tensor的vector。本次實踐採用的是後者。此外通過MutableData方法進行數據拷貝。

圖執行及獲取輸出

MindSpore Lite會話在進行圖編譯以後,即可使用LiteSession的RunGraph進行模型推理。MindSpore Lite在執行完推理後,就可以獲取模型的推理結果,MindSpore Lite提供四種方法來獲取模型的輸出MSTensor。這裡使用GetOutputByTensorName方法,根據模型輸出Tensor的名稱來獲取對應的模型輸出MSTensor。

此外在src\main\cpp\ssd_util\ssd_util.cpp文件中我們還能進行設置輸出矩形框、置信度篩選等操作。

APP編譯與運行

APP編譯與運行不是本文的重點,鑑於本大獅有React Native的開發經驗,跑通安卓APP還算不是很吃力,基本只要環境到位、網絡到位,蹭蹭蹭一把梭!最後放上APP運行的結果吧,希望大家多多指點!最後希望參與MindSpore 21天實戰營的小夥伴都有收穫!

唯一的坑

坑,本地環境的安裝對於我來說全是坑,直到最後棄坑!所以,但從APP的編譯與安裝來說,唯一的一個坑就是:電腦千萬別開熱點!我遇到的問題jh就是電腦開了熱點運行APP就提示本機連接失敗,導致Build進行直接死掉。不知道有沒有遇到類似問題的小夥伴?關於AI學習,還請各位大佬多多指教!

相關焦點

  • MindSpore基於YOLOv3實現籃球檢測模型實戰
    「ModelArts + MindSpore」實戰YOLOv3籃球檢測Copy攻城獅人狠話不多,學AI
  • 第四期Barefoot Academy P4實戰特訓營圓滿落幕
    2020年1月9~11日,英特爾Barefoot與SDNLAB聯合舉辦的第四期Barefoot Academy-P4實戰特訓營在美麗的西湖畔舉行。P4實戰特訓營走進中國,P4語言主要貢獻者、業界Tofino交換晶片母公司英特爾Barefoot主講,理論+實操,課程及教材同步美國。講師根據國內市場P4的需求,對英文原版P4課程進行優化,提供有效的訓練策略,讓每一位學員都有足夠大的收穫;課程內容包括課堂理論授課和大量的動手實踐,實踐將在Tofino晶片模擬器環境中進行。
  • 「理論」+「實戰」,奧比中光3D視覺訓練營助力精英學子實力蛻變!
    2021年1月23日,為期5周的奧比中光3D視覺精英實戰訓練營圓滿收官。
  • 手機app是如何開發的,西安軟體開發app公司
    ,網際網路營銷的核心就是用戶,那麼開發app的話,都需要知道哪些知識呢?目前主流的智慧型手機分為2類,一類是基於蘋果IOS系統的app,一類是基於安卓系統的app,由於兩種不同系統app使用的開發工具和程式語言完全不一樣,所以在進行開發的時候,就需要開發兩個端的app,我們不知道自己的產品潛在用戶是安卓還是ios,所以為了更多限度的保留用戶,一般的app都是開發2個埠的。
  • 百度AI開發者實戰營第二季·北京站招募啟動,AI老司機了解一下?
    AI開發者們,百度AI開發者實戰營第二季來了,約嗎?4月20日,闊別6個月的百度AI開發者實戰營即將回歸,再次召集全國各地頂尖AI開發者,在北京「整裝待發」,準備起航。新一季的實戰營中,百度AI將與開發者、合作夥伴一起,用基於百度AI技術打造的產品或解決方案,展示AI商業化落地的成果。
  • 未雨綢繆 鄭州在航空港實驗區進行全員核酸檢測實戰演練 居民需要注意點啥?
    1月24日,鄭州市在航空港實驗區舉行新冠肺炎全員核酸檢測,這同時也是一次未雨綢繆式的應急實戰演練。截止中午十二點半,已完成現場採樣30餘萬人。
  • 從實戰演練看攻防對抗思維的轉變
    自第一次實戰攻防演練舉辦以來,藍隊從面對腳本漏洞、框架弱點、口令探測、欺騙釣魚等常規攻擊手段被動挨打淪陷,到「迫使」紅隊為搞定目標採用0day漏洞打擊、隱蔽身份、木馬工具繞過安全監測等強對抗手段。隨著每年紅藍兩隊對抗愈演愈烈,雙方的進攻與防禦水平不斷提高,相應的促使參演單位網絡安防理念也有了新的變化。
  • 頂尖高校及名企學員雲集,奧比中光3D視覺精英實戰訓練營正式開營
    12月18日,由奧比中光3D視覺開發者社區主辦,水木人工智慧學堂承辦的3D視覺精英實戰訓練營在深圳市南山區榮超高新區聯合總部大廈正式開營。來自清華大學、南方科技大學、深圳大學、上海交通大學、天津科技大學、武漢大學等國內學府及華為、騰訊、大族雷射等知名企業的學員相聚一堂。
  • 裕道樹社群營銷實戰訓練營第一期圓滿舉行
    原標題:裕道樹社群營銷實戰訓練營第一期圓滿舉行2020年07月04-05日,裕道樹第一期《社群實戰訓特訓營》在溫江皇冠假日酒店圓滿舉行。來自全國各地的300餘名學員參加了本次訓練營。
  • 安卓基於Linux開發,為什麼linux乾淨穩定,而安卓運行卡頓?
    眾所周知,Android系統是基於Linux內核開發的,是相較於Linux的乾淨、穩定、流暢等特性,android系統還是顯得比較臃腫而又烏煙瘴氣。那麼,同樣的內核,為什麼Linux乾淨穩定而安卓臃腫而又烏煙瘴氣呢?
  • 【開源推薦】進階實戰,從一款音樂播放器開始
    想想自己以前也是,當項目沒有什麼新任務的時候,想著自己寫一個實戰項目來來練練手,那拿什麼項目來練手呢?我覺得最好的項目就是自己寫一個音樂播放器。本篇文章就介紹幾個不錯的開源Android音樂播放器,UI美觀,代碼質量不錯,如果你正打算找一個項目練練手,那麼不妨去看看:1. Timber
  • 超級CSO | 潘立亞:紅藍對抗,攻防實戰
    前幾年做實戰比較多,後幾年做紅隊攻擊鏈比較多,現在做安全攻防相關規劃與設計,並更傾向於統籌視角,最大化發揮攻防團隊中的力量。深藍攻防實驗室,深信服專門進行攻防研究與紅隊實戰的團隊。研究內容包括:紅藍對抗、滲透攻擊鏈、通用漏洞分析與挖掘、武器開發等。作為攻擊隊參加各種實戰攻防演練,在國家級、省級、行業、央企內部等各類攻防演習中表現突出,名列前茅。
  • 優秀,成都二手交易平臺app安卓軟體開發公司
    成都二手交易平臺app安卓軟體開發公司選擇app開發好還是開發小程序好?開發app有哪些優勢?開發小程序有哪些優勢?比如,有客戶想開發個電商軟體,糾結的是要開發app還是小程序,很是猶豫不決,今天深圳app開發公司紅孩兒信息技術有限公司來與大家分享下這兩者之間哪個更勝一籌。選擇app開發好還是開發小程序好?
  • 《小米槍戰》實戰瞄準攻略 藍疊安卓模擬器助你精準操作
    原標題:《小米槍戰》實戰瞄準攻略 BlueStacks藍疊安卓模擬器助你精準操作   《小米槍戰》是由西山居研發,小米互娛發行的一款綠色公平競技3D槍戰手遊,也是小米電競首款戰略級產品。玩家可以自由探索遊戲世界,數十種遊戲模式和地圖任意選擇,還可以和好友組隊,一起玩策略、玩激情。
  • Elasticsearch 索引設計實戰指南
    本文主結合作者近千萬級開發實戰經驗,和大家一起深入探討一下Elasticsearch 索引設計......  索引設計的重要性  在美團寫給工程師的十條精進原則中強調了「設計優先」。 無數事實證明,忽略了前期設計,往往會帶來很大的延期風險。並且未經評估的不當的設計會帶來巨大的維護成本,後期不得不騰出時間,專門進行優化和重構。
  • 如何開展一場網絡安全實戰攻防演練?
    網絡安全實戰攻防演練是以獲取指定目標系統(標靶系統)的管理權限為目標的攻防演練,由攻防領域經驗豐富的紅隊專家組成攻擊隊,在保障業務系統穩定運行的前提下,採用「不限攻擊路徑,不限制攻擊手段」的貼合實戰方式,而形成的「有組織」的網絡攻擊行動。
  • MindSpore可視化工具使用指南
    當前mindspore提供既提供了SGD,又提供了momentum 我認為主要的區別有以下幾點: 從設計思路上來說,TensorBoard主要以插件化的形式來進行構建,它的好處是開發比較方便,功能解耦比較清楚。開發一個新功能,可以很快在TensorBoard添加一個新的頁籤。
  • 25本《Python+TensorFlow機器學習實戰》免費包郵到家!
    致力於人工智慧的研究,對機器學習的原理、開發框架及其在不同場景中的應用有濃烈興趣,在圖形識別、文本識別、語音識別、數據挖掘方面有豐富實踐經驗,參與基於機器學習的用戶行為分析及某省部級項目研究。>1.3.1 主流框架的對比 71.3.2 TensorFlow的發展 91.3.3 使用TensorFlow的公司 101.4 TensorFlow環境準備 101.4.1 Windows環境 111.4.2 Linux環境 211.4.3 Mac OS環境 221.5 常用的第三方模塊 22
  • mmdetection使用目標檢測工具箱訓練,測試
    PyTorch 的檢測庫——mmdetection。商湯科技和港中大組成的團隊在 2018年的COCO 比賽的物體檢測(Detection)項目中奪得冠軍,而 mmdetection 正是基於 COCO 比賽時的 codebase 重構。https://github.com/open-mmlab/mmdetection這個開源庫提供了已公開發表的多種視覺檢測核心模塊。
  • 史上最實戰的網際網路轉型課:小米顧問金錯刀&小米移動電源創始人張峰
    微創新總裁實戰營•第16期:3月21-22日/北京2天1夜微創新方法論 •小米從0到800億的內部心法 • 移動網際網路爆品戰略實戰秘笈忘掉網際網路思維吧,趕緊網際網路行動!金錯刀+小米移動電源案例=史上最接地氣的移動網際網路實戰課!