想學AI開發很簡單:只要你會複製貼上
摘要:本次實踐基於 mobilenetV2 實現貓狗影像分類,貫穿了資料集獲取及處理、預訓練模型微調及遷移、端側部署及推理等環節和知識點,體會到了 MindSpore 簡單的開發體驗和全場景快速部署的魅力。
- startTime: 2021年1月23日00:43:22
- endTime: 2021年1月23日11:34:44
(包含學習、睡覺、吃飯、爬坑、水文……的時間)
瞭解MindSpore開源生態
發現一個小秘密。 github 上多三個倉庫,是什麼呢?
此處應是 github 過濾的 bug ,實際上mindspore-ai 有 15 個倉庫, 比 gitee 多出來的三個是:
別看這 3 個不起眼的倉庫,在社群建設方面卻大有作為。比如,是我們之前參加 21 天實戰營的參考程式碼和指導文件,多麼寶貴的學習資料;另外兩個是 MindSpore 的開源基礎建設,其中 包含了用於配置 Mindspore 社群的所有必需 Dockerfile 和 YAML 檔案,並藉助 Github 的 Action 定時自動同步 Gitee 的程式碼到 Github 。
訓練時長截圖
手機識別截圖
學習總結
在學習之前我以為我會了,但真正實踐起來還是磕磕碰碰,所有的程式碼似曾相識,都是 26 個字母加一些符號組成,但真正去理解還是發現基本功不夠:一是不知道怎麼寫,二是不知道為什麼要這麼寫。儘管如此,我大概理順了整個實踐流程:訓練貓狗影像分類模型(雲端) --> 手機端推理及應用 --> 從 “1” 開始 Fine Tune 模型(本地) --> 手機端驗證 ,當然作為學渣,整個操作過程肯定不止一個小時, 深刻體會到“眼睛:學會了,腦子:學廢了!”,因此必須藉此帖記錄一下“學廢了”的過程:
目的
本次實踐基於 mobilenetV2 實現貓狗影像分類,貫穿了資料集獲取及處理、預訓練模型微調及遷移、端側部署及推理等環節和知識點,體會到了 MindSpore 簡單的開發體驗和全場景快速部署的魅力。
專案目錄
MindSporePetClassification ├─ ADB // 支援手機與電腦傳遞檔案工具 │ ├─ adb.exe │ ├─ AdbWinApi.dll │ ├─ AdbWinUsbApi.dll │ └─ fastboot.exe ├─ code // Fine tune訓練程式碼及資料集 │ ├─ dataset │ │ ├─ PetImages │ │ │ ├─ eval │ │ │ │ ├─ Cat │ │ │ │ └─ Dog │ │ │ ├─ train │ │ │ │ ├─ Cat │ │ │ │ └─ Dog │ │ ├─ MSR-LA - 3467.docx │ │ └─ readme[1].txt │ ├─ src │ │ ├─ __pycache__ │ │ │ ├─ args.cpython-37.pyc │ │ │ ├─ config.cpython-37.pyc │ │ │ ├─ dataset.cpython-37.pyc │ │ │ ├─ lr_generator.cpython-37.pyc │ │ │ ├─ mobilenetV2.cpython-37.pyc │ │ │ ├─ models.cpython-37.pyc │ │ │ └─ utils.cpython-37.pyc │ │ ├─ args.py │ │ ├─ config.py │ │ ├─ dataset.py │ │ ├─ lr_generator.py │ │ ├─ mobilenetV2.py │ │ ├─ models.py │ │ └─ utils.py │ ├─ mobilenetV2.ckpt // 預訓練模型檔案 │ ├─ preprocessing_dataset.py // 預先處理資料集指令碼 │ └─ train.py // 主訓練指令碼 ├─ converter // 轉換工具MindSpore Lite Converter │ ├─ converter_lite.exe │ ├─ libgcc_s_seh-1.dll │ ├─ libglog.dll │ ├─ libmindspore_gvar.dll │ ├─ libssp-0.dll │ ├─ libstdc++-6.dll │ └─ libwinpthread-1.dll └─ kagglecatsanddogs_3367a.zip
依賴安裝
本次實踐依賴opencv-python 和 matplotlib,一個用來處理圖形比如列印圖片和嵌入文字,一個用來將資料集以視覺化圖片的形式展現出來。
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
資料預處理
主要刪除一些不符合要求(如非JPEG格式)的圖片並分割 train 和 eval 資料集,預設9:1:
python preprocessing_dataset.py 您的路徑kagglecatsaData to Dragnddogs_3367a.zip
Fine tune
執行Fine tune指令碼train.py,並生成模型檔案:
python train.py
此時會彈窗提示6張圖片,這是因為指令碼會在正式訓練前從資料集中抽取6張圖片載入當前模型檔案,需要手動關閉才能繼續,這是 AI 很傻,全都識別成了 Dog 。
當然,我這邊由於機器的原因,沒少踩坑,這不“出師未捷身先死”,突然的報錯把我整蒙了,將所有num_parallel_workers引數設定為4之後,繼續訓練!
$ python train.py start cache feature! Traceback (most recent call last): File "train.py", line 52, in <module> data, step_size = extract_features(backbone_net, args_opt.dataset_path, config) File "F:dosomethingsserverlessModelArtsMIndSporeMindSporePetClassificationMindSporePetClassificationcodesrcdataset.py", line 84, in extract_features train_dataset = create_dataset(dataset_path=os.path.join(dataset_path, "train"), do_train=True, config=config) File "F:dosomethingsserverlessModelArtsMIndSporeMindSporePetClassificationMindSporePetClassificationcodesrcdataset.py", line 41, in create_dataset ds = de.ImageFolderDataset(dataset_path, num_parallel_workers=8, shuffle=True) File "C:UsershuqiAppDataLocalProgramsPythonPython37libsite-packagesmindsporedatasetenginevalidators.py", line 51, in new_method validate_dataset_param_value(nreq_param_int, param_dict, int) File "C:UsershuqiAppDataLocalProgramsPythonPython37libsite-packagesmindsporedatasetcorevalidator_helpers.py", line 352, in validate_dataset_param_value check_num_parallel_workers(param_dict.get(param_name)) File "C:UsershuqiAppDataLocalProgramsPythonPython37libsite-packagesmindsporedatasetcorevalidator_helpers.py", line 340, in check_num_parallel_workers raise ValueError("num_parallel_workers exceeds the boundary between 1 and {}!".format(cpu_count())) ValueError: num_parallel_workers exceeds the boundary between 1 and 4!
這一步耗時就和本地機器的效能有關了,我的粗糧渣渣機大概跑廢了。趁著訓練的空檔,學習了一些程式碼。作為新晉調參學徒,我大概知道引數和配置在codesrcargs.py和codesrcconfig.py這兩個檔案,而資料的載入在codesrcdataset.py這個檔案處理,codesrcmobilenetV2.py定義了模型,codesrcmodels.py這個檔案讀取和儲存模型並列印輸出訓練日誌。
訓練完成會,又會呼叫predict_from_net方法來顯示預測的圖片和標籤,這回我們發現 AI 挺棒的,全部識別正確! 當我滿懷信心點選關閉的時候,以為程式立馬會給我一個mobilenetv2.mindir,結果我又蒙了,返回了一串錯誤日誌!!!
early stop! the best epoch is 2 train total cost 4141.2663 s Traceback (most recent call last): File "train.py", line 81, in <module> export_mindir(net, "mobilenetv2") File "F:dosomethingsserverlessModelArtsMIndSporeMindSporePetClassificationMindSporePetClassificationcodesrcutils.py", line 93, in export_mindir export(net, Tensor(input_np), file_name=path, file_format='MINDIR') File "C:UsershuqiAppDataLocalProgramsPythonPython37libsite-packagesmindsporetrainserialization.py", line 535, in export Validator.check_file_name_by_regular(file_name) File "C:UsershuqiAppDataLocalProgramsPythonPython37libsite-packagesmindspore_checkparam.py", line 438, in check_file_name_by_regular target, prim_name, reg, flag)) ValueError: 'F:dosomethingsserverlessModelArtsMIndSporeMindSporePetClassificationMindSporePetClassificationcodemobilenetv2.mindir' is illegal, it should be match regular'^[0-9a-zA-Z_-./\]+$' by flags'256'
一開始我以為是檔案層級太深了,將檔案目錄遷移到盤的根目錄,重來重來!好在不需要再次載入資料集了,不然又得漫長的等待。 滿懷信心結果又被“啪啪啪”打臉,之後群裡請教一遍之後,王輝老師建議我把路徑改成檔名再試試,果然立馬奏效~
- path = os.path.abspath(f"{name}.mindir") + path = name
終於如願以償,codemobilenetv2.mindir她來了!
手機端推理及應用
- 訓練模型轉換
將.mindir模型檔案轉換成.ms檔案,.ms檔案可以匯入端側裝置並基於MindSpore端側框架訓練。
F:MindSporePetClassificationconverter>call converter_lite --fmk=MINDIR --modelFile=f:MindSporePetClassificationcodemobilenetv2.mindir --outputFile=pet
我們可以下載 MindSpore 官方提供的 Android APP 原始碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1727/viewspace-2796225/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習正則(告別複製貼上)
- 【從零開始學爬蟲】模板的複製與貼上爬蟲
- 複製貼上不了怎麼辦?Mac複製貼上不瞭解決方法Mac
- 思否有約丨夏磊:拒絕做只會“複製-貼上”的程式設計師程式設計師
- 破解“無法複製貼上”
- Delphi_Excel例子:單元格複製貼上 (轉)Excel
- 如何禁止網頁複製貼上?我學fei了網頁
- vue 中實現複製貼上Vue
- wordpress從word複製貼上公式公式
- vim總結貼上/複製篇
- 複製貼上Ctrl+C改為自定義單鍵
- 複習下 git,很簡單Git
- Mac開發_使NSTextField支援Cmd+C/V快捷鍵複製、貼上Mac
- 【C#學習筆記】文字複製到貼上板C#筆記
- clipboard.js無法複製貼上JS
- JavaScript實現複製和貼上功能JavaScript
- macOS如何複製貼上無格式文字Mac
- UILabel實現複製貼上功能UI
- Linux下複製貼上快捷鍵Linux
- 利用JS實現複製/貼上功能JS
- 電腦無法複製貼上怎麼回事?電腦無法複製貼上的解決方法
- 從零開始,開發一個 Web Office 套件(14):複製、貼上、剪下、全選Web套件
- excel篩選後複製貼上怎樣跳過隱藏行 如何只貼上到篩選出的部分Excel
- 把開發中常用class的整合成了一個包,避免每次重複複製貼上
- Linux的VI (刪除貼上,複製)Linux
- ClipboardJS複製貼上外掛的使用JS
- Linux 裡的複製與貼上 (轉)Linux
- vim複製文字到系統貼上板
- python3網路爬蟲開發實戰-線上版-可複製貼上Python爬蟲
- Python很簡單?學會魔術方法才算入門!Python
- win10 office word不能複製貼上怎麼辦_win10 office word不能複製貼上如何處理Win10
- cad複製快捷鍵命令 cad怎麼複製貼上圖形
- js複製文字到貼上板(Clipboard.writeText())JS
- 蘋果Mac電腦的複製貼上不能用蘋果Mac
- oracle erp不能和其他文件複製貼上Oracle
- 複製貼上程式碼真的有問題嗎?
- UE複製貼上二進位制檔案
- 在vSphere中實現複製貼上功能