欢迎关注“

计算机视觉研究院

计算机视觉研究院专栏

作者: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应用到剪刀石头布机器人(附代码)相关推荐

  1. Python 三十大实践、建议和技巧(附代码链接)

    来源:授权自AI科技大本营(ID:rgznai100) 本文约4900字,建议阅读10+分钟. 本文为你提供30个Python技巧,请收下! [ 导读 ]2020年,你又立了什么新的 Flag?新一年 ...

  2. DIY剪刀石头布机器人(一)

    背景: 回家看到小外甥存了很多零用钱,作为舅舅,最近手头有点紧.于是经过几天的筹划,决定制作一个剪刀石头布机器人,向小外甥挑战.以小外甥好胜的性格,一定会欣然应答.然后凭借神经网络出色的性能,赢光他的 ...

  3. 最新 | 用深度强化学习打造不亏钱的交易机器人(附代码)

    今天,你AI了没? 关注:决策智能与机器学习,每天学点AI干货 --本文由<量化投资与机器学习>授权转载 在本文中,我们将创建深度强化学习agents,学习如何通过比特币交易赚钱.在本文中 ...

  4. 微信公众平台开发教程(四) 实例入门:机器人(附源码)

    微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在 ...

  5. 《最新开源 随插即用》SAM 自增强注意力深度解读与实践(附代码及分析)

    写在前面 大家好,我是cv君,前段时间忙碌工作,许久没更新,越发觉得对不起csdn的读者们,决定继续加油保持更新,保持一周2-3篇的高频率和高质量文章更新:论文分析.代码讲解.代码实操和训练.优化部署 ...

  6. 推荐系统入门(六):新闻推荐实践1(附代码)

    推荐系统入门(六):新闻推荐实践1 目录 推荐系统入门(六):新闻推荐实践1 前言 赛题简介 数据概况 评价方式理解 Baseline 总结 参考资料 前言 相关系列笔记: 推荐系统入门(一):概述 ...

  7. Python AIML搭建聊天机器人(附遇到的问题及解决)

    Python AIML搭建聊天机器人(附遇到的问题及解决) AIML全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理 ...

  8. 推荐系统入门(七):新闻推荐实践2(附代码)

    推荐系统入门(七):新闻推荐实践2(附代码) 目录 推荐系统入门(七):新闻推荐实践2(附代码) 引言 数据收集 数据存储 数据分析 实战 总结 参考资料 引言 相关系列笔记: 推荐系统入门(一):概 ...

  9. 【双足机器人(3)】3D线性倒立摆Python仿真(附代码)

    往期 本文是双足机器人系列的第三篇,在前面的文章中我们介绍了2D线性倒立摆的基本理论,详见: [双足机器人(1)]线性倒立摆及其运动控制(附代码) 在这篇文章中我们要详细介绍3D线性倒立摆的基本内容, ...

最新文章

  1. 深度学习训练中噪声减小吗_【机器学习 155】DoubleEnsemble
  2. 不用L约束又不会梯度消失的GAN,了解一下?
  3. 在Chrome console里修改Vue界面元素,更新如何刷新回UI?
  4. LeetCode之Find Eventual Safe States(Kotlin)
  5. win11打开安全中心显示英文怎么办 windows11打开安全中心显示英文的解决方法
  6. quotes 整站数据爬取存mongo
  7. 继Spring 会议个人计划统计(补)
  8. Atitit sql执行计划
  9. J2EE基础之EJB
  10. java定时发文件给其他人微信_如何实现微信自动发送消息?
  11. Android 分享到新浪微博
  12. php target当前页面,href标签target=_blank属性的妙用
  13. 华山论剑 | 弓叶、陶朗等四家企业再生PET分选技术圆桌会议
  14. 删除dataframe中的某行 删除不掉是为啥
  15. matlab控制理论学习
  16. Python实战——VAE的理论详解及Pytorch实现
  17. st25dv--NFC学习
  18. shell exec命令
  19. mobile eye:计算机视觉、可穿戴计算 和未来的交通工具
  20. 〖Python 数据库开发实战 - MySQL篇㉜〗- 事务的隔离级别

热门文章

  1. 美最新弗吉尼亚级核潜艇可能部署关岛威胁中国
  2. 看了这篇你肯定瘦 全身上下想瘦哪就瘦哪 - 生活至上,美容至尚!
  3. 3d几何图形为什么会有茶壶_[深入研究]什么是G3D几何交换格式?
  4. 纸别情长 用计算机来打什么数字,幼师的爱心情说说
  5. [日推荐]『涂图艺术滤镜』让你的照片一秒变艺术大片
  6. 算法——二维数组回形打印
  7. nginx 学习(一)
  8. 这才是游戏本推荐排行榜榜首的正确打开方式!
  9. 模拟信号隔离放大器变送器 导轨安装DIN11 IPO EM系列
  10. 编码器集电极信号输入输出隔离干扰变送转速传感器信号隔离变送器