手势识别实践 | DIY应用到剪刀石头布机器人(附代码)
欢迎关注“
计算机视觉研究院
”
计算机视觉研究院专栏
作者:Edison_G
扫描二维码 关注我们
微信公众号 : 计算机视觉研究院
回复“手势识别”获取源码
知乎专栏:计算机视觉战队
本次所有代码都是“深度学习DIY”博主贡献,主要是手势识别应用到简单的机器人。有兴趣的同学可以关注获取源代码!
1. 背景
回家看到小外甥存了很多零用钱,作为舅舅,最近手头有点紧。于是经过几天的筹划,决定制作一个剪刀石头布机器人,向小外甥挑战。以小外甥好胜的性格,一定会欣然应答。然后凭借神经网络出色的性能,赢光他的零花钱不是问题。。。嘿嘿,想想还有点美呢。
首先展示下最终的成果:
上面这个是做好的成品,效果不错,小外甥被忽悠的一愣一愣,轻松拿下他的存钱罐。
2. 原理介绍
主要就是一个图像分类的神经网络。通过摄像头,判断小外甥出拳一瞬间的手型,然后根据规则显示克制他的手型即可。例如摄像头检测到小外甥出了剪刀,那么机器人就出一个布,只要模型训练的好,妥妥的百战百胜。
——数据收集——
用过深度学习的人都知道,这货需要训练数据,而且越多越好,各种背景,光照,远近最好都能撸一些图片,这样模型的鲁棒性就会很好。我编写了一个python代码,配合opencv调用摄像头来获取手势图片。将剪刀的标签设为0,石头的标签设为1,布的标签设为2,每种采集1000张图片左右。如下图所示:
剪刀(0)对应的数据
石头(1)对应的数据
布(2)对应的数据
此时我们已经收集好了需要训练的数据,那么下一步就是设计网络了。
——网络设计——
由于只需要判断三种手势,所以一个分类网络就足够了,考虑到电脑的CPU能力有限,为了实现实时的检测,需要一个轻量级的分类网络。开源的mobilent系列,shufflenet系列,efficeentlite等都是很好的选择。这里我选择了shufflenetV2版本。通过实际测试,这个网络的效果最好。shufflenetv2的结构图如下图所示:
shufflenetv2提供了一个通道系数来平衡速度和精度。如上面表格中的0.5X,1X,1.5X,2X所示。这里我选择使用0.5X的通道系数,参数量只有1.4M,计算量只有41M,在笔记本的CPU上面足够实现实时的检测。
下图a展示了基本ResNet轻量级结构,这是一个包含3层的残差单元:首先是1x1卷积,然后是3x3的depthwise convolution(DWConv,主要是为了降低计算量),这里的3x3卷积是瓶颈层(bottleneck),紧接着是1x1卷积,最后是一个短路连接,将输入直接加到输出上。
下图b展示了改进思路:将密集的1x1卷积替换成1x1的group convolution,不过在第一个1x1卷积之后增加了一个channel shuffle操作。值得注意的是3x3卷积后面没有增加channel shuffle,按paper的意思,对于这样一个残差单元,一个channel shuffle操作是足够了。还有就是3x3的depthwise convolution之后没有使用ReLU激活函数。
下图c展示了其他改进,对原输入采用stride=2的3x3 avg pool,在depthwise convolution卷积处取stride=2保证两个通路shape相同,然后将得到特征图与输出进行连接(concat,借鉴了DenseNet?),而不是相加。极致的降低计算量与参数大小。
——网络训练——
训练选择使用pytorch框架,因为pytorch基于动态图机制,调试简单,而且训练速度也比较快,在我的笔记本上面,训练了半个小时,就能达到0.99的top1精度。下图是训练的loss和top1曲线图。
——模型部署——
其实直接使用pytorch进行推理也是可以的,知识pytorch的推理速度一般,因为网络没有做优化(量化以及层的融合),所以这里采用一种更为普遍的方式进行推理。转换成ncnn模型,使用腾讯开源的ncnn库进行推理。ncnn库的官方地址为:https://github.com/Tencent/ncnn
腾讯优图ncnn是腾讯社交网络事业群公布的首个AI开源项目,也是腾讯优图实验室第一次对外公开深度学习的研究成果。ncnn于2017年7月正式开源,作为一个为手机端极致优化的高性能神经网络前向计算框架,在设计之初便将手机端的特殊场景融入核心理念,是业界首个为移动端优化的开源神经网络推断库。ncnn无第三方依赖,跨平台,在手机端cpu运算速度在开源框架中处于领先水平。基于该平台,开发者能够轻松将深度学习算法移植到手机端,输出高效的执行,进而产出人工智能APP,将AI技术带到用户指尖。
不同框架间的模型转换是目前AI项目应用落地的一大痛点。ONNX是Facebook主推的开放文件格式,pytorch/caffe2原生支持。作为目前已知同类框架中CPU运算最快的ncnn,不仅具有最小的安装包体积,还拥有最佳的跨平台兼容性。在ncnn支持ONNX格式转换后,pytorch/caffe2训练的模型便能通过平台轻松部署到手机端。与此同时,ncnn也能借助ONNX良好的项目生态,对众多框架和运行库的高兼容性,以及结构定义清晰的ONNX格式,进一步降低各框架间的转换成本,促进AI移动端生态的创新和部署。
据统计,目前Googleplay商店已有QQ、微信、微视、京东、支付宝、爱奇艺、美颜相机、快手短视频、LIKE短视频、玩美彩妆等超过30款APP,选用ncnn作为手机CNN推断库,实现包括人脸检测跟踪、人脸配准、人脸识别、人体检测跟踪、人体姿态估计、图像分类、图像美化、目标分割、风格画生成、物体检测、文本检测和识别等AI场景应用。
京东APP使用ncnn
支付宝APP使用ncnn
腾讯一直以来秉承“开放”战略,不断推动技术研发向共享、复用和开源迈进。截至目前,腾讯正式发布的开源项目共计58个。今年3月,凭借在AI开源领域卓越的技术影响,腾讯受邀成为LF深度学习基金会初始白金会员,与基金会共同维护、支持和推动人工智能领域的技术开源和革新。
腾讯优图ncnn(https://github.com/Tencent/ncnn)作为腾讯代表性的AI开源项目之一,将持续为人工智能发展助力,促进深度学习研究成果的落地应用。
转入正题:
将ncnn模型封装成一个动态库,这样可以使用python直接调用。然后结合pyqt,opencv来实现最终的剪刀石头布机器人。opencv负责读取摄像头并解码,ncnn库负责对解码后的摄像头画面进行图像分类,然后根据分类结果,找到克制手势,例如检测到“剪刀”,就出“石头”,然后将图像展示在pyqt上面。
/End.
我们开创“计算机视觉协会”知识星球一年有余,也得到很多同学的认可,我们定时会推送实践型内容与大家分享,在星球里的同学可以随时提问,随时提需求,我们都会及时给予回复及给出对应的答复。
如果想加入我们“计算机视觉研究院”,请扫二维码加入我们。我们会按照你的需求将你拉入对应的学习群!
计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!
计算机视觉研究院
长按扫描二维码关注我
回复“手势识别”获取源码
手势识别实践 | DIY应用到剪刀石头布机器人(附代码)相关推荐
- Python 三十大实践、建议和技巧(附代码链接)
来源:授权自AI科技大本营(ID:rgznai100) 本文约4900字,建议阅读10+分钟. 本文为你提供30个Python技巧,请收下! [ 导读 ]2020年,你又立了什么新的 Flag?新一年 ...
- DIY剪刀石头布机器人(一)
背景: 回家看到小外甥存了很多零用钱,作为舅舅,最近手头有点紧.于是经过几天的筹划,决定制作一个剪刀石头布机器人,向小外甥挑战.以小外甥好胜的性格,一定会欣然应答.然后凭借神经网络出色的性能,赢光他的 ...
- 最新 | 用深度强化学习打造不亏钱的交易机器人(附代码)
今天,你AI了没? 关注:决策智能与机器学习,每天学点AI干货 --本文由<量化投资与机器学习>授权转载 在本文中,我们将创建深度强化学习agents,学习如何通过比特币交易赚钱.在本文中 ...
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在 ...
- 《最新开源 随插即用》SAM 自增强注意力深度解读与实践(附代码及分析)
写在前面 大家好,我是cv君,前段时间忙碌工作,许久没更新,越发觉得对不起csdn的读者们,决定继续加油保持更新,保持一周2-3篇的高频率和高质量文章更新:论文分析.代码讲解.代码实操和训练.优化部署 ...
- 推荐系统入门(六):新闻推荐实践1(附代码)
推荐系统入门(六):新闻推荐实践1 目录 推荐系统入门(六):新闻推荐实践1 前言 赛题简介 数据概况 评价方式理解 Baseline 总结 参考资料 前言 相关系列笔记: 推荐系统入门(一):概述 ...
- Python AIML搭建聊天机器人(附遇到的问题及解决)
Python AIML搭建聊天机器人(附遇到的问题及解决) AIML全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理 ...
- 推荐系统入门(七):新闻推荐实践2(附代码)
推荐系统入门(七):新闻推荐实践2(附代码) 目录 推荐系统入门(七):新闻推荐实践2(附代码) 引言 数据收集 数据存储 数据分析 实战 总结 参考资料 引言 相关系列笔记: 推荐系统入门(一):概 ...
- 【双足机器人(3)】3D线性倒立摆Python仿真(附代码)
往期 本文是双足机器人系列的第三篇,在前面的文章中我们介绍了2D线性倒立摆的基本理论,详见: [双足机器人(1)]线性倒立摆及其运动控制(附代码) 在这篇文章中我们要详细介绍3D线性倒立摆的基本内容, ...
最新文章
- 深度学习训练中噪声减小吗_【机器学习 155】DoubleEnsemble
- 不用L约束又不会梯度消失的GAN,了解一下?
- 在Chrome console里修改Vue界面元素,更新如何刷新回UI?
- LeetCode之Find Eventual Safe States(Kotlin)
- win11打开安全中心显示英文怎么办 windows11打开安全中心显示英文的解决方法
- quotes 整站数据爬取存mongo
- 继Spring 会议个人计划统计(补)
- Atitit sql执行计划
- J2EE基础之EJB
- java定时发文件给其他人微信_如何实现微信自动发送消息?
- Android 分享到新浪微博
- php target当前页面,href标签target=_blank属性的妙用
- 华山论剑 | 弓叶、陶朗等四家企业再生PET分选技术圆桌会议
- 删除dataframe中的某行 删除不掉是为啥
- matlab控制理论学习
- Python实战——VAE的理论详解及Pytorch实现
- st25dv--NFC学习
- shell exec命令
- mobile eye:计算机视觉、可穿戴计算 和未来的交通工具
- 〖Python 数据库开发实战 - MySQL篇㉜〗- 事务的隔离级别