注:开源代码地址(附快速入门示例):https://github.com/tensorflow/models/tree/master/object_detection
此次发布的版本,包含了计算机视觉、卷积神经网络领域的不少前沿技术。如基于 MobileNets、Inception-V2 网络的 SSD 检测算法;基于 Resnet-101 网络的 R-FCN 检测算法;基于 Resnet-101、Inception-ResNet-v2 网络的 Faster RCNN 检测算法。
此举对于普通的码农,或计划步入AI领域的创业者来说,无疑是重大利好消息。
视觉搜索,是深度学习(或人工智能)领域最重要的研究课题之一,在现实生活中也有着非常广泛的应用。从简单的以图搜图、车牌识别,到人脸识别、植物或宠物的识别,人体或车辆的跟踪,无人机、无人汽车的自动驾驶,智能机器人等领域,都离不开计算机视觉搜索技术。
通常,视觉搜索包含了两步任务:首先,待搜索物体的检测与定位;其次,从库(知识图谱、图片库、信息库等)中搜索该物体,或查询相关联的场景。
如观看电视剧《深夜食堂》时,发现老板端出了一款美味精致的料理,想拍照搜索一下相关的食材和菜谱,视觉搜索就派上用场了。首先,系统需要检测照片里面涉及的各种食材,并提取食材的特征信息;其次,系统根据待检测物体的特征,去库里做相应的搜索和匹配,系统再根据匹配到的食材去搜索相应的菜谱。
对于机器来说,这两步都不容易,尤其是第一步,这也是此次谷歌开源基于 TensorFlow 的物体检测代码的意义所在。这点其实蛮有趣的,因为人类恰好相反,第一步的物体检测比第二步的搜索匹配容易多了。
这里,照例先吐槽一下百度的以图搜图功能,这个号称国内最好用的搜索引擎,这是百度相似图片结果:
原图如下:
下图是谷歌的搜索结果:
下面,先从简单一点的第二步说起,聊聊机器怎么实现物体搜索与匹配的。
1、图像特征提取
图像特征的提取,是图像简化标识的过程,也是图像搜索、匹配、识别的关键和前提。
传统的全局特征表示方法,如颜色、形状、纹理等特征,简单直观,但易受光照、裁剪、旋转、噪声等因素的影响,目前基本只作为辅助手段。
一些局部或特殊的特征点,相对来说有更好的稳定性,不易受外界干扰,所以更适合对图像进行搜索、匹配。如:
斑点特征检测,代表性算法有:LOG(高斯拉普拉斯算子检测)、DOH(利用图像点的二阶微分Hessian矩阵及其行列式);
角点特征检测,代表性算法有:Harris角点检测、Shi-Tomasi角点检测、FAST角点检测 等;
SIFT(尺度不变特征转化)特征检测,是具有划时代意义的特征检测算法。由于其具有非常不错的仿射不变性,旋转不变性,对于光线、噪点、视角变化等的容忍度也较高,在图像搜索匹配领域应用非常广泛,后续也出现了很多基于 SIFT 的改良算法。
SURF(加速鲁棒特征)特征检测,是 SIFT 的高效变种,简化了 SIFT 特征提取的算法,运算效率更高,基本可实现实时处理。
ORB 特征检测,主要在 FAST 特征点检测算法与 BRIEF 特征描述方法的基础上,做了一些优化和改进,是 SIFT、SURF(两者都受专利保护)之外一个很好的选择。
KAZE/AKAZE(KAZE的加速版)特征检测,比 SIFT 有着更优异的性能和更稳定的表现,是继 SIFT 之后一个较大的突破,也是目前我在系统中优先采用的图像特征提取算法。
另外,还有基于 BRISK/SBRISK(二进制鲁棒尺度不变关键点)、FREAK(快速视网膜关键点)等算法的特征提取检测,由于这些算法我没有过多的关注,所以暂且略过。
不过,由于 2012 年之后,深度学习首先在语音识别、计算机视觉等领域开始崛起,深度学习算法正逐步蚕食传统特征检测算法的领地。
特别是利用深度学习的卷积神经网络(CNN)训练输出的图像卷积特征,表达能力比前面提到的传统特征更强,而且还具备很不错的迁移能力,只是可解释性弱于传统特征。如何设计卷积网络,以及如何结合传统特征检测的思路,使得深度学习训练得到的视觉特征更稳定,可解释性更强,是当前业界的一大研究课题。
2、图像物体检测
图像中物体检测与定位的过程,与文本中词汇自动补全的功能类似,可以极大的提高用户搜索的体验。
传统的做法,一般是由用户手动裁剪、框定,来指定需要搜索的物体。目前已经有了不少算法来实现物体的自动检测。
除了前面提到过的,谷歌此次开源版本中已经实现的 Faster R-CNN、R-FCN、SSD 检测算法之外,还有不少其他检测算法,如除 SSD 外,另一款端到端的检测算法:YOLO(You Only Look Once),精度可能略逊于 Faster R-CNN(非绝对,不同的数据、网络设计会导致差异),但检测速度较快。后续的 YOLO 9000(YOLO 升级版),论文提到能够检测识别超过 9000 类的物体,而且检测更加快速、准确。
这个领域的初学者,目前可以考虑基于谷歌新开源的《TensorFlow Object Detection API》先做一番尝试和实践,后续有机会再一起交流分享。
3、其他相关技术
大规模的项目实践中,除了物体检测与特征检测算法外,还需要结合不少其他的技术,才能让视觉搜索有更流畅的体验。
通过特征提取算法,我们可以获取到图像离散的特征表示,或转化为视觉词汇。项目实践时会基于局部敏感哈希(Locality Sensitive Hashing)等技术,进一步压缩数据存储空间。
类似 Lucene 的文本搜索技术,我们会对视觉词汇及其相关信息建立倒排索引、B树索引等,实现高效的信息检索。同时,类似 Word2vec 这种文字模型,视觉词汇之间也可以构造类似的相关性矩阵,将查询映射到附近的相似特征,以实现更好的相似图片搜索。
4、应用前景
视觉搜索的应用前景显然是非常广阔。
譬如,和电子商务结合,搜索同款或相似款的衣物、包包;和社交网络结合,实现更好的图像理解与互动;和自媒体结合,更方便的寻找图像、视频的素材;和知识产权结合,可以更准确的追溯图像来源与版权信息;和医疗健康结合,可以更准确的做病理研究;和工业生成结合,实现更可靠的瑕疵物件筛选;和网络安全结合,实现更好的对图像、视频内容的自动过滤审核;和安保监控结合,可以实现更准确的跟踪定位;和智能机器人相结合,可以实现更好的机器人物体识别和场景定位...
题外话
前些日子,苹果 CEO 库克在 MIT 的毕业典礼演讲上曾说:我并不担心人工智能可以让机器像人一样思考,我更担心人会像机器一样思考。
个人觉得,这句话说的非常精彩和及时。在即将到来的智能时代,技术首要的应该是更多的注入人性中的正直和善良,否则技术带来的也许是灾难,而不是福音。
码字不易,文笔有限,文中若有不当之处,欢迎交流指正。