教你用电脑技术分类两吨乐高积木~

2017 年 7 月 22 日 THU数据派

来源:机械鸡

作者:Jacques Mattheij

本文长度为2300字,建议阅读4分钟

本文教你利用机器识别、搭建神经网络系统等步骤分类乐高积木。



我6岁的时候,叔叔把他的乐高玩具送给了我。作为一个孩子,在那以后的很多年里,我除了玩乐高,几乎没有做其它事。我尝试着用乐高组装各种造型。乐高陪伴我度过了一段相当美好的时光,直到后来才被电子和电脑取代。


乐高玩具在专门的网站上按块售卖,或者成盒成堆的在eBay上销售。我发现整堆没有分类的乐高玩具大概是10欧/千克,一套整合的乐高售价是40欧/千克,而一套稀有组件和乐高机械组(用来组装复杂机械作品的组件)一千克能卖到几百欧元。


很显然,这里存在一个家庭手工市场的机会。人们可以整盒或整堆购买乐高玩具,然后通过手工分类的方法,把它们分成更有价值的组合。

 

我觉得如果做这件事的话应该会很有趣。


于是睡觉前到eBay上对本地几个正在成堆拍卖的乐高玩具出了价。第二天早上,我一觉醒来,有相当数量的eBay卖家给我发来了交易成功的祝贺邮件。(eBay经验1:如果你赢得了这么多数量的拍卖,说明你确实出价高了。)

 

这个事情坏的一面是我可能确实买贵了,更糟的是我买的太多了。


当我拿到所有成功拍下的乐高玩具后,我的车库彻彻底底被这些箱子和盒子塞满了——都算起来大约有2吨重。


但这也有好的一面,那就是它确实为我的分类工作提供了足够的动力。但是手工分类的工作并没有正式开始过。在试着分类了几块组件后,我意识到如果依靠人工,需要几辈子的时间才能分完所有这些组件。


电脑技能拯救了我!我决定做一个自动扫描和分类组件的程序解决这个问题。

 

经过一段时间的尝试后,我发现每一步都有几个需要解决的问题。一些比较明显,一些不太明显。简单总结如下:

 

从漏斗放入乐高组件出乎意料的困难

 

我遇到的第一个问题是,把乐高组件从传送带顶部的漏斗里放入出乎意料的困难。重力和传动机器有时候能完美的把乐高组件拼装在一起。我没有找到又宽又深的漏斗,能够防止随机拼接的乐高卡在上面。


因此,我使用一个慢速传送带把连起来的组件从漏斗里拉出来,防止它们进入快速传送带。这个传送带带动组件经过一个价值30美元的放大镜。放大镜通过USB接口和PC相连进行识别。


扫描组件

 


为了识别组件,首先我不得不为每个组件进行拍照。这个过程充满麻烦。例如,一些组件可能会比图片边框还要长,另外一些组件的颜色和背景非常相像等等。我花费了几周的时间才实现可靠的固定和自动扫描,以便我能够生成完整的乐高组件图片。


识别组件

 

下面是最困难的部分:识别每个组件。乐高积木有几千种不同的形状和100种颜色(通过问一个人在他的印象中小时候玩的乐高玩具是什么颜色的,能够大概知道这个人的年龄)。除此之外还有一些其它问题需要解决。

 

筛选假冒的组件:这里面有很多冒牌乐高。冒牌乐高几乎不值钱,如果发现很多冒牌乐高会导致产品大幅度贬值。因此需要在发给客户前,把冒牌货挑出来。

 

褪色的组件:乐高积木经常是组装起来进行展示。这样很好,但如果展示地点在阳光下,组件就会随着时间慢慢褪色。白色变成黄色,蓝色变成微绿色,红色和黄色褪色等等。如果乐高没有很多的颜色,这很容易识别。但实际上乐高的很多颜色和褪色后的组件很接近。

 

受损的组件:不是所有的乐高都很结实,一些组件很容易破损,事实上很难发现他们是完好的。如果你不想把损坏的组件发给客户,你需要找到把他们识别和挑选出来的方法。

 

脏的组件:我买的大部分组件是干净的,但是也有一些看起来像是被当做了生物实验的培养皿或用来做鸟窝…

 

开始,我想利用OpenCV计算机视觉库对组件进行分类。使用轮廓匹配和圆检测,这个系统可以识别除基础乐高积木的区别,但也仅此而已。

 

之后我尝试贝叶斯分类器:我选择识别特征,并为其构建软件探测器。我一共选择了18个特征,例如组件重量、是否有洞、可以看到多少凸起等等。

 

构建和测试探测器花费了相当多的时间,最后我终于成功的实现了以相当高的正确率识别组件。但是系统运行的速度太慢了,无法跟上传送带的速度。经过大约6个月的失败尝试后,我决定试验神经网络。我选择了谷歌大脑团队研发的TensorFlow。TensorFlow可以运行在CPU上,但是为了大幅提升速度,我加入了价值700美元的英伟达显卡GTX1080Ti进行并行运算。

 


使用TensorFlow需要一个较长的学习曲线。最终我选择了Francois Chollet开发的Keras,一个高级别的Python神经网络框架。Keras像是TensorFlow的外包装,它让TensorFlow变得易用了很多,特别是在看了Jeremy Howard和Rachel Thomas关于机器学习的优秀入门课程后。

 

我开始热切的构建我的神经网络系统。


几天之内,我用Keras搭建的基于VGG16模型的单一分类器终于开始工作了,并首次处理超过几类组件。

 

下一步是给我的神经网络设定一个足够大的训练集,大概1000种乐高组件。开始这看似是个不可能完成的任务:我不知道怎样手工拍照和标注足够多的样品。即使是最乐观的估计,也需要我工作6个月或更长时间。

 

后来我认识到我不需要自己制作全部训练集。机器可以拍照和标注照片。我需要做的是当电脑出错时纠正过来。随着神经网络不断训练,错误越来越少,纠正标注的工作量也随之下降。

 

第一天我标注了大约500个起始图片,用作训练网络。第二天机器分类了2,000多个组件,其中一半左右标注错误,需要人工纠正。这2,500个图片作为下一轮训练集。之后让机器识别的另外4,000个组件中,90%是正确的!所以我只需要纠正其中的400个图片。两周以后,我已经有了20,000张标注正确的图片。

 

一些类型的组件在训练集中数量仍然不足,所以我需要增加这些类型的图片。我可能仅仅是标注了含有这些类型组件的一个样品集。一旦软件能够可靠分类我车库中所有类型的组件,我就可以用来分类全部的2吨乐高积木。


把组件放入正确的箱子里

 

一旦组件被识别,需要从传送带上移至正确的箱子里。这也是一个有趣的问题。经过一些机械推送器的实验后,我的最终方案是在传送带旁边放置一个小喷嘴,并精确地计算从扫描位置到小喷嘴需要多长时间。之后喷嘴在适当的时候喷气,把组件吹入指定的箱子里。






校对:丁楠雅


为保证发文质量、树立口碑,数据派现设立“错别字基金”,鼓励读者积极纠错

若您在阅读文章过程中发现任何错误,请在文末留言,或到后台反馈,经小编确认后,数据派将向检举读者发8.8元红包

同一位读者指出同一篇文章多处错误,奖金不变。不同读者指出同一处错误,奖励第一位读者。

感谢一直以来您的关注和支持,希望您能够监督数据派产出更加高质的内容。

登录查看更多
0

相关内容

与淘宝网相类似,人们可以通过这一网络平台向他人出售商品及服务。
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
36+阅读 · 2020年4月5日
机器学习速查手册,135页pdf
专知会员服务
342+阅读 · 2020年3月15日
【综述】自动驾驶领域中的强化学习,附18页论文下载
专知会员服务
176+阅读 · 2020年2月8日
深度学习技术在自动驾驶中的应用
智能交通技术
26+阅读 · 2019年10月27日
清华大学两名博士生被开除:你不吃学习的苦,就要吃生活的苦
机器学习算法与Python学习
25+阅读 · 2019年9月16日
无人驾驶仿真软件
智能交通技术
22+阅读 · 2019年5月9日
特斯拉首席设计师150页PPT详解其全自动驾驶芯片
智能交通技术
15+阅读 · 2019年5月1日
手把手教你用Keras进行多标签分类(附代码)
数据派THU
11+阅读 · 2018年7月17日
推荐|网易云音乐分析之推荐算法
人人都是产品经理
10+阅读 · 2018年2月26日
TensorFlow图像分类教程
云栖社区
9+阅读 · 2017年12月29日
Arxiv
6+阅读 · 2019年8月22日
S4Net: Single Stage Salient-Instance Segmentation
Arxiv
10+阅读 · 2019年4月10日
Arxiv
8+阅读 · 2019年3月28日
Arxiv
4+阅读 · 2018年5月14日
VIP会员
相关资讯
深度学习技术在自动驾驶中的应用
智能交通技术
26+阅读 · 2019年10月27日
清华大学两名博士生被开除:你不吃学习的苦,就要吃生活的苦
机器学习算法与Python学习
25+阅读 · 2019年9月16日
无人驾驶仿真软件
智能交通技术
22+阅读 · 2019年5月9日
特斯拉首席设计师150页PPT详解其全自动驾驶芯片
智能交通技术
15+阅读 · 2019年5月1日
手把手教你用Keras进行多标签分类(附代码)
数据派THU
11+阅读 · 2018年7月17日
推荐|网易云音乐分析之推荐算法
人人都是产品经理
10+阅读 · 2018年2月26日
TensorFlow图像分类教程
云栖社区
9+阅读 · 2017年12月29日
Top
微信扫码咨询专知VIP会员