热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GoogleAI地标检索识别竞赛双料获胜方案|飞桨PaddlePaddle开源

Google今年更新了目前最大的人造和自然地标识别数据集,发布了Google-Landmarks-v2,数据集中包含超过400万张图片,描述了20万处类别地标。训练数据没有经过精细人工标注,类别数目严重不均衡,同一个地标的图像受到拍摄角度、遮挡、天气以及光线等影响很大,同时含有大量非地标数据,符合实际情况,非常具有挑战性。基于此数据集,今年总共吸引全球超过300支队伍参与了Google主办的地标检

Google 今年更新了目前最大的人造和自然地标识别数据集,发布了 Google-Landmarks-v2,数据集中包含超过 400 万张图片,描述了 20 万处类别地标。训练数据没有经过精细人工标注,类别数目严重不均衡,同一个地标的图像受到拍摄角度、遮挡、天气以及光线等影响很大,同时含有大量非地标数据,符合实际情况,非常具有挑战性。基于此数据集,今年总共吸引全球超过 300 支队伍参与了 Google 主办的地标检索识别竞赛。

Google AI地标检索识别竞赛双料获胜方案 | 飞桨PaddlePaddle开源

图 1 一些地标示例图像以及 top5 的检索结果

地标检索任务关注给定一张图像,需要找到给定数据库中所有相同的地标图像。评估数据超过 10 万张待查询图像(test 集合),以及将近 80 万的检索数据库(index 集合)。

地标识别任务关注给定一张图像,标注该图像是不是地标,如果是地标,需要标注其在 20 万种地标的类别。

评估数据与地标检索任务的待查询图像相同,据比赛完推算,其中有地标的图像不到 2000 张。当前,百度视觉团队的获奖方案已经提交到 arxiv 上,并且在 Github 上开源代码。下面将为大家详细解读。

论文地址:https://arxiv.org/pdf/1906.03990.pdf

开源项目地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/Research/landmark

地标检索解决方案

在地标检索比赛中,我们使用 ImageNet 预训练的模型参数作初始化,然后在 GLD v2(Google LandMark Dataset V2)上进行训练。网络结构上,我们使用了 ResNet 152 [4], ResNet200 [4], SE_ResNeXt152 [5] 和 Inception V4[6] 作为骨干网络。其中 ResNet 系列都是基于论文 [3],使用了 ResNet_VD 的改进版本,这 4 个模型在 ImageNet 上的 1000 分类任务上 top1 的准确率分别为 80.59%,80.93%,81.40% 和 80.77%。这些模型及训练方法都已经在飞桨的 Github图像分类项目中开源 [7]。

Google AI地标检索识别竞赛双料获胜方案 | 飞桨PaddlePaddle开源

图 2 地标检索任务解决方案流程图

在训练检索特征过程中,为了使特征紧凑,通过一层全连接将骨干网的输出(不包含 softmax 分类全连接层以及之后的网络)映射到 512 维,同时采用 arcmargin loss[8] 替换传统的 softmax loss,调整训练图像分辨率为 448*448,进一步提升模型特征的表达能力。此外,比赛过程中还基于 Npairs Loss[9],以及将 index 集合的 80 万张图像聚类后加入训练,学习更多种不同维度的特征,提升整个系统的泛化能力。所有训练检索特征的代码也已经在飞桨的 Github度量学习项目中开源 [10]。

在解决方案中,除了基础特征外,检索策略还使用了 Query Expansion(QE)[11] 和 Database Augmentation(DBA) 策略。不同于传统的 QE 和 DBA,在选取平均队列中,进一步加入了 Local feature 重排和分类重排。Local feature 能够拉回一些角度,尺度变换大的 Case,如图 3 所示。

Google AI地标检索识别竞赛双料获胜方案 | 飞桨PaddlePaddle开源

图 3 局部特征效果示例

此外,比赛中,还基于全量数据训练了分类模型,通过分类 rerank 来进一步提升检索指标。分类能够拉回一些跨域的图片,比如一张 test 图片可以拉回相应地标的老照片等。在分类重排的时候,使用了多分类投票的策略,投票选取了 test 和 index 图片的类别,从而每一张 test 图片请求 index 库时候,把相同类别的图片前置。利用分类和 Local feature 进行重排后,能进一步提升 QE 和 DBA 的效果。具体的效果如表 1 所示。

地标检索任务评估指标采用 mAP@100,详细定义参考 Google Landmark Retrieval 2019[1] 官方说明

Google AI地标检索识别竞赛双料获胜方案 | 飞桨PaddlePaddle开源

表 1 不同模型和策略的检索效果

地标识别解决方案

Google AI地标检索识别竞赛双料获胜方案 | 飞桨PaddlePaddle开源

图 4 地标识别任务解决方案流程图

地标识别任务解决方案流程如上图,主要包含如下三步:

1.    基于全局检索特征识别地标类别。

在地标识别任务中,利用检索特征,用 11 万的测试集合与 400 万的训练集合进行匹配。基于检索结果中 top5 图片的 label, 对它们进行类别投票,选取 top5 中类别最多的类当作测试图片的预测类别,该类最大得分作为预测得分。这一步后,GAP 指标会达到 private/public:0.10360/0.09455。由于识别比赛使用 GAP(Global Average Precision)作为评估指标(详细定义参考 Google Landmark Recognition 2019[2] 官方说明),如果大量非地标图像得分也很高,则会大幅度的降低 GAP 指标。虽然检索特征的识别效果很好,可以准确识别出地标的类别,但是由于检索任务并没有考虑非地标图的过滤,部分非地标图得分也很高,所以直接使用检索特征,GAP 指标并不理想。地标识别任务的一个关键是如何排除掉大量的非地标图像。

2.    基于通用目标检测器过滤非地标图像

为了过滤非地标图像,在比赛中,基于 Faster RCNN 通用 目标检测 算法 [12] 和公开的 Open Image Dataset V4 数据集 [13] 训练了一个通用目标检测器。Open Image Dataset V4 包含了超过 170 万的图片数据,500 个类别以及超过 1200 万物体框。百度视觉团队曾经在 Google AI Open Images-Object Detection Track(简称OpenImagesV4Det[14])目标检测任务中斩获第一。OpenImagesV4Det 的夺冠方案融合了不同深度学习框架和不同骨干网络多种检测器。而在地标识别比赛中,为了提高预测速度,借鉴 OpenImagesV4Det 比赛中采用的动态采样、多尺度训练以及 soft-nms 等经验,选取 ResNet50 作为骨干网络,重新训练一个单模型目标检测器,该检测器只采用单尺度测试,在 OpenImagesV4Det 比赛 public LB 的指标可以达到 0.55。单模型检测效果达到 OpenImagesV4Det 比赛 top10 水平。这个检测模型的预测代码已经随本解决方案开源,其训练代码计划后续开源在飞桨的检测模型库里。

基于上述目标检测器过滤非地标图像主要有如下两步:

目标检测器把所有的 test 集合图像分成了三个部分:地标集合,非地标集合以及模棱两可的图像集合。给定一张图像,利用图像物体之间的关联性,认为只要检测出的结果中包含 Building, Tower, Castle, Sculpture and Skyscraper 类别,那幺这张图像就是包含地标的图片。如果检测器中包含 House, Tree, Palm tree, Watercraft, Aircraft, Swimming Pool 和 Fountain,那幺就认为该目标是模棱两可,无法判断是不是含有地标,直接忽略。对于非地标集合,如果检测框得分大于 0.3,而且检测框占原图的面积大于 0.6,则认为这张图像是非地标图像。通过这一步,从 11 万多的测试集合中过滤出了 2.8 万的非地标图片。

为了进一步过滤非地标图像,解决方案中使用剩下的测试集合图片去检索上述非地标的 2.8 万张图像,如果检索 top3 的图片 score 超过了阈值,那幺也认为该图片是非地标。通过这一步,又过滤了 6.4 万的图片。经过上述两步,一共过滤了 9.2 万张图片,GAP 指标达到 private/public:0.30160/0.28335。

3.    多模型融合

在过滤完非地标图片之后,解决方案里使用了多模型融合的策略进一步提升 GAP。

Google AI地标检索识别竞赛双料获胜方案 | 飞桨PaddlePaddle开源

图 5 多模型分区策略

如图 5 所示,先使用 ResNet152 的检索模型对所有被识别为地标的图像进行分区,具体的分区规则为:

A1:测试图像去检索 400 万的训练数据库,top5 的类别少于等于 2 类,并且最小的预测分值>= 0.9;

A2:类似于 A1,top5 的类别少于等于 2 类,最大的预测分值>=0.85;

A3:不同于 A1,A2,A4 以外的图像;

A4:所有 Top5 返回图像的类别都完全不相同。

根据检索返回的类别和得分进行分区后,按照 A1 > A2 > A3 > A4 进行排序,GAP 的值达到 private/public:0.31340/0.29426。

对上述每个分区,进一步用分类模型的信息进行细分。

B1:检索预测的类别和分类预测的类别相同;

B2:不满足 B1 条件的图片。

使用 B 策略对 A 的每个分区内进行重排,识别效果进一步提升,GAP 指标达到 private/public:0.32574/0.30839。

最后,采用针对这个比赛才适用的 trick,即基于测试图像中地标类别出现的频率排序,GAP 达到 private/public: 0.35988/0.37142。比赛后,对上述策略进一步调参,发现 GAP 可以达到 private/public: 0.38231/0.36805。超越目前榜单最高分 private/public: 0.37606/0.32101。感兴趣的读者可以参看论文。这个策略之所以有效,初步推测可能与比赛的真值漏标有关。

总结

本文所介绍的图像识别和特征学习技术已经应用到百度的图像识别检索应用中,为通用图像搜索入口(图搜,手百)提供通用检索识别能力,同时覆盖商品、车型、品牌 logo、景点、植物花卉、公众人物识别等多种垂类的识别。

本次比赛完全基于飞桨 深度学习 平台实现,飞桨是集深度学习核心框架、 工具 组件和服务平台为一体的技术领先、功能完备的开源深度学习平台。百度视觉团队联合飞桨在视觉技术上有深厚的积累,目前 PaddleCV 已开源覆盖图像分类、图像目标检测、特征学习、图像分割、OCR、人脸检测、GAN、视频理解等类别,基于真实业务场景验证的、效果领先的优质模型,例如目标检测经典模型YOLOv3,基于飞桨的实现,增加了 mixup,label_smooth 等处理,精度 (mAP(0.5:0.95)) 相比于原作者提高了 4.7 个绝对百分点,在此基础上加入 synchronize batch normalization, 最终精度相比原作者提高 5.9 个绝对百分点。

百度视觉团队曾首创了 Pyramidbox、Ubiquitous Reweighting Network、Action Proposal Network、StNet 和 Attention Clusters 等算法,在识别人、识别物、捕捉关系三个技术领域均具备业界最领先的技术实力,不仅用于百度内部产品,也通过百度AI 开放平台持续对外输出,目前已对外开放了包括人脸识别、文字识别(OCR)、图像审核、图像识别、图像搜索等在内的 70 多项基础能力,为开发者和合作伙伴提供全栈式计算机视觉能力,让他们将领先的 AI 能力转换成让复杂的世界更简单的神奇力量,进而推动全行业、全社会的智能化变革。

参考文献

[1] https://www.kaggle.com/c/landmark-retrieval-2019

[2] https://www.kaggle.com/c/landmark-recognition-2019

[3]Tong He, Zhi Zhang, Hang Zhang, Zhongyue Zhang, JunyuanXie, Mu Li, Bag of Tricks for Image Classification with Convolutional NeuralNetworks, In CVPR 2019

[4] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In CVPR 2016

[5] Jie Hu, Li Shen, and Gang Sun. Squeeze-and-excitation net- works. In CVPR 2018

[6] Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, and Alexander AAlemi. Inception-v4, inception-resnet and the impact of residual connections on learning. In AAAI 2017

[7]https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/image_classification

[8] Jiankang Deng, JiaGuo, NiannanXue, and StefanosZafeiriou. Arcface: Additive angular margin loss for deep face recognition. arXiv preprint arXiv:1801.07698, 2018.

[9] Kihyuk Sohn, Improved Deep Metric Learning with Multi-class N-pair Loss Objective, In NIPS 2016

[10]https://github.com/PaddlePaddle/models/tree/develop/PaddleCV/metric_learning

[11] OndrejChum,JamesPhilbin,JosefSivic,MichaelIsard,and Andrew Zisserman. Total recall: Automatic query expan- sion with a generative feature model for object retrieval. In ICCV 2007

[12]Tsung-Yi Lin, Piotr Dollar, Ross Girshick, Kaiming He, BharathHariharan, Serge Belongie, Feature Pyramid Networks for Object Detection, In CVPR 2017

[13]https://storage.googleapis.com/openimages/web/factsfigures_v4.html

[14]https://www.kaggle.com/c/google-ai-open-images-object-detection-track


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 宏基因组学经典文献重现(一):利用ggplot2进行散点图可视化分析
    宏基因组学经典文献重现(一):利用ggplot2进行散点图可视化分析 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 图像分割技术在人工智能领域中扮演着关键角色,其中语义分割、实例分割和全景分割是三种主要的方法。本文对这三种分割技术进行了详细的对比分析,探讨了它们在不同应用场景中的优缺点和适用范围,为研究人员和从业者提供了有价值的参考。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • Android平台生活辅助应用的设计与开发实现
    随着移动互联网技术的迅猛发展,Android操作系统已成为移动设备中的主流平台。本文探讨了基于Android平台的生活辅助应用设计与开发,旨在通过创新的功能和用户友好的界面,提升用户的日常生活质量。研究不仅涵盖了应用的核心功能实现,还深入分析了用户体验优化的方法,为同类应用的开发提供了有价值的参考。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 如何使用 org.geomajas.configuration.FontStyleInfo.getColor() 方法及其代码示例详解 ... [详细]
  • 欢迎来到Netgen新时代:探索网络生成技术的无限可能
    欢迎进入Netgen的新时代:探索网络生成技术的无限潜力。本文将详细介绍如何编译下载的Netgen源代码,生成Netgen程序,并提供开发所需的库nglib。此外,还将探讨Netgen在现代网络设计与仿真中的应用前景,以及其在提高网络性能和可靠性方面的关键作用。 ... [详细]
  • 使用PyQt5与OpenCV实现电脑摄像头的图像捕捉功能
    本文介绍了如何使用Python中的PyQt5和OpenCV库来实现电脑摄像头的图像捕捉功能。通过结合这两个强大的工具,用户可以轻松地打开摄像头并进行实时图像采集和处理。代码示例展示了如何初始化摄像头、捕获图像并将其显示在PyQt5的图形界面中。此外,还提供了详细的步骤说明和代码注释,帮助开发者快速上手并实现相关功能。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 本文探讨了如何使用Python实现散列表(即哈希表)的直接地址技术,通过键值对快速定位内存中的数据存储位置,提高了数据检索的效率。该方法利用哈希函数将键映射到特定的数组索引,从而实现快速存取操作。 ... [详细]
  • 如何在datetimebox中进行赋值与取值操作
    在 datetimebox 中进行赋值和取值操作时,可以通过以下方法实现:使用 `$('#j_dateStart').datebox('setValue', '指定日期')` 进行赋值,而通过 `$('#j_dateStart').datebox('getValue')` 获取当前选中的日期值。若需要清空日期值,可以使用 `$('#j_dateStart').datebox('clear')` 方法。这些操作能够确保日期控件的准确性和灵活性,适用于各种前端应用场景。 ... [详细]
  • 在财务分析与金融数据处理中,利用Python的强大库如NumPy和SciPy可以高效地计算各种财务指标。例如,通过调用这些库中的函数,可以轻松计算货币的时间价值,包括终值(FV)等关键指标。此外,这些库还提供了丰富的统计和数学工具,有助于进行更深入的数据分析和模型构建。 ... [详细]
author-avatar
你爱我像谁丶灬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有