鲸尾识别获奖方案总结

文章目录

    • 1st solution(classification)
    • 2nd place code, end to end whale Identification model
    • 3rd place solution with code: ArcFace
    • 4th Place Solution: SIFT + Siamese
    • 5th solution blog post + code -Siamese
    • 7th place Pure Magic thanks Radek solution: classification
    • 9th place solution or how we spent last one and a half month
    • 10th Place Solution: Metric Learning, Classification, Siamese, LGBM
    • 15-th plcae solution: sphereface, image alignment and multi-layer fusion
    • 24th place solution
    • 25-th place solution: CosFace + ProtoNets
    • 31st place solution + source code

主要是学会常见方法的实践,解决工程问题;掌握每种方案的流程及思想。

1st solution(classification)

原文
code

在这里插入图片描述
在这里插入图片描述
方法介绍:采用SENet154作为基础模型,采用了PCB对local特征进行监督,对局部和全局特征进行triplet loss监督。作者认为没有triplet loss,精度也能达到 0.96。分类分支把数据看做5004类和new_whale类。关键是增加了掩膜输入,使用了两种损失函数。

概述:
0.8->0.96->0.973
在一开始,我们使用softmax +固定阈值(看代码应该是指损失函数使用了margin)来训练模型,但没有得到好的结果(<0.9)。 为了在我们的网络中使用new_whale图像,我们决定对每个鲸鱼类进行2分类(判断是否是new_whale吗?)。
经过几周的实验,senet154表现最好,我们得到了0.96(both public & private)结果(单一模型)。
为了进一步改进,我们添加了一些技巧(将在后面讨论)并得到0.969,加上4倍交叉验证类平衡后处理以达到0.973。
我们还尝试将se154与SE-Resnext101,DPN131等其他网络组合,但没有得到任何提升。

  • 网络输入及训练步骤:
    输入尺寸 (512, 256)
    4通道输入, RGB + masks (基于450 张已有标签进行训练)
    Step 1: 训练图片数量 >10 的样本(更容易收敛)
    Step 2:训练所有训练集, 固定网络除了最后两个全连接层.

  • 图片水平翻转(+0.006)
    翻转图片作为新的类别,没有标签的数据不处理

  • 伪标签 (+ 0.001)
    在训练集中添加了约2000张测试图像(分类置信度> 0.96)。

  • 标签平衡 (+0.001 ~ 0.002)
    在我们持续改进期间(从0.8+到0.96),我们发现标签与分数相关。 因此,我们使用策略来进一步平衡我们的预测:
    对于Top5预测中的类别class1到class5,如果:conf class1 - conf class 2 <0.3,并且class 2未在所有Top1预测中没有出现过,而class 1已多次出现在top2中,我们切换class1和class2的位置。

2nd place code, end to end whale Identification model

code
原文
在这里插入图片描述
在这里插入图片描述
方法介绍:多网络融合,多损失函数
模型
• 输入: 256x512 or 512512 cropped images;
• 骨架网络: resnet101, seresnet101, seresnext101;
• 损失函数: arcface loss + triplet loss + focal loss;
• 优化器: adam ,学习率热身;
• 数据增强: blur,grayscale,noise,shear,rotate,perspective transform;
• 图片翻转 -> 5004
2
• 伪标签

补充:

我的baseline模型仅在arcface上训练(非新鲸图像)。 为了推断,我删除了margin m并直接使用最后一个fc的softmax结果。 最后一个fc的L2范数权重矩阵接近于中心类特征。 我的arcface模型在public LB上可以达到0.930~940左右。 进一步的改进来自增加的具有focal loss的分类分支(在非新鲸图像和新鲸图像上)。 ID翻转策略非常重要,它让我获得了最后的0.01提升。

3rd place solution with code: ArcFace

原文
code

方法介绍:使用了ArcLoss,训练的时候,使用了多个检测框,保存每个类的多张图片的多部分的中心作为特征,测试的时候也是使用多个框的特征中心(估计是参考few-shot的思想)。其实有点类似考虑局部的特征。

解决方案摘要
数据集
•验证集:随机抽样400个类,其中每类包含2个图像+ 110个新鲸鱼(= 400 * 0.276)。
•训练集:除新鲸以外的所有图像。
•水平翻转将身份加倍。

模型
bounding box & landmark
•我使用了Paul Johnson和Radek Osmulski的标注。
•我制作了5交叉训练,并使用它们训练了5个模型。
•IOU:0.93

鲸鱼识别器:
•使用ArcFace损失
•最后一次卷积后的层被替换为 flattening -> BN -> dropout -> FC -> BN。
•densenet121
•m = 0.5(论文默认值)
•weight decay 0.0005, droupout 0.5

数据增强
• average blur, motion blur
• add, multiply, grayscale
• scale, translate, shear, rotate
• align or no-align

训练
•adam优化器
•学习率为0.00025 - > 0.000125 - > 0.0000625

测试
(1)获取每张图片的特征:
•对于每个图像,我通过使用5个bounding boxes 和 landmarks, 获得了多个特征向量。
•对于每个类,所有特征向量的中心用作最终特征。
(2)获取测试图像的特征
•对于每个图像,生成多个特征向量,计算特征向量的中心。
(3)计算相似度
•上述两个特征向量的余弦相似度用作相似性的度量。
(4)选择阈值
•选择新鲸鱼的阈值约为0.276。

以下是最终方法的过程。
Without landmark
起初,我从训练集中排除了只有一个图像的和新鲸鱼的图片。为了推断,使用训练集的最相似图像的身份作为预测身份。
Public LB: 0.90, Private LB: 0.90
在使用相同身份的所有特征向量的中心之后,我得到了:
Public LB: 0.942 / Private LB: 0.939
使用权重衰减weight decay 0.0005
Public LB: 0.946 / Private LB: 0.946
加入只有一张图片的类到训练集:
Public LB: 0.963 / Private LB: 0.961

with landmark
当我使用对齐图像时,网络训练得更快但分数没有提高
Public LB: 0.962 / Private LB: 0.959
一些图像的bounding boxes和landmarks非常差,似乎无法提高分数。所以我也使用了非对齐图像
Public LB: 0.965 / Private LB: 0.961
最后,我通过水平翻转加倍了身份。翻转的图像具有不同的身份,但在视觉上非常相似。所以我将logit值平滑为零以防止梯度消失。
Public LB: 0.968 ~ 0.971 / Private LB: 0.965 ~ 0.968

4th Place Solution: SIFT + Siamese

原文
code

作者关注的重点是如何识别new_whale(N = 0)和N = 1个样本。特别是如何识别尽可能多的N = 1个样本。
我的流程有三个主要组成部分:
(1)关键点匹配 – 传统方法和新tricks
(2)Siamese 网络
(3)后处理

1.关键点匹配
这占我最终预测的80%以上,并且是经典的关键点匹配,是原始的low-shot方法之一。我尝试过SIFT,ROOTSIFT和一系列binary descriptors和匹配器,不同技术之间没有太大区别。
这里的数据集处于最佳位置,其中强力关键点匹配发挥作用。 7960个测试图像与15,697个训练图像属于合理范围。我选择了完全图像分辨率的纯蛮力方法,所有测试图像与所有训练图像,没有词袋或关键点的knn聚类。我必须克服几个重大挑战:

1.速度。每个图像的关键点描述符/匹配最多可能需要1-2秒,具体取决于您的硬件设置,但我使用了一些技巧,例如将所有关键点索引到hdf5文件,在匹配期间将所有关键点存储到RAM中,以及使用伟大的faiss库。在两个系统中,我可以在大约12小时内完成整个数据集的强力运行。
2.误报。在这个数据集上kp匹配的主要问题是误报,它有两个来源:背景海洋和鲸鱼尾部的许多亮点。我通过使用unet仅分割鲸鱼尾巴和单应矩阵的自定义xgboost模型来解决这个问题,以将图像对之间的最终单应性分类为有效或无效。

最终的kp匹配流程:
从训练集和测试集中提取所有kps(原始图,全尺度)到hdf5文件,将关键点限制为unet预测的鲸鱼吸虫面具区域。从CLAHE预处理图像中提取效果最佳。

匹配:
a.一种。循环遍历所有测试/训练对
b.使用faiss匹配关键点
c.关键点的双重单应性过滤(LMEDS后跟RANSAC)
d. xgboost预测验证单应矩阵
e.如果#匹配>阈值,则使用预测

2.Siamese网络
这是我的管道中最弱的部分,还有其他帖子表明网络比我使用的更强大。我稍微调整了Martin的代码,并使用了InceptionResNetV2,InceptionV3和ResNet50的集合。我没有使用任何数据增强并坚持使用灰度图像。
为了帮助训练更快一点,我在进入Siamese网络之前做了大量的骨干网络预训练,这似乎有所帮助。
我的预训练流程是:
 前200类进行训练分类
 在N> 8(~576类)的所有类别上进行微调
 对所有类别上进行微调
 对所有类别上进行微调+混合+图像大小384x384
3.后期处理
我发现这次比赛和Statoil Iceberg挑战竞赛之间的数据有一些相似之处,所以我能够使用winning solution(https://www.kaggle.com/c/statoil-iceberg-classifier-challenge)的一些相同的技巧和我在那里的获胜解决方案。
当从Siamese网络分析得到的预测矩阵时,我注意到总是有一些相同的火车图像不成比例地占据前5个位置。这让我想到我需要找到一种方法来抑制支配预测,或者弄清楚如何让N = 1类更加公平地升到预测结果的顶端。
我提出的想法非常简单:我没有用传统的“哪种火车图像最接近我的测试图像”的方式查看预测矩阵,而是转换矩阵现在看“哪个测试图像最接近我的训练图像”图片”。当我将转置矩阵限制为N = 1个样本时,我发现我可以沿着训练轴使用N = 1个训练样本的新阈值。这在N = 1样本中,我的top1预测会产生更多正确的结果。我相信有更好的方法可以实现同一个目标。
我对其他竞争对手发现的错误标签的数量感到惊讶,并且感谢Alex Mokin和这篇文章的撰稿人,我相信多余的类有一定作用。

流程缺点:
再次,像赞助商一样思考,他们可能不喜欢我的解决方案有以下几个原因:
1.计算成本非常高,特别是关键点匹配了流程;
2. 将流程转换为简单的方法来进行单个图像推断在后期处理比较困难。
我可能会采取别人的siamese网络作为一个纯粹的替代品放入我的管道,这将需要重新调整后处理流程,但这是可能的。
流程优势:
我认为关键点步骤非常强大,如果使用传统的关键点算法,没有足够压缩的空间。 将unet和xgb模型合并到流程中确实有助于将误报减少到可以忽略不计。

5th solution blog post + code -Siamese

原文
code
博客:推荐详细研究

在这里插入图片描述
方法介绍:流程如上图,使用了DenseNet121作为骨架网络,使用了类似VGG的网络作为关键点提取,并获得尾部的图片。采用了困难样本挖掘。

7th place Pure Magic thanks Radek solution: classification

原文
code

9th place solution or how we spent last one and a half month

原文

TL;DR Adam, Cosine with restarts, CosFace, ArcFace, High-resolution images, Weighted sampling, new_whale distillation, Pseudo labeled test, Resnet34, BNInception, Densenet121, AutoAugment, CoordConv, GAPNet

参考文献
《Deep Face Recognition: A Survey》
损失函数:
《CosFace: Large Margin Cosine Loss for Deep Face Recognition》
《ArcFace: Additive Angular Margin Loss for Deep Face Recognition》
Cosface and Arcface parameters was optimised as well. Cosface: S = 32.0, M=0.35. Arcface: M1 = 1.0, M2 = 0.4, M3 = 0.15.
尝试的优化器: Adam, AdamW, SGD, SGDW. 最好的是 Adam with Cosine annealing.
网络结构:
CoordConv和 GapNet 有一些效果
《An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution》
《Human-level Protein Localization with Convolutional Neural Networks》
(https://openreview.net/forum?id=ryl5khRcKm)
Squeeze-and-Excitation, Convolutional Block Attention Module 没有效果

数据增强:
对于 zero and few-shot learning,参考文献进行增强
《AutoAugment: Learning Augmentation Policies from Data》
 HorizontalFlip
 Rotate with 16 degree limit
 ShiftScaleRotate with 16 degree limit
 RandomBrightnessContrast
 RandomGamma
 Blur
 Perspective transform: tile left, right and corner
 Shear
 MotionBlur
 GridDistortion
 ElasticTransform
 Cutout
相关实现代码:
https://github.com/albu/albumentations
https://github.com/mdbloice/Augmentor

无效果:TTA和Mixed precision learning
测试时增强(test time augmentation, TTA)。这里会为原始图像造出多个不同版本,包括不同区域裁剪和更改缩放程度等,并将它们输入到模型中;然后对多个版本进行计算得到平均输出,作为图像的最终输出分数,可调用learn.TTA()来使用该算法。

10th Place Solution: Metric Learning, Classification, Siamese, LGBM

原文

15-th plcae solution: sphereface, image alignment and multi-layer fusion

原文

24th place solution

原文

25-th place solution: CosFace + ProtoNets

原文

31st place solution + source code

原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QGIS DEM数据快速获取

背景 Dem 是非常重要的数据&#xff0c;30 m 的精度也是最容易获取的&#xff0c;目前有很多种方式可以获取&#xff0c;比如地理空间数据云&#xff0c;今天介绍用 QGIS插件获取。 这种方式的最大优势是方便快捷。 插件下载与安装 插件-管理并安装插件-搜索下载 OpenTopogr…

linux:信号深入理解

文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…

Python实现天气数据采集

Python实现天气数据采集 一、需求介绍二、完整代码一、需求介绍 本次天气数据采集的需求是获取每日的最高温、最低温、风力、风向、天气状况、AQI指数,如图所示,完整代码附后: 本次采集的目标网址是2345天气网: 上图的URL中,beijing是城市名称的缩写,54511即为城市代码…

科技引领未来:高速公路可视化

高速公路可视化监控系统利用实时视频、传感器数据和大数据分析&#xff0c;通过图扑 HT 可视化展示交通流量、车速、事故和路况信息。交通管理人员可以实时监控、快速响应突发事件&#xff0c;并优化交通信号和指挥方案。这一系统不仅提高了道路安全性和车辆通行效率&#xff0…

vue3结合element-plus之如何优雅的使用表格

背景 表格组件的使用在后台管理系统中是非常常见的,但是如果每次使用表格我们都去一次一次地从 element-plus 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…

vue3封装ElementUI plus Dialog弹窗

因为ElementuiPlus的dialog弹框的初始样式不太好看,而公司要求又要好看,本来是已经实现了,但是后来想想了发现封装完dialog的其他功能也要,所以特此记录一下 方案一 思路:封装一个组件,将所有新增的参数引入el-dialog 参数中,实现参数共用 新建一个组件,将官网暴露的属性全部引…

C++开源库glog使用封装--自定义日志输出格式,设置日志保留时间

glog下载和编译 glog开源地址 https://github.com/google/glog glog静态库编译 cd /home/wangz/3rdParty/hldglog/glogmkdir out mkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX../out -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSOFF本文选择的glo…

网关路由SpringCloudGateway、nacos配置管理(热更新、动态路由)

文章目录 前言一、网关路由二、SpringCloudGateway1. 路由过滤2. 网关登录校验2.1 鉴权2.2 网关过滤器2.3 登录校验2.3.1 JWT2.3.2 登录校验过滤器 3. 微服务从网关获取用户4. 微服务之间用户信息传递 三、nacos配置管理问题引入3.1 配置共享3.1.1 在Nacos中添加共享配置3.1.2 …

Vue 3入门指南

title: Vue 3入门指南 date: 2024/5/23 19:37:34 updated: 2024/5/23 19:37:34 categories: 前端开发 tags: 框架对比环境搭建基础语法组件开发响应式系统状态管理路由配置 第1章&#xff1a;Vue 3简介 1.1 Vue.js的历史与发展 Vue.js由前谷歌工程师尤雨溪&#xff08;Eva…

Java分支结构详解

Java分支结构详解 前言一、if 语句基本语法表示一表示二表示三 代码示例判定一个数字是奇数还是偶数判定一个数字是正数还是负数判定某一年份是否是闰年 注意要点悬垂 else 问题代码风格问题分号问题 二、switch 语句基本语法代码示例根据 day 的值输出星期 注意事项break 不要…

spring常用知识点

1、拦截器和过滤器区别 1. 原理不同&#xff1a; 拦截器是基于java的反射机制&#xff0c;而过滤器采用责任链模式是基于函数回调的。 2. 使用范围不同&#xff1a; 过滤器Filter的使用依赖于Tomcat等容器&#xff0c;导致它只能在web程序中使用 拦截器是一个Sping组件&am…

abs(-2147483648) == 2147483648?

从数学意义上&#xff0c;这是对的。但是&#xff0c;就怕但是。 #include int main() {long long v;v abs(-2147483648);printf("%lld\n", v);return 0; } 输出: -2147483648 我们从source code中一一解开. /* Return the absolute value of I. */ int abs (…

Mongodb介绍及springboot集成增删改查

文章目录 1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 2. docker安装mongodb3. springboot集成3.1 文件结构3.2 增删改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查询3.2.5 删除 1. MongoDB相关概念 1.1 业务…

Docker-Android安卓模拟器本地部署并实现远程开发测试

文章目录 1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Ubuntu系统使用Docker部署docker-android安卓模拟器&#xff0c;并结合cpolar内网穿透工具实现公网远程访问本地…

51建模网AR虚拟试用,让网购不再只靠想象!

在数字化的浪潮中&#xff0c;网购已成为现代人生活的一部分。然而&#xff0c;传统的网购模式常常因为无法直接试穿、试用商品&#xff0c;导致买家在收到商品后感到失望&#xff0c;特别是面对大件家居产品时&#xff0c;仅凭屏幕上的图片和尺寸描述&#xff0c;很难准确地把…

智能AI愈发强大,企业如何防范AI网络钓鱼攻击

随着AI技术的快速发展&#xff0c;如ChatGPT等智能化工具在各个领域得到了广泛应用。然而&#xff0c;这些工具的普及也给网络安全带来了新的挑战。AI模型的自然语言生成功能使得网络钓鱼攻击更加智能化和隐蔽化&#xff0c;攻击者能够利用AI技术生成高度逼真的欺骗性邮件和其他…

深度学习之基于YoloV5人体姿态摔倒识别分析报警系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着人口老龄化的加剧和人们对健康安全的日益关注&#xff0c;摔倒事件在老年人、幼儿、体育运…

分布式文件系统minIo

分布式文件系统 什么是分布式文件系统 一个计算机无法存储海量的文件&#xff0c;通过网络将若干计算机组织起来共同去存储海量的文件&#xff0c;去接收海量用户的请求&#xff0c;这些组织起来的计算机通过网络进行通信&#xff0c;如下图&#xff1a; 好处&#xff1a; 1、…

怎么ai思维导图自动生成?推荐这三个工具

怎么ai思维导图自动生成&#xff1f;随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;其在各个领域的应用也日益广泛。在思维导图这一领域&#xff0c;AI技术的引入不仅极大地提高了制图效率&#xff0c;还为用户提供了更多样化、个性化的制图体验。本文将为…

基于消息中间件的异步通信机制在系统解耦中的优化与实现

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…