今天跟大家推荐一个刚刚开源的使用tf.Keras深度学习技术构建图像搜索引擎的开源项目,对于了解基于文本查询和基于图像查询的图像搜索都很有价值。
项目地址:
https://github.com/CVxTz/image_search_engine
项目开发者为法国FORTIA Financial Solutions公司的数据科学家Youness MANSAR。
基于文本查询和基于图像实例进行图像搜索是图像检索的两种主要方式,面对仅有描述文本的弱监督信息的海量互联网图像,如何建立两者之间的关系,同时实现上述两种图像检索方法,是很具有实用价值的技术。
作者在该项目中构建了两种模型:
1. CV模型:ImageNet上预训练的Resnet50 + GlobalMaxpooling2D,用于实现图像信息编码;
2. NLP模型:GRU+GlobalMaxpooling1D,用于实现文本信息编码;
作者设计了一个整体模型,将图像信息编码和与之对应的文本信息编码结合起来,使其欧式距离尽量靠近,而图像和文本信息不对应的数据,使他们得到的编码欧式距离尽可能远离。这就是作者设计的Loss的核心思想。
在测试的使用:
1. 使用文本查询时,使用NLP模型将文本映射到编码空间,寻找与其距离接近的图像编码,进而索引出近似图像;
2. 使用图像查询时,使用CV模型将图像映射到图像编码空间,直接比较图像间的编码信息欧式距离,进而索引出近似图像。
作者使用了50万幅电子商务场景下的服饰图像和对应描述进行实验。
http://jmcauley.ucsd.edu/data/amazon/
下图展示了,作者将训练得到的模型两种编码信息降维到2维的可视化结果(使用TSNE):
蓝色代表图像编码信息,红色代表文本编码信息,绿色连线代表他们是一对一的关系。连线方向很一致,表明作者设计的模型很好的实现了相似图像的聚拢、图像和文本关系的关联。
下图为使用文本查询的结果:
返回的结果还是很明显是强相关的。
下图为使用图像查询的结果:
检索出得结果,款式和类别都是正确的,证明模型的确很有效。
这个项目还是很有意思的,将CV和NLP联系了起来,利用了互联网上常见的数据信息,属于自监督学习的范畴,实现了还不错的文本和图像商品检索效果。
感谢作者开源,希望对你有帮助!
项目地址:
https://github.com/CVxTz/image_search_engine