新智元报道  

来源:Reddit
编辑:LRS
【新智元导读】最近Reddit上一个贴爆了,获得超两千三百个点赞!一个小哥发布了自己做的深度学习模型,可以隔空写字,并把无关的笔划给去除掉。有网友质疑他只是调包,而作者认为自己做了很多工作,由此引发了激烈的讨论!
谁的童年没有对着空气画画呢?
最近Reddit上一个小哥发帖,借助深度学习技术,随着手指的移动,可以在屏幕上隔空绘制图形,可以实现了这样的一个效果。
由于手指的连续性,会导致绘制的图案连在一起无法看清,当绘制完成后看起来可能就会像下面这样。
然后通过模型的预测功能,神奇的事情发生了,图案变成Hi Reddit了,甚至笑脸都给预测对了,这个模型的主要功能也是预测每个笔画是向上还是向下。
目前代码已经开源,在GitHub 上可以公开访问。
https://github.com/loicmagne/air-drawing
模型的技术实现主要包括两个组件,检测手的位置和预测最终的图形,这两步都是通过深度学习模型实现。
手势检测(handpose detection)使用MediaPipe toolbox 中 Hands 提供的功能。
通过这个开放的模型可以感知手的形状和运动,除了用来隔空画画之外,还可以用于手语理解和手势控制,也可以让数字内容和信息覆盖在增强现实的物理世界之上。MediaPipe Hands能够定位出21个手的坐标,并在桌面端和移动端进行实时推理,甚至多个手也不在话下。
绘图预测部分仅使用手指位置,而不使用真实绘制出来图像作为模型输入。输入是一个sequence,包括二维点的位置,在模型中使用手指的速度和加速度而非位置来使预测平移不变,输出是二分类:向上(pencile up)或向下(pencil down)。
模型使用了一个简单的双向LSTM架构,作者自己制作了一个小数据集,大约包含50个样本,并使用工具对数据进行标注。
起初作者的设想是对绘图进行实时预测,在用户绘画的过程中对笔画的上升和下降进行预测,但这项任务的实现很难,并且结果也不理想,所以就放弃了,这也是作者使用双向LSTM 的原因。
最后,整体的代码都放在了一个notebook中,要是感兴趣的话快去享用吧!
整个应用完全运行在客户端,不需要大算力的服务端。作者通过将PyTorch模型转换为.onnx,可以非常方便地与许多兼容ONNX Runtime的layer来部署深度学习模型。
目前来说,模型还比较简单,并且数据量也很小,用户数据样式比较单一,并且目前手指信号的处理很依赖相机的质量,泛化性也不够好。
技术分享帖一经发出,立刻引起大量围观,有些网友质疑作者的工作太少,就是个调包侠,直接使用MediaPipe 调个包就完事了。
作者解释道:他工作主要是笔画和滑动的预测,每次用户抬起手指的时候就会预测他到底往哪个方向滑动,并且使用了一个RNN 根据手指滑动的速度来实现预测。
而且就算是个小数据集,那50个数据也是我自己标的!
也有网友鼓励到,没错!我刚要说你调包侠,但我发现你确实是训练了自己的模型,加油!
也有网友在OpenCV的教学网站上找到了类似的教程,教学内容是构建一个Air Canvas,可以通过相机捕捉运动,并使用彩色标记来绘制图案,使用指尖处的彩色物体用作标记。实现过程主要使用了颜色检测和手势跟踪技术。
作者回复道,追踪手指的OpenCV项目有很多,但他们都没有预测手指的方向。
当然鼓励、赞赏的网友还是大多数,你觉得他是调包还是真的有点东西?
参考资料:
https://www.reddit.com/r/MachineLearning/comments/pmqtj9/p_using_deep_learning_to_draw_and_write_with_your/
继续阅读
阅读原文