路上看到好看的花,用手机拍照并上传到某个看图识花的应用,然后手机会回答我:“拍到的可能是「红果仔」,还可能是「番樱桃」「珊瑚豆」”。对于简单的植物,我们可以拍照识别,比以前方便多了。
看图识花算法,是如何“识花”的?
从技术上讲是深度学习的目标检测算法
但是我会这样解释给长辈听:手机把拍到的照片,传输到网上的另一台经过“训练”的电脑面前。这台电脑看过了非常多的植物图片,“学习”到了各种植物的特征,因此它“看”一眼植物的图片,就能告诉我们这是什么植物。当然这个电脑和人一样,也有可能给出错误答案。
---------代表正文结束的分割线---------
---------下面都是一些补充---------
---------灰色字体可忽略---------
即便不下载某个软件,在微信上也能找到合适的识花小程序,因为不是广告,所以打码了,此处为了提高难度,搜索了红果仔的花,而不是标志性的果
今天我想简单讲一讲这种识别图片的算法(希望让没有机器学习基础的人看懂,不会出现数学公式),这种技术就叫 “深度学习”,有时候会被宣传为“人工智能 AI”。直到2018年,我们实现的“人工智能”还不能达到“通用”的程度,也就是说:用来识花的AI,可以让它看水果图片,学习识别水果(迁移学习),但是我没有办法让它听人讲话,就让它学会语音转文字,除非我换用其他的AI(比如手机语音识别)。
识花APP使用这种深度学习技术,是人工智能的一种,具体关系如下:
深度学习 ⊆ 机器学习 ⊆ 人工智能
⊆ 包含于
来自《Deep Learning》俗称“花书”,第一章,图1.4,简化后的Venn图(略去了Representation Learning)
我尝试过给家人解释 “深度学习如何识别图片”,一般按照这个顺序就能把事情讲清楚:
深度学习中的学习(与统计学相似) 深度学习中的深度(网络变深) 深度学习中的卷积(提取特征)深度学习与统计学
"首先,人工智能(AI) 是一个挺华丽的词,实际上它是统计学。" 2011年的诺贝尔经济学奖得主 托马斯 在科技创新论坛上说道。
"The first thing that AI is a gorgeous rhetoric is actually statistics." Said Thomas J. Sargent, the Nobel Prize winner in Economic Science.
http://worlditnews.top/2018/08/27/ai-is-statistics-ali-ai-the-person-in-charge-kim-jong-the-winner-of-the-award-sargent/
深度学习与统计学有相似之处,通过看很多图片(收集数据),学习图片里面的特征,然后给出结果(分析和解释数据)。
它就像一个笨学生,好在很用功。通过对大量样本的学习,它掌握了样本的规律。而给小朋友看几张苹果的图片,小朋友就知道什么是苹果了,机器就需要成千上万张图片,才能从图片中识别出苹果。在样本很少的情况下, 人类的学习效率是机器无法匹敌的。
种下的100株小花发芽了,我记录它的平均高度:
第一天,1.1 cm 第二天,2.2 cm我可以直接猜测出第三天很有可能是 3cm,人类有人类的方法,机器有机器的方法:
生长时间越长,生长高度越高,所以我们先帮机器选好模型公式:
高度 = k × 天数
定一个小目标(损失函数):
小目标 = (机器的答案 - 正确答案) 取绝对值
通过求导,机器可以知道误差大小,与k的变化方向,逐步调整k,逼近正确答案,这个过程就像蒙着眼睛摸着石头走到l蓝色的峡谷底部。
图片来自 arXiv:1712.09913 -- Visualizing the Loss Landscape of Neural Nets,左边是VGG,右边是ResNet,在CIFAR-10 dataset 上,对损失函数降维后进行可视化。
眼睛被蒙上了以后,我们看不到远处的山谷,只能感受地面的坡度,不过顺着坡度往下走(梯度下降),依然可以走到更低的位置,有时候需要主动地跳出一些洼地(避免局部最优),才能到达更深的谷底。如果确定了一个适合自己的小目标,并且选择了正确的模型,那么沿途遇到的困难会更少,比如上面的两张图片,很明显右边的“山路要更好走”。(学习是有技巧的,对于人类也一样!)
在了解到机器的学习过程后,我们会意识到:机器给出的回答质量,与它使用的训练数据有很大关系:机器在小花的数据上进行训练,用来对小花生长高度进行预测,总会比在小豆数据上面的预测要好。日常用作训练的题目,如果和考试题目差别过大,那么勤奋的笨学生(机器)可能会考得不好(训练数据单一导致泛化性 Generalization 低)如果我们用小花,小豆,小草等数据喂给机器,机器也许更学习到更高层次的发芽高度规律。(提高训练集质量,增强模型的泛化性)
我不知道这张图片的来源
所以一个识花算法的识别准确度,与它使用的训练图片有很大关系:做算法的公司在得到授权后,使用图库里面标记好的植物图片对自己的机器进行训练,常见的植物(特别是好看的花),因为机器的训练十分充足,所以准确率比较高。而大山深处一棵特别是不起眼的小花,则可能无法被识别(召回率recall低,机器:我没有做过这道题目,超纲了不能怪我!)
我也不知道这张图片的来源
然而,深度学习不全是统计学。
深度学习与“深度”
深度学习这个名字的直译于 Deep Learning
深度是指神经网络的深度比以前更深 学习是指神经网络能够自动调节,让自己更靠近正确答案(上面讲过的,对训练数据进行统计)因为机器性能变好了,以及神经网络通过误差反向传播的参数更新算法的发展,使得现在的神经网络可以设计得更大更深,而且结合分布式,可以在超大的数据集上面训练(比如:Training ImageNet in 1 Hour
- Facebook AI Lab)
至于神经网络是什么,我们可以看下面这两张动态图,输入一张手写数字的图片,然后它会激活一些神经元,这些神经元会激活其他神经元,直到神经网络的末端,一个个代表着分类结果的神经元会像小灯泡一样亮起来。最亮的小灯,代表神经网络对图片的判断结果。
一层层的神经网络,来源 youtube.com/watch?v=3JQ3hYko51Y
如果输入一张手写数字的图片,那么对应的神经元会被激活,最终导致代表3的小灯泡就会发出最亮的光,于是我们就知道这个神经网络认为输入的图片是3,如果这个3写得和5差不多,那么神经网络也会和人类一样,分不清楚。
脉冲神经网络 Spiking NN,其实B站搜索“神经网络可视化”也有,av34579997
因此,你拍摄的图片与机器图库里面的图片越接近,识别准确率会更高,而如果你拍摄的图片是图库里面不存在的(比如你拍了竹子的花序),那么你询问大佬的时候,大佬即便没见过这种植物,他/她也能够查询检索表告诉你答案。然而机器并不会查检索表,它最多只能告诉你:“这个植物和xxx长得像。”
卷积网络就是一种神经网络,它也由许多神经元连接而成。
深度学习与卷积网络
2016年的阿法狗(AlphaGo),它不仅能下围棋,从零学习的升级版AlphaZero还能自学国际象棋与日本将棋(类似于中国象棋),而且类似的使用蒙特卡洛搜索价值网络的算法,还可以辅助医生诊断疾病。
图片来自DeepMind https://deepmind.com/blog/alphazero-shedding-new-light-grand-games-chess-shogi-and-go/
但是它还无法做其他事情,比如看到没有带钥匙的我,然后帮我开门,并提醒我不要丢三落四。识花APP也是一样的,虽然可以被称为弱人工智能,但是它只能完成图像识别一类的任务。它们都有一个神经网络,对输入的数据进行处理,然后输出一个结果。而识花算法使用的是卷积网络。
图片来自 http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
上面动态图的橙色窗口(卷积核),通过滑动窗口对图片进行卷积,提取图片特征:
原始图片,进行特征提取,得到特征图片。 特征图片,再进行特征提取,得到更高级的特征图片。进行的提取次数越多,能提取到的特征越复杂,这个时候卷积网络就更深了。上面我们使用了简单的一次函数,对高度-天数 进行建模:
高度 = k × 天数,y=kx
而图像识别是个更加复杂的问题,用这样简单的函数还不足以解决问题,所以我们使用符合平移不变性的卷积网络解决这个问题。这种用卷积网络提取图片特征的方式,用在图像识别上出奇的好!
图片来自谷歌云 https://cloud.google.com/blog/products/ai-machine-learning/what-makes-tpus-fine-tuned-for-deep-learning
上面的动态图,展示了卷积核识别手写数字8 的过程,我们可以看到,对于7、8、9三个手写数字,只有数字8 的得分最高,因此判断输入的数字是8,许多个卷积核组成一个卷积网络,就能判断更多图片,识花APP就用到这种卷积网络(当然现在又有新的模型了)。
一层层的神经网络,来源 youtube.com/watch?v=3JQ3hYko51Y
因此,如果你强行拿一个手写漢字 “八、捌” 给上面的卷积核识别,那么卷积网络也会蒙一个答案。就像上面的动态图一样,末端的10个代表数字的灯泡,总有一个是最亮的。所以有时候,上传某个人照片到识花APP,总会强行得到一个结果。
对人像的识别,识花APP给出了意料之中的错误答案,可能设计这个识花算法的公司,检测到人像的时,会返回一种有美好象征意义的植物。
了解花卉识别算法,可以让我们用更加正确的姿势使用识花APP:
有明显特征的花,越容易被卷积网络识别(和人类一样) 混入图片中的其他东西,会影响准确率(要善用截图,把无关的植物排除出去,不让它们参与卷积网络的特征提取) 尽量让自己提交的图片,与训练图片接近(某些便于查阅检索表的特写图片,可以给人看,但是机器不容易处理)我想知道路边小花小草的名字,我想知道这个识花算法是怎么实现的。求知欲就是这么神奇的东西——人类与生俱来的好奇心,人类想要了解世界万物的冲动,可能是推动人类点燃文明之火的某种助力吧。希望了解算法细节,可以直接看Stanford cs229 cs231, 《Deep Learning - Bengio》, etc.
-------上面这些都是补充-------
总结上文对 “识花APP如何 ‘识花’ ?” 的回答:
手机把拍到的照片,传输到网上的另外一台经过“训练”的电脑面前。这台电脑看过了非常多的植物图片,通过对训练数据的统计,从而“学习”到了各种植物的特征。由于植物特别多,所以需要很多个卷积核组成的深度卷积网络,才能完成对植物图片的识别。
从技术上讲是“深度学习的目标检测算法。
---------请直奔评论区--------
我发现许多人对人工智能(深度学习)比较感兴趣,加上我自己是做深度学习图像的,因此经常有人问我这个问题,而其他和植物有关的公众号却搜索不到这种文章(蛤蛤,他们也没有能力写),所以我只能自己写了。
我写这篇文章,希望能增加 小朋友/大朋友 对科学技术的了解(中学数学再难也要学,基础教育很重要,高等数学可以看兴趣学),深度学习依然是很有用的一项技术,在得到正确的使用的情况下,可以改善我们人类的生活——例如:使用了深度学习技术的识花APP,已经方便了我们这些爱花人士,希望未来还会有更多技术能得到应用与发展。
文章:1943耐萌
图片:萤火,薄荷
责任编辑:
相关知识
拍照识花软件免费PC版
拍照识花软件哪个好?花草识别最好的app
识花软件哪个最好,识别花卉植物的软件有哪些
花卉识别利器or植物识别神器:中科院发布“花伴侣”
识花君植物识别
识花app哪个好用?拍照识花软件下载
中科院开发出“花卉识别系统” “拍花识植物”成为现实
如何用手机识别植物花卉?轻松识别的方法来啦
识花君拍照识别植物下载
“植物专家”随身带 一键识别花世界
网址: 看图识花的算法,如何识别植物? https://m.huajiangbk.com/newsview76603.html
上一篇: 【农药技术】农药喷药技巧 |
下一篇: 4普通植物病理学 |