Muyun99's wiki Muyun99's wiki
首页
学术搬砖
学习笔记
生活杂谈
wiki搬运
资源收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Muyun99

努力成为一个善良的人
首页
学术搬砖
学习笔记
生活杂谈
wiki搬运
资源收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 代码实践-目标检测

  • 代码实践-图像分割

  • 代码实践-自监督学习

  • 竞赛笔记-视觉竞赛

    • 当我们在谈论图像竞赛EDA时在谈论些什么
    • kaggle-Classify Leaves 竞赛方案学习
    • 图像检索orReID 竞赛的 Tricks
    • kaggle-CowBoy Outfits Detection 竞赛方案学习
    • kaggle 图像分割竞赛学习
    • few-shot learning 竞赛学习
      • Few-shot Learning 竞赛学习-1
    • few-shot learning 竞赛学习-2
    • 遥感图像建筑物变化检测竞赛学习-1
  • 框架解析-mmlab系列

  • 讲座记录-有意思的文章集合

  • 体会感悟-产品沉思录观后有感

  • 体会感悟-摄影

  • 系列笔记-

  • 系列笔记-乐理和五线谱

  • 系列笔记-爬虫实践

  • 系列笔记-Django学习笔记

  • 系列笔记-Git 使用笔记

  • 系列笔记-网站搭建

  • 系列笔记-图卷积网络

  • 课程笔记-MIT-NULL

  • 系列笔记-OpenCV-Python

  • 系列笔记-使用 Beancount 记账

  • 系列笔记-Python设计模式

  • 系列笔记-MLOps

  • 系列笔记-Apollo自动驾驶

  • 系列笔记-PaddlePaddle

  • 系列笔记-视频操作

  • Vue+Django前后端分离开发

  • 深度学习及机器学习理论知识学习笔记

  • PyTorch Tricks

  • 学习笔记
  • 竞赛笔记-视觉竞赛
Muyun99
2021-09-05

few-shot learning 竞赛学习

# Few-shot Learning 竞赛学习-1

最近离一个比赛结束还有不到一周,准备来快速学习下 few-shot learning 看能不能摸到奖(大雾)

# 01、问题描述

1.1 数据描述

  • 训练集有 49990 张图像,分为10类,每张图像的尺寸为 32 x 32
    • 其中有 20 张有标注,每类2张,剩下 49970 张图像无标注
  • 验证集有10类,每类1张
  • 测试集有 10000 张

1.2 竞赛问题定义

按照 Few-shot learning 的定义来讲,训练集中随机抽取 C 个类别,每个类别 K 个样本(总共 CK 个数据),成为C-way K-shot 问题。

该竞赛的任务被定义为 10-way 2-shot 问题,也就是 10 类,每类 2 张有标注

# 02、竞赛学习

# 2.1 参考资料[1] & 参考资料 [2]

这里首先学习下参考资料[1]与参考资料[2]

支撑集(Support Set):即 C 类,每类 K 个样本所组成的 CK 个数据

查询集(Query Set):类似测试集,包含 Q 张未分类图像即这里的 10000 张

这里重点关注下 Metric Based 方法,看起来比较容易实现。Metric Based 方法通过度量 batch 集中的样本和 support 集中样本的距离,借助最近邻的思想完成分类。

度量学习的基本思想是学习单个数据(如图像)之间的距离函数。它已被证明对于解决小样本分类任务非常有效:度量学习算法通过将查询集图像与已标记的支持集图像进行比较来进行分类。

  • 将支持集和查询集的所有图像提取 Embedding,
  • 查询集中的每张图像都根据其与支持集图像的距离来进行分类,例如欧氏距离/余弦距离 以及 KNN 算法

可以使用孪生网络(Siamese Network)

  • 训练时,通过组合的方式构造不同的成对样本,输入网络进行训练,在最上层通过样本对的距离来判断他们是否属于同一类,并产生对应的概率分布。

  • 在预测阶段,将测试样本集和支撑集之间每一个样本对都进行推理,预测结果为支撑集上概率最高的类别

可以使用原型网络(Prototype Network)

  • 每个类都存在一个原型表达,该类的原型是 support set 在 embedding 空间中的均值
  • 分类问题即可变成在 embedding 空间中的最近邻问题

Relation Network

  • 认为度量方式也是网络中重要的一环,需要对其进行建模

该文章提出了统一的 Encode-Induction-Relation 描述框架

# 2.2 参考资料[3]

参考资料[3] 解释了 Meta-learning 方法的步骤

训练时

  • 将训练集采样成 Support Set 以及 Query Set

  • 基于Support Set 生成分类模型 F

  • 利用模型 F 对 Query Set 进行分类预测生成 predict labels(pseudo-label)

  • 通过 query labels 和 predicted labels 进行 loss 的计算,从而更新网络参数

测试时:

  • 利用分类模型 F 对 Query Set 进行预测
# 2.3 参考资料[4]

参考资料[4] 介绍了Metric Learning 中的损失函数

  • Contrastive loss
    • 输入:两个样本组成的样本对,label 为该样本对是否属于同一类
    • 超参数 maigin,表示不同类样本之间的距离应该超过该 margin 值
  • Triplet loss:
    • 输入:一个三元组,query + positive sample + negative sample
    • Triplet loss 要求 query 到 负样本的距离与 query 到正样本的距离之差要大于 margin 值
    • Contrastive loss和triplet loss都很常用,一般来说,Triplet-Loss 的效果比 Contrastive Loss 的效果要好,因为他考虑了正负样本与锚点的距离关系。然而,这两种loss函数如果单独使用则会遭遇收敛速度慢的问题。在学习过程的后期,大多数样本都能满足损失函数的约束条件,这些样本对应进一步学习的贡献很小。因此,这两种损失函数都需要配合hard sample mining的学习策略一起使用,例如 FaceNet 提出的 simi-hard negative sample mining方法。
  • N-pair-ms loss
    • 考虑 query 与多个类别的负样本之间的关系,促使 query 与其他所有类之间都保持距离,能够加快模型的收敛速度
  • Lifted Struct loss
    • 基于 mini-batch 中的所有正负样本对来计算 loss
    • 对于每一个正样本对{i,j},挖掘出最困难的负样本,与 i 和 j 距离最近的负样本用于计算 triplet loss
    • 优点:动态构建最困难的三元组
  • Ranked list loss
    • 上述方法的缺点
      • 上述损失函数提出加入负样本来获得结构化的信息,但是使用的负样本只是一小部分
      • 这些损失函数没有考虑类内的数据分布,都追求将同一类压缩到同一个点上
  • Multi-Similarity loss
    • 自相似性:根据样本对自身计算出的相似性,这是一种最常用也是最重要的相似性。例如,当一个负样本对的余弦相似性较大时,意味着很难把该样本对所对应的两种类别区分开来,这样的样本对对模型来说是困难的,也是有信息量的,对于模型学习更有区分度的特征很有帮助。另一方面,自相似性很难完整地描述embedding空间的样本分布情况。
    • 正相对相似性:不仅考虑当前样本对自身的相似性,还考虑局部邻域内正样本对之间的相对关系。
    • 负相对相似性:不仅考虑当前样本对自身的相似性,还考虑局部邻域内负样本对之间的相对关系。
# 2.4 参考资料 [5]

[5] 中比较清晰地说出了几种方法

  • 度量学习:提特征,算距离,KNN 等方式分类
  • FSL 定制的数据增强:增加数据的量用于 fine-tuning
  • 元学习:在任务级别上学习而不是在样本上学习
# 2.5 Paperwithcode SOTA 论文的方法
  • Image Clustering on CIFAR-100 (opens new window)
    • Accuracy 0.584:https://paperswithcode.com/paper/spice-semantic-pseudo-labeling-for-image
    • Accuracy 0.543:https://paperswithcode.com/paper/improving-unsupervised-image-clustering-with
    • Accuracy 0.507:https://paperswithcode.com/paper/learning-to-classify-images-without-labels
  • Few-Shot Image Classification on CIFAR-FS 5-way (1-shot) (opens new window)
    • Accuracy 87.79:https://paperswithcode.com/paper/transfer-learning-based-few-shot
    • Accuracy 87.73:https://paperswithcode.com/paper/sill-net-feature-augmentation-with-separated
    • Accuracy 87.69:https://paperswithcode.com/paper/leveraging-the-feature-distribution-in
# 2.6 kaggle 竞赛的方法

参考资料[6] 和[7] 两篇是知乎 “砍手豪” 大神所写的 kaggle 上 few-shot 竞赛的文章,值得学习,可以先看看是否能找到 baseline.

  • tricks

    • 实现 LR finder
  • EDA

    • 查找重复图像
    • 模型可视化:https://www.kaggle.com/martinpiotte/whale-recognition-model-with-score-0-78563
    • t-SNE 特征可视化
  • Siamese Network 神经网络

    • Siamese神经网络比较两个图像,并确定这两个图像是从同一条鲸鱼还是从不同的鲸鱼中获取
    • https://www.kaggle.com/martinpiotte/whale-recognition-model-with-score-0-78563/data
    • https://www.kaggle.com/seesee/siamese-pretrained-0-822
    • https://www.kaggle.com/voglinio/siamese-two-pretrained-weights-0-855
  • Metric Learning 神经网络

    • Metric Learning 使用网络提取 Embedding,再比较 Embedding 之间的距离来进行分类
    • https://www.kaggle.com/c/humpback-whale-identification/discussion/74647
    • https://www.kaggle.com/iafoss/similarity-densenet121-0-805lb-kernel-time-limit
  • Winner model

    • 1st solution: https://www.kaggle.com/c/humpback-whale-identification/discussion/82366
      • 四通道:RGB + Masks 作为输入(我们可以将RGB + Edges + Masks 作为输入)
    • 2nd solution: https://www.kaggle.com/c/humpback-whale-identification/discussion/83885
      • 三种 loss:arcface loss + triplet loss + focal loss
      • 三个backbone:resnet101,seresnet101,seresnext101
    • 4th solution: https://www.kaggle.com/c/humpback-whale-identification/discussion/82356
      • 4th Place Solution: SIFT + Siamese
      • 介绍了一些降低复杂度的方法
# 2.7 其他方法
  • Deep Clustering (opens new window)

    • https://vissl.readthedocs.io/en/latest/ssl_approaches/deepclusterv2.html
    • https://github.com/facebookresearch/vissl/blob/master/docs/source/ssl_approaches/deepclusterv2.rst
  • Simsiam

    • https://github.com/facebookresearch/simsiam

孪生网络和对比学习有什么不同?

  • 孪生网络一般针对半监督问题设置
  • 对比学习一般针对无监督问题设置

2.2 Rotation Loss 是什么

# 参考资料

  • [1] https://zhuanlan.zhihu.com/p/61215293

  • [2] https://zhuanlan.zhihu.com/p/110075024

  • [3] https://zhuanlan.zhihu.com/p/149983811

  • [4] https://zhuanlan.zhihu.com/p/82199561

  • [5] https://zhuanlan.zhihu.com/p/258562899

  • [6] https://zhuanlan.zhihu.com/p/87969454

  • [7] https://zhuanlan.zhihu.com/p/111644699

上次更新: 2021/09/12, 20:42:58
kaggle 图像分割竞赛学习
few-shot learning 竞赛学习-2

← kaggle 图像分割竞赛学习 few-shot learning 竞赛学习-2→

最近更新
01
Structured Knowledge Distillation for Semantic Segmentation
06-03
02
README 美化
05-20
03
常见 Tricks 代码片段
05-12
更多文章>
Theme by Vdoing | Copyright © 2021-2023 Muyun99 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×