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