基于深度学习的车型识别APP
文章目錄
- 簡介
- 最終效果
- 模型訓練精度
- 掃一掃識別功能
- 使用的技術&框架
- 軟/硬件需求
- 機器要求
- 開發工具
- 數據集
- 各模塊介紹
- 模型訓練
- 數據抓取
- 模型移植
- 安卓界面&數據走向
- 使用方式
- 啟動模型訓練
- 重新開始新的訓練
- 使用上次訓練結果繼續訓練
- 模型移植
- 項目定制化
- 啟動APP
簡介
通過深度學習技術搭建殘差網絡,使用CompsCars數據集 進行車型識別模型的訓練,并將訓練好的模型移植到了Android端,實現了通過手機掃一掃的方式進行汽車車型識別的功能。
鑒于回復消息不及時,需要數據集的同學,請自行關注公眾號: 小張睡不飽
回復:車型識別數據集 即可獲得下載鏈接[OK]
項目涉及到的技術點較多,需要開發者有一定的技術功底。如:python語言的使用、深度學習框架pytorch的使用、爬蟲腳本的理解、Java語言的使用、Android平臺架構的理解等等。
雖然屬于跨語言開發,但是要求并不高,只要達到入門級別即可看懂本項目,并可以嘗試一些定制化的改造。畢竟框架已經搭建好了,只需要修改數據源、重新訓練出模型,就可以實現一款新的應用啦。
最終效果
以下視頻將展示所有功能完成后的APP的使用情況。
https://www.bilibili.com/video/BV1Pk4y1B7qK
模型訓練精度
以下是使用Resnet-34進行400次車型識別訓練的 train-validation圖表。
以下是使用Resnet-34進行400次車型識別訓練 Top-1的錯誤率。
以下是使用Resnet-34進行400次車型識別訓練 Top-5的錯誤率。
訓練模型結果: https://upload.csdn.net/creation/uploadResources/85267140
掃一掃識別功能
以下是移植到android平臺后進行識別的結果展示圖。
使用的技術&框架
- 開發語言:Python、Java
- 技術框架:pytorch、resnet-34、Android平臺
- 可選借助平臺:百度AI平臺
- 項目構成:模型訓練項目、爬蟲項目、APP開發項目
軟/硬件需求
機器要求
因為涉及到機器學習模型訓練,所以你應該擁有一臺用來訓練模型的機器,且需要搭載支持CUDA的GPU(如:GeForce、GTX、Tesla等),顯存大小,自然是越大越好。
本人項目環境:
- windows10 專業版;GeForce MAX150;獨顯 2G;1T硬盤
也就是說這是最低配了,你至少要和我同一配置。
開發工具
- Pycharm:用來訓練模型、pyhton爬蟲、模型移植腳本
- Android Studio:用來開發安卓APP
數據集
數據集是項目最重要的一部分,有了數據集才能開始訓練
本項目使用的是 香港中文大學的CompCars細粒度汽車數據集。
需要的同學可以私聊找我要網盤鏈接。
各模塊介紹
模型訓練
Github 地址:pytorch_train 歡迎 star/issue
訓練模型主要分為五個模塊:啟動器、自定義數據加載器、網絡模型、學習率/損失率調整以及訓練可視化。
啟動器是項目的入口,通過對啟動器參數的設置,可以進行很多靈活的啟動方式,下圖為部分啟動器參數設置。
任何一個深度學習的模型訓練都是離不開數據集的,根據多種多樣的數據集,我們應該使用一個方式將數據集用一種通用的結構返回,方便網絡模型的加載處理。
這里使用了殘差網絡Resnet-34,代碼中還提供了Resnet-18、Resnet-50、Resnet-101以及Resnet-152。殘差結構是通過一個快捷連接,極大的減少了參數數量,降低了內存使用。
以下為殘差網絡的基本結構和Resnet-34 部分網絡結構圖。
除了最開始看到的train-val圖表、Top-、Top-5的error記錄表以外,在訓練過程中,使用進度條打印當前訓練的進度、訓練精度等信息。打印時機可以通過上邊提到的 啟動器 優雅地配置。
以下為最終的項目包架構。
pytorch_train|-- data -- 存放讀取訓練、校驗、測試數據路徑的txt| |-- train.txt | |-- val.txt| |-- test.txt|-- result -- 存放最終生成訓練結果的目錄|-- util -- 模型移植工具|-- clr.py -- 學習率|-- dataset.py -- 自定義數據集|-- flops_benchmark.py -- 統計每秒浮點運算次數|-- logger.py -- 日志可視化|-- mobile_net.py -- 網絡模型之一 mobile_net2|-- resnet.py -- 網絡模型之一 Resnet系列|-- run.py -- 具體執行訓練、測試方法|-- start.py -- 啟動器數據抓取
Github 地址:crawer/dongchedi 歡迎 star/issue
最終獲取的數據如下圖:
模型移植
Github 地址:pytorch_train/transfor
import osimport torch import torchvisionmodel_pth = os.path.join("results", "2020-04-27_10-27-17", 'checkpoint.pth.tar') # 將resnet34模型保存為Android可以調用的文件 mobile_pt = os.path.join("results", "2020-04-27_10-27-17", 'resnet34.pt') num_class = 13 device = 'cpu' # 'cuda:0' # cpumodel = torchvision.models.resnet34(num_classes=num_class) model = torch.nn.DataParallel(model, [0]) model.to(device=device)checkpoint = torch.load(model_pth, map_location=device) model.load_state_dict(checkpoint['state_dict'])model.eval() # 模型設為評估模式 # 1張3通道224*224的圖片 input_tensor = torch.rand(1, 3, 224, 224) # 設定輸入數據格式 traced_script_module = torch.jit.trace(model.module, input_tensor) # 模型轉化 traced_script_module.save(mobile_pt) # 保存文件安卓界面&數據走向
Github 地址:carIdentify 歡迎 star/issue
實現了以下功能:
- 調用攝像頭權限自動申請
- 攝像頭預覽
- 讀取pytorch訓練模型
- 調用第三方接口,精準預測
最終界面展示:
安卓項目結構如圖:
使用方式
啟動模型訓練
啟動前需要確保你已經有了本項目使用的數據集 CompCars
重新開始新的訓練
python start.py --data_root "./data" --gpus 0,1,2 -w 2 -b 120 --num_class 13- –data_root 數據集路徑位置
- –gups 使用gpu訓練的塊數
- -w 為gpu加載自定義數據集的工作線程
- -b 用來gpu訓練的 batch size是多少
- –num_class 分類類別數量
使用上次訓練結果繼續訓練
python start.py --data_root "./data" --gpus 0,1,2 -w 2 -b 120 --num_class 13 --resume "results/2020-04-14_12-36-16"- –data_root 數據集路徑位置
- –gups 使用gpu訓練的塊數
- -w 為gpu加載自定義數據集的工作線程
- -b 用來gpu訓練的 batch size是多少
- –num_class 分類類別數量
- –resume 上次訓練結果文件夾,可繼續上次的訓練
模型移植
將訓練好的模型轉換為Android可以執行的模型
python transfor.py項目定制化
- 找尋自己的數據集
- 需要修改啟動腳本中 –num_class,模型類別
目前項目中具備很多備注記錄,稍加review代碼就可以理解,如有不清楚,可以私信詢問。
啟動APP
APP下載鏈接:https://pan.baidu.com/s/1X7tobj4R302WmGu116-2mg 提取碼: 1606
- 安裝完成后
- 同意調用系統相機權限
- 使用掃一掃對準汽車
- 稍后將會展示識別后的結果和識別的圖片
具體使用方式,可參見:https://www.bilibili.com/video/BV1Pk4y1B7qK
總結
以上是生活随笔為你收集整理的基于深度学习的车型识别APP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子发声设计实验
- 下一篇: 用php编写室友通讯录_使用 XML 和