电动升降机

从功能上来说,你这个应用非常适合采用

,事实上,深度学习本质上就是用来做分类识别的,尤其是针对零件与零件之间,图像上差异比较小的时候(比如你需要自动分拣A,B,C三种零件,但其形状差别很小),更加适合用深度学习。

不过深度学习也存在它的问题:

训练的样本要足够大,具体多大合适,要看你对图像区分度的要求。如果样本不是很充分的情况下,比如数千张或更少,其实也可以考虑用传统方式,比如SVM。我用传统方式做过宝马车标,安全帽等的识别,准确度相当高了,尤其是车标识别,接近100%准确,而我只用了不到100张做训练,而且无论算法还是模型库都不大,很适合做嵌入式,而且可以做到实时。

对深度学习而言,速度/性能是个很大的问题,不知道题主的机器性能如何,以及对应的图片分辨率,是否要实时处理?我估计题主应该是那种实时高清识别,而且有可能是嵌入式设备,我们姑且认为视频是直接从本机采集,不需要做解码,即便如此,基于深度学习的运算量也是很高的,尤其是resnet这种,一般而言,

越多越精准,运算量也会越高。高清情况下(

应用一般会1080P或更高),我个人认为单张图片的识别时间会超过1秒,很难做实时。有朋友在256核的TX1上

过标清的FAST RCNN,单张处理时间为0.6秒左右,我本人测试过googlenet,在一台阿里云E5的机器上(无

),识别一张720p的图片,估计约0.3 - 0.5秒左右(我的应用需要考虑网络传输的时间,没打log,只是通过返回结果大致估计)。无论哪种情况,离每秒25帧的实时要求都差得太远。

结论:

嵌入式设备,个人不建议用深度学习,除非你能将密集运算部分移植到

上,否则性能会是个很大的问题。

高清和实时的应用,一般而言也不建议用深度学习,理由同上。

对于区分度要求很高(种类很多,很相近),非实时的应用,基于后端或云端的业务,有足够的运算资源。特别适合用深度学习。

能解决问题才是王道,传统方式未必不可以。

强烈建议题主关注一下,深度学习领域芯片相关技术的进展,比如谷歌的TPU,国内的

,以及轻量级框架mxnet等。

举一个具体的实例:

深度学习应用于工业机械臂的控制,这也是 Industry 4.0 的发展方向。

将深度学习算法应用到工业机器人上,拿来做商品或者零件分拣,大概可以分为「分类」和「捡起」两步:

(1) 对商品或者零件进行「分类」

这个步骤非常适合使用深度学习,因为深度学习本质上就是用来做分类识别的。

(2) 将商品或者零件「成功捡起」

对于单个商品或者零件,要想将其成功捡起,关键是选择合适的把持位置,通俗的将,就是机器人夹零件的哪个地方,可以使零件不下滑,从而成功地被捡起来。比较典型的算法,一个是採用两阶段的深度学习算法,第一阶段通过小型的Neural Network,检测出数个可以把持的位置,第二阶段採用大型的Neural Network,对第一阶段得到的各个把持位置候选进行评估,选择最终的一个把持位置。这种算法的成功率大概能达到65%。

(上图显示了第一个阶段得到多个候选把持位置,第二阶段得到最终把持位置)

另一个是结合了深度学习和He

rogeneous Learning,将把持位置的信息(width, height, x, y, θ)以及把持该位置时成功捡起零件的成功率“Graspability”用来训练模型,模型如下:

下图表示的是把持位置的信息(width, height, x, y, θ)的定义,以及各把持位置对应的Graspability Label。

下图是Posi

ve和Negetive教师信号的例子。

下图是得到的最终把持位置,可以达到85%左右的成功率。

对于多个商品和零件堆积在一起的情形,除了把持位置的选择,还需要选择合适的抓取顺序,即先抓取哪一个零件,后抓取哪一个零件,这时可以採用Reinforcement Learning算法,最终可以达到约90%的成功率,和熟练工人的水平相当。当然,要将这些成果大规模应用到工业流水线上,还需要考虑到正确率要求更高(一般是99.9%),以及速度要求更快等,目前许多改进就是围绕满足这两点指标来进行的。