JetsonNano跑YoloV3速度评测
JetsonNano跑YoloV3速度評(píng)測(cè)
This article was original written by XRBLS, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu
很久沒有發(fā)文章了,這段時(shí)間做了很多事情,主要工作還是在于onnx模型的TensorRT加速,我們?cè)谇岸螘r(shí)間發(fā)過很多文章講述如何對(duì)caffe模型進(jìn)行TensorRT加速,我們也有現(xiàn)成的算法可以用來做這件事情,通過TensorRT加速的基于Darknet53+FPN的YoloV3可以跑到~40fps,在一塊decent的GPU上,這個(gè)速度已經(jīng)非常快了,畢竟這個(gè)后端十分重,速度也超越了一些經(jīng)典的二階段算法,效果如下圖:
[外鏈圖片轉(zhuǎn)存失敗(img-yHndC0Yb-1569143775502)(https://s2.ax1x.com/2019/08/29/mqlzb6.png)]
可以看到幾乎沒有漏檢,這用來進(jìn)行商業(yè)化的項(xiàng)目部署還是很有用的,但請(qǐng)相信我,如果你沒有TensorRT加速,Darknet53+yolov3 608的輸入速度你很難做快。這個(gè)算法我們將會(huì)開源到平臺(tái),在加入更多的模型之后。因?yàn)槲覀冃枰阉械腃affe->TensorRT的操作封裝成一個(gè)庫(kù),這樣部署起來就非常方便了。
當(dāng)然我們的算法平臺(tái) http://manaai.cn 也更新了很多最新的項(xiàng)目,比如我們從零訓(xùn)練的手和人臉的檢測(cè)器,這用來進(jìn)行無人機(jī)的操控很有用途,我們幾乎將所有能用得上的人手和人臉的數(shù)據(jù)集都匯聚到了一塊,基于我們自己的caffe版本可以進(jìn)行大規(guī)模的訓(xùn)練,項(xiàng)目地址和與訓(xùn)練模型 這里:
[外鏈圖片轉(zhuǎn)存失敗(img-4i0Rj26I-1569143775504)(https://s2.ax1x.com/2019/08/21/mN5JLd.gif)]
但實(shí)際上我們訓(xùn)練之后發(fā)現(xiàn),這個(gè)模型竟然可以作為人臉的檢測(cè)器:
當(dāng)然效果與專業(yè)的人臉檢測(cè)器還是有差距,但是畢竟速度和模型大小擺在那里。說到人臉檢測(cè)器,現(xiàn)在很多都是評(píng)測(cè)的時(shí)候用大尺寸,比如1024x980這樣的尺寸,精度上去了,但是實(shí)際上測(cè)試發(fā)現(xiàn)大尺寸下速度卻很慢,慢到GPU上都無法實(shí)時(shí),這就很過分了,但是除了這個(gè)算法:RetinaFace, 目前來講是唯一一個(gè)同時(shí)兼顧速度和精度的人臉檢測(cè)算法,更重要的是,這個(gè)算法可以同時(shí)拿到人臉位置和landmark,和MTCNN類似。
當(dāng)然這個(gè)算法也可以在MANA平臺(tái)找到,需要向大家說明的是,我們開源的是我們修改的pytorch訓(xùn)練版本,可以訓(xùn)練但是部署的時(shí)候不夠快,基于onnx TensorRT加速的版本,將會(huì)在隨后push到平臺(tái)倉(cāng)庫(kù),歡迎大家關(guān)注,預(yù)計(jì)可以做到400fps(1080尺寸輸入下,GPU環(huán)境),即便是最垃圾的GPU,也能做到滿實(shí)時(shí)。
最后言歸正傳,我們這篇文章繼續(xù)上一篇的講解。上一期我們講到:
我們收到了一個(gè)Nvidia發(fā)過來的JetsonNano進(jìn)行評(píng)測(cè),但是不帶電源,淘寶買了一個(gè)電源發(fā)現(xiàn)不好使,只要不運(yùn)行大模型就容易崩潰。
最后發(fā)現(xiàn),原來問題不是電源的問題,這里提醒一下JetsonNano的玩家:真正原因是由于我們沒有短接一個(gè)跳線, 只有在短接之后板子才會(huì)從電源汲取電源而不是從usb接口.
短接之后,一切正常。這一點(diǎn)如果沒有人告訴你,你應(yīng)該不太可能知道,這就是只搞軟件不搞硬件帶來的偏科問題。。
YoloV3評(píng)測(cè)
本篇文章不僅僅要在Nano上評(píng)測(cè)YoloV3算法,還要教大家如何在Nano的板子上部署,并且得到我們相同的效果。所以文章可能會(huì)比較耗時(shí),閑話短說,先來看看Nano跑起來的效果:
[外鏈圖片轉(zhuǎn)存失敗(img-oSlSTiLs-1569143775505)(https://s2.ax1x.com/2019/09/22/upcm8O.gif)]
這里先說結(jié)論,因?yàn)橄嘈藕芏嘧x者是想用Nano來做點(diǎn)東西的:
- 跑Yolov3+Mobilenetv2沒有一點(diǎn)問題,~7fps的速度我覺得是可以接受的;
- SSD+Mobilenet我沒有測(cè),但YoloV3+Mobilenet應(yīng)該是精度更高一些的,輸入尺寸也大一些;
- 這個(gè)是用C++跑的,我想說的是在Nano上跑caffe模型什么的一點(diǎn)問題都沒有;
- 用在機(jī)器人視覺或者自己的項(xiàng)目上,你可以通過TensorRT獲得更多的加速;
- 和同等級(jí)的芯片對(duì)比,比如Intel的神經(jīng)網(wǎng)絡(luò)加速棒,瑞芯的芯片等,我相信他們很難在同樣的軟件下達(dá)到這個(gè)速度,除非用上他們自己的神經(jīng)網(wǎng)絡(luò)加速軟體套件,但這樣的話,Nano就得上TensorRT大招了,毫無疑問會(huì)更快。
本期文章暫時(shí)不就Nano的TensorRT加速表現(xiàn)進(jìn)行評(píng)測(cè)。我們可能在下一期,對(duì)幾個(gè)我們訓(xùn)練的onnx模型進(jìn)行TensorRT加速,順便看看這些模型在Nano上能夠跑到多塊的速度,比如Retinaface等等。
Nano YoloV3部署教程
接下來需要傳授大家如何部署了。用到的工具很簡(jiǎn)單,所有的代碼來自于mana平臺(tái):
http://manaai.cn
具體來說,我們需要兩個(gè)項(xiàng)目:
- 手勢(shì)操控控制無人機(jī)的caffe模型(http://manaai.cn/aicodes_detail3.html?id=43)
- YoloV3訓(xùn)練框架和MobilenetVOC預(yù)訓(xùn)練模型 (http://manaai.cn/aicodes_detail3.html?id=26)
上面的項(xiàng)目是我們花費(fèi)了大量時(shí)間和精力訓(xùn)練、維護(hù)、編寫、debug的開箱即用的代碼,我們放在了MANA平臺(tái),如果你也是AI愛好者,想要從一些先人那里獲取更多的知識(shí)和經(jīng)驗(yàn),不妨支持一下我們的工作,毫無疑問我們可以提供你物超所值的東西。平臺(tái)代碼和項(xiàng)目一直在更新,并永遠(yuǎn)保持最前沿。
接下來看如何部署(代碼獲取需要相關(guān)權(quán)限):
下載模型訓(xùn)練框架
git clone https://gitlab.com/StrangeAI/yolov3_mobilenet_caffe ~/caffe cd yolov3_mobilenet_caffe mkdir build cd build cmake .. make -j8 make install make pycaffe這里需要注意,這個(gè)訓(xùn)練框架我們不需要真正訓(xùn)練,如果你需要訓(xùn)練,不要在你的Nano上進(jìn)行,上面操作只是我們下面的C++程序需要調(diào)用caffe。
當(dāng)然在這個(gè)過程中,你可能會(huì)遇到很多坑,但是請(qǐng)記住兩個(gè)點(diǎn):
- Nano自帶了基本上所有環(huán)境,比如boost,opencv等;
- 編譯錯(cuò)誤先看錯(cuò)誤,然后google;
- 實(shí)在不行,請(qǐng)來我們的AI社區(qū)交流提問,大神在線解答:http://talk.strangeai.pro
編寫Yolov3預(yù)測(cè)C++程序
這一段我不打算貼代碼,一來這個(gè)代碼有點(diǎn)長(zhǎng),二來對(duì)于新手不太友好,因?yàn)檫€需要CMakeLists.txt的一大堆東西,大家直接clone一個(gè)現(xiàn)成的項(xiàng)目:
git clone https://gitlab.com/StrangeAI/handface_detect.git通過該項(xiàng)目的一些readme進(jìn)行編譯,只要正確鏈接到你clone到HOME下的caffe,這個(gè)yolov3的檢測(cè)程序就是可以正確編譯的。
最后提醒一下,上面的代碼需要MANA會(huì)員權(quán)限,我們花費(fèi)大量時(shí)間精力分享我們的源代碼,并非是給伸手黨一堆無用的東西,而是一些我們覺得有用的精髓,能夠幫助初學(xué)者快速得到自己想要的東西,這也是我們還是新手的時(shí)候夢(mèng)寐以求的,希望每一位初學(xué)者能夠珍惜前人的勞動(dòng)成果。當(dāng)然,如果你覺得請(qǐng)我們喝杯咖啡顯得過于炫富,也可以通過其他開源渠道獲得相關(guān)代碼。
如果大家對(duì)于本篇教程有任何疑問,歡迎來我們的AI交流社群交流發(fā)帖:
http://talk.strangeai.pro
總結(jié)
以上是生活随笔為你收集整理的JetsonNano跑YoloV3速度评测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 使用 requests 库
- 下一篇: 使用CCRenderTexture来创建