投票活动微信投票刷票人工投票多少钱一票人工多少钱一票

基于机器视觉的工业机器人定位系统 - wqj1212 - 博客园
随笔 - 237, 文章 - 3, 评论 - 128, 引用 - 0
 摘要:建立了一个主动机器视觉定位系统,用于工业机器人对零件工位的精确定位。采用基于区域的匹配和形状特征识别相结合的图像处理方法,该方法经过阈值和形状判据,识别出物体特征。经实验验证,该方法能够快速准确地得到物体的边界和质心,进行数据识别和计算,再结合机器人运动学原理控制机器人实时运动以消除此误差,满足工业机器人自定位的要求。
广告插播信息维库最新热卖芯片:
  1. 引言
  目前工业机器人仅能在严格定义的结构化环境中执行预定指令动作,缺乏对环境的感知与应变能力,这极大地限制了机器人的应用。利用机器人的视觉控制,不需要预先对工业机器人的运动轨迹进行示教或离线编程,可节约大量的编程时间,提高生产效率和加工质量。
  Hagger 等人提出通过基于机器人末端与目标物体之间的误差进行视觉反馈的方法;Mezouar 等人提出通过图像空间的路径规划和基于图像的控制方法 。国内这方面主要应用于焊接机器人对焊缝的跟踪。
  本文利用基于位置的视觉伺服思想,以六自由度垂直关节型喷涂机器人为载体,提出一种基于机器视觉的工业机器人自定位控制方法,解决了机器人末端实际位置与期望位置相距较远的问题,改善了喷涂机器人的定位精度。
  2. 视觉定位系统的组成
  机器人视觉定位系统构成如图 1 所示,在关节型机器人末端安装喷涂工具、单个摄像机,使工件能完全出现在摄像机的图像中。系统包括摄像机系统和控制系统:
  (1)摄像机系统:由单个摄像机和计算机(包括图像采集卡)组成,负责视觉图像的采集和机器视觉算法;
  (2)控制系统:由计算机和控制箱组成,用来控制机器人末端的实际位置;经 CCD 摄像机对工作区进行拍摄,计算机通过本文使用的图像识别方法,提取跟踪特征,进行数据识别和计算,通过逆运动学求解得到机器人各关节位置误差值,最后控制高精度的末端执行机构,调整机器人的位姿。
  图1 喷涂机器人视觉定位系统组成
  3. 视觉定位系统工作原理
  3.1 视觉定位系统的工作原理
  使用 CCD 摄像机和1394 系列采集卡,将视频信号输入计算机,并对其快速处理。首先选取被跟踪物体的局部图像,该步骤相当于离线学习的过程,在图像中建立坐标系以及训练系统寻找跟踪物。学习结束后,图像卡不停地采集图像,提取跟踪特征,进行数据识别和计算,通过逆运动学求解得到机器人各关节位置给定值,最后控制高精度的末端执行机构,调整机器人的位姿。工作流程如图2 所示。
  图 2 视觉定位系统软件流程图
  3.2 基于区域的匹配
  本文采用的就是基于区域的相关匹配方法。它是把一幅图像中的某一点的灰度领域作为模板,在另一幅图像中搜索具有相同(或相似)灰度值分布的对应点领域,从而实现两幅图像的匹配。在基于区域相关的算法中,要匹配的元素是固定尺寸的图像窗口,相似准则是两幅图像中窗口间的相关性度量。当搜索区域中的元素使相似性准则最大化时,则认为元素是匹配的。
  定义P (i, j) P 是模板图像中一点,取以P (i, j) P 为中心的某一邻域作为相关窗口K ,大小为(2w +1),假设K 在原始图中,水平方向平移Δu ,垂直方向平移Δu 后,K 所覆盖下的那块搜索区域叫做子图S k ,若K 和S k 相同,则它们的差为零,否则不为零。由此定义K 和S k 的相关函数为:
  当D(K, S k )达到最小,K 与S k 达到最佳匹配。
  3.3 图像的特征提取
  工作台上的工件与工作台背景在颜色方面具有很大的差别,即工件呈现为黑色,将这一信息作为识别工件的重要特征。
  工件的边缘处灰度有急剧的变化,可以以此判断出工件的边界点。采用扫描线的方法,扫描方向上灰度剧变的像素点就是边界点。最后,通过最小二乘法把找到的边界点拟合出圆周,并计算出圆心位置。
  3.4 实验与分析
  实验目的是通过机器视觉,快速识别出工件的特征(这里是圆孔的圆心)。
  (1)首先在原始图像(图3)选取被跟踪工件的局部图像作为模板图像template(图4)。
  (2)以局部图像template 为模板,在原始图像中进行基于区域的匹配,并以template 的左
  下角为原点,建立坐标系。然后定义一个搜索区域ROI(region of interest),根据要提取的特征选择区域的形状,这里选择环形区域。搜索区域必须包含全部目标特征。在ROI 中提取工件的特征,如图3 所示。
  图 3 圆心识别
  该步骤相当于离线学习的过程。每次使用前只需要学习一次即可。通过离线学习,系统得到ROI 与工件的相对位置关系,以便实时识别中工件出现偏移、翻转等,ROI 都可以准确出现在合适位置。
  (3)离线学习后,视觉系统经过区域匹配、阀值分割和边缘提取等步骤找到需要识别的特征(这里是圆孔的圆点),如图4 所示。
  图4 实时识别
  (3)离线学习后,视觉系统经过区域匹配、阀值分割和边缘提取等步骤找到需要识别的特征(这里是圆孔的圆点),如图4 所示。
  3.5 结果分析如下:
  (1)识别率分析:第一步通过离线学习,训练提取形状特征。第二步使用离线学习得到的坐标关系,实时跟踪工件,得到需要跟踪的形状特征信息。只要离线学习恰当,目标特征就准确识别并且得到相关信息。
  (2)实时处理结果分析:图像采集卡的采集速度是25 帧/s,每幅图采集时间为40ms。摄像头采集一幅图像需要20ms,该图像处理的速度为10ms/幅。通过程序优化,在采集的同时进行图像处理,而且图像处理的速度比采集的时间要短,就避免了图像的失真和抖动。在物体运动不超过极限速度时,能够较准确地找到圆心的位置。
  4. 空间坐标的获取
  由一幅图像得到的信息是二维信息,程序中使用的坐标是以像素为单位的,机器人在空间运动需要将图像的信息换算成三维空间坐标。其计算过程如下:
  (1)以工件上圆孔的圆心为机器人定位基准,A(X ,Y, Z)圆心的世界坐标。当圆心与视觉图像的中心重合时,机器人定位完成。
  (2)标定摄像机,得到投影矩阵ce M ,即图像中两个像素间的距离与世界坐标系的转换关系。
  (3)摄像机拍摄图像后,经过特征识别得到圆心在图像中坐标a(x, y),计算出与图像中心的偏移量Δx、Δy。
  (4)以A(X ,Y, Z)为基准,按照下式计算机器人末端的世界坐标B(X ',Y ', Z'):其中,Mc是摄像机与机器人末端的坐标转换参数。
  注意,本文使用单目视觉,所以这里假设 Z 坐标不变;如果使用双目视觉,就可以通过立体视觉计算出Z’。
  5. 误差分析与补偿
  本项目的喷涂机器人是六自由度的旋转关节操作臂,与Unimation PUMA560相似,关节4、5、6 的轴线相互垂直,且相交与一点。应用参考文献3 的方法计算如下:
  (1)通过机器视觉可以得到机器人末端的空间位置坐标B(X ',Y ', Z')。
  (2)确定机器人的连杆参数表,如下表:
  (3)运用DH 法计算各关节的转角θi :
  6. 结论
  本文描述了基于机器视觉的工业机器人定位系统,该系统将基于区域的匹配和形状特征识别结合,进行数据识别和计算,能够快速准确地识别出物体特征的边界与质心,机器人控制系统通过逆运动学求解得到机器人各关节位置的转角误差,最后控制高精度的末端执行机构,调整机器人的位姿以消除此误差。从而解决了机器人末端实际位置与期望位置相距较远的问题,改善了喷涂机器人的定位精度。该方法计算量小,定位准确,具有工程实用性。本系统是使用 C#在Visual Studio 2003 环境中编写。君,已阅读到文档的结尾了呢~~
基于机器视觉的行人运动轨迹识别研究,机器人视觉识别,机器视觉识别,机器人视觉识别系统,机器视觉与模式识别,机器视觉 模式识别,广东机器视觉识别系统,机器视觉识别系统,机器视觉识别定位,matlab机器人运动轨迹
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于机器视觉的行人运动轨迹识别研究
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口谢邀, 其实这个问题也是我近段时间一直在思考的问题. 昨天刚在组里做了个ECCV'16 Recap, 整理一下思路, 来尝试抛砖引玉.&br&&br&我的观点是:&b&计算机视觉在人工智能和深度学习的大背景下方兴未艾&/b&.&br&&br&这里进入瓶颈期的,可能是一些计算机视觉的经典问题,如物体识别和检测(人脸,行人,物体,场景 etc).但是如果能死磕这些经典问题,往往能带来质的突破,比如说对于ImageNet物体识别GoogLeNet之后,大部分人应该都不会想到还有ResNet这种牛逼网络的出现:).计算机视觉这个领域本身,我觉得是正在蓬勃发展, 经典问题得到了更好的解决, 新的问题也不断涌现.&br&&br&如果把Deep Learning进入CV的2012年作为新时代的开始,我自己是从旧时代来的人.对于从旧时代过来的人,现在无疑是CV以及AI最好的时代.我自己当年是看着Dahua Lin的blog,以及 &a data-hash=&b37bb83aa96a5bc05205& href=&///people/b37bb83aa96a5bc05205& class=&member_mention& data-editable=&true& data-title=&@Filestorm& data-hovercard=&p$b$b37bb83aa96a5bc05205&&@Filestorm&/a&和 &a data-hash=&be0d3bb133ad0151eefd188& href=&///people/be0d3bb133ad0151eefd188& class=&member_mention& data-editable=&true& data-title=&@田渊栋& data-hovercard=&p$b$be0d3bb133ad0151eefd188&&@田渊栋&/a&在SJTU饮水思源AI版的论战进入CV和AI研究圈子的(这里特别感谢三位师兄当年的分享),那时候大家讨论的东西都是graphical model, sparse coding, bag of SIFT, spatial pyramid 啥的,也没有工作抢着放arXiv的传统,也没有满大街的open source libraries. 每年CVPR接收的论文到现在的1/2都不到. 每次开会前proceeding放出来的时候都会沐浴更衣把大部分感兴趣的论文扫一遍.&br&&br&现在的CV和AI研究其实是变得越来越扁平快了.随手可得的open source libraries和pretrained models, 互联网上各种分享的学习资料和经, 便宜的GPU计算资源, 以及百花齐放的研究方向,都使得新入行的生猛年轻人能很快倒腾出新东西. 发表CVPR, NIPS, AAAI等顶会文章也不再是难事. 论文数量和研究方向也是繁多. 已经很难follow. &br&&br&现在很多时候, 我觉得做CV的研究更像是在拼工程能力, 而不是拼insight和积累了. 后来的人也许并没有多少动力和精力去学习和了解之前的经典. 这也是我担忧的地方. 但时代造人, 这些也是无可厚非的, 毕竟我们希望更多有闯劲的年轻人进入CV和AI圈子, 一起大炼钢:). 争先放arXiv, 开源code等无疑加速了研究的迭代速度, 有更大的可能性激发出新的研究方向和成果. 大公司们(Google, Facebook, Amazon)以及诸多startup们, 也都虎视眈眈地渴望着更多更好的研究工作出现.&br&&br&&br&另外, 如果硬要我说几个CV目前有肉容易啃的方向, 那我就大致提提(注:这些方向大致都偏纯学术,有什么商业价值我并不是怎么关心):&br&&br&&b&1. Robotics (or Simulation Graphics)+Vision&/b&. Robotics那边的人普遍比较保守, 更执着于传统template matching之类的传统方法. 这里有个段子, 我们MIT机械工程系robotics方向的大牛教授John Leonard很久以前评论Computer vision, 直接说你们'CVPR'里面的各种论文, 就是Computer Vision and Precision Recall. 什么意思大家应该能理解:). 不过在deep learning开始真正work的时代, 他这句话应该不太适用了(笑). 回到正题, Robitics本身是块非常大的饼, 很多问题和方法都可以用deep learning (CNN + Deep Reinforcement learning) 重新解决. 偏Robotics的话, 大家可以留意一下Berkeley的大红人Sergey Levine最近的工作(&a href=&///?target=https%3A//people.eecs.berkeley.edu/%7Esvlevine/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sergey Levine&i class=&icon-external&&&/i&&/a&). 偏Vision的话,可以看看CMU的大红人Abinav Gupta的ECCV paper Curious Robot (&a href=&///?target=https%3A//arxiv.org/pdf/v2.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&0v2.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&). Jianxiong Xiao之前主打的3D deep learning (&a href=&///?target=http%3A//robots.princeton.edu/talks/2016_MIT/RobotPerception.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&robots.princeton.edu/ta&/span&&span class=&invisible&&lks/2016_MIT/RobotPerception.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)也可以算在这个里面,他们团队和MIT团队最近搞了个Amazon Pick challenge, 模型和方法还有点意思(&a href=&///?target=http%3A//www.cs.princeton.edu/%7Eandyz/apc2016& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MIT-Princeton Vision Dataset for the APC 2016&i class=&icon-external&&&/i&&/a&). 不过Xiao已经下海经商, 不知道还会不会actively publish. 现在各大公司和startup猛搞的autonomous drive, 也可以放在这个方向之下.&br&&br&最近我还留意到一个非常有潜力的方向Simulation+Vision. 我觉得有两个具体方向,一个是利用graphics里面的rendering仿真技术,生成大量数据.这些数据因为是生成出来的,任何ground-truth都有,而且要多少有多少, 是获取训练数据的一个捷径.CVPR'16有篇做synthetic image dataset for semantic segmentation of urban scene(&a href=&///?target=http%3A//www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Ros_The_SYNTHIA_Dataset_CVPR_2016_paper.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cv-foundation.org/opena&/span&&span class=&invisible&&ccess/content_cvpr_2016/papers/Ros_The_SYNTHIA_Dataset_CVPR_2016_paper.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&).另外一个方向是结合graphics中的simulation,利用deep reinforcement learning等active learning的算法可以无监督/弱监督训练出agent model,这里就不仅限于纯CV了.DeepMind和OpenAI在猛搞这个方向.偏vision的话大家可以参考下Allen Institute这篇(&a href=&///?target=https%3A//arxiv.org/pdf/v1.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&3v1.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&).&br&&br&&b&2. Generative visual models.&/b& 目前大部分的模型都是discrminative model, 给定input, 然后识别label. 但这个故事的另外一半其实是generative model, 给定label, 然后生成图片. generative models是一个很有潜力的大方向. 这里的最新进展一方面是基于GAN (&a href=&///?target=https%3A//arxiv.org/pdf/v2.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&4v2.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&) 所带来的一种训练图片生成的新思路, 也包括一些基于传统image model, 如MRF和CRF在deep learning的新思路下面进行重新理解. DeepMind的这篇PixelCNN(&a href=&///?target=https%3A//arxiv.org/pdf/v2.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&8v2.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&), 最近Zhirong和Dahua的挺不错的ECCV论文(&a href=&///?target=http%3A//dahua.me/papers/dhlin_deepmrf.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&dahua.me/papers/dhlin_d&/span&&span class=&invisible&&eepmrf.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&). 个人觉得Varionational Autoencoder也是个蛮漂亮的模型, 这里有篇关于VAE的最新的tutorial还不错(&a href=&///?target=https%3A//arxiv.org/pdf/v2.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&8v2.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&). 以后deep learning跟bayesian model的结合也会是个颇具潜力的方向.&br&&br&3. &b&Multimedia Computer Vision.&/b& 其实人的感知系统本身就是多模态的, 视频和声音共同结合.Video analysis不再局限于action recognition, 对内容本身有更深的理解. 比如说最近的MoiveQA (&a href=&///?target=http%3A//movieqa.cs.toronto.edu/home/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MovieQA&i class=&icon-external&&&/i&&/a&), Visual Anticipation prediction (&a href=&///?target=http%3A//web.mit.edu/vondrick/prediction.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&web.mit.edu/vondrick/pr&/span&&span class=&invisible&&ediction.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&). 另外, sound也是一个大家普遍忽略掉的一个东西. 大家可以看看我们组Andrew Owen的两个蛮有意思的工作ECCV'16 Ambient Sound Provides Supervision for Visual Learning (&a href=&///?target=https%3A//arxiv.org/pdf/.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&7.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&), CVPR'16 Visually Indicated Sounds (&a href=&///?target=http%3A//vis.csail.mit.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Visually Indicated Sounds&i class=&icon-external&&&/i&&/a&). 多模态来研究vision是个大趋势.
谢邀, 其实这个问题也是我近段时间一直在思考的问题. 昨天刚在组里做了个ECCV'16 Recap, 整理一下思路, 来尝试抛砖引玉. 我的观点是:计算机视觉在人工智能和深度学习的大背景下方兴未艾. 这里进入瓶颈期的,可能是一些计算机视觉的经典问题,如物体识别…
&p&机器人抓取定位视觉解决方案,目前比较火的是先利用深度学习的semantic segmentation network来进行图片物体分割,然后通过depth camera获取的点云利用ICP算法(Iterative Closest Point )来匹配物体的3D模型,然后就可以得到物体在实际场景中的pose了。后面的事就可以交给motion planning系统,计算机器手臂抓取线路。&/p&&p&我前阵子跟Draper Lab的同事合作了篇IROS'17, SegICP: Integrated Deep Semantic Segmentation and Pose Estimation (&a href=&///?target=https%3A//arxiv.org/pdf/.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&1.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&),大致是这个方案,感兴趣的朋友可以看看论文细节。&/p&&img src=&/v2-b590a99fd3ae9b08a0b01f2_b.png& data-rawwidth=&705& data-rawheight=&465& class=&origin_image zh-lightbox-thumb& width=&705& data-original=&/v2-b590a99fd3ae9b08a0b01f2_r.png&&&p&物体抓取的话这几年比较热闹的是&a href=&///?target=https%3A///amazon-picking-challenge& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Amazon Picking Challenge&i class=&icon-external&&&/i&&/a&。定时比赛抓取30几种不同的物体。今年据说还会在比赛前30分钟增加十几种未知物体,考验系统的zero-shot learning/one-shot learning的能力。我认识的Princeton Vision和MIT的MCube(&a href=&///?target=http%3A//mcube.mit.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Home | MCube&i class=&icon-external&&&/i&&/a&)组队一直在参加,他们做了个不错的项目主页(&a href=&///?target=http%3A//apc.cs.princeton.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MIT-Princeton Vision Dataset for the APC 2016&i class=&icon-external&&&/i&&/a&)。系统在他们的一篇ICRA'17论文里(&a href=&///?target=https%3A//arxiv.org/pdf/v2.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&5v2.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)。也是segmentation network + ICP的结构,有意思的是一个self-supervised training的步骤,节省了很多数据标定的时间。&/p&&img src=&/v2-9f7fd0ea3768930dcb94c3_b.png& data-rawwidth=&603& data-rawheight=&598& class=&origin_image zh-lightbox-thumb& width=&603& data-original=&/v2-9f7fd0ea3768930dcb94c3_r.png&&&p&P.S. Robotics的项目真是工程量巨大,而且是真要求work,搞篇论文比CV纯灌实验难多了,谁做谁知道。。。&/p&
机器人抓取定位视觉解决方案,目前比较火的是先利用深度学习的semantic segmentation network来进行图片物体分割,然后通过depth camera获取的点云利用ICP算法(Iterative Closest Point )来匹配物体的3D模型,然后就可以得到物体在实际场景中的pose了。后面…
&img src=&/v2-ecbcf8cf716bdccecf3ff08_b.png& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-ecbcf8cf716bdccecf3ff08_r.png&&&blockquote&&p&&em&当地时间 3 月 8 日-10 日,Google Cloud NEXT '17 大会在美国旧金山举行。谷歌在本次大会上正式宣布了对数据科学社区 Kaggle 的收购并宣布了多个重量级云 API。机器之心作为受邀媒体也在第一时间从现场发回了报道:《&a href=&/p/& class=&internal&&现场直击 | 李飞飞首度亮相谷歌云大会:发布全新 API,解读 AI 民主化&/a&》和《&a href=&/?target=http%3A///article/2450& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&现场直击 | 谷歌云大会最后一天解读开放性:从 TensorFlow 开源到开放云平台&i class=&icon-external&&&/i&&/a&》。而作为开发者,最关心的则莫过于本次大会中各种更加详细和专一的教程。比如在大会的三天,谷歌的开发者代表 Martin G?rner 分两部分进行了主题为「没有博士学位玩转 TensorFlow 和深度学习(TensorFlow and Deep Learning without a PhD)」的详细讲解。在这篇文章中,机器之心对其中的重点内容进行了梳理。&/em&&/p&&/blockquote&&p&主题介绍:使用 TensorFlow,可以将深度机器学习从一个研究领域转变成一个主流的软件工程方法。在这个视频中,Martin G?rner 演示了如何构建和训练一个用于识别手写数字的神经网络。在这个过程中,他将描述一些在神经网络设计中所使用的权衡技巧,最后他将使得其模型的识别准确度超过 99%。本教程的内容适用于各种水平的软件开发者。即使是经验丰富的机器学习爱好者,本视频也能通过卷积网络等已知的模型来带你了解 TensorFlow。这是一个技术密集的视频,是为想要快速上手机器学习的初学者而设计的。&br&&/p&&p&&strong&第一部分&/strong&&/p&&p&&strong&&a class=&video-box& href=&/?target=https%3A///x/page/k03834gi4cp.html& target=&_blank& data-video-id=&& data-video-playable=&& data-name=&没有phd玩深度学习1 - 腾讯视频& data-poster=&/qqvideo_ori/0/k03834gi4cp_228_128/0& data-lens-id=&&&
&img class=&thumbnail& src=&/qqvideo_ori/0/k03834gi4cp_228_128/0&&&span class=&content&&
&span class=&title&&没有phd玩深度学习1 - 腾讯视频&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&/x/page/k03834gi4cp.html&/span&
&/a&&br&&/strong&&/p&&p&本教程将以如何进行手写数字识别为例进行讲解。&/p&&img src=&/v2-9de2edb6ff39a3ee6fcb_b.png& data-rawheight=&527& data-rawwidth=&961& class=&origin_image zh-lightbox-thumb& width=&961& data-original=&/v2-9de2edb6ff39a3ee6fcb_r.png&&&p&首先,Gorner 给出了一个非常简单的可以分类数字的模型:softmax 分类。对于一张 28×28 像素的数字图像,其共有 784 个像素(MNIST 的情况)。将它们进行分类的最简单的方法就是使用 784 个像素作为单层神经网络的输入。神经网络中的每个「神经元」对其所有的输入进行加权求和,并添加一个被称为「偏置(bias)」的常数,然后通过一些非线性激活函数(softmax 是其中之一)来反馈结果。&/p&&img src=&/v2-a3b8c19e90f001f004f8e4_b.png& data-rawheight=&440& data-rawwidth=&926& class=&origin_image zh-lightbox-thumb& width=&926& data-original=&/v2-a3b8c19e90f001f004f8e4_r.png&&&p&为了将数字分为 10 类(0 到 9),需要设计一个具有 10 个输出神经元的单层神经网络。对于分类问题,softmax 是一个不错的激活函数。通过取每个元素的指数,然后归一化向量(使用任意的范数(norm,L1 或 L2),比如向量的普通欧几里得距离)从而将 softmax 应用于向量。&br&&/p&&p&那么为什么「softmax」会被称为 softmax 呢?指数是一种骤增的函数。这将加大向量中每个元素的差异。它也会迅速地产生一个巨大的值。然后,当进行向量的标准化时,支配范数(norm)的最大的元素将会被标准化为一个接近 1 的数字,其他的元素将会被一个较大的值分割并被标准化为一个接近 0 的数字。所得到的向量清楚地显示出了哪个是其最大的值,即「max」,但是却又保留了其值的原始的相对排列顺序,因此即为「soft」。&/p&&img src=&/v2-fbc285e0ae8cdf6e8af114c1_b.png& data-rawheight=&529& data-rawwidth=&938& class=&origin_image zh-lightbox-thumb& width=&938& data-original=&/v2-fbc285e0ae8cdf6e8af114c1_r.png&&&p&我们现在将使用矩阵乘法将这个单层的神经元的行为总结进一个简单的公式当中。让我们直接这样做:100 个图像的「mini-batch」作为输入,产生 100 个预测(10 元素向量)作为输出。&br&&/p&&p&使用加权矩阵 W 的第一列权重,我们计算第一个图像所有像素的加权和。该和对应于第一神经元。使用第二列权重,我们对第二个神经元进行同样的操作,直到第 10 个神经元。然后,我们可以对剩余的 99 个图像重复操作。如果我们把一个包含 100 个图像的矩阵称为 X,那么我们的 10 个神经元在这 100 张图像上的加权和就是简单的 X.W(矩阵乘法)。&br&&/p&&p&每一个神经元都必须添加其偏置(一个常数)。因为我们有 10 个神经元,我们同样拥有 10 个偏置常数。我们将这个 10 个值的向量称为 b。它必须被添加到先前计算的矩阵中的每一行当中。使用一个称为「broadcast」的魔法,我们将会用一个简单的加号写出它。&br&&/p&&p&是 Python 和 numpy(Python 的科学计算库)的一个标准技巧。它扩展了对不兼容维度的矩阵进行正常操作的方式。「Broadcasting add」意味着「如果你因为两个矩阵维度不同的原因而不能将其相加,那么你可以根据需要尝试复制一个小的矩阵使其工作。」&br&&/p&&p&我们最终应用 softmax 激活函数并且得到一个描述单层神经网络的公式,并将其应用于 100 张图像:&/p&&img src=&/v2-39fd970b72ba5fe7ecf54e_b.png& data-rawheight=&526& data-rawwidth=&957& class=&origin_image zh-lightbox-thumb& width=&957& data-original=&/v2-39fd970b72ba5fe7ecf54e_r.png&&&p&在 TensorFlow 中则写成这样:&/p&&img src=&/v2-30d1b8e25e6_b.png& data-rawheight=&521& data-rawwidth=&941& class=&origin_image zh-lightbox-thumb& width=&941& data-original=&/v2-30d1b8e25e6_r.png&&&p&接下来我们需要训练神经网络来自己找到我们所需要的权重和偏置。&br&&/p&&p&接下来,Gorner 介绍了如何对神经网络进行训练。&br&&/p&&p&要让神经网络从输入图像中产生预测,我们需要知道它们可以做到什么样的程度,即在我们知道的事实和网络的预测之间到底有多大的距离。请记住,我们对于这个数据集中的所有图像都有一个真实的标签。&br&&/p&&p&任何一种定义的距离都可以进行这样的操作,普通欧几里得距离是可以的,但是对于分类问题,被称为「交叉熵(cross-entropy)」的距离更加有效。交叉熵是一个关于权重、偏置、训练图像的像素和其已知标签的函数。&br&&/p&&p&这里用到了 one-hot 编码。「one-hot」编码意味着你使用一个 10 个值的向量,其中除了第 6 个值为 1 以外的所有值都是 0。这非常方便,因为这样的格式和我们神经网络预测输出的格式非常相似,同时它也作为一个 10 值的向量。&/p&&img src=&/v2-d32b10ae9ac46eedb427_b.png& data-rawheight=&526& data-rawwidth=&938& class=&origin_image zh-lightbox-thumb& width=&938& data-original=&/v2-d32b10ae9ac46eedb427_r.png&&&p&在这里可视化演示了这个动态过程(参见视频)。&/p&&img src=&/v2-2f099de0c9fec7755ae2eeab_b.png& data-rawheight=&523& data-rawwidth=&944& class=&origin_image zh-lightbox-thumb& width=&944& data-original=&/v2-2f099de0c9fec7755ae2eeab_r.png&&&ul&&li&&p&准确度(左上图):这个准确度只是正确识别的数字的百分比,是在训练和测试集上计算出的。如果训练顺利,它便会上升。&/p&&/li&&li&&p&交叉熵损失(中上图):为了驱动训练,需要定义损失函数,即一个展示出系统数字识别能力有多糟的值,并且系统会尽力将其最小化。损失函数(loss function,此处为「交叉熵」)的选择稍后会做出解释。你会看到,随着训练的进行,训练和测试数据的损失会减少,而这个现象是好的,意味着神经网络正在学习。X 轴表示了学习过程中的迭代。&/p&&/li&&li&&p&权重(左下图)和偏置(中下图):说明了内部变量所取的所有值的扩展,即随训练进行而变化的权重和偏置。比如偏置从 0 开始,且最终得到的值大致均匀地分布在-1.5 和 1.5 之间。如果系统不能很好地收敛,那么这些图可能有用。倘若你发现权重和偏差扩展到上百或上千,那么就可能有问题了。&/p&&/li&&li&&p&训练数字(右上图):训练数字每次 100 个被送入训练回路;也可以看到当前训练状态下的神经网络是已将数字正确识别(白色背景)还是误分类(红色背景,左侧印有正确的标示,每个数字右侧印有计算错误的标示)。此数据集中有 50,000 个训练数字。我们在每次迭代(iteration)中将 100 个数字送入训练循环中,因此系统将在 500 次迭代之后看到所有训练数字一次。我们称之为一个「epoch」。&/p&&/li&&li&&p&测试数字(右下图):为了测试在现实条件下的识别质量,我们必须使用系统在训练期间从未看过的数字。否则,它可能记住了所有的训练数字,却仍无法识别我刚才写的「8」。MNIST 数据集包含了 10,000 个测试数字。此处你能看到每个数字对应的大约 1000 种书写形式,其中所有错误识别的数字列在顶部(有红色背景)。左边的刻度会给你一个粗略的分辨率精确度(正确识别的百分比)。&br&&/p&&/li&&/ul&&p&「训练」一个神经网络实际上就是使用训练图像和标签来调整权重和偏置,以便最小化交叉熵损失函数。&br&&/p&&p&那么我们在 TensorFlow 中如何实现它呢?&br&&/p&&p&我们首先定义 TensorFlow 的变量和占位符(placeholder),即权重和偏置。&/p&&p&&img src=&/v2-9aafcb9bc80cf8da379c8a8_b.png& data-rawheight=&528& data-rawwidth=&941& class=&origin_image zh-lightbox-thumb& width=&941& data-original=&/v2-9aafcb9bc80cf8da379c8a8_r.png&&占位符是在训练期间填充实际数据的参数,通常是训练图像。持有训练图像的张量的形式是 [None, 28, 28, 1],其中的参数代表:&br&&/p&&ul&&li&&p&28, 28, 1: 图像是 28x28 每像素 x 1(灰度)。最后一个数字对于彩色图像是 3 但在这里并非是必须的。&/p&&/li&&li&&p&None: 这是代表图像在小批量(mini-batch)中的数量。在训练时可以得到。&br&&/p&&/li&&/ul&&p&接下来是定义模型:&/p&&img src=&/v2-5ff5b70aa01f74affd6c8aa93ea94cf2_b.png& data-rawheight=&524& data-rawwidth=&943& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-5ff5b70aa01f74affd6c8aa93ea94cf2_r.png&&&p&第一行是我们单层神经网络的模型。公式是我们在前面的理论部分建立的。tf.reshape 命令将我们的 28×28 的图像转化成 784 个像素的单向量。在 reshape 中的「-1」意味着「计算机,计算出来,这只有一种可能」。在实际当中,这会是图像在小批次(mini-batch)中的数量。&br&&/p&&p&然后,我们需要一个额外的占位符用于训练标签,这些标签与训练图像一起被提供。&br&&/p&&p&现在我们有了模型预测和正确的标签,所以我们计算交叉熵。tf.reduce_sum 是对向量的所有元素求和。&br&&/p&&p&最后两行计算了正确识别数字的百分比。&br&&/p&&p&才是 TensorFlow 发挥它力量的地方。你选择一个适应器(optimiser,有许多可供选择)并且用它最小化交叉熵损失。在这一步中,TensorFlow 计算相对于所有权重和所有偏置(梯度)的损失函数的偏导数。这是一个形式衍生(formal derivation),并非是一个耗时的数值型衍生。&img src=&/v2-8382fdfd6c8c596dbc457e692cd45b8f_b.png& data-rawheight=&532& data-rawwidth=&944& class=&origin_image zh-lightbox-thumb& width=&944& data-original=&/v2-8382fdfd6c8c596dbc457e692cd45b8f_r.png&&&br&&/p&&br&&p&梯度然后被用来更新权重和偏置。学习率为 0.003。&/p&&br&&p&那么梯度和学习率是什么呢?&/p&&br&&ul&&li&&p&梯度:如果我们相对于所有的权重和所有的偏置计算交叉熵的偏导数,我们就得到一个对于给定图像、标签和当前权重和偏置的「梯度」。请记住,我们有 7850 个权重和偏置,所以计算梯度需要大量的工作。幸运的是,TensorFlow 可以来帮我们做这项工作。梯度的数学意义在于它指向「上(up)」。因为我们想要到达一个交叉熵低的地方,那么我们就去向相反的方向。我们用一小部分的梯度更新权重和偏置并且使用下一批训练图像再次做同样的事情。我们希望的是,这可以使我们到达交叉熵最小的凹点的低部。梯度下降算法遵循着一个最陡的坡度下降到局部最小值的路径。训练图像在每一次迭代中同样会被改变,这使得我们向着一个适用于所有图像的局部最小值收敛。&/p&&/li&&li&&p&学习率(learning rate): 在整个梯度的长度上,你不能在每一次迭代的时候都对权重和偏置进行更新。这就会像是你穿着七里靴却试图到达一个山谷的底部。你会直接从山谷的一边到达另一边。为了到达底部,你需要一些更小的步伐,即只使用梯度的一部分,通常在 1/1000 区域中。我们称这个部分为「学习率」。&/p&&/li&&/ul&&br&&p&接下来该运行训练循环了。到目前为止,所有的 TensorFlow 指令都在内存中准备了一个计算图,但是还未进行计算。&/p&&br&&p&TensorFlow 的「延迟执行(deferred execution)」模型:TensorFlow 是为分布式计算构建的。它必须知道你要计算的是什么、你的执行图(execution graph),然后才开始发送计算任务到各种计算机。这就是为什么它有一个延迟执行模型,你首先使用 TensorFlow 函数在内存中创造一个计算图,然后启动一个执行 Session 并且使用 Session.run 执行实际计算任务。在此时,图无法被更改。&/p&&br&&p&由于这个模型,TensorFlow 接管了分布式运算的大量运筹。例如,假如你指示它在计算机 1 上运行计算的一部分,而在计算机 2 上运行另一部分,它可以自动进行必要的数据传输。&/p&&br&&p&计算需要将实际数据反馈进你在 TensorFlow 代码中定义的占位符。这是以 Python 的 dictionary 的形式给出的,其中的键是占位符的名称。&img src=&/v2-edb2c42f1e48d4dda7c6cd3a2a03cc2b_b.png& data-rawheight=&506& data-rawwidth=&931& class=&origin_image zh-lightbox-thumb& width=&931& data-original=&/v2-edb2c42f1e48d4dda7c6cd3a2a03cc2b_r.png&&&/p&&br&&br&&p&在这里执行的 train_step 是当我们要求 TensorFlow 最小化交叉熵时获得的。这是计算梯度和更新权重和偏置的步骤。&/p&&br&&p&最终,我们还需要一些值来显示,以便我们可以追踪我们模型的性能。&/p&&br&&p&通过在馈送 dictionary 中提供测试而不是训练数据,可以对测试数据进行同样的计算(例如每 100 次迭代计算一次。有 10,000 个测试数字,所以会耗费 CPU 一些时间)。&/p&&br&&p&最后一行代码用于在训练回路中计算准确度和交叉熵(例如每 10 次迭代)。&/p&&br&&p&下面是所有代码:&img src=&/v2-86eec240cbe_b.png& data-rawheight=&526& data-rawwidth=&943& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-86eec240cbe_r.png&&&/p&&br&&br&&p&这个简单的模型已经能识别 92% 的数字了。但这个准确度还不够好,但是你现在要显著地改善它。怎么做呢?深度学习就是要深,要更多的层!&img src=&/v2-8e2fa810c29e90bdd11fcc_b.png& data-rawheight=&516& data-rawwidth=&940& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&/v2-8e2fa810c29e90bdd11fcc_r.png&&&/p&&br&&br&&p&让我们来试试 5 个全连接层。&img src=&/v2-dca9b9f9d65e_b.png& data-rawheight=&528& data-rawwidth=&946& class=&origin_image zh-lightbox-thumb& width=&946& data-original=&/v2-dca9b9f9d65e_r.png&&&/p&&br&&br&&p&我们继续用 softmax 来作为最后一层的激活函数,这也是为什么在分类这个问题上它性能优异的原因。但在中间层,我们要使用最经典的激活函数:sigmoid 函数。&br&&/p&&br&&p&下面开始写代码。为了增加一个层,你需要为中间层增加一个额外的权重矩阵和一个额外的偏置向量:&img src=&/v2-2551effb4cc3cb512b96da_b.png& data-rawheight=&529& data-rawwidth=&948& class=&origin_image zh-lightbox-thumb& width=&948& data-original=&/v2-2551effb4cc3cb512b96da_r.png&&&/p&&br&&br&&p&这样增加多个层:&img src=&/v2-d7f2b40ba41ac79aea8a1eb_b.png& data-rawheight=&523& data-rawwidth=&937& class=&origin_image zh-lightbox-thumb& width=&937& data-original=&/v2-d7f2b40ba41ac79aea8a1eb_r.png&&&/p&&br&&br&&p&但 sigmoid 不是全能的。在深度网络里,sigmoid 激活函数也能带来很多问题。它把所有的值都挤到了 0 到 1 之间,而且当你重复做的时候,神经元的输出和它们的梯度都归零了。修正线性单元(ReLU)也是一种很常使用的激活函数:&img src=&/v2-ecf023634_b.png& data-rawheight=&529& data-rawwidth=&945& class=&origin_image zh-lightbox-thumb& width=&945& data-original=&/v2-ecf023634_r.png&&&/p&&br&&br&&p&对比一下在 300 次迭代时 sigmoid 函数(浅色线)和 ReLU(深色线)的效果,可以看到 ReLU 在准确度和交叉熵损失上的表现都显著更好。&img src=&/v2-acbdfd8b8e661dfc5e40a_b.png& data-rawheight=&528& data-rawwidth=&943& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-acbdfd8b8e661dfc5e40a_r.png&&&/p&&br&&br&&p&用 ReLU 替换你所有的 sigmoid,然后你会得到一个更快的初始收敛并且当我们继续增加层的时候也避免了一些后续问题的产生。仅仅在代码中简单地用 tf.nn.relu 来替换 tf.nn.sigmoid 就可以了。&/p&&br&&p&但收敛过快也有问题:&img src=&/v2-c3faf800a4b_b.png& data-rawheight=&525& data-rawwidth=&941& class=&origin_image zh-lightbox-thumb& width=&941& data-original=&/v2-c3faf800a4b_r.png&&&/p&&br&&br&&p&这些曲线很嘈杂,看看测试精确度吧:它在全百分比范围内跳上跳下。这意味着即使 0.003 的学习率我们还是太快了。但我们不能仅仅将学习率除以十或者永远不停地做训练。一个好的解决方案是开始很快随后将学习速率指数级衰减至比如说 0.0001。&/p&&br&&p&这个小改变的影响是惊人的。你会看到大部分的噪声消失了并且测试精确度持续稳定在 98% 以上。&img src=&/v2-bac502d488a16e157552_b.png& data-rawheight=&529& data-rawwidth=&946& class=&origin_image zh-lightbox-thumb& width=&946& data-original=&/v2-bac502d488a16e157552_r.png&&&/p&&br&&br&&p&再看看训练精确度曲线。在好多个 epoch 里都达到了 100%(一个 epoch=500 次迭代=全部训练图片训练一次)。第一次我们能很好地识别训练图片了。&br&&/p&&br&&p&但右边的图是什么情况?&img src=&/v2-b86e09f2aeee3484be29d_b.png& data-rawheight=&528& data-rawwidth=&941& class=&origin_image zh-lightbox-thumb& width=&941& data-original=&/v2-b86e09f2aeee3484be29d_r.png&&&/p&&br&&br&&p&在数千次迭代之后,测试和训练数据的交叉熵曲线开始不相连。学习算法只是在训练数据上做工作并相应地优化训练的交叉熵。它再也看不到测试数据了,所以这一点也不奇怪:过了一会儿它的工作不再对测试交叉熵产生任何影响,交叉熵停止了下降,有时甚至反弹回来。它不会立刻影响你模型对于真实世界的识别能力,但是它会使你运行的众多迭代毫无用处,而且这基本上是一个信号——告诉我们训练已经不能再为模型提供进一步改进了。这种情况通常会被称为「过拟合(overfitting)」。&/p&&br&&p&为了解决这个问题,你可以尝试采用一种规范化(regularization)技术,称之为「dropout」。&img src=&/v2-12e1f5efb0ff684_b.png& data-rawheight=&529& data-rawwidth=&942& class=&origin_image zh-lightbox-thumb& width=&942& data-original=&/v2-12e1f5efb0ff684_r.png&&&/p&&br&&br&&p&在 dropout 里,在每一次训练迭代的时候,你可以从网络中随机地放弃一些神经元。你可以选择一个使神经元继续保留的概率 pkeep,通常是 50% 到 75% 之间,然后在每一次训练的迭代时,随机地把一些神经元连同它们的权重和偏置一起去掉。在一次迭代里,不同的神经元可以被一起去掉(而且你也同样需要等比例地促进剩余神经元的输出,以确保下一层的激活不会移动)。当测试你神经网络性能的时候,你再把所有的神经元都装回来 (pkeep=1)。&/p&&br&&p&TensorFlow 提供一个 dropout 函数可以用在一层神经网络的输出上。它随机地清零一些输出并且把剩下的提升 1/pkeep。你可以在网络中每个中间层以后插入 dropout。&/p&&br&&p&下面我们集中看一下改进的情况。&/p&&br&&p&当使用 sigmoid 函数,学习率为 0.003 时:&img src=&/v2-26b787ccc7c6d325a448_b.png& data-rawheight=&402& data-rawwidth=&764& class=&origin_image zh-lightbox-thumb& width=&764& data-original=&/v2-26b787ccc7c6d325a448_r.png&&&/p&&br&&br&&p&然后使用 ReLU 替代 sigmoid:&img src=&/v2-baafacdf89e1c7e0d091a2_b.png& data-rawheight=&412& data-rawwidth=&752& class=&origin_image zh-lightbox-thumb& width=&752& data-original=&/v2-baafacdf89e1c7e0d091a2_r.png&&&/p&&br&&br&&p&然后再将学习率衰减到 0.0001:&img src=&/v2-5e4a546ceed4ca9a8bcb_b.png& data-rawheight=&413& data-rawwidth=&759& class=&origin_image zh-lightbox-thumb& width=&759& data-original=&/v2-5e4a546ceed4ca9a8bcb_r.png&&&/p&&br&&br&&p&增加 dropout:&img src=&/v2-f7f6deca8e17ed3015af25_b.png& data-rawheight=&413& data-rawwidth=&762& class=&origin_image zh-lightbox-thumb& width=&762& data-original=&/v2-f7f6deca8e17ed3015af25_r.png&&&/p&&br&&br&&p&解决了过拟合,准确度达到了 98%,但是噪声又回来了。看起来无论我们做什么,我们看上去都不可能很显著地解决 98% 的障碍,而且我们的损失曲线依然显示「过拟合」无法连接。什么是真正的「过拟合」?过拟合发生在该神经网络学得「不好」的时候,在这种情况下该神经网络对于训练样本做得很好,对真实场景却并不是很好。有一些像 dropout 一样的规范化技术能够迫使它学习得更好,不过过拟合还有更深层的原因。&img src=&/v2-a08720afc52f6e18ff5f_b.png& data-rawheight=&514& data-rawwidth=&920& class=&origin_image zh-lightbox-thumb& width=&920& data-original=&/v2-a08720afc52f6e18ff5f_r.png&&&/p&&br&&br&&p&基本的过拟合发生在一个神经网络针对手头的问题有太多的自由度的时候。想象一下我们有如此多的神经元以至于所组成的网络可以存储我们所有的训练图像并依靠特征匹配来识别它们。它会在真实世界的数据里迷失。一个神经网络必须有某种程度上的约束以使它能够归纳推理它在学习中所学到的东西。&/p&&br&&p&如果你只有很少的训练数据,甚至一个很小的网络都能够用心学习它。一般来说,你总是需要很多数据来训练神经网络。&/p&&br&&p&最后,如果你已经做完了所有的步骤,包括实验了不同大小的网络以确保它的自由度已经约束好了、采用了 dropout、并且训练了大量的数据,你可能会发现你还是被卡在了当前的性能层次上再也上不去了。这说明你的神经网络在它当前的形态下已经无法从你提供的数据中抽取到更多的信息了,就像我们这个例子这样。&/p&&br&&p&还记得我们如何使用我们的图像吗?是所有的像素都展平到一个向量里么?这是一个很糟糕的想法。手写的数字是由一个个形状组成的,当我们把像素展平后我们会丢掉这些形状信息。不过,有一种神经网络可以利用这些形状信息:卷积网络(convolutional network)。让我们来试试。&img src=&/v2-dddc0eda9ad92bd00955_b.png& data-rawheight=&530& data-rawwidth=&950& class=&origin_image zh-lightbox-thumb& width=&950& data-original=&/v2-dddc0eda9ad92bd00955_r.png&&&/p&&br&&br&&p&在卷积网络层中,一个「神经元」仅对该图像上的一个小部分的像素求加权和。然后,它通常会添加一个偏置单元,并且将得到的加权和传递给激活函数。与全连接网络相比,其最大的区别在于卷积网络的每个神经元重复使用相同的权重,而不是每个神经元都有自己的权重。&/p&&br&&p&在上图中,你可以看到通过连续修改图片上两个方向的权重(卷积),能够获得与图片上的像素点数量相同的输出值(尽管在边缘处需要填充(padding))。&/p&&br&&p&要产生一个输出值平面,我们使用了一张 4x4 大小的彩色图片作为出输入。在上图当中,我们需要 4x4x3=48 个权重,这还不够,为了增加更多自由度,我们还需要选取不同组的权重值重复实验。&/p&&br&&p&通过向权重张量添加一个维度,能够将两组或更多组的权重重写为一组权重,这样就给出了一个卷积层的权重张量的通用实现。由于输入、输出通道的数量都是参数,我们可以开始堆叠式(stacking)和链式(chaining)的卷积层。&/p&&br&&p&最后,我们需要提取信息。在最后一层中,我们仅仅想使用 10 个神经元来分类 0-9 十个不同的数字。传统上,这是通过「最大池化(max-pooling)」层来完成的。即使今天有许多更简单的方法能够实现这分类任务,但是,「最大池化」能够帮助我们直觉地理解卷积神经网络是怎么工作的。如果你认为在训练的过程中,我们的小块权重会发展成能够过滤基本形状(水平线、垂直线或曲线等)的过滤器(filter),那么,提取有用信息的方式就是识别输出层中哪种形状具有最大的强度。实际上,在最大池化层中,神经元的输出是在 2x2 的分组中被处理,最后仅仅保留输出最大强度的神经元。&/p&&br&&p&这里有一种更简单的方法:如果你是以一步两个像素移动图片上的滑块而不是以每步一个像素地移动图片上的滑块。这种方法就是有效的,今天的卷积网络仅仅使用了卷积层。&/p&&br&&p&让我们建立一个用于手写数字识别的卷积网络。在顶部,我们将使用 3 个卷积层;在底部,我们使用传统的 softmax 读出层,并将它们用完全连接层连接。&img src=&/v2-6df615fa8cf443d8c82ac8_b.png& data-rawheight=&510& data-rawwidth=&943& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-6df615fa8cf443d8c82ac8_r.png&&&/p&&br&&br&&p&注意,第二与第三卷积层神经元数量以 2x2 为倍数减少,这就解释了为什么它们的输出值从 28x28 减少为 14x14,然后再到 7x7。卷积层的大小变化使神经元的数量在每层下降约为:28x28x14≈x8≈1500 → 7x7x12≈500 → 200。下一节中,我们将给出该网络的具体实现。&/p&&br&&p&那我们如何在 TensorFlow 中实现它呢?为了将我们的代码转化为卷积模型,我们需要为卷积层定义适当的权重张量,然后将该卷积层添加到模型中。我们已经理解到卷积层需要以下形式的权重张量。下面代码是用 TensorFlow 语法来对其初始化:&img src=&/v2-06aa0fc02e1d8a48ae480_b.png& data-rawheight=&527& data-rawwidth=&935& class=&origin_image zh-lightbox-thumb& width=&935& data-original=&/v2-06aa0fc02e1d8a48ae480_r.png&&&/p&&br&&br&&p&然后实现其模型:&img src=&/v2-ac38bfcbf1ab3b3dd233d_b.png& data-rawheight=&523& data-rawwidth=&943& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/v2-ac38bfcbf1ab3b3dd233d_r.png&&&/p&&br&&br&&p&在 TensorFlow 中,使用 tf.nn.conv2d 函数实现卷积层,该函数使用提供的权重在两个方向上扫描输入图片。这仅仅是神经元的加权和部分,你需要添加偏置单元并将加权和提供给激活函数。不要过分在意 stride 的复杂语法,查阅文档就能获取完整的详细信息。这里的填充(padding)策略是为了复制图片的边缘的像素。所有的数字都在一个统一的背景下,所以这仅仅是扩展了背景,并且不应该添加不需要的任何样式。&/p&&br&&p&完成这一步之后,我们应该能达到 99% 的准确度了吧?&img src=&/v2-bafdc36e4bbac924ab6b_b.png& data-rawheight=&533& data-rawwidth=&946& class=&origin_image zh-lightbox-thumb& width=&946& data-original=&/v2-bafdc36e4bbac924ab6b_r.png&&&/p&&br&&br&&p&然而并没有!什么情况?&img src=&/v2-f2dec8aeccbf_b.png& data-rawheight=&525& data-rawwidth=&941& class=&origin_image zh-lightbox-thumb& width=&941& data-original=&/v2-f2dec8aeccbf_r.png&&&/p&&br&&br&&p&还记得前面我们怎么解决这个「过拟合」问题的吗?使用 dropout。&/p&&br&&p&我们该怎么对其进行优化呢?调整你的神经网络的一个好方法是先去实现一个限制较多的神经网络,然后给它更多的自由度并且增加 dropout,使神经网络避免过拟合。最终你将得到一个相当不错的神经网络。&img src=&/v2-b2996fcd6f2a_b.png& data-rawheight=&503& data-rawwidth=&932& class=&origin_image zh-lightbox-thumb& width=&932& data-original=&/v2-b2996fcd6f2a_r.png&&&/p&&br&&br&&p&例如,我们在第一层卷积层中仅仅使用了 4 个 patch,如果这些权重的 patch 在训练的过程中发展成不同的识别器,你可以直观地看到这对于解决我们的问题是不够的。手写数字模式远多于 4 种基本样式。&/p&&br&&p&因此,让我们稍微增加 patch 的数量,将我们卷积层中 patch 的数量从 4,8,12 增加到 6,12,24,并且在全连接层上添加 dropout。它们的神经元重复使用相同的权重,在一次训练迭代中,通过冻结(限制)一些不会对它们起作用的权重,dropout 能够有效地工作。&/p&&br&&p&然后模型的准确度就突破 99% 了!&img src=&/v2-cecdefc579f769b0ee4a_b.png& data-rawheight=&531& data-rawwidth=&933& class=&origin_image zh-lightbox-thumb& width=&933& data-original=&/v2-cecdefc579f769b0ee4a_r.png&&&/p&&br&&br&&p&对比之前的结果可以看到明显的进步:&img src=&/v2-e4febc49f1966bce1ef99_b.png& data-rawheight=&524& data-rawwidth=&945& class=&origin_image zh-lightbox-thumb& width=&945& data-original=&/v2-e4febc49f1966bce1ef99_r.png&&&/p&&br&&br&&p&相关资源:&img src=&/v2-fa3ddd47c7e0ac32b494df_b.png& data-rawheight=&526& data-rawwidth=&945& class=&origin_image zh-lightbox-thumb& width=&945& data-original=&/v2-fa3ddd47c7e0ac32b494df_r.png&&&/p&&br&&br&&p&&strong&第二部:建立循环神经网络&/strong&&/p&&br&&p&在这一部分 Gorner 讲解了如何使用 TensorFlow 建立循环神经网络。&br&&/p&&p&&a class=&video-box& href=&/?target=https%3A///x/page/qwy.html& target=&_blank& data-video-id=&& data-video-playable=&& data-name=&没有phd玩深度学习2 - 腾讯视频& data-poster=&/qqvideo_ori/0/qwy_228_128/0& data-lens-id=&&&
&img class=&thumbnail& src=&/qqvideo_ori/0/qwy_228_128/0&&&span class=&content&&
&span class=&title&&没有phd玩深度学习2 - 腾讯视频&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&/x/page/qwy.html&/span&
&/a&&br&&/p&&p&&strong&RNN 的结构与训练&/strong&&br&&/p&&p&首先,RNN 的结构如下,其中第二层为 softmax 层(读取出东西)。但特殊的是,中间绿色层的输出在下一步骤中会返回到输入中。&/p&&br&&img src=&/v2-a86ddf0cfda61e8f44e31f_b.png& data-rawheight=&1566& data-rawwidth=&2836& class=&origin_image zh-lightbox-thumb& width=&2836& data-original=&/v2-a86ddf0cfda61e8f44e31f_r.png&&&br&&p&下面是循环神经网络里面的等式。&/p&&br&&img src=&/v2-da26d1f13e2fc870a9a73_b.png& data-rawheight=&1592& data-rawwidth=&2858& class=&origin_image zh-lightbox-thumb& width=&2858& data-original=&/v2-da26d1f13e2fc870a9a73_r.png&&&br&&p&那么接下来如何训练 RNN?以自然语言处理为例:输入通常为字符(character)。如下图中所示,我们输入字符,反向传播通过该神经网络、反向传播通过 softmax 层,我们会得到字符的输出。如果得到的字符不是我们想要的,对比一下得到的与我们想要的,我们就对网络中的权重进行调整,从而得到更好的结果。&/p&&br&&img src=&/v2-4ca99a67bff1f0a7a066_b.png& data-rawheight=&1584& data-rawwidth=&2864& class=&origin_image zh-lightbox-thumb& width=&2864& data-original=&/v2-4ca99a67bff1f0a7a066_r.png&&&br&&p&但如果结果是错的怎么办?而且不是因为网络中的权重偏见,而是因为状态输入 H-1 是错的。在此问题中,输入是连续的,有些无能为力的感觉。在这个问题上卡住了,那么解决方案是什么?&/p&&br&&p&解决方案就是复制该 cell,再次使用同样的权重。下图演示了你该如何训练循环神经网络,在多次迭代中共享同样的权重和偏差。&/p&&br&&img src=&/v2-0eecdc169a2f6f501cf9b_b.png& data-rawheight=&1588& data-rawwidth=&2850& class=&origin_image zh-lightbox-thumb& width=&2850& data-original=&/v2-0eecdc169a2f6f501cf9b_r.png&&&br&&p&另外,值得一提的是如果你想往深处做,可以堆叠 cells(如下图)。&/p&&br&&img src=&/v2-debef50dd12a24f24bbc4_b.png& data-rawheight=&1564& data-rawwidth=&2830& class=&origin_image zh-lightbox-thumb& width=&2830& data-original=&/v2-debef50dd12a24f24bbc4_r.png&&&br&&p&而后,Gorner 以句子为例讲解了如何使用 TensorFlow 建立循环神经网络。在以下示例中,我们是用单词而非字符作为输入,建立这样的模型中就有一个典型的问题:长期依存关系。而要把下面的长句输入,需要非常深的循环神经网络,而如果网络太深,训练时候又不太好收敛。在数学细节上要提到的就是梯度消失的问题,梯度成 0 了。&/p&&br&&img src=&/v2-8ee865b3faf442c8f977d4_b.png& data-rawheight=&1562& data-rawwidth=&2838& class=&origin_image zh-lightbox-thumb& width=&2838& data-original=&/v2-8ee865b3faf442c8f977d4_r.png&&&br&&p&对此问题的一种解决方案是 LSTM。下图从数学角度解释了该解决方案为何有效。&/p&&br&&img src=&/v2-bf98ceea9d0fbae55583_b.png& data-rawheight=&1576& data-rawwidth=&2852& class=&origin_image zh-lightbox-thumb& width=&2852& data-original=&/v2-bf98ceea9d0fbae55583_r.png&&&br&&p&在实践中,LSTM 有效是因为它基于了门(gates) 的概念:&/p&&br&&img src=&/v2-eddd0edefb7e_b.png& data-rawheight=&1614& data-rawwidth=&2870& class=&origin_image zh-lightbox-thumb& width=&2870& data-original=&/v2-eddd0edefb7e_r.png&&&br&&p&GRU 的等式:&/p&&br&&img src=&/v2-e4c3a676f1b097b551dedd4c59f32c32_b.png& data-rawheight=&1572& data-rawwidth=&2860& class=&origin_image zh-lightbox-thumb& width=&2860& data-original=&/v2-e4c3a676f1b097b551dedd4c59f32c32_r.png&&&br&&p&&strong&在 TensorFlow 中实现 RNN 语言模型&/strong&&/p&&br&&p&接下来就是如何用 TensorFlow 实现语言模型的循环神经网络了。在教授语言模型预测单词的下一个字符是什么的例子中,Gorner 使用了 TensorFlow 中更高等级的 API。图中的 GRUCell 有着多层的循环神经网络层、两个门。然后把网络做的更深,3 个 GRU 堆叠在一起。接下来,展开整个网络,在 TensorFlow 中,这被称为动态 RNN 功能。最终得到如下结果。&/p&&br&&img src=&/v2-2da5b3ef82f2c23fcde2aef68e26902a_b.png& data-rawheight=&1600& data-rawwidth=&2868& class=&origin_image zh-lightbox-thumb& width=&2868& data-original=&/v2-2da5b3ef82f2c23fcde2aef68e26902a_r.png&&&br&&p&下图演示了如何在 TensorFlow 中实现 Softmax 层。&/p&&br&&img src=&/v2-e0d0bb81eb91a9eb4d0c5f5a8012d4db_b.png& data-rawheight=&1570& data-rawwidth=&2856& class=&origin_image zh-lightbox-thumb& width=&2856& data-original=&/v2-e0d0bb81eb91a9eb4d0c5f5a8012d4db_r.png&&&br&&p&就行正确理解 RNN 的工作原理很难一样,向它们正确的输入数据也很难,你会发现里面里面有很多误差。接下来 Gorner 尝试了如何做出正确的输入、得到正确的输出。依此为例,他讲解了所选择的 batchsize、cellsize 和层(如下)。&/p&&br&&img src=&/v2-49b2f50e5bfe42fe278d8dca_b.png& data-rawheight=&1572& data-rawwidth=&2842& class=&origin_image zh-lightbox-thumb& width=&2842& data-original=&/v2-49b2f50e5bfe42fe278d8dca_r.png&&&br&&p&各个步骤实现的代码如下:&/p&&br&&img src=&/v2-22a38d100c7a69de056eed_b.png& data-rawheight=&1576& data-rawwidth=&2860& class=&origin_image zh-lightbox-thumb& width=&2860& data-original=&/v2-22a38d100c7a69de056eed_r.png&&&br&&p&在 TensorFlow 中实现语言模型的完整代码如下:&/p&&br&&img src=&/v2-22acc96c85d5c35a18cd20ab3df9a3bb_b.png& data-rawheight=&1570& data-rawwidth=&2864& class=&origin_image zh-lightbox-thumb& width=&2864& data-original=&/v2-22acc96c85d5c35a18cd20ab3df9a3bb_r.png&&&br&&p&最后,Gorne 打开 TensorFlow 演示了如何实际建模语言模型,并且演示了 RNN 在文本翻译、图像描述等领域的应用。看完之后我决定先下个 TensorFlow。&/p&&p&&b&机器之心整理&/b&&/p&
当地时间 3 月 8 日-10 日,Google Cloud NEXT '17 大会在美国旧金山举行。谷歌在本次大会上正式宣布了对数据科学社区 Kaggle 的收购并宣布了多个重量级云 API。机器之心作为受邀媒体也在第一时间从现场发回了报道:《
前途便是,关注底层数学模型,其次算法,最后才是调参数,讲真如果关注最后一点,譬如Deep Learning,神经网络,那么变成本末倒置,只能称作工程而不是科研。&br&下面链接乃计算机视觉领军人物之一加州大学洛杉矶分校UCLA统计学和计算机科学教授Song-Chun Zhu的访谈录,非常有指导意义。&br&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzI3MTM5ODA0Nw%3D%3D%26mid%3Didx%3D2%26sn%3D32face7f1acb17e07f3c38dde41d880e& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&初探计算机视觉的三个源头、兼谈人工智能|正本清源&i class=&icon-external&&&/i&&/a&&br&&br&下面转自我其他地方的一个回答。&br&&br&作者:Ruobing Shen&br&链接:&a href=&/question//answer/& class=&internal&&图像处理专业的哪些方向就业比较好(硕士),主要去哪些公司? - Ruobing Shen 的回答 - 知乎&/a&&br&来源:知乎&br&著作权归作者所有,转载请联系作者获得授权。&br&&br&楼主本科硕士应用数学+运筹学,博士海德堡交叉学科计算中心和图像处理中心,组合优化+图像处理的thesis topic,算是半正式地进军这个领域。&br&&br&先说方向,最好当然是计算机视觉里面各个方向都有所了解,这样才能融会贯通。&br&下面主要回答以后就业去向,同时我也会穿插它们所要求的方向。&br&&br&1,Google, MS, Facebook, Apple,华为,阿里,腾讯,百度等世界一流科技公司,无一没有建立自己的AI实验室,AI里面,计算机视觉或图像处理是非常重要的一块,当然它们研究方向就多了,几乎会涵盖所有方向。&br&2,世界各大汽车公司,如特斯拉,宝马。汽车公司开始发力自动驾驶,而自动驾驶里面最核心的技术就是“教”汽车里的电脑如何通过摄像头实时产生的图片和视频自动驾驶。因此视觉和图像处理便是核心技术所在,如行人探测,道路识别,模式识别。&br&3,Adobe,美图秀秀等照片、winrar、real player等视频处理、压缩软件。这个不多说,最最直观的应用,比如降噪,图像分割、图像压缩、视频压缩。&br&4,AR(增强现实)最近由于Pockman GO的风靡全球又被推到第一线,而google class或者三星Gear眼镜等等,也无不和图像处理、计算机视觉的科研有关。预测这将是未来几年主推的东西。&br&5,迪士尼等各大电影制片公司。3-D电影,以及各种炫酷的电影特效,当然里面不光有图像处理,还有计算机图形学的东西在里面。&br&6,索尼,华为,蔡司等照相机、摄像头生产商。大家可知道相机或手机的照片拍出来,一般不是raw格式,jepg等格式已经是被内置的图像处理软件处理过后的照片了,另外相机里的人脸追踪,快速对焦等等,无一不和图像处理有关;再引申点,相机的灵魂&a href=&///?target=http%3A///PowerSolutions/parametrics.do%3Fid%3D101682& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CMOS & CCD&i class=&icon-external&&&/i&&/a& Sensor,当然这个更多的和物理光学有关了。&br&7,地平线,大疆无人机等机器人公司。和自动驾驶一个道理,机器人要通过摄像头“判断”并躲开前方障碍物,核心技术都在视觉和图像处理。&br&8,医疗器械设备公司。医学图像处理,核磁共振,断层扫描等等,众所周知医疗行业都是暴利阿。&br&9,工业级摄像头;包括高速路上的摄像头,机场火车站安检摄像头,工业流水线上的摄像头,嵌入了人脸或次品识别的芯片,智能地识别罪犯、次品,等等。&br&10,未完待续,有时间回来再码。&br&&br&最后插一句,想必大家也都听说北美计算机TOP4出来的深度学习的Ph.D.,基本都是被Google,FB,Apple等以150w美元年薪疯抢的状态;国内名师出来的硕士,基本也是被年薪50w人民币收割。这是一个大数据、计算机视觉最好的时代,因为入行即代表高薪;但也是最坏的时代,正如我开头所说,学术界的风气在被这个公司的功利性所引导,导致现在教授不做深度学习就拿不到funding..本人估计深度学习热5年内会见顶,因为入坑的太多太多。&br&&br&最后的最后亮观点:计算机视觉绝对可以入,但是请从运筹优化和统计分析的角度入,深度学习俩年后慎入。&br&&br&&p&最好按照惯例广告一波:&/p&&p&&a href=&/p/& class=&internal&&欧洲、北美、全球留学及数据科学深度私人定制咨询,从此DIY - Ruobing Shen的文章 - 知乎专栏&/a&&/p&
前途便是,关注底层数学模型,其次算法,最后才是调参数,讲真如果关注最后一点,譬如Deep Learning,神经网络,那么变成本末倒置,只能称作工程而不是科研。 下面链接乃计算机视觉领军人物之一加州大学洛杉矶分校UCLA统计学和计算机科学教授Song-Chun Zhu…
&p&现如今构建人工智能或机器学习系统比以往任何时候都要更加容易。普遍存在的尖端开源工具如 TensorFlow、Torch 和 Spark,再加上通过 AWS 的大规模计算力、Google Cloud 或其他供应商的云计算,这些都意味着你可以在下午休闲时间使用笔记本电脑去训练出最前沿的机器学习模型。&/p&&p&
虽然不算是人工智能训练的最前沿,但人工智能的无名英雄确实就是数据,许多许多标注或未标注的数据。研究部门和公司也都认识到数据民主化是加快人工智能的必要步骤。&/p&&p&
然而,涉及到机器学习或人工智能的大多数产品强烈依赖于那些通常没有开放的私有数据集,而本文将指出解决这种困境的办法。&/p&&p&
事实上,我们很难用一篇文章来说明哪些开放数据集是有用的,因为那些有用的开放数据集必须是可概念证明的,而什么数据集对产品或确认特征是有用的,在你收集你自己所有数据之前是不知道的。&/p&&p&
重要的是,如果数据集有良好的表现并不能保证其训练的机器学习系统在实际产品场景中表现良好。许多人在构建人工智能系统时常常忘了构建一个新人工智能解决方案或产品最困难的部分不是人工智能本身或算法,通常最困难的地方是数据收集和标注。标准数据集可以作为验证或构建更优良解决办法的良好起点。
&/p&&p&&b&计算机视觉&/b&&/p&&p&MNIST: 最通用的健全检查。25x25 的数据集,中心化,B&W 手写数字。这是个容易的任务——但是在 MNIST 有效,不等同于其本身是有效的。
地址:&a href=&///?target=http%3A///projects/mnist-in-csv/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/projects/m&/span&&span class=&invisible&&nist-in-csv/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&CIFAR 10 & CIFAR 100: 32x32 彩色图像。虽不再常用,但还是用了一次,可以是一项有趣的健全检查。
地址:&a href=&///?target=https%3A//www.cs.toronto.edu/%7Ekriz/cifar.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&cs.toronto.edu/~kriz/ci&/span&&span class=&invisible&&far.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&ImageNet: 新算法实际上的图像数据集。很多图片 API 公司从其 REST 接口获取标签,这些标签被怀疑与 ImageNet 的下一级 WordNet 的 1000 个范畴很接近。
地址:&a href=&///?target=http%3A//image-net.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&image-net.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&LSUN: 场景理解具有很多辅助任务(房间布置评估、显著性预测等)和一个相关竞争。
地址:&a href=&///?target=http%3A//lsun.cs.princeton.edu/2016/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&lsun.cs.princeton.edu/2&/span&&span class=&invisible&&016/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&PASCAL VOC: 通用图像分割/分类:对于构建真实世界的图像注释毫无用处,对于基线则意义重大。
地址:&a href=&///?target=http%3A//host.robots.ox.ac.uk/pascal/VOC/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&host.robots.ox.ac.uk/pa&/span&&span class=&invisible&&scal/VOC/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&SVHN: 来自谷歌街景视图(Google Street View)的门牌号数据集。把这想象成荒野之中的周期性 MNIST。
地址:&a href=&///?target=http%3A//ufldl.stanford.edu/housenumbers/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ufldl.stanford.edu/hous&/span&&span class=&invisible&&enumbers/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&MS COCO: 带有一个相关性竞争的通用图像理解/字幕。
地址:&a href=&///?target=http%3A//mscoco.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&mscoco.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Visual Genome: 非常详细的视觉知识库,并带有 100K 图像的深字幕。
地址:&a href=&///?target=http%3A//visualgenome.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&visualgenome.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Labeled Faces in the Wild:通过名称标识符,已经为被裁剪的面部区域(用 Viola-Jones)打了标签。现有人类的子集在数据集中有两个图像。对于这里做面部匹配系统训练的人来说,这很正常。
地址:&a href=&///?target=http%3A//vis-www.cs.umass.edu/lfw/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&vis-www.cs.umass.edu/lf&/span&&span class=&invisible&&w/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&&b&自然语言&/b&
文本分类数据集(2015 年来自 Zhang 等人):一个用于文本分类的合 8 个数据集为 1 个的大型数据集。这些是用于新文本分类的最常被报道的基线。样本大小从 120K 到 3.6M, 问题从 2 级到 14 级。数据集来自 DBPedia、Amazon、Yelp、Yahoo!、Sogou 和 AG。
地址&a href=&///?target=https%3A///drive/u/0/folders/0Bz8a_Dbh9Qhbfll6bVpmNUtUcFdjYmF2SEpmZUZUcVNiMUw1TWN6RDV3a0JHT3kxLVhVR2M& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/drive/&/span&&span class=&invisible&&u/0/folders/0Bz8a_Dbh9Qhbfll6bVpmNUtUcFdjYmF2SEpmZUZUcVNiMUw1TWN6RDV3a0JHT3kxLVhVR2M&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&WikiText:来自由 Salesforce MetaMind 精心策划的维基百科文章中的大型语言建模语料库。
地址:&a href=&///?target=http%3A//metamind.io/research/the-wikitext-long-term-dependency-language-modeling-dataset/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&metamind.io/research/th&/span&&span class=&invisible&&e-wikitext-long-term-dependency-language-modeling-dataset/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Question Pairs:从包含重复/语义相似性标签的 Quora 释放出来的第一个数据集。
地址:&a href=&///?target=https%3A///First-Quora-Dataset-Release-Question-Pairs& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/First-Qu&/span&&span class=&invisible&&ora-Dataset-Release-Question-Pairs&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&SQuAD: 斯坦福大学问答数据集(The Stanford Question Answering Dataset)——一个被广泛应用于问题回答和阅读理解的数据集,其中每个问题的答案形式是文本的一个片段或碎片。
地址:&a href=&///?target=https%3A//rajpurkar.github.io/SQuAD-explorer/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&rajpurkar.github.io/SQu&/span&&span class=&invisible&&AD-explorer/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&CMU Q/A Dataset: 手动生成的仿真陈述问题/回答与维基百科文章的难度评级相对应。
地址:&a href=&///?target=http%3A//www.cs.cmu.edu/%7Eark/QA-data/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.cmu.edu/~ark/QA-data&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Maluuba Datasets: 用于状态性自然语言理解研究的人工生成的精密数据集。
地址:&a href=&///?target=https%3A///& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Billion Words: 大型,有统一目标的语言建模数据集。常被用来训练诸如 word2vec 或 Glove 的分布式词表征。
地址:&a href=&///?target=http%3A//www.statmt.org/lm-benchmark/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&statmt.org/lm-benchmark&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Common Crawl: PB 级规模的网络爬行——常被用来学习词嵌入。可从 Amazon S3 上免费获取。由于它是 WWW 的抓取,同样也可以作为网络数据集来使用。
地址:&a href=&///?target=http%3A//commoncrawl.org/the-data/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&commoncrawl.org/the-dat&/span&&span class=&invisible&&a/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&bAbi: 来自 FAIR(Facebook AI Research)的合成式阅读理解与问答数据集。
地址:&a href=&///?target=https%3A///projects/babi/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/project&/span&&span class=&invisible&&s/babi/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&The Children’s Book Test:从来自古登堡计划的童书中提取(问题+上下文,回答)组的基线。这对问题回答、阅读理解和仿真陈述查询有用。
地址:&a href=&///?target=https%3A///projects/babi/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/project&/span&&span class=&invisible&&s/babi/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Stanford Sentiment Treebank: 标准的情感数据集,在每一个句子解析树的节点上带有细腻的情感注解。
地址:&a href=&///?target=http%3A//nlp.stanford.edu/sentiment/code.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&nlp.stanford.edu/sentim&/span&&span class=&invisible&&ent/code.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&20 Newsgroups: 文本分类经典数据集中的一个。通常可用作纯分类或任何 IR/索引算法的基准。
地址:&a href=&///?target=http%3A///%7Ejason/20Newsgroups/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/~jason/20News&/span&&span class=&invisible&&groups/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Reuters: 旧的,纯粹基于分类的数据集与来自新闻专线的文本。常用于教程。
地址:&a href=&///?target=https%3A//archive.ics.uci.edu/ml/datasets/Reuters-21578%2BText%2BCategorization%2BCollection& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&archive.ics.uci.edu/ml/&/span&&span class=&invisible&&datasets/Reuters-21578+Text+Categorization+Collection&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&IMDB:一个用于二元情感分类的更旧更小的数据集。
地址:&a href=&///?target=http%3A//ai.stanford.edu/%7Eamaas/data/sentiment/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ai.stanford.edu/~amaas/&/span&&span class=&invisible&&data/sentiment/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&UCI’s Spambase: 来自著名的 UCI 机器学习库较久的经典垃圾电子邮件数据集。由于数据集的策划细节,这可以是一个学习个性化过滤垃圾邮件的有趣基线。
地址:&a href=&///?target=https%3A//archive.ics.uci.edu/ml/datasets/Spambase& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&archive.ics.uci.edu/ml/&/span&&span class=&invisible&&datasets/Spambase&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&&b&语音&/b&
大多数语音识别数据集是有所有权的,这些数据为收集它们的公司带来了大量的价值,所以在这一领域里,许多可用的数据集都是比较旧的。
&/p&&p&2000 HUB5 English: 仅仅只包含英语的语音数据,最近百度发表的论文《深度语音:扩展端对端语音识别(Deep Speech: Scaling up end-to-end speech recognition)》就是使用了该语音数据集。
地址:&a href=&///?target=https%3A//catalog.ldc.upenn.edu/LDC2002T43& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&catalog.ldc.upenn.edu/L&/span&&span class=&invisible&&DC2002T43&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&LibriSpeech:包括文本和语音的有声读物数据集。它是近 500 小时由多人朗读清晰的各类有声读物数据集,且由包含文本和语音的书籍章节组织起结构。
地址:&a href=&///?target=http%3A//www.openslr.org/12/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&openslr.org/12/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&VoxForge:带口音的语音清洁数据集,特别是对于如期望对不同口音或腔调的语音有鲁棒性需求的系统很有用。
地址:&a href=&///?target=http%3A//www.voxforge.org/& class=& ext

我要回帖

更多关于 微信投票刷票人工投票多少钱一票 的文章

 

随机推荐