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