CurriculumNet解读

本文介绍了一种在少量或无标注噪声数据上训练高性能深度学习模型的方法。通过初始特征生成、课程设计和课程学习三步骤,该方法能在数据质量不佳的情况下,依然保持良好的模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决的问题

一句比较有意思的调侃是,人工智能是先人工后智能,即先有大量的人工的数据标注,然后才能以此训练一个高效的网络。
码隆科技2018 ECCV的这篇论文提出了一种训练方法,能够在数据没有或者只有少量人工标注和清洗的情况下,仍然能利用这些噪声数据训练出一个高性能的深度学习模型。

方法
Overview

在这里插入图片描述
整个网络的Pipeline包含三个部分:

  1. initial features generation
  2. curriculum design
  3. curriculum learning

第一步是用全部的数据去学习一个初始化的模型;第二步,我们训练一个初始化网络的目的是,将训练的数据映射到特征空间中,来发现每一个类别的图片的底层的结构和图片之间的关系,提出了一个有效的定义图像复杂度的方法,进而通过复杂度来设计learning curriculum,它能够将每个分类中所有的图片分成一些按照复杂度排序的子集;第三步,然后我们用curriculum learning的思想从复杂度简单的包含所有类别的子集开始训练,然后逐步的用更复杂的数据去进行训练,以提高模型的能力。

Curriculum Design

具体的来说,将整个训练集分成了多个子集,这些子集从具有干净的图像和更可靠标签的简单子集到包含大量含噪声或者错误标签的图像进行排序
收到聚类算法的启发,在每个类别中进行下面的操作,第一步就是用全部的数据集去初始化一个inception_v2结构的模型,然后就是通过使用初始化模型的fc-layer特征将每个类别中的所有的图像都投影到深度特征空间中,对每一个图像 P i P_i Pi去执行 P i → f ( P i ) P_i\rightarrow f(P_i) Pif(Pi),然后去求欧氏距离矩阵 D ⊆ R n × n D\sube \R^{n\times n} DRn×n
在这里插入图片描述
n n n指的是当前类别的图片的数量, D i j D_{ij} Dij表示的是 D i D_i Di D j D_j Dj之间的相似度(一个较小的 D i j D_{ij} Dij意味着 P i P_i Pi P j P_j Pj之间有更高的相似度)。
首先,计算每张图片的局部密度 p i p_i pi
在这里插入图片描述
其中
在这里插入图片描述
其中 d c d_c dc是通过对 D ⊆ R n × n D\sube \R^{n\times n} DRn×n中的 n 2 n^2 n2个距离从小到大进行排序来确定的,并选择一个 k k k%的数字作为 d c d_c dc p i p_i pi是指到 i i i的距离小于 d c d_c dc的样本数量。对于具有正确标签的图像来说,他们的外观是相似的,对应的他们的投影的距离应该就比较相近,这就产生了一个较大的局部密度,反之对于噪声大的图像,他们的局部密度就比较小。
对于每个图像的距离定义为 δ i \delta_i δi在这里插入图片描述
对于聚类中心的选择是最关键的地方, δ i \delta_i δi是每张图片的距离,对于有 p j > p i p_j>p_i pj>pi的图片 I j I_j Ij, δ i = = D i , j ^ \delta_i==D_{i,\widehat{j}} δi==Di,j j ^ \widehat{j} j 是数据中离 i i i最近的样本,如果说 δ i \delta_i δi是所有密度中最大的一个,那么 p j p_j pj就是 i i i和距离 i i i最远的数据点之间的距离,具有最大局部密度的点就具有最大的 δ \delta δ,这个点被选为这一类的聚类中心。选择好了聚类中心,然后就是用k-mean算法进行聚类,根据数据点到聚类中心的距离,将数据点分成若干簇。

在这里插入图片描述
对于整个的训练策略是比较简单的,首先是用所有的数据去训练一个inception_v2的结构,然后使用全连接层的特征来计算欧氏距离,进而去计算聚类中心,然后用k-mean算法进行聚类,将每一个类别的照片分为三个子集,按照复杂度进行排序,clean subsets、noise subsets and highly noise sunsets(对应的是他们在特征空间中的密度值是由高到低的)。第二步是,仅用clean subsets去训练一个standard convolutional architecture(sunch as inception_v2),这能够使这个模型去学习每个类别的一个基础的但是比较清晰的视觉信息,作为接下来过程的基础特征,然后当模型在第一阶段拟合之后,增加噪音数据继续学习,也就是noise subsets,虽然说这些数据中有不正确的标签,但是它大致保留了数据的主要结构,从而导致性能的提高。最后,就是用highly noise subsets去继续训练,需要说明的是,我们在前两个阶段已经获得了深度特征,最后这个阶段的highly noise subsets没有对模型产生消极影响,反而是增加了模型的泛化能力。

出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.youkuaiyun.com/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值