熊立波
(新华通讯社技术局,北京 100083)
新兴媒体时代将成为受众与用户“按需消费”的时代,只要用户提需求,媒体就应想尽办法回应和满足。[1]新华全媒新闻服务平台作为新华社供稿平台为全球新闻机构提供新华社全媒体内容供稿服务。
不少图片用户是在互联网上看到图片后再从新华全媒体平台搜索并下载授权的高清图片,但往往由于文字又不能准确表述而无法快速搜索到所需的图片,用户对用图片直接搜索图片的需求很大。如何为用户提供方便准确的图片搜索服务是一个需要不断研究的课题。
“新华全媒”新闻服务平台项目是新华社供稿线路优化调整的重要工程,基于云计算、互联网统一技术架构,重构新华社转型发展时期供稿技术体系,建成了包括所有新华社文字、图片、图表、视频、新媒体、多媒体、历史资料和第三方产品的全媒体供稿平台,着力提升新兴媒体供稿能力,整合传统供稿线路资源,提升用户使用体验,满足用户需求。
以图搜图,是通过搜索图像文本或者视觉特征,为用户提供相关图形图像资料检索服务的专业搜索引擎系统[2],是搜索引擎的一种细分,目前主要有如下2种实现方式。
(1)通过提取的图片描述信息。使用程序直接提取描述图片的关键字,使用关键字来进行检索。
(2)通过识别输入的图片的特征。提取图片的特征值,使用特征值进行相似图片的检索。
提取图片的信息主要有以下3类。
(1)图片内嵌描述信息。提取图片内嵌的EXIF[3]或IPTC[4]等信息进行检索,这是目前图像搜索引擎采用最多的方法,但是搜索准确性比较低。
(2)图片内容特征信息。人工对图像的内容(如物体、背景、颜色特征等)进行描述并分类,给出描述词。检索时,将主要在这些描述词中搜索检索词。这种查询方式一般来讲可以获得较好的查准率。但需人工直接参与,劳动强度比较大,限制了可处理的图像数量,而且需要预先指定规范和标准,搜索的准确率很大部分取决于人工描述的精确度和一致性。
(3)图片属性特征信息。通过算法自动抽取图像的颜色、形状、纹理等属性特征,建立特征索引库。优点是算法简单,可以使用机器批量处理大量图片,搜索原图比较准确,能较快地应用到实际项目中,但是由于图片属性相似的图片内容不一定相似,所以对“相似”图片的检索结果不理想。
基于图形内嵌描述信息的方法从本质还是文字搜索,如果用户提交的图片是截图等经过处理的图片,本身就没有内嵌的描述信息,将无法搜索到结果。
基于图像色度、亮度等物理属性特征比对图片的相似度,算法意义上的相似度很高的图片但是在内容上确可能没有任何业务的“相似性”。
基于图像内容特征描述搜索效果虽然好但是需要依赖大量的人工预标注。新华全媒平台有超过千万张历史图片,并且图片每时每刻都在新增,如果要对每张图片都进行人工标注是不现实的。随着人工智能技术的不断进步,基于深度学习算法可以从数据中自动挖掘统计规律,学出计算模型。[5]可以使用人工智能算法学习出计算模型,对图片进行自动分类而代替人工标注,达到更好的图片搜索准确度。
为了对比搜索的准确性,本文构建了基于离散余弦变换(DCT,Discrete Cosine Transform)和基于深度学习算法2种搜图方案进行对比测试。
对比物品与物品之间的相似性所应用的方法通常为余弦相似性等方法。[6]离散余弦变换(DCT,Discrete Cosine Transform),是一种图像压缩算法,使用离散余弦变换来获取图片中的低频成分[7],它将图像从像素域变换到频率域。可以利用这一点,将图片进行频域化后再进行相似性搜索,实现基于图像属性特征抽取的搜索。
图1 VGG16学习模型[8]
VGG-16 是视觉几何组(Visual Geometry Group)开发的卷积神经网络结构,该深度学习神经网络赢得了ILSVR(ImageNet)2014的定位任务冠军[9],时至今日,VGG仍是一个经典和杰出的视觉模型。该结构有13个卷积层,3个全链接层,一共有16层。
ImageNet 超过1400万的图像被ImageNet手动注释[10],包含2万多个类别[11],,每个类别包含数百张图片。[12]本文使用ImageNet的vggVGG-信息,实现图像内容特征提取的以图搜图。
本文基于Keras[13]深度学习框架,使用Python,keras,TensorFlow,Flask构建以图搜图服务。
Python中有很多应用于科学计算、数据可视化、机器学习的扩展库,例如NumPy,keras等,涉及的领域包括数值计算、符号计算、二维图表、三维数据可视化、数据分析建模等。
Keras是用Python开发的崇尚极简高度模块化的神经网络库,优点是可以同时运行在TensorFlow和Theano这2个主流的深度机器学习库上,同时可以方便的在CPU和GPU之间切换。为以图搜图提供调度深度学习算法。
TensorFlow是Google开发的深度机器学习库,核心代码是C++编辑,同时提供Python,Go,Java等接口。为以图搜图提供深度学习支持。
Flask是Python开发的微服务框架,依赖Jinja2模板引擎和Werkzeug WSGI服务。为以图搜图提供http的查询和检索服务。
图2 搜图算法设计
图片内容特征预提取。图片通过使用ImageNet的VGG16预训练模型,提取图片的特征向量值并存储到特征向量数组中。
用户上传图片的特征提取。接收用户上传的图片,图片通过使用ImageNet的VGG16预训练模型,提取图片的特征向量值。
特征向量比较搜索。将用户上传图片提取的特征向量和特征数组中所有图片的特征向量进行逐一比较,返回距离(欧式距离,Euclidean distance[14])最小前N张图片。
经测试,以图搜图服务部署在单台PC服务器(2c,16GB)对100万张图片进行并发搜索,可以提供可靠的以图搜图查询服务,支持20个并发用户访问不报错,200个并发用户访问不down机,并支持分布式部署和线性扩展。
4.5.1 搜索对比测试
为了测试搜索结果的准确性,本文随机从新华全媒平台历史图片库中挑选了3万张历史新闻图片,对2种算法的实现进行搜索测试。选取了“人物”,“动物”,“植物”等不同场景的图片,并对测试图片进行“亮度增强”“灰度”“添加水印”等变形操作,每次提交图片搜索返回前30张图片结果。
图3 和 图4分 别 是ImageNet VGG-16和DCT实 现的以图搜图返回的结果,从搜索结果可以看出,2个搜索结果都能搜索到原图(左上角第一个图片),ImageNetVGG-16方案返回的结果中,除了原图,其他的图片也是和油菜花或者黄色的花有关的图片,但是DCT方案返回的其他图片和原图基本没有业务相关性。
图3 ImageNet_VGG16返回结果
图4 DCT返回结果
4.5.2 评分设计
“原图”:搜索到原图打100分,未搜索到给0分;
“相关图”:搜索到的除“原图”图片外的其他图片和被搜索图片相似度,每一张相似图片满分给3.3分。
图5 两种搜索算法搜图原图准确性
图6 两种搜索算法搜图相关图准确性
从上图测试结果来看,基于深度学习算法的ImageNet VGG-16在原图搜索中,除了对图片旋转后的由于图片内容识别上存在误差,导致没有搜索到原图,其他组都拿到了100分满分。在相关图片推荐测试中,同样对旋转后的图片识别率较低,其他组的搜索得分都比较高。
对基于DCT算法的测试结果可以看到,DCT对原图的搜索结果还是让人满意的,同样对应旋转后的图片无法搜索到,但是对相关图片搜索效果比较差,说明搜索到的图片除了原图,其他搜索到的图片都是与被搜索图片无关的图片。
从上面的测试可以得出:基于深度学习方案实现的搜图方案准确性要明显好于基于离散余弦算法实现的搜图方案。
5.1.1 用户上传图片
需求点:为用户提供图片上传的功能。
设计:以图搜图作为一个独立功能模块和新华全媒新闻服务平台进行集成,用户在系统中提交需要搜索的图片,以图搜图系统获取图片,对已经索引的历史图片进行搜索和比对,返回搜索到图片的结果,并将结果提交进行展示。
5.1.2 返回搜索结果
需求点:通过列表或网格的方式为用户展现搜索结果。
设计:由于所有稿件都有唯一稿号,以图搜图系统将搜索到的稿件以稿号列表形式返回,新华全媒新闻服务平台对所有稿件进行列表展示。
5.1.3 数据库及数据存储需求分析和设计
需求点:可以搜索到6个月图片稿件的搜索功能。
设计:以图搜图模块只需要返回搜索到的稿号,所以仅仅需要存储每个图片的索引结果,每个图片无论大小,索引文件大小为固定为17K,半年的图片50万张,额外的所需空间约为9GB。
图7 搜图算法设计
5.2.1 API服务层
以图搜图对外提供基于http协议的微服务的接口层,主要包括获取用户上传的图片和返回搜索结果。
5.2.2 应用层
主要包括基于AI机器学习框架,生成图片索引和进行相似图片搜索,存储生成的图片索引。
5.2.3 消息层
为以图搜图提供统一消息路由服务。需要将所有的图片通过消息层推送给图片特征提取服务。
5.2.4 AI层
为以图搜图提供统一的机器学习模型服务。
5.2.5 存储层
存储中间数据和索引文件。
图8 以图搜图服务在新华全媒平台上的应用
基于深度学习模型的以图搜图服务在新华全媒新闻服务平台上线后,为用户提供了精准的图片搜索服务,搜索到的其他图片相似度也更高,是新华社供稿平台首次为用户提供以图搜图服务,受到了用户的一致好评。
通过对基于离散余弦算法DCT和基于深度学习VGG-16模型的以图搜图实现进行对比测试,得出基于深度学习模型的算法更优的结论。通过创新性应用到新华全媒新闻服务平台的搜图服务中,为用户提供了更加精准的图片搜索服务,得到了用户的一致好评。下一步将继续探索研究使用其他深度学习模型在以图搜图应用中的差异,以进一步提高图片搜索的准确性。