含噪数据的有效训练,谷歌地标图像检索竞赛2020冠军方案解读
2020年谷歌地标图像检索竞赛(Google Landmark Retrieval 2020)是今年举行的大型图像检索算法竞赛,该比赛在Kaggle 竞赛平台进行,吸引了全球541支团队参赛,最终来自韩国三星电子的一位软件工程师 SeungKee Jeon获得冠军。
下图即最终的排行榜:
近日,SeungKee Jeon 撰写论文 1st Place Solution to Google Landmark Retrieval 2020 详细描述了获胜方案。
虽然三星员工获得了冠军,但作者在引脚注明,其实他是在无薪休假一年时顺便打了这场比赛(愿意花一年时间闭关,这么洒脱的吗?)。
比赛任务
给定一幅地标图像,在数据集中查询与其相似的图像。
也就是常见的图像检索了。难度在于:数据集非常庞大且含噪声, Google Landmarks Dataset v2(GLD2)含近500万幅图像,训练集4132914幅图像,203094个类别,索引集761757幅图像,测试集117577幅图像,该数据集是由网络数据挖掘而得到的地标图像数据,所以含有非常多的噪声标注。
另外该数据集有一个被上届比赛中smlyaka团队使用自动清理工具清理过的版本CGLD2,其训练集含有 1580470 幅图像, 81313 个类别。
基本方案
作者使用的技术方案算是一套标准的度量学习流程,模型设计上可能不能带来新的启发,但对数据的理解和处理上还是值得借鉴的。
模型结构如下图:
模型选择:
EfficientNet + global average pooling(GAP) 用于提取特征,后接 DNN 降维 (最终特征是512维),使用Cosine Softmax(CosFace)进行度量学习。使用 fixed adacos 确定 Cosine Softmax 的参数,Margin设置为 0 。
预训练过程:
使用ImageNet上的预训练模型,然后再使用清理后的数据集CGLD2训练模型,再使用含噪声的大数据集GLD2训练。
应对类别不平衡:
使用了 weighted crossentropy。
图像增广:
只使用了图像左右翻转,作者认为这么大体量的数据不太可能过拟合,而且左右翻转这样的操作显然不会像改变颜色、旋转等造成数据分布的改变。
验证集数据选择:对于每类大于等于4个样本的类,只选择一个样本。作者解释这样做为了使类别更丰富,最终验证集使用了72322个样本。
训练硬件:
Google Colab上的TPUv2-8。
训练策略
训练策略可以说是作者赢得比赛的关键,通过“异常简单”却卓有成效的4步,将冠军锁定。(即使是单模型也能拿到冠军!)
作者发现含噪声的GLD2参与训练是有效的,另外提高图像分辨率也能带来显著的精度增益。
通过将同一个模型在CGLD2(经数据清理的) 和 GLD2数据集(含较大标签噪声)的交替训练,并提升输入分辨率,使每一步训练快速收敛并不断改进了精度。
下图是作者使用单个 efficientnet7 每一步得到的精度:
step 1, 在CGLD2上训练的模型,输入分辨率 512 x 512。
step 2,将step 1得到的模型在 GLD2 上训练,输入分辨率 512 x 512。
step 3,将step 2得到的模型在 GLD2 上训练,输入分辨率 640 x 640。
同时,将step 2得到的模型在 GLD2 上训练,输入分辨率 736 x 736。
step 4, 将step 3 中 640 x 640 分辨率数据训练得到模型在CGLD2上继续训练。
step 4, 将step 3 中 736 x 736 分辨率数据训练得到模型在CGLD2上继续训练。
可见,在两个数据集上交替训练后输入分辨率更高的模型精度最高。
模型集成
此处作者使用的模型集成方法比较简单,使用了 efficientnet7、efficientnet6、efficientnet5三种特征提取网络,将得到的特征嵌入加权后串联,权重分别为(1,0.8,0.5)。
最终经过上述 4 步训练的三个单模型集成后,在private score 排行榜得到精度0.38677,远超第二名(0.36278)。
结论
这篇竞赛技术报告给我们的一些启发:
数据清理是很有必要的;
大规模含噪数据加入训练仍能带来精度增益;
清洁数据-》含噪数据-》清洁数据的迭代训练,是使用噪声数据的有效手段。
作者没有使用近年来提出的看似更好的度量学习算法ArcFace、Circle Loss等。而在该比赛的讨论区不少人谈到方案中使用了ArcFace,所以采用哪种度量学习方法相对于有效利用数据来说其实并不是那么重要。
训练中的具体参数细节,不再赘述,感兴趣的朋友可参考原论文。
在公众号后台回复“GLR2020”,即可收到论文下载。
备注:检索
图像与视频检索交流群
图像检索、视频检索、视频搜索、最近邻搜索等技术,
若已为CV君其他账号好友请直接私信。
我爱计算机视觉
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到
含噪数据的有效训练,谷歌地标图像检索竞赛2020冠军方案解读相关推荐
- matlab 拐点 c语言,如何使用Matlab找到含噪数据序列的拐点?
我想确定的x数据点的索引,其中,曲线开始认真地增加(在本例,将是围绕x = 15). 虽然我了解衍生物可用于确定拐点,但请注意,数据很嘈杂,我不确定该方法能否让我明确识别"真正的拐点&quo ...
- 使用信任集利用腐败矩阵提高网络对含噪标签的鲁棒性
腐败矩阵 利用腐败矩阵可以提高模型对含噪标签的鲁棒性. 具体应用如下: 一个带标签数据集中,有一部分信任的数据集DDD,有部分是不信任的数据集D~\widetilde DD,我们的目的是如何用上面标签 ...
- 《预训练周刊》第9期:TABBIE:表格数据的预训练表示、「视觉预训练神作」:不用图片却训出图像识别SOTA?...
No.09 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第9期< ...
- 2023美国大学生数学建模竞赛C题思路解析(含代码+数据可视化)
以下为2023美国大学生数学建模竞赛C题思路解析(含代码+数据可视化) 规则: 猜词,字母猜对,位置不对为黄色,位置对为绿色,两者皆不对为灰色. 困难模式下的要求:对于猜对的字母(绿色和灰色),下一步 ...
- 吴恩达:AI要拥抱【高质量小数据】的训练范式
丰色 编译整理 量子位 | 公众号 QbitAI AI大牛吴恩达不久前刚被检测出新冠阳性,许多网友都向他表达了早日康复的祝愿.而最新消息显示,目前已经康复. 如今,他的工作重心放在了他的Landing ...
- 数据不够怎么训练深度学习模型?不妨试试迁移学习 ——重用神经网络的结构2...
数据不够怎么训练深度学习模型?不妨试试迁移学习 本质就是这个图!pretrained model就是你截取的部分神经网络模型(迁移学习),而nanonet就是你自己加入的网络层. 随着深度学习技术在机 ...
- [caffe] 数据制作和训练
[caffe] 数据制作和训练 在使用caffe时,我们希望使用自己的数据进行训练,以下给出如何制作自己的数据.所有的数据制作都是基于imagenet的. 1.数据准备,我们需要一个train和val ...
- 2.4 使用来自不同分布的数据,进行训练和测试-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.3 快速搭建你的第一个系统,并进行迭代 回到目录 2.5 不匹配数据划分的偏差和误差 使用来自不同分布的数据,进行训练和测试 (Training and Testing ...
- Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))
Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用)) 目录 数据增强步骤 数据增强实现代码 ...
最新文章
- Qt利用avilib实现录屏功能_利用 dogtail 快速进行 GUI 自动化测试
- Ubuntu10.10 配置ssh服务器及samba服务器
- python如何区分文件类型_python通过文件头判断文件类型
- 效率 每秒_每秒看懂超过5.3亿张图片!异构计算是如何发挥AI效率的?
- LeetCode-287 寻找重复数 二分法
- 字节跳动将推出汽车云业务,计划2025年追赶腾讯
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
- 寻求有用的Eclipse Java代码模板[关​​闭]
- android画布_Android画布
- TV Metro界面(仿泰捷视频TV版)源码解析
- json数据格式转换成csv数据格式,并保存
- Hystrix使用分析
- 基于SSM的校园外卖点餐系统
- 领域驱动设计实践框架-COLA的解读
- 卸载NotePad++/SublimeText吧:VSCode才是史上最优秀的IDE编辑器
- 工程师如何实现财务自由:为什么绝大多数人追求财务自由而不得,为什么有些人很有钱仍然拼命工作...
- 类和对象总结及用法 计算点到点距离 线与线的关系 计算三角形平行四边形面积周长 判断形状
- opencv学习笔记(三)—— 利用图像金字塔进行图像无缝拼接,cv2.pyrDown() ,cv2.pyrUp()
- c语言打开关闭文件的顺序,C语言1-文件概述、文件的打开与关闭、顺序读写数据文件(1).docx...
- 193页5万字智慧物流园解决方案
热门文章
- OpenCV--图像内轮阔填充
- windows nginx 停止和启动_大数据离线项目实践之nginx服务器搭建
- java string sscanf_倾情奉献——JAVA sscanf函数!!!
- 折线 没有显示_动画折线图,你还可以试试这个图表
- 第三章计算机网络,第三章-计算机网络及应用.ppt
- android 字典转json,在Swift中将字典转换为JSON
- java处理表单变量_Java自学之SpringMVC:接收表单数据
- mysql数据库导入导出和密码修改
- 服务器向客户机发信息,服务器如何主动给客户端发消息
- linux 内存查看_Linux终端查看最消耗CPU内存的进程