梦里风林
  • Introduction
  • Android
    • activity
      • Activity四种启动模式
      • Intent Flag
      • 多task的应用
      • Task和回退栈
    • sqlite
      • 【源码】CursorWindow读DB
      • Sqlite在Android上的一个Bug
    • Chromium
    • ListView读取DB数据最佳实践
    • Android Project结构
    • 一个由Proguard与FastJson引起的血案
    • 琐碎的一些tips
  • Computer Vision
    • 特征提取
    • 三维视觉
    • 计算机视觉常用工具
    • 浅谈深度学习数据集设计
    • 随笔
  • Machine Learning
    • 技巧
      • FaceBook: 1 hour training ImageNet
      • L2 Norm与L2 normalize
    • 实践
      • Pytorch实验代码的亿些小细节
    • 工具
      • Tensorflow学习笔记
      • MXNet踩坑手记
      • PyTorch踩坑手记
      • PyTorch模型剪枝
      • Keras踩坑手记
      • mscnn
      • Matlab
        • Matlab Remote IPC自动化数据处理
    • Papers
      • Classification
      • Re-identification
        • CVPR2018:TFusion完全解读
        • ECCV2018:TAUDL
        • CVPR2018:Graph+reid
        • Person Re-identification
        • CVPR2016 Re-id
        • Camera topology and Person Re-id
        • Deep transfer learning Person Re-id
        • Evaluate
      • Object Detection
        • 读论文系列·干货满满的RCNN
        • 读论文系列·SPP-net
        • 读论文系列·Fast RCNN
        • 读论文系列·Faster RCNN
        • 读论文系列·YOLO
        • 读论文系列·SSD
        • 读论文系列·YOLOv2 & YOLOv3
        • 读论文系列·detection其他文章推荐
      • Depth
      • 3D vision
        • 数据集相关
        • 光流相关
      • Hashing
        • CVPR2018: SSAH
      • 大杂烩
        • CNCC2017 琐记
        • ECCV 2016 Hydra CCNN
        • CNCC2017深度学习与跨媒体智能
        • MLA2016笔记
    • 《机器学习》(周志华)读书笔记
      • 西瓜书概念整理
        • 绪论
        • 模型评估与选择
        • 线性模型
        • 决策树
        • 神经网络
        • 支持向量机
        • 贝叶斯分类器
        • 集成学习
        • 聚类
        • 降维与度量学习
        • 特征选择与稀疏学习
        • 计算学习理论
        • 半监督学习
        • 概率图模型
        • 规则学习
        • 强化学习
        • 附录
  • Java
    • java web
      • Servlet部署
      • 琐碎的tips
    • JNI
    • Note
    • Effective Java笔记
  • 后端开发
    • 架构设计
    • 数据库
    • java web
      • Servlet部署
      • 琐碎的tips
    • Spring boot
    • django
    • 分布式
  • Linux && Hardware
    • Ubuntu安装与初始配置
    • 树莓派相关
      • 树莓派3B+无线网卡监听模式
      • TP-LINK TL-WR703N v1.7 openwrt flashing
  • Python
    • django
    • 原生模块
    • 设计模式
    • 可视化
    • 常用库踩坑指南
  • web前端
    • header div固定,content div填充父容器
    • json接口资源
  • UI
  • kit
    • vim
    • git/github
      • 刷爆github小绿点
    • Markdown/gitbook
      • 琐碎知识点
      • gitbook添加disqus作为评论
      • 导出chrome书签为Markdown
      • Markdown here && 微信公众号
    • LaTex
      • LaTex琐记
    • 科学上网
    • 虚拟机
  • thinking-in-program
    • 怎样打日志
  • 我的收藏
  • 琐记
    • 论文心得
    • 深圳买房攻略
  • 赞赏支持
由 GitBook 提供支持
在本页
  • Self-training with Noisy Student improves ImageNet classification
  • Method
  • 效果
  • Meta Pseudo Labels
  • Motivation
  • Method
  • Detail
  • 辅助Loss
  • 效果
  • EfficientNet: Rethinking model scaling for convolutional neural networks
  • Motivation
  • Observation
  • Method
  • Network
  • Result
  • MLP-Mixer: An all-MLP Architecture for Vision
  • Method
  • MLP-Mixer的卷积本质

这有帮助吗?

  1. Machine Learning
  2. Papers

Classification

Self-training with Noisy Student improves ImageNet classification

CVPR2020

Method

  • 在有标签数据上训练Teacher,在无标签数据上预测伪标签

  • 用有标签数据和伪标签数据从头训练一个Student模型,Student模型

  • 把Student当成Teacher,迭代,效果最好的是迭代三次

特别的地方在于:

  • model noise: Student比Teacher大,多了Dropout和stochastic depth(训练时,重复的block中,某些会被设置成identity)

  • data noise:训练数据加Data augumentation()

  • 一些trick:

    • Teacher网络置信度低的,不会用于训练;

    • ImageNet每个类的图像数量差不多,因此带伪标签的unlabel data也在类别上做了平衡,数量多的类只保存一部分,数量少的类多复制几份

效果

感觉其实这些操作平平无奇,效果比有监督的EfficientNet-L2(480M,85.5%)提升了一点:(480M,88.7%)

Meta Pseudo Labels

Motivation

使用伪标签无监督学习的方法,因为伪标签可能是错的,所以Student不能超越Teacher,如果能让Teacher在过程中也得到训练,输出更好的标签,Student就有希望输出更好的结果。

Method

  • 在有标签数据上先训练一个Teacher,在无标签数据上预测伪标签

  • 用伪标签数据训练Student

  • Student在有标签数据上测试,得到Loss

  • Teacher根据Student在有标签数据上的Loss,对自身权重进行修正(关键就在于如何修正)

Detail

辅助Loss

单独用上面的方法已经可以得到不错的结果了,但如果在训练的时候,配合其他Loss训练,效果更佳;文中提及了unsupervised domain adaption的一些方法,可以在论文附录查询到。

效果

在ImageNet上首次干到了90.2%的top1 ACC

EfficientNet: Rethinking model scaling for convolutional neural networks

Motivation

这篇论文我更愿意称其为实验报告,研究了如何扩展网络的input resolution, width(channel数), depth(layer数),才能得到性价比最高的网络

Observation

这篇文章基于两个observation来调整网络规模:

  • 增加输入/宽度/深度,都能提高模型效果,但存在边际效应,加的太多提升不明显;

  • 因此,与其把多出来的算力堆在单个维度上,不如同时扩张三个维度;

Method

具体的扩张策略如下:

Network

在各种基础网络上试了这个策略,发现Mnas上改出来的最好,网络结构大概长这样,但是size会有所不同,比如EfficientNet-B0就是

Result

MLP-Mixer: An all-MLP Architecture for Vision

使用MLP代替卷积,保留skip connection和normalization,在ImageNet上最高达到87.94%

Method

  • 将图像分成S个PxP大小的patch,每个patch(n c p p) reshape成(n c p*p)的tensor

  • 用一个矩阵乘法先将每个patch处理一下reproject到n C,所有 patch合起来就是n S * C的tensor X

  • 接下来开始mlp:

    • 对X做layer norm

    • 再做一个残差加上X

    • 这里不同channel之间的权重是共享的,用来减少参数数量

    • 由于中间token数量变了,patch数目没变,起一个花里胡哨的名字,把patch叫做token,乘法叫做token-mixing,也就是将同个通道不同token先混合一下

    • 也是一样的操作,不同之处在于中间是channel数量变了,后面又变回来,所以叫channel-mixing

  • 网络最后接一个Global Average Pooling做分类

  • 训练的时候也是一样预训练+finetune

MLP-Mixer的卷积本质

  • 不同位置相同通道的混合,可以用深度可分离卷积代替

    ·- 同个位置不同通道的混合,可以用一个1x1的卷积代替

上一页Papers下一页Re-identification

最后更新于3年前

这有帮助吗?

假如用伪标签方案训练Student,那么训练目标可以这样表示: θSPL=argminθSLu(θT,θS)\theta_{S}^PL = argmin_{\theta_S} L_u(\theta_T, \theta_S)θSP​L=argminθS​​Lu​(θT​,θS​)

其中,Lu(θT,θS)=Exu[CE(T(xu;θT),S(xu;θS))]L_u(\theta_T, \theta_S) = E_{x_u}[CE(T(x_u; \theta_T), S(x_u; \theta_S))]Lu​(θT​,θS​)=Exu​​[CE(T(xu​;θT​),S(xu​;θS​))]

如果根据Student在有标签数据集上的表现,优化Teacher,那这个目标可以表示为:minθTLl(θSPL(θT))min_{\theta_T} L_l (\theta_{S}^{PL}(\theta_T))minθT​​Ll​(θSPL​(θT​))

其中,θSPL(θT)\theta_{S}^{PL}(\theta_T)θSPL​(θT​)就是伪标签方案下,在Teacher网络的参数θT\theta_TθT​下,优化出的最优Student参数,即argminθSLu(θT,θS)argmin_{\theta_S} L_u(\theta_T, \theta_S)argminθS​​Lu​(θT​,θS​)

所以问题就在于如何解这个优化问题:minθTLl(θSPL(θT))min_{\theta_T} L_l (\theta_{S}^{PL}(\theta_T))minθT​​Ll​(θSPL​(θT​)),

首先θSPL(θT)\theta_{S}^{PL}(\theta_T)θSPL​(θT​)可以通过梯度下降法迭代得到,但它是一个多步的优化过程才能得到的结果,我们用单步优化的结果来近似:θSPL(θT)=θS−ηS∗▽θSLu(θT,θS)\theta_{S}^{PL}(\theta_T)=\theta_S - \eta_S * \triangledown_{\theta_S}L_u(\theta_T, \theta_S)θSPL​(θT​)=θS​−ηS​∗▽θS​​Lu​(θT​,θS​),那么优化目标就变成了:minθTLl(θS−ηS∗▽θSLu(θT,θS))min_{\theta_T} L_l (\theta_S - \eta_S * \triangledown_{\theta_S}L_u(\theta_T, \theta_S))minθT​​Ll​(θS​−ηS​∗▽θS​​Lu​(θT​,θS​));

那么每在伪标签数据上更新一次Student,就可以在有标签数据上算出Teacher的权重更新量,对Teacher进行更新:θT=θT−ηT▽θTLl(θS−ηS∗▽θSLu(θT,θS))\theta_T=\theta_T-\eta_T\triangledown_{\theta_T} L_l (\theta_S - \eta_S * \triangledown_{\theta_S}L_u(\theta_T, \theta_S))θT​=θT​−ηT​▽θT​​Ll​(θS​−ηS​∗▽θS​​Lu​(θT​,θS​)),其中两个梯度都是对CE求导,因此这个更新量可以很容易地求出来;

假设depth变成α\alphaα倍,那么FLOPS会变为α\alphaα倍,假设width(卷积的输入和输出通道数)变为β\betaβ倍,那么FLOPS会变为β2\beta^2β2倍,假设输入宽度变为γ\gammaγ,那么FLOPS变为γ2\gamma^2γ2;

我们希望调整参数后,FLOPS变为2ϕ2^{\phi}2ϕ,那么就要求α∗β2∗γ2=2\alpha * \beta^2 * \gamma^2=2α∗β2∗γ2=2,因此具体的调整策略就变成了:

depth: d=αϕd=\alpha^\phid=αϕ

width: w=βϕw=\beta^\phiw=βϕ

resolution: r=γϕr = \gamma^\phir=γϕ

st: α∗β2∗γ2=2\alpha * \beta^2 * \gamma^2=2α∗β2∗γ2=2, α>1,β>1,γ>1\alpha>1, \beta>1, \gamma>1α>1,β>1,γ>1

U=X+W2σ(W1LayerNorm(X))U=X+W_2\sigma(W_1 Layer Norm(X))U=X+W2​σ(W1​LayerNorm(X))

先对每个patch做乘法,WXWXWX,变成n∗S1∗Cn*S1*Cn∗S1∗C

做一个非线性变换σ\sigmaσ,这里用的是GELU

再做一个乘法,从n∗S1∗Cn*S1*Cn∗S1∗C变成n∗S∗Cn*S*Cn∗S∗C

再做一个MLP:Y=U+W4σ(W3LayerNorm(U))Y=U+W_4\sigma(W_3 Layer Norm(U))Y=U+W4​σ(W3​LayerNorm(U))

每个mlp-mixer block都做四次乘法,把n∗S∗Cn*S*Cn∗S∗C的tensor变成n∗S∗Cn*S*Cn∗S∗C

一开始分不同patch,其实就是一个P∗PP*PP∗P,stride为P∗PP*PP∗P的卷积