5 月 26 日下午,在第二十八期七牛云架构师实践日,金城教授进行了《基于手绘草图的图像检索技术研究》为题的演讲。本文是对演讲内容的整理。

  作者介绍:

  

  金城,复旦大学计算机科学技术学院教授、博士生导师金城。上海视频技术与系统工程研究中心执行副主任,上海市优秀技术带头人,主要研究方向为图像视频信息处理、分析与检索,围绕视频监控、多媒体内容挖掘与检索,互动辨识等开展相关研究。

  

  相信各位一直以来都用过非常多的图像检索方法,比如我们在百度里输入一个关键词或一张照片就可以找到一张图。在这样的使用过程中,大家都会面临一个问题,那就是得到的结果可能乱七八糟,不一定是你想要的图片。

  而我们的图像检索和这样的方式稍有区别,举个例子,现在我想找张素材图,这边是座山,那边是太阳,只能输入太阳、山,不能输入左边是山、右边是太阳,而且内容可能比较乱。另一种情况就是用照片搜图,通常是为了找到完全一样的或更高精度的图片时使用的,但要找到一张比较类似的就比较难,例如上传小猫的图片,出来的结果基本都是不同尺寸的图片。或者是我家女儿画画,比如画一只鞋子,然后就可以找到跟鞋子长得像的图片,从而在淘宝上找到相应的商品。也就是说,根据我女儿画的草图,可以在一个非常大的图像库里找到相应的图。

  

  其实草图很早以来就有非常多应用了。比如上图丰子恺大师的画,很简单的几笔就能描述一个场景或一个故事。但我拿这个图去百度图像检索,搜出来的肯定不会有月亮和茶壶、一个人坐在那里。于是我们就考虑,怎么解决这个问题。

  

  上图是最古老的古埃及象形文字,跟我们古代的经文、甲骨文非常相似,同属象形文字。这是我们做这个事情的一个有趣出发点。

  

  上图是在印度尼西亚某个山洞里拍摄的,是一副我们先人在岩洞里画的画。左边是 3.5 万多年前的一只猪,右上角是一个人把自己的手放上去画了一张图片。这两张图虽然出现在一起,但隔了大概 4 千年。这个猪现在还能找到。

  由照片可见他们写实水平还是可以的,画的样子非常像猪。那么我们不禁畅想:有没有可能找到岩画的考古现场,就能直接通过图形找到网上的照片?这是很有趣的事情。

  

  如果说刚才的图画得还不够好,那么上图就已经很清楚了,这个动物有角,身上有很多毛,感觉绘画水平有提升。但其实这张图更早,大概距今 4 万年前,和上图一样的是,这张图现实里也有相应的动物。

  而在绘画水平不够好的情况下,我们掏出手机画个画,能不能找到跟这个画相似的东西?比如小朋友到博物馆,一定非常无聊。所以我们想,有没有可能搞一个大屏幕,让孩子可以画画,画出来一个碗,然后告诉他,这个博物馆有这样的碗,这就是一个比较好玩比较酷的事情。

  以上这些想法,就是我们当时做这件事情的动机。

  我们看这个问题具体是什么样的?

  

  我们自己手画的图,一看就知道,第一个是埃菲尔铁塔,中间是金字塔,最右边是有很多柱子的古罗马建筑。那能不能从库里把类似的图片找到?我们跟以前的检索有着不一样的输入方式,从而是可以找到的。在网上抓图的时候,有很多图像标签文字,而事实上百度、Google,任何搜索引擎的大部分方式,就有这张图以及文字、标签。以前在百度里做图像检索,输入标签,事实上是这张图里出现过的或者语义上相似的。通过这些文字才可以找到,但它并不知道这是一个金字塔还是什么。

  

  我们要做的事情,就是输入图以后,找到一系列的图,里面有些是 Relevance 相关性的。然后下面打个分,1 表示是相关的,0.8 可能不是那么相关。输入这个图,正确的 Relevance 应该是 0.96 是最像的。后面的金字塔可能因为只是两边的样子比较像,所以是 0.82。我们希望输入一个草图,从一个库里找到一系列这样的图,然后按相关性排序,这是我们的任务。

  我们做了一个方法,如下图所示:

  

  它分成线上线下两个部分。离线部分有数量庞大的图像库,我们首先把其中的图片转化为类似草图一样的图,这样的图才能做有效的对比。然后我们对它提取特征,画出来的图也会在同样的网络里提取特征,两相比较就能得到一个排序。但有的时候我们觉得,这个排序不一定完全靠谱,所以我们会重新做一次排序,把真正相关的排在前面。

  这里面有三个核心问题:

  第一,怎么把彩图变成草图?

  第二,特征怎么提取?

  第三,怎么做重新排序?

  我们用搜索引擎会发现,很多图像检索的结果很差。我们希望输入这个“埃菲尔铁塔”,别出来奇怪的结果,或者至少奇怪的结果排在后面。为了达到这样的目的我们是这么做的:

  

  首先就是做到类似草图的样子,比较简单的思路就是边缘特征。目标是从照片变成像手绘一样的图。当然边缘有很多不同的方法,这是一种提取的方法,但里面还是有很多的杂质以及噪声。我们用这个方法,加强了外轮廓的概念,把相应的背景噪声和细节噪声去掉。类似于草图的生成,这是我们的第一步工作。

  有了刚才的图,然后开始对它提一些特征。我们可以这么理解特征:有两张图片看上去差异非常大,但我们如果希望这两张图片是某一张图片,它一定在某个特征上是一样的,或者说把它们从一个很高维度的空间转化到一个维度空间的时候,是一个点。比如二十个幼儿园小朋友,可以分成男生、女生,虽然男生之间长得不一样,但他们的共同特征是男性。这样就从人的高位空间,直接映射到了一个一维空间。所以我们要找到一个有效特征来证明这两个东西是一样的。同时另外重要的是,如果是不一样的,在新的空间里应该尽可能远离。

  

  接下来我们提取草图图像里的很多局部的小块,输入网络。这是里面的细节,同时整张图也很重要,我们用了一个专门的网络,把两部分得到的相应的小特征再进行整合。这个网络的特点,就是希望所有的输入经过某个网络变换以后,能得到被压缩或提取过的新特征,这个特征值通过完全相同的逆向操作能还原回来。好比一个加密和解密的过程。这样如果能做到加密以及解密,我们就认为这个特征很好地保留了原来的信息,同时又能做到一定程度的压缩。这就是一个比较好的特征。

  然后我们需要做 Re-ranking optimization 重排序的优化。

  

  传统的工作,我们可能得到这样的排序结果,有什么办法把排序做得更好?一个比较简单的方法,这几张图本身长得就很相似,可以把所有的图根据表面相似性进行聚类。这个方法如果靠谱,排在前面的图中,大部分应该确实是这个图的内容,这是我们一个假设。如果这样,就可以进行聚类。聚类以后数个数或是计算某个值,就可以判定某类比较相似,这样就可以把这类的图片权重进行调整,然后得到最终结果,有的排在前面,有的被排在后面。

  比如说搜“埃菲尔铁塔”,旁边可能站着某个美女,你进行聚类,就会知道长得像埃菲尔铁塔的图会往前排,而有美女的应该会往后排,这是一个 Re-ranking 的方式。

  

  这是青花瓷的图,我们抓了一张博物馆的图,有 9 百张照片以及 10 万张其他的照片,大概 30 个不同的样子。我们的结果,左边显示的是输入这个图以后前 8 个没有做 Re-ranking 的结果,右边的是做了 Re-ranking 以后的结果。基本效果就是输入这个图,蝴蝶就会排到很后面,碗可能也排在后面。

  这个工作需要量化分析,所以我们定了一个怎么量化看效果的工作。比较简单的方式,前 8 个里有 6 个是的。我们跟其他的方法做比较,总的来说效果还是排在前面的。

  做完这个事情我的研究生问我,接下来需要做什么?我说再想想这个事情还有什么可以再挖一下的。我们想了很久,发现图片或素材本身,不光有图像本身,有时候还带有标签信息、文字信息。为了把图像本身和文字信息、甚至草图本身用起来,我们又做了一个事情。

  

  跟前面不一样,除了原图,我们还把它的草图也放进来,然后把标签也放进去。这个时候出现了不同的特征,有的是视觉上的特征,有的是跟文本相关的特征,我们需要把它融合到某个区域里。三个不同的特征,你要一起用的时候,就必须考虑怎么把它有效融合,因为它们可能是完全不一样的语义内容。

  融合的思路很简单,就是怎么映射到新的空间,使得相关的内容尽可能接近。

  第一就是怎么做到多模态特征的生成;

  第二是怎么做到合在一起,映射到一个有效的空间里;

  第三就是怎么做搜索优化。

  搜索的时候我们可能只有草图的输入,它的特征提出来,跟某一个可能比较类似,也会被映射到空间里,我们就找这个空间里跟它最接近的几个。

  怎么做这个特征?第一是图特征,草图也可以用刚才的方法做,第三个是文本。所以我们借鉴了自然语言理解的进展做这个事情,比如扇子,有中国的扇子,还有书法标签,每个图都可能有几个标签。这个时候,我们就做向量,把所有的标签放在这边,然后数。

  

  拿最后的图作为一个例子,以 Chinese 这个标签做例子,我们可以生成一个向量,针对 Chinese 的第一张图有,第二张图就没有。现在要做的事情,就是把它有效融合起来,2/3 个图里有这个标签,所以我们做了特殊的权重设计,使得它能对不同的标签做加权和。这样就能对词的文本特征提取出一个相应的特征值出来。这是我们在文本方面做的工作。

  现在有三个不同的特征了,然后就要找到一个合适的方法。用 MDCCA 的方法,映射到同样的一个维度空间里,使得同一个物品的三个特征在新空间里尽可能接近,而跟其他不一样物品的特征尽可能远离。

  然后就是做比对。

  

  最简单的,就是每个特征跟输入值的特征一一比较,这些特征都是在映射到新空间里的比较,然后比较完,每个特征的相似度就要乘以权重,然后加权得到最后的相似度。我们用了一个比较复杂的方法,数据库里每张图都做输入,对库里每个结果算出一个值,把这个值复制一下,然后做对比。这样不管用什么方法,都能得到一个排好序的结果。最前面的是比较靠谱的,就当作是正向值,后面几个最不像的就当负向值,然后训练比较这三个新的值,得到相似度的重新排序。然后就是做效果,我们改变了一下算分的模式,前面很简单,就是每个都求一个百分比,这次我们把错的那张图,或者不相关的图出现的位置也考虑进去了。比如我输入一张图,得到结果以后,会计算一个不一样的 Precision。相关的就是 1,不相关的就是 0。乘起来,最后得到一个 85% 左右的 AP 值。我们希望错误的图出现在越早的地方,惩罚度就越高,按这样的思路去设计。

  

  这是我们实验输入不同的草图得到的结果。基本还是比较靠谱。有些是错的,比如多了一个脚;比如东方明珠,有个别是埃菲尔铁塔的图片;比如悉尼歌剧院,出现了向日葵。还是有很多错的地方,但是做图像检索,前面几幅图确实跟原图非常相似。后面我们也加入了跟位置相关的分析。

  

  这是博物馆数据的结果,也有一些乱入的情况。我觉得它的本意应该是书一样的东西,但这个结果,你说它错也不能完全这样说,因为体现的是不同的特征。这是草图的,还有文本的,还有 image 本身的,特征越多,效果就越好。

  活干完以后,学生又问我,这个事做完了,下面该怎么做?我们就想,图的信息用了,文字信息也用了,效果不好,那是什么原因?然后我们发现还是有 bug 的。

  

  比如这张照片,是一只小猫躺在那里。前面的是一个个不相关的词,现在是句子,可能更接近于我们现实生活中的图像数据。比如我们发图到朋友圈,都是在为各大运营厂商提供大量的数据标签,比如你发图说陆家嘴风景好,它就会记下来。这是一个小猫,还有一个羊站在草坪上。然后有个人画了一张图,你说是猫也没有错,说是羊也没有错,但看上去,更像一只猫,有两个尖耳朵,还有胡子。这个时候就有语义的问题了,不光是简单的标签,可能是一个句子怎么做理解的问题。

  我们这次就不再分复杂的文本特征或是图像本身特征或草图特征了。所以我们在文本上针对文本句子内容,提取出一系列相应的特征。然后草图进来,就只有 CNN 的特征了。然后再进行约束,一方面希望尽可能分类准确,另外希望尽可能在视觉相关性上是相关的,尽可能长得像,分得对,要达到一个平衡。也要有一个参数来平衡 loss 的内容。

  

  我们做了加权,用了 Skip-thought Model,给定一个句子,经过某个特征提取出来以后,能生成它前面和后面的句子。这听上去好像很 bug,但各位如果对文本领域的新进展比较了解,就再也不要相信某些点评网站上的评论了。因为现在的评论都可以生成,海量的评论可以生成出来。给我一个句子、主题,就能生成一段话,告诉你这家餐厅的菜特别好吃,服务员也热情,或者说牛排好吃。现在文本领域的进展非常惊人,我们希望能用相应的文字,生成上一句、下一句,并回到原来的文字,这样提取一个比较好的语义。其他的东西,几乎没有什么变化,这里面最大的变化,就是对整句语句、文字内容进行分析。这次我们换了一个数据集,每个图片都有一个草图,同时有一句话来描述它的内容。

  

  这是 Sketch,有 125 个不同的 object,每个有 100 张照片,请不同的人来画草图,每个飞机会找 5 个人左右来画,一共 7 万多个不同的 sketch。我们希望能输入这样的图,找到相应的结果。

  

  这次跟前面不一样,因为这次有强的语句描述,所以我们希望尽可能 Top1 就是结果。我们得到的情况,有些图太 bug 了,什么脑洞才能画出来?这里面所有的图都是当年照着图画的,我只是抽了里面的某个 sketch,希望找到原图。事实上确实是当年画出来的,但这个结果太不一样了。还有一些不太对的结果,比如一把伞,还有海龟,我们找到的跟它也是比较类似的。总的来说效果还挺好。

  

  我们进行比较。最上面的是 human,就是找几个学生过来,拿草图去找到底是哪张图,在 Top1 的人大概 54%。

  做完以后我们又在想,是否可能把位置信息融进去。所有的检索结果,都是同一物体,现在我们希望再把不同的物体结合起来做一个内容。另外我们在做很多相关的研究,比如人脸识别和其他的一些应用。如果大家感兴趣,可以随时跟我们来交流。

from: http://dy.163.com/v2/article/detail/DK72U6KG0518CKJC.html

金城教授:基于手绘草图的图像检索技术研究相关推荐

  1. 首个面向手绘草图的深度自监督表示学习

    点击我爱计算机视觉标星,更快获取CVML新技术 深度自监督学习(deep self-supervised learning)近来受到了极大关注,很多可用于解决图像和视频的自监督学习方法涌现了出来.不同 ...

  2. GNN手绘草图识别新架构:Multi-Graph Transformer 网络

    点击我爱计算机视觉标星,更快获取CVML新技术 本文介绍一篇比较小众但非常有意思的手绘草图识别的新文章<Multi-Graph Transformer for Free-Hand Sketch ...

  3. 【云原生】“0”代码时代——基于华为云ModelArts识别手绘草图

    前言:人工智能是当今最火热的话题之一,不管是不是计算机行业的从业者,懂一点人工智能已经成为常识,但是人工智能的高数学门槛.高编程门槛让人望而却步.低代码时代已经悄然而止,部署自己的人工智能模型已经不再 ...

  4. CVPR2020论文解读:手绘草图卷积网络语义分割

    CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...

  5. 基于hsv的亮度调整算法_基于手绘工程图离线识别的预处理研究精品论文推荐

    DOI: 10. 3969 / j. issn. 1009-9492. 2020. 11. 028 李春晓,田怀文,刘奇,等. 基于手绘工程图离线识别的预处理研究[J] . 机电工程技术,2020,4 ...

  6. 征稿通知!ICCV 2021 第一届面向意图表达的手绘草图研讨会

    征稿通知!ICCV 2021, THE 1ST Workshop on Sketching For Human Expressivity 概况 手绘草图从古至今都是人们交流和表达意图的重要媒介,在计算 ...

  7. 深度整形外科:使用手绘草图进行鲁棒且可控的图像编辑

    摘要  基于草图的图像编辑旨在根据人工绘制的草图提供的结构信息来合成和修改照片.由于草图很难收集,因此以前的方法主要使用边缘贴图而不是草图来训练模型(称为基于边缘的模型).但是,草图与边缘贴图显示出很 ...

  8. 头发合成:手绘草图妙变逼真秀发

    点击上方"机器学习与生成对抗网络",关注星标 获取有趣.好玩的前沿干货!   新智元报道   来源:新智元  arXiv 编辑:贝壳 [新智元导读]你见过手绘草图秒变逼真秀发吗?香 ...

  9. 手绘草图生成逼真的人脸

    手绘草图生成逼真的人脸 中国科学院和香港城市大学的一组研究人员介绍了一种local-to-global的方法,可以从简单的草图生成逼真的人脸. 虽然随着GANs技术的发展,从图像到图像的转换技术使得草 ...

最新文章

  1. Quartz.Net 调度框架配置介绍
  2. Nodejs扩展,实现消息弹窗
  3. 并发加对象锁_通用并发对象池
  4. 一步步构建大型网站架构 [转]
  5. Android如何获取Wifi名称即SSID
  6. 根据id来实现小程序tab切换,
  7. 文件I/O(不带缓冲)之read函数
  8. php中的get_called_class()方法
  9. Clion 配置 opencv不显示图片Process finished with exit code -1073741515 (0xC0000135)
  10. 带时间轴的文章归档的html页面,Css打造伸缩时间轴样式的WordPress归档页面archive.php...
  11. android摇一摇跳转界面,android摇一摇随机变图片
  12. Word动态输出多表格方案(以工资条为例)
  13. PEP8 Python 编码规范 -----Indent 缩进
  14. 利用stm32做一个升级版的电子多功能密码锁
  15. Linux 下录屏制作 GIF 图片
  16. 给定一个接口,测试人员应该如何测试?
  17. h5邮件的邮箱 支持_Coremail发布H5邮箱移动模板新版本,多项新功能让办公更便捷...
  18. Python量化交易02——双均线策略(移动平均线)
  19. NGS概念大科普(转)
  20. Qt Phonon介绍及安装

热门文章

  1. 大数据查询——HBase读写设计与实践--转
  2. Realm Configuration HOW-TO--官方
  3. tomcat架构之-----基本概念
  4. 牛人总结python中string模块各属性以及函数的用法,果断转了,好东西
  5. Invalid packaging for parent POM com.cloud:springcloud_demo:1.0-SNAPSHOT, must be “pom“ but is “jar“
  6. 深度学习利器:TensorFlow与NLP模型
  7. Quartz-Spring集成Quartz通过XML配置的方式
  8. C++五子棋(一)——开发环境
  9. vs编译c语言文件不读取对象式宏,C代码的条编译宏windows的VS和linux下gcc编译不一样...
  10. python 用一个数组实现三个栈