该指南使用PyTorch实施的光流+ CNN方法来预测车辆的速度,并具有代码。代码:https://github.com/SharifElfouly/vehicle-speed-estimation我要解决的问题是:汽车中有摄像头,我想知道汽车行驶的速度。您显然无法观看速度表,您只能观看视频剪辑本身。深度学习魔术应该对我们有帮助。数据我有两个不同的视频。一种是用于培训,另一种是用于测试。培训视频有20399帧,测试视频有10797帧。视频下载地址:https://github.com/commaai/speedchallenge。以下是一些示例:视频中的样本图像训练视频的标签是a.txt文件,其中每行对应于特定帧的速度。方法问题最有趣的方面是您的神经网络输入将是什么样。仅从一张静态图像就无法计算出速度。一种有效的方法是将两个或更多图像堆叠在一起,或者像LSTM或Transformer一样连续堆叠它们。另一种是计算光流量,我决定使用它。什么是光流?基本上,这是一种为每个像素计算向量的方法,可以告诉您两个图像之间的相对运动。有一个很棒的计算机爱好者视频:https://www.youtube.com/watch?v = 4v_keMNROv4,您可以了解更多详细信息。有一些“经典的”概念。可以用于计算光流的计算机视觉算法,但深度学习已经变得更好(不足为奇)。那么SOTA方法是什么,让我们看一看具有以下代码的论文:RAFT看起来不错,它也有PyTorch的实现。我分叉了原始存储库,并简化了它。我不需要培训,评估等。我只会将其用于推理。为了计算推理的光流,网络将两个图像缝合在一起,并预测尺寸为*(2,image_height,image_width)*的张量。如前所述,图像中的每个像素对应一个二维向量。我们将在实际训练中使用这些文件,因此我们将它们另存为.npy文件。如果您想象光流图像,它将看起来像这样:培训请记住我们的培训目的:光流→模型→车辆速度估计。我选择的模型是EfficientNet。我非常喜欢它,因为它具有可伸缩性。它有8个不同的版本供您选择,最大的版本是EfficientNet-B7仍然非常非常好。您可以从像B0这样的小型变体开始,然后,如果一切正常,并且拥有足够好的GPU,则可以选择更大的GPU。还有一个PyTorch库,我将使用它很容易地加载经过预先训练的网络模型,地址为:https://github.com/lukemelas/effecentnet-PyTorch。如果打开[train.ipynb](https://github.com/sharifelfouly/vehicle-speed-estimate),则可以看到培训的工作原理。我总是从B0开始放大到B3,因为我的GPU只有6GB的RAM。训练后,我得到以下结果(损失是均方误差):训练损失验证损失非常好,一切似乎都正常!培训和验证损失都在减少,并且网络并不过分。结果如下:尽管它不是完美的,但确实有一些用处。我通常不非常喜欢功能工程,但在这种情况下,我认为它做得很好。下一步是尝试序列化的东西,例如Transformer或LSTM。原始英语:https://medium.com/@selfouly/vehicle-speed-estimation-from-video-using-deep-learning-18b41babda4c