導讀
使用光流 + CNN的方法來預測車輛的速度,用PyTorch實現,有代碼。
代碼:https://github.com/SharifElfouly/vehicle-speed-estimation
我想要解決的問題是:在一輛車里有一個攝像頭,我想知道車開得有多快。你顯然不能看速度表,只能看視頻片段本身。深度學習魔法應該能幫助我們。
數據
我有兩個不同的視頻。一個用于訓練,另一個用于測試。訓練視頻有20399幀,測試視頻有10797幀。視頻下載地址:https://github.com/commaai/speedchallenge。下面是一些例子:
視頻中的樣本圖像
訓練視頻的標簽是a .txt文件,其中每一行對應于特定幀的速度。
方法
這個問題最有趣的地方是你的神經網絡輸入會是什么樣子。僅從一個靜態圖像計算速度是不可能的。一種有效的方法是將兩個或更多的圖像堆疊在一起,或者像LSTM或Transformer那樣連續地堆疊。另一個是計算光流,我決定用它。
什么是光流?它基本上是一種為每個像素計算矢量的方法,告訴你兩幅圖像之間的相對運動。有一個很棒的computerphile視頻:https://www.youtube.com/watch?v=4v_keMNROv4,你可以了解更多細節。有一些“經典”的計算機視覺算法可以用來計算光流,但深度學習已經變得更好了(這一點也不奇怪)。那么什么是SOTA方法,讓我們看看paperswithcode:
RAFT 看起來不錯,它還有PyTorch的實現。我forked原始存儲庫,并使其更簡單一些。我不需要訓練,評估等等。我只會用它來推理。
計算光流
為了進行推斷,網絡將兩幅圖像拼接起來,并預測了一個維度為*(2, image_height, image_width)*的張量。如前所述,圖像中的每個像素對應一個二維向量。我們將在實際訓練中使用這些文件,因此我們將它們保存為.npy文件。如果你想象光流圖像它會是這樣的:
訓練
記住我們訓練的目的:
光流→模型→車速估計
我選擇的模型是EfficientNet。我非常喜歡它,因為它的可擴展性。它有8個不同的版本供你選擇,最大的一個,EfficientNet-B7仍然非常非常好。你可以從一個像B0這樣的小變體開始,然后如果一切工作正常,你有一個足夠好的GPU,你可以選擇一個更大的。還有一個PyTorch庫,我會使用它來非常容易地加載預先訓練好的網絡模型,地址:https://github.com/lukemelas/effecentnet-PyTorch。如果你打開[train.ipynb](https://github.com/sharifelfouly/vehicle-speed - estimate),你就可以看到訓練是如何運作的。
我總是從B0開始,然后放大到B3,因為我的GPU只有6 GB內存。經過訓練,我得到如下結果(loss為均方誤差):
訓練損失
驗證損失
很好,看起來一切都很正常!訓練和驗證損失都在降低,網絡沒有過擬合。
結果如下:
雖然不完美,但它確實有一些用
總結
我通常不太喜歡特征工程,但我認為在這種情況下它做得很好。下一步是嘗試一些序列化的東西,比如Transformer或LSTM。
英文原文:https://medium.com/@selfouly/vehicle-speed-estimation-from-video-using-deep-learning-18b41babda4c
責任編輯:xj
原文標題:使用深度學習從視頻中估計車輛的速度
文章出處:【微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
-
機器學習
+關注
關注
66文章
8422瀏覽量
132742 -
深度學習
+關注
關注
73文章
5504瀏覽量
121246 -
cnn
+關注
關注
3文章
352瀏覽量
22238
原文標題:使用深度學習從視頻中估計車輛的速度
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論