Github项目推荐 | 用另一种方式带你游遍世界
- 2020 年 7 月 31 日
- AI
- TensorFlow, 姿态检测
(在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秒执行一次,当然了,这个参数是可以自定义的。
示例
从下面动图中可以看出,项目可以从摄像头捕获的图像中推断出骨骼,并预测执行动作。
(原图地址://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