我用AI回怼美女汽车销售系列[yolo车牌识别](二)
前期回顧:
在上一期介紹了事情的起因,為什么要做yolo車(chē)牌識(shí)別,以及最終的網(wǎng)絡(luò)結(jié)構(gòu)。(鏈接在這里:(141條消息) 我用AI回懟美女汽車(chē)銷(xiāo)售系列[yolo車(chē)牌識(shí)別](一)_cjnewstar111的專(zhuān)欄-CSDN博客https://blog.csdn.net/cjnewstar111/article/details/123160063)但是為了驗(yàn)證和編碼的方便,我們基于下圖的網(wǎng)絡(luò)結(jié)構(gòu)開(kāi)發(fā)。即將yolo檢測(cè)網(wǎng)絡(luò)和識(shí)別網(wǎng)絡(luò)分開(kāi),驗(yàn)證通過(guò)了,再將識(shí)別功能集成到y(tǒng)olo上面,這樣可以大大降低風(fēng)險(xiǎn)。回顧一下流程,首先圖片經(jīng)過(guò)檢測(cè)網(wǎng)絡(luò)YoloX,識(shí)別出藍(lán)牌或者綠牌。然后根據(jù)矩形框坐標(biāo)從原圖中剪裁出牌照?qǐng)D片,將裁剪出的藍(lán)牌圖片送入到藍(lán)牌分類(lèi)網(wǎng)絡(luò)進(jìn)行牌照的識(shí)別;綠牌則送入到綠牌分類(lèi)網(wǎng)絡(luò)進(jìn)行識(shí)別。本期將要根據(jù)開(kāi)源數(shù)據(jù)集CCPD,對(duì)三個(gè)網(wǎng)絡(luò)(YoloX車(chē)牌檢測(cè)網(wǎng)絡(luò)),藍(lán)牌識(shí)別網(wǎng)絡(luò)和綠牌識(shí)別網(wǎng)絡(luò)進(jìn)行訓(xùn)練。
?
檢測(cè)網(wǎng)絡(luò)訓(xùn)練
檢測(cè)網(wǎng)絡(luò)使用普通的目標(biāo)檢測(cè)網(wǎng)絡(luò)即可,這里我選擇YoloX。這是一個(gè)AnchorFree的Yolo系列,速度和精度都還不錯(cuò)。由于YoloX目標(biāo)檢測(cè)需要使用coco格式的數(shù)據(jù)集。因此需要將CCPD的格式進(jìn)行轉(zhuǎn)換。在上一期已經(jīng)介紹過(guò)CCPD通過(guò)文件名來(lái)標(biāo)注車(chē)牌信息。我們可以編寫(xiě)一個(gè)python腳本,將CCPD轉(zhuǎn)換成COCO格式。
?
轉(zhuǎn)換好之后,就可以使用YoloX進(jìn)行訓(xùn)練。可以直接使用YoloX官方的代碼進(jìn)行訓(xùn)練,也可以使用我之前開(kāi)源的YoloX EasyTrain進(jìn)行訓(xùn)練。我這里使用YoloX EasyTrain進(jìn)行訓(xùn)練,因?yàn)橹恍枰c(diǎn)點(diǎn)鼠標(biāo),并且所有配置信息可以在界面中編輯,而且訓(xùn)練過(guò)程中還有實(shí)時(shí)的曲線信息,非常的方便。在YoloX EasyTrain中新建一個(gè)工程:CCPD,然后選擇基于YoloX Nano(小模型訓(xùn)練快),然后配置一下CCPD的路徑(注意是轉(zhuǎn)換成coco格式的CCPD),點(diǎn)擊訓(xùn)練。出去喝一杯咖啡,再回來(lái)看看效果吧。
?
訓(xùn)練了5個(gè)epoch之后,map0.5以及map0.75已經(jīng)達(dá)到了0.99,精度是非常的高,那就直接停止訓(xùn)練,使用第5個(gè)epoch的結(jié)果來(lái)測(cè)試一下推理,看看從百度上隨意下載的圖片,能否準(zhǔn)確的檢測(cè)出車(chē)牌。效果非常理想!!!
?
藍(lán)牌網(wǎng)絡(luò)訓(xùn)練
首先對(duì)CCPD數(shù)據(jù)集進(jìn)行一個(gè)轉(zhuǎn)換。由于藍(lán)牌網(wǎng)絡(luò)輸入的是車(chē)牌圖片,而不是整張圖片。因此需要對(duì)CCPD進(jìn)行裁剪,裁剪出車(chē)牌圖片,然后進(jìn)行保存。可以寫(xiě)一個(gè)python腳本,進(jìn)行自動(dòng)的裁剪。裁剪后的圖片與原始圖片對(duì)比:
有了圖片就可以訓(xùn)練了,我這里使用shufflenetv2進(jìn)行車(chē)牌的分類(lèi)和識(shí)別。大家對(duì)分類(lèi)任務(wù)應(yīng)該非常熟悉,需要輸入多少個(gè)類(lèi)別,就讓shufflenetv2最終輸出多少維度的向量。由于藍(lán)牌識(shí)別需要對(duì)7個(gè)位置進(jìn)行分類(lèi),且每個(gè)位置有非常多的可能。例如省份有31中可能,而普通的字符位置有34種可能,那么我們就定義藍(lán)牌網(wǎng)絡(luò)最終的輸入是7*34維的向量。對(duì)于第一位的省份來(lái)說(shuō),34位是冗余的,因?yàn)槭》葜挥?1位,不過(guò)這沒(méi)有關(guān)系,最后幾位不用關(guān)注即可。訓(xùn)練過(guò)程也非常簡(jiǎn)單,使用常見(jiàn)的sgd優(yōu)化器,訓(xùn)練60epoch,step學(xué)習(xí)率下降。最后top1測(cè)試精度達(dá)到了95%。非常nice!
?
綠牌網(wǎng)絡(luò)訓(xùn)練
最后訓(xùn)練綠牌網(wǎng)絡(luò),和藍(lán)牌網(wǎng)絡(luò)幾乎一樣。不同的是需要使用CCPD中的新能源車(chē)的圖片進(jìn)行裁剪和訓(xùn)練。然后網(wǎng)絡(luò)的輸出是8*34維度,而不是藍(lán)牌的7*34維度。因?yàn)榫G牌比藍(lán)牌多了一位。
?
ONNX轉(zhuǎn)換
由于訓(xùn)練好的模型是pytorch的,不利于部署,因此我們將yolox模型和分類(lèi)模型直接通過(guò)pytorch的接口導(dǎo)出為onnx模型,然后利用onnxruntime進(jìn)行推理。使用如下代碼進(jìn)行導(dǎo)出:
torch.onnx._export(model,
dummy_input,
"yolox.onnx",
verbose=True,
opset_version=11,
input_names=['input'], output_names=['output'])
對(duì)于yolox來(lái)說(shuō),直接導(dǎo)出會(huì)報(bào)如下錯(cuò)誤:
Exporting the operator silu to ONNX opset version 11 is not supported
意思是onnx不支持yolox中的silu激活函數(shù)。最簡(jiǎn)單的方式是修改一下pytorch的源代碼,將silu的實(shí)現(xiàn)修改為如下圖所示,然后在調(diào)用上面的接口可以順利導(dǎo)出。
?
DEMO開(kāi)發(fā)
有了上面訓(xùn)練完的三個(gè)onnx網(wǎng)絡(luò)之后,為了測(cè)試的方便,我們用PyQt編寫(xiě)一個(gè)簡(jiǎn)單的demo。支持從圖片,視頻,以及攝像頭獲取圖片,然后將圖片輸入給檢測(cè)網(wǎng)絡(luò)進(jìn)行車(chē)牌檢測(cè),根據(jù)檢測(cè)出的車(chē)牌矩形框,從原始圖片中裁剪出車(chē)牌圖片。然后根據(jù)車(chē)牌的類(lèi)型(藍(lán)牌還是綠牌)再送入到對(duì)應(yīng)的網(wǎng)絡(luò)中進(jìn)行分類(lèi)識(shí)別。如下圖所示:
?
正當(dāng)我覺(jué)得效果流逼,可以馬上上路檢測(cè)的時(shí)候,卻發(fā)現(xiàn)在視頻中同一個(gè)車(chē)牌被檢測(cè)出來(lái)不同的車(chē)牌號(hào)。導(dǎo)致一輛車(chē)會(huì)被識(shí)別成很多輛車(chē)。按照之前的邏輯,就會(huì)被識(shí)別出不同的車(chē)輛。這對(duì)于統(tǒng)計(jì)道路上的新能源車(chē)占比來(lái)說(shuō),是無(wú)法容忍的。因此需要解決該問(wèn)題。
冷靜分析,通過(guò)上面的測(cè)試視頻來(lái)看,車(chē)牌的檢測(cè)倒是非常準(zhǔn)確(紅框基本沒(méi)有問(wèn)題),但是車(chē)牌識(shí)別的不夠準(zhǔn)確。那么如何解決該問(wèn)題,從而實(shí)現(xiàn)準(zhǔn)確的車(chē)牌檢測(cè)呢?留在下期去解決吧。(說(shuō)實(shí)話:我自己還沒(méi)有想好!)
總結(jié)
感謝各位觀眾老爺又看到了最后。這期主要是數(shù)據(jù)集的準(zhǔn)備和網(wǎng)絡(luò)的調(diào)通。原以為可以馬上上路測(cè)試了,卻遇到了在視頻中識(shí)別不準(zhǔn)的問(wèn)題,嚴(yán)重影響實(shí)驗(yàn)的精度。用這種精度統(tǒng)計(jì)出來(lái)的新能源車(chē)占比,我自己都不信,更不要說(shuō)讓銷(xiāo)售相信了。下一期還是先解決識(shí)別精度的問(wèn)題,盡情期待哦!
總結(jié)
以上是生活随笔為你收集整理的我用AI回怼美女汽车销售系列[yolo车牌识别](二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 普及旗舰体验!一加Ace 2搭载蓝牙5.
- 下一篇: 我用AI回怼美女汽车销售系列[yolo车