Github项目推荐 | 用另一种方式带你游遍世界

(在Google街景视图中进行虚拟漫步)

由于新冠肺炎疫情大流行,除了必须要出门买东西以外,我们都减少了出门自由活动的时间,以尽量避免感染。甚至在大多数国家和地区,许多边境都被关闭,这个时候想要旅行几乎无法实现。

这个时候,Virtual Walks来了,它是一个使用Pose Estimation模型和LSTM神经网络一同实现,并在谷歌街景地图中模拟步行的项目。姿势估算部分采用了PoseNet模型,而动作检测部分则采用TensorFlow 2.0开发了LSTM模型。

该项目能够借助谷歌街景地图在世界各地模拟在街上行走,在家就能游遍世界(还不要钱,只要你能用谷歌地图你就能愉快使用了)!

该项目中使用的主要技术是 Tensorflow 2.0 ,Selenium 和 Python 3.7。

项目地址

//github.com/Moving-AI/virtual-walk

工作原理

PoseNet已与LSTM模型结合在一起,可以推断出人正在执行的动作。 一旦检测到动作,就将其传递给控制器,并以此与Google街景进行互动。

1 . 打开Selenium Firefox窗口。

2 . 通过使用网络摄像头,系统可以拍摄将要进行行走的四个主要动作之一的照片:

  • 站立

  • 行走

  • 右转

  • 左转

3 . 对于每张拍摄的照片,PoseNet将会推断出图像中关节的位置。

4 . 从必须满足对所检测到的关节的置信度的某些考虑因素的帧开始,每组5帧。 缺少关节推断是在第一帧后面的帧中进行的。

5 . 每组帧都被传递到带有FF神经网络的LSTM模型,并预测动作。

6 . 预测的动作将被传递给Selenium控制器,并在打开的Firefox窗口中实现该动作

另外,还有另一个模型可用于运行该程序。 代替LSTM,将计算5帧组中所有帧的关节速度,并将其与关节位置一起传递到PCA和FF神经网络以预测动作。 默认模型是LSTM,因为我们认为它在方法上是正确的,并且是精度最高的模型。

由于动作预测(取决于主机的规格)可能会比平均步行速度快得多,因此预测动作只能每0.5秒执行一次,当然了,这个参数是可以自定义的。

示例

从下面动图中可以看出,项目可以从摄像头捕获的图像中推断出骨骼,并预测执行动作。

Paris (1).gif

(原图地址://github.com/Moving-AI/virtual-walk/raw/master/readme_resources/Paris.gif  )

安装与使用

请注意,要想使用Virtual Walks,必须要有一个网络摄像头,因为实际呈现的动作是从它拍摄的帧中预测出来的。

建议将其安装在最新的Python 3.7环境中,以避免出现问题和版本冲突。

安装运行ResNet所需的tensorflowjs:

pip install tensorflowjs

按照 tfjs-to-tf 中的步骤克隆并安装tensorflowjs图形模型转换器

克隆git仓库

git clone //github.com/Moving-AI/virtual-walk.git

通过运行以下指令安装依赖项

pip install -r requirements.txt

安装Firefox并下载 Geckodriver。 然后在“ driver_path”选项下的config_resnet.yml中指定路径。

通过运行 download_models文件下载使用的模型。 该脚本将下载PoseNet模型(MobileNet和ResNet,输出步幅分别为16和32),LSTM,PCA,缩放器和神经网络。 可以在下面找到单独下载模型的链接。

cd virtual-walk
python3 download_models.py

最后,你可以运行 execute.py进行尝试。

python3 execute.py

使用时的注意事项:

  • 我们使用该模型的经验告诉我们,优先选择稍微明亮的环境,而不是非常明亮的环境。

  • 系统对网络摄像头的位置很敏感。

总而言之,画面应该保持与上面的动图中显示的位置相近的位置。

模型连接:

训练

由于我们缺乏训练数据和计算能力,训练的部分可能是这个项目中最薄弱的部分。 我们的培训数据生成过程包括40分钟的录音。 在每个视频中,一个人出现了在特定时间段内执行一项特定操作的情况。 正如将在后续步骤部分中讨论的那样,尽管具有工作系统,但我们的模型倾向于过拟合。 训练数据的示例如下所示。

(如果无法查看,请戳原图地址: //github.com/Moving-AI/virtual-walk/raw/master/readme_resources/Walking.gif   )

我们训练过的模型以及生成示例的模型都可以通过download_models文件下载。

如果有人想训练另一个LSTM模型,可以提供 DataProcessor类。它可以处理文件夹中的视频,从labels.txt文件中读取有效的帧号,并生成带有训练示例的CSV文件。该文件可以在 train.py 中使用,以生成新的LSTM模型。此模型的路径将传递给WebcamPredictor类,系统将使用此新模型。

下一步优化的点

  • 生成更多的训练数据。 在这个项目中,我们试图获得可以视为MVP的东西,而鲁棒性从来都不是主要目标。 从“培训”部分可以看出,该模型似乎并不过分拟合,即使知道LSTM非常倾向于过度拟合。 但是,培训和测试数据非常相似,因为视频是人们在做“循环”动作。 因此,我们希望该模型具有无法在更多视频中检测到的潜在过度拟合现象。 在不同的光照条件下录制更多视频可能会使该模型更加健壮和一致。

  • 尽管是对称动作,但仍无法以相同的精度预测向右和向左转弯。 在转弯预测中,可以使用坐标的镜面反射使其更加一致。

项目作者

版权许可

该项目遵循MIT许可。有关更多详细信息,请查看://github.com/Moving-AI/virtual-walk/blob/master/LICENSE