34

PoseNet 结合 LSTM 模型,实现在 Google 街景中虚拟“漫步”

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAxMjMwODMyMQ%3D%3D&%3Bmid=2456357568&%3Bidx=4&%3Bsn=2327efd92b72b2221a3d9fd47745dedd
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

  磐创AI分享   

转自 | TensorFlow

文 | Javier Gamazo 与 Gonzalo Izaguirre

由于 COVID-19 大流行,世界多个国家和地区为了保护民众,采取了隔离措施(如关闭边界,发出限制旅行警告等),人们的外出活动也因此受到了限制。

本项目 Virtual Walks 借助姿态估计模型和 LSTM 神经网络在 Google 街景中模拟步行,实现了居家“逛街”。

  • 姿态估计:采用 修改后的 PoseNet 模型;

  • 动作检测部分:使用基于 TensorFlow 2.0 开发的 LSTM 模型。

  • Virtual Walks

    https://github.com/Moving-AI/virtual-walk
  • 修改后的 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。

工作原理

PoseNet 结合 LSTM 模型,推断出图像中的人正在执行的动作。一旦检测到动作,就将其映射到控制器——实现与 Google 街景的交互。

  1. 打开 Selenium Firefox 窗口。

  2. 该系统使用摄像头检测使用者的动作,动作会被分类为:

  • 站立

  • 行走

  • 右转

  • 左转

对于拍摄的每张照片,使用 PoseNet 推断图像中关节的位置。

每 5 帧作为一组。首帧选取可以达到关节检测置信度要求的一帧,在首帧之后,对每一帧都进行缺失关节的预测。

随后每一组帧都被传递到 LSTM 模型, LSTM 后面连接一个前馈神经网络 (FF Neural Network),预测动作。

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

现在还有另一种模型可用于运行该程序。不使用 LSTM,而是每 5 帧一组计算关节速度,并将速度与关节位置一起进行 主成分分析 (PCA) 并结合前馈神经网络来预测动作。默认模型是 LSTM,因为我们认为该模型在方法上是正确的,并且是精度最高的模型。

由于动作预测一般比人的步速快得多(当然,也取决于主机的性能),因此每 0.5 秒预测一次动作就够了(设置过高的预测频率可能会导致模型重复输出动作,造成转向过度等问题),当然,您也可以调整参数来修改预测频率。

使用示例

下图展示了模型从图像推断出骨骼,并预测且执行了相应的动作的过程。

6nYj6bU.gif!mobile

图:“漫步”在巴黎街头

安装和使用

别忘了,该程序是需要使用摄像头的,因为要捕捉您动作。

建议将本项目安装在新的 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 分钟的录像生成的。每段录像中,一个人在一段时间内持续做某个特定动作。正如我们将在后文讨论的,我们的模型倾向于过拟合,尽管这套系统能够运行。下图是其中一个训练数据。

MRje6jZ.gif!mobile

我们训练过的模型和生成示例的模型可以通过运行 download_models 脚本下载。下图显示了训练性能:

Bbaauyn.png!mobile

ZnMf6bE.png!mobile

图: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

未来工作

  • 生成更多训练数据。在这个项目中,我们试图做出一个最小可用产品(MVP),鲁棒性并不是主要目标。从训练部分可以看出,该模型似乎并没有过拟合,即使我们知道 LSTM 非常倾向于过拟合。这个问题在于,训练和测试数据非常相似,因为视频中的人是在做循环的动作。因此,我们希望该模型在更多无法检测到人体关节的视频中具备过拟合的潜能。可能在不同的光照条件下录制更多的视频会使模型具有更好的鲁棒性和一致性。

  • 尽管是向左转和向右转是对称动作,但目前仍无法做到相同精度的预测。镜像坐标系或许可以用于转弯预测,以 改善一致性

联系作者

  • 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 提供 Posenet 模型。

  • tensorflow

    https://github.com/tensorflow/
  • Posenet

    https://github.com/tensorflow/tfjs-models/tree/master/posenet
  • @ patlevin 提供在 Python 中从图文件创建会话的工具。

  • patlevin

    https://github.com/patlevin/tfjs-to-tf
  • @ ajaichemmanam 在我们遇到 Python 读取图文件的问题时伸出了援手。

  • ajaichemmanam

    https://github.com/ajaichemmanam/simple_posenet_python
  • @ felixchenfy 和他的 Realtime-Action-Recognition 仓库为我们提供了灵感。

  • felixchenfy

    https://github.com/felixchenfy

MFVrIbQ.gif!mobile

扫码看好书,满100减50超值优惠活动等你哦

niEFBnY.png!mobile

✄------------------------------------------------

看到这里,说明你喜欢这篇文章,请点击「 在看 」或顺手「 转发 」「 点赞 」。

欢迎微信搜索「 panchuangxx 」,添加小编 磐小小仙 微信,每日朋友圈更新一篇高质量推文(无广告),为您提供更多精彩内容。

▼       扫描二维码添加小编   ▼    ▼  

FRb6fmv.jpg!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK