使用ResNet50預置算法訓練美食分類模型-優化建議
632
2022-05-29
一、開通 NoteBook 實例
我們可以使用 ModelArts 的開發環境 Notebook ,也可以直接使用 ModelArts 開發工具 CodeLab,兩者本質都是使用 Jupyter 。目前推薦使用 CodeLab ,畢竟可以免費“續杯”,而且是 V100 的硬件。下面分別講解一下 Notebook 和 CodeLab 的使用。
1.1 Notebook
在 AI 開發過程中搭建開發環境、選擇AI算法框架、選擇算法、調試代碼、安裝相應軟件或者硬件加速驅動庫都不是容易的事情,使得學習 AI 開發上手慢門檻高。為了解決這些問題,ModelArts算法開發平臺簡化了整個開發過程,以降低開發門檻。 ModelArts集成了基于開源的Jupyter Notebook和JupyterLab,可為您提供在線的交互式開發調試工具。您無需關注安裝配置,在ModelArts管理控制臺直接使用Notebook,編寫和調測模型訓練代碼,然后基于該代碼進行模型的訓練。
1.1.1 初始化 Notebook
首先我們在左側導航欄中搜索并進入 ModelArts ,一般來說,我們常用的區域是北京四,因為北京四的版本及功能相對較新,資源也相對較多。這里為了方便演示,我選擇北京四,當我們第一次使用 ModelArts 需要授權,更多說明請參考 ModelArts 準備工作[1] 。每個用戶默認可創建 10 個 Notebook,其中免費算力的 CPU 和 GPU 環境各可創建 1 個 。
1.1.2 創建 Notebook
鑒于 darknet 環境需要依賴 GPU,因此我們將創建一個帶有 GPU 環境的 Notebook,默認有一個免費算力的 GPU 環境,以及 5GB 的存儲硬盤。
1.1.3 打開 Jupyter Lab
目前比較推薦使用 JupyterLab ,全新的、更高效的 Notebook 使用交互體檢。
1.1.4 環境檢查
通過 Terminal 輸入 nvcc -V 和 nvidia-smi 可以查看環境信息。
1.2 CodeLab
即開即用、用于機器學習的在線集成開發環境,可以輕松的構建、訓練、調試、部署機器學習算法與模型。當前使用免費規格用于體驗,值得注意的是 72 小時內沒用使用,會釋放資源,因此需要注意文件備份。
1.2.1 開啟 CodeLab
CodeLab 在 ModelArts 的總覽頁,屬于開發工具類,目前可以免費使用。
1.2.2 切換到 GPU 環境
CodeLab 默認是 CPU 的環境,我們需要手動切換到 GPU 規格。[Free] GPU: 1*V100(32GB)|CPU: 8vCPUs 64GB 這個配置還可以吧!
1.2.3 環境檢查
通過 Terminal 輸入 nvcc -V 和 nvidia-smi 可以查看環境信息。(cuda版本需匹配nvidia驅動版本)
上圖中 cuda 版本與 nvidia 驅動不匹配,可能會導致編譯之后的 darknet 運行報錯。
二、下載 darknet 源碼
接著我們需要獲取 darknet 的源碼來進行編譯, darknet 源碼地址是: https://github.com/pjreddie/darknet 。由于眾所周知的源碼,我們可以使用鏡像地址或者先將代碼拉取到 Gitee 再下載到 Notebook。
2.1 git clone
本次我們直接從鏡像地址獲取源碼:
cd work git clone https://github.com.cnpmjs.org/pjreddie/darknet.git
2.2 檢查文件
點擊刷新的按鈕可以查看到已經下載好的源碼文件。
三、編譯 darknet
在編譯 darknet 之前我們需要修改 Makefile 文件。
3.1 修改Makefile文件
3.2 執行 make 進行編譯
cd work cd darknet make
3.3 檢查編譯結果
至此,我們已經生成了可執行文件 darknet ,環境搭建完畢。接著我們試著準備數據集來驗證一下
3.4 常見問題
3.4.1 make: Nothing to be done for ‘all’.
此時執行 make clean 再 make 即可。
3.4.2 darknet: ./src/cuda.c:36: check_error: Assertion `0’ failed.
這是由于 cuda 和 NVIDIA 版本不匹配。鑒于 ModelArts 的 Notebook 環境中已經安裝了多個 cuda,我們可以通過腳本切換:
# 建立軟鏈接命令 sudo ln -snf xxx # 查看環境中有哪些cuda版本 ll /usr/local | grep cuda # 修改cuda版本的命令,其中version替換為對應的cuda版本 sudo ln -snf /usr/local/cuda-{version} /usr/local/cuda 修改之后再執行 make 進行編譯。
四、數據集處理
鑒于 darnet 需要特定的數據格式,借助腳本可以將 VOC 數據集處理成可適用的格式。
數據集見 AIGallery: https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=62ff868a-03e8-4627-a9c7-922d71aa1386
本操作指引為直接下載處理好的數據集來進行配置訓練。
4.1 下載數據集到 OBS
AIGallery 提供了豐富的數據集,我們可以下載自己所需要的數據集,對于一些平臺沒有的數據集,我們也可以將自己的數據集上傳到平臺設置為私有已減輕對 OBS 存儲的依賴。
4.2 通過 MoXing 下載 OBS 數據到 Notebook
MoXing 為海量數據訓練提供了便利的存儲服務,我們可以通過 MoXing 快速讀取 OBS 中的數據。比如:
import moxing as mox mox.file.copy_parallel('obs://huqi88/AIGallery/darknet-tools','darknet-tools') print('Done!')
4.3 簡單配置數據及訓練參數
cd work mv darknet-tools/VOC2007 darknet mv darknet-tools/cfg/voc2007.data darknet/cfg/voc2007.data mv darknet-tools/data/test.txt darknet/data/test.txt mv darknet-tools/data/train.txt darknet/data/train.txt mv darknet-tools/data/val.txt darknet/data/val.txt mv darknet-tools/data/voc.names darknet/data/voc.names
五、訓練
訓練時盡量先關閉其他任務,保證有充足的資源來運行訓練任務
./darknet detector train cfg/voc2007.data cfg/yolov3.cfg ../darknet-tools/darknet53.conv.74
訓練過程每隔100步保存一次訓練結果yolov3_100.weights,900次以后就不再保存,而是存在yolov3.backup中,在訓練結束時生成yolov3_final.weights。
六、預測
上傳一張測試圖片 test.jpg 到 darknet 目錄下,執行以下命令進行預測:
./darknet detector test cfg/voc2007.data cfg/yolov3.cfg backup/yolov3_final.weights test.jpg
結果如下圖:
參考鏈接
[1] https://gitee.com/ModelArts/ModelArts-Lab/tree/master/docs/ModelArts準備工作
AI AI開發平臺ModelArts 機器學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。