記一次除錯YOLOv5+DeepSort車輛跟蹤專案的經過

思緒無限發表於2022-05-08
功能演示動圖

摘要:學習別人的開源專案是日常的一項必備技能,本文通過一個車輛跟蹤(YOLOv5+DeepSort)的例子介紹如何配置和除錯GitHub上的開原始碼。以第一人稱的視角給出本人除錯程式碼的過程,包括專案readme的閱讀、python環境配置、程式碼除錯執行等,詳細的過程已錄製在視訊中。完整的程式碼和配置檔案可三連博主B站視訊後獲取。

關注視訊獲取程式碼資料:https://www.bilibili.com/video/BV1W34y1Y71w/(歡迎關注博主B站視訊)


前言

        相傳,當你找到一處好程式碼,雄心勃勃打算“學習”一下時,總會出現一些“靈異事件”,武力值低的人往往“出師未捷身先死”。別人的程式碼蕩下來到自己機器上,怎麼就是各種Error鋪天蓋地?不是環境報錯、缺少檔案,就是語法錯誤...於是乎在想這幫人總是分享一堆Bug作甚呢?還是我自己沒Get到大佬的點?

功能演示動圖

        直接點,開始我們的故事吧。從前,有個夜黑風高的夜晚,收到上峰指示,先前的“目標跟蹤”行動需立即執行:YOLOv4+Sort不好再用了,升級為YOLOv5+DeepSort。我想:“不會寫啊,Python都沒學過,額忘記我有沒有學過了,曉得了先網上找一下吧”。咦,GitHub上有,和要求上差不多,妥了妥了,蕩一下改改跑跑好不啦,小似情唷。喏這是原作者的效果,這個專案的地址:https://github.com/duongcongnha/Vehicle-tracking,下面說一下我除錯該專案的經過。

功能演示動圖

1. 打量工作

        看到這樣一個專案,檢測和跟蹤效果都不錯,所以動手要把它在我的機器上執行起來。這裡是GitHub的專案主頁,我先下載一下程式碼到我的G盤,與此同時打量一下這個程式碼。

功能演示動圖

        下載好了,開啟pycharm執行一下?別急,先看一眼訓練好的模型有木有,老夫推斷在models資料夾下,定睛一看存在yolov5的pt模型檔案。Nice啊,目測可以先白嫖模型,預感這個程式靠譜。

功能演示動圖

        再看Readme裡面如何使用,這裡有Python環境版本,以及要安裝的依賴列表(requirement.txt)。想來按照這個要求來,應該能跑通的吧,那現在能開啟pycharm執行一下程式?那主程式是哪個不看看你就執行?待我先目測一下主程式在哪裡,還有要怎麼執行有沒有介紹。

功能演示動圖

        這裡記載了執行方式,用的命令列執行,這裡有個cd命令,看來是在這個程式資料夾的application\main這個資料夾下,有個app_track.py,執行它應該就能跑起來了。

功能演示動圖

        這個專案程式碼寫得比較規範,所以能很方便找到這三個點,其他的專案就不能保證這麼幸運了,那樣就得自己琢磨,當你閱碼無數自然就能積累經驗了。

2. 執行除錯

        雖然看起來介紹齊全,但是我掐指一算可能會有坑,但是具體是什麼坑我不知道。先啟動pycharm,開啟下載程式的資料夾,找到app_track.py這個主程式,然後執行程式?——先配置環境。有人問我:“原來有Python環境,配置好了很多三方依賴,直接用唄可以嗎?”,那我不建議,這倆環境很可能不相容,還是要改部分依賴包的版本,最終可能這個程式執行不通,你自己原來的程式也‘靈異’報錯。”

功能演示動圖

        既然如此,我用Anaconda建立一個新環境,然後在新環境裡收requirements.txt列出的這些“牛鬼蛇神”,目測靠譜一點。開啟PyCharm的終端,輸入一下命令:

conda create -n yolo5_track python==3.7

        我這裡pycharm內建的終端是cmd,有些新版的pycharm變成了powershell,那後面部分命令可能不一樣。各自實際情況不一樣,大傢俱體問題具體分析,千萬別隻是照葫蘆畫瓢。那在終端裡面輸入,如下:

功能演示動圖

        然後啟用環境,常規操作是吧,那就不要出錯。輸入以下程式碼,這裡如果是powershell執行下去效果可不一樣,如果有需要就自己解決一下哈。

conda activate yolo5_track
功能演示動圖

        接下來要給這個環境裝上依賴,它這個專案裡是不是有requirements.txt,我們開啟看一下。還挺齊全的,有依賴名字還有部分版本號要求,那就來唄。

功能演示動圖

        上面有提示我們輸入pip的安裝命令,那就在剛剛的終端下輸入以下命令,讀取txt檔案,然後執行各個依賴的安裝。

pip install -r requirements.txt

        當然要先切換到requirement.txt所在的資料夾目錄,然後輸入命令回車執行,ChuaChua一堆安裝資訊提示,然後耐心等待完成。

功能演示動圖

        安裝成功之後,在pycharm中選擇一下環境,基本就是File->Setting->Project->Python Interpreter,進入Python環境選擇conda環境,確定剛剛建立好的環境即可。

功能演示動圖

        環境也選好了,是不是該點執行了啊?這時候是時候展現真正的技術了,開啟app_track.py,在編輯器中右擊選擇“Run”,開始執行,然後手動祈禱。

功能演示動圖

        然後就是這樣滴,what?不就是按照作者給出的嗎,報錯了是什麼情況。看我幹啥,想想什麼原因啊。我們看一下最後三行,torch的module.py檔案報錯,顯示沒有某個屬性。經驗來看哈,這肯定是torch的版本不對,因為程式碼寫錯能出沒有屬性的可能性不大,除非是自己定義的,缺少了模組檔案。這裡顯然是torch的呼叫問題,應該是版本問題。

功能演示動圖

        我們是按作者給出的requirements.txt安裝的,那麼問題出現在哪裡呢?我們再看一眼這個檔案的內容,有些地方是固定版本,有的是給出了最低要求,比如要求這個torch>=1.8.0,大於等於?那我現在的torch版本呢,在終端輸入pip list,可以看到torch版本1.11.0,沒毛病確實大於1.8.0。

功能演示動圖

        這個版本比1.8新多了,那你說有沒有可能,到了某個版本來了個調整,把某些個屬性給刪掉或換成別的屬性了呢?我想是很有可能的,在釋出程式碼的時候作者想不到後面這些依賴會變成什麼樣的,所以只能告訴我們大於某個版本,所以這裡裝的時候就變成最新版。那如果我們把所有版本指定為特定的,是不是就能避免了。至於這裡面這麼多依賴,是不是所有版本都要調整呢,看經驗或除錯結果了。調整和測試後的依賴版本被我修改如下,然後儲存在setup.txt中:

功能演示動圖

        重新輸入pip安裝命令,在終端鍵入以下命令,重新安裝:

pip install -r setup.txt
功能演示動圖

        這時顯然好起來了,執行結果如下,這其實是在處理中,等到進度完成,得到處理後的結果。完整版的資原始碼和setup.txt配置檔案,可關注並三連博主B站視訊後評論獲取,可輕鬆無Bug執行。

功能演示動圖

        這時找到inference/output資料夾下的mp4結果,可以得到如下的畫面,這是在原視訊中檢測後輸出的檔案。

功能演示動圖

        注意到原始碼裡面讀取了yml的設定檔案,下意識開啟可以發現設定識別視訊的路徑在第24行,我們可以修改為自己的視訊所在目錄,重新進行檢測測試一下。

功能演示動圖

        修改用自己的視訊檔案,測試結果如下,感覺可以滿足一般的車輛檢測跟蹤和計數要求,感興趣的朋友可以關注並三連博主B站視訊後,評論獲取完整程式碼和setup.txt依賴檔案。

功能演示動圖

結束語

        由於博主能力有限,博文中提及的方法即使經過試驗,也難免會有疏漏之處。希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹的樣子,呈現在大家面前。同時如果有更好的實現方法也請您不吝賜教。

相關文章