文/ Javier Gamazo 与 Gonzalo Izaguirre
由于 COVID-19 大流行,世界多个国家和地区为了保护民众,采取了隔离措施(如关闭边界,发出限制旅行警告等),人们的外出活动也因此受到了限制。
动作检测部分:使用基于 TensorFlow 2.0 开发的 LSTM 模型。
修改后的 PoseNet
https://tensorflow.google.cn/lite/models/pose_estimation/overview
TensorFlow 2.0
https://tensorflow.google.cn/
本项目能够模拟在世界各地的街道漫步,这一点离不开 Google 街景 的帮助。
Google 街景
https://www.google.com/intl/es_ES/streetview/
本项目主要使用的技术有:TensorFlow 2.0,Selenium 和 Python 3.7。
工作原理
预测的动作将被传递到 Selenium 控制器,并在打开的 Firefox 窗口中实现该动作。
现在还有另一种模型可用于运行该程序。不使用 LSTM,而是每 5 帧一组计算关节速度,并将速度与关节位置一起进行主成分分析 (PCA) 并结合前馈神经网络来预测动作。默认模型是 LSTM,因为我们认为该模型在方法上是正确的,并且是精度最高的模型。
由于动作预测一般比人的步速快得多(当然,也取决于主机的性能),因此每 0.5 秒预测一次动作就够了(设置过高的预测频率可能会导致模型重复输出动作,造成转向过度等问题),当然,您也可以调整参数来修改预测频率。
使用示例
下图展示了模型从图像推断出骨骼,并预测且执行了相应的动作的过程。
图:“漫步”在巴黎街头
安装和使用
别忘了,该程序是需要使用摄像头的,因为要捕捉您动作。
建议将本项目安装在新的 Python 3.7 环境中,以避免出现意外问题和版本冲突。
安装运行 ResNet 所需的 TensorFlow.js :
pip install tensorflowjs
安装 TensorFlow.js 图模型转换器 tfjs-to-tf (此包可将 TensorFlow.js 图模型转换到 TensorFlow,如需详细信息请访问 https://github.com/patlevin/tfjs-to-tf)
pip install tfjs-graph-converter
克隆本项目的 git 仓库
git clone https://github.com/Moving-AI/virtual-walk.git
并安装本项目所依赖的包
pip install -r requirements.txt
安装 Firefox 并下载 Geckodriver。然后在本项目的配置文件 config_resnet.yml 中声明 Geckodriver 的位置,即在 driver_path 选项下填写 Geckodriver 的路径。
Geckodriver
https://github.com/mozilla/geckodriver/releases
config_resnet.yml
https://github.com/Moving-AI/virtual-walk/blob/master/config_resnet.yml
运行命令 download_models 下载我们所使用的模型文件。该脚本将下载 PoseNet 模型(MobileNet 和 ResNet,输出步幅分别为 16 和 32),LSTM,PCA,Scaler 和神经网络。后文单独列出了模型的下载链接。
cd virtual-walk
python3 download_models.py
最后,您可以运行 execute.py 试一下效果。
python3 execute.py
download_models
https://github.com/Moving-AI/virtual-walk/blob/master/download_models.py
execute.py
https://github.com/Moving-AI/virtual-walk/blob/master/execute.py
效果演示
https://github.com/Moving-AI/virtual-walk/blob/master/readme_resources/output_git.mp4?raw=true
此系统对摄像头的位置很敏感,如果效果不佳请调整位置。
总而言之,应该使用近似上面 GIF 图中所示的位置。
LSTM
https://drive.google.com/uc?export=download&id=1JydPMY58DVZr3qcZ3d7EPZWfq__yJH2Z
Scaler
https://drive.google.com/uc?export=download&id=1eQUYZB1ZTWRjXH4Y-gxs2wsgAK30iwgC
PCA
https://drive.google.com/uc?export=download&id=1cYMuGlfBdkbH6wd9x__1D07I64VA94wE
前馈神经网络 (FF Neural Network)
https://drive.google.com/uc?export=download&id=1dn51tNt96cWesufjCRtuQJQd2S3Ro6fu
训练
训练部分可能是此项目中最艰难的部分,因为我们缺乏足够的训练数据和计算能力。我们的训练数据是基于 40 分钟的录像生成的。每段录像中,一个人在一段时间内持续做某个特定动作。正如我们将在后文讨论的,我们的模型倾向于过拟合,尽管这套系统能够运行。下图是其中一个训练数据。
我们训练过的模型和生成示例的模型可以通过运行 download_models 脚本下载。下图显示了训练性能:
图:epoch categorical accuracy 与 epoch loss
如果有人想训练一个自己的 LSTM 模型,我们提供了 DataProcessor 类。它可以处理存储于文件夹中的视频,从 labels.txt 文件读取有效的帧编号,并生成带有训练示例的 CSV 文件。该文件可用于 train.py 生成新的 LSTM 模型。该模型的路径将被传递给 WebcamPredictor 类供系统使用。
download_models
https://github.com/Moving-AI/virtual-walk/blob/master/download_models.py
DataProcessor
https://github.com/Moving-AI/virtual-walk/blob/master/source/dataprocessing/__init__.py
train.py
https://github.com/Moving-AI/virtual-walk/blob/master/train.py
WebcamPredictor
https://github.com/Moving-AI/virtual-walk/blob/master/source/webcam_predictor.py
未来工作
尽管是向左转和向右转是对称动作,但目前仍无法做到相同精度的预测。镜像坐标系或许可以用于转弯预测,以改善一致性。
联系作者
Javier Gamazo (Github)
https://github.com/javirk
Gonzalo Izaguirre (Github)
https://github.com/gontxomde
许可
该项目采用 MIT 许可。访问 https://github.com/Moving-AI/virtual-walk/blob/master/LICENSE 以获取许可的详细信息。
致谢
@atomicbits 的仓库提供用于下载 TFJS 模型 PoseNet 的工具。
atomicbits
https://github.com/atomicbits
tensorflow
https://github.com/tensorflow/
Posenet
https://github.com/tensorflow/tfjs-models/tree/master/posenet
patlevin
https://github.com/patlevin/tfjs-to-tf
ajaichemmanam
https://github.com/ajaichemmanam/simple_posenet_python
felixchenfy
https://github.com/felixchenfy
点击 “阅读原文” 访问 Virtual Walks GitHub。