【学习笔记4】针对地面目标识别的遥感预训练与自监督学习

这是我的本科毕设内容,参考了ICCV顶会论文:
《Seasonal Contrast:
Unsupervised Pre-Training from Uncurated Remote Sensing Data》

翻译:《季节对比:来自未经管理的遥感数据的无监督的预训练》
以下内容除了背景为论文翻译外,其余思路均为原创所想,因此在这里进行记录并扩充思路以免忘记。
一.背景
遥感和地球自动监测是解决全球范围挑战的关键,如防灾、土地利用监测或应对气候变化。虽然存在大量的遥感数据,但其中大部分都是未标记的,因此无法用于监督学习算法。迁移学习方法可以降低深度学习算法对数据的要求。然而,这些方法大多是在ImageNet上预先训练的,由于域间隙,不能保证它们对遥感图像的泛化。在这项工作中,我们提出了季节对比(SeCo),这是一个有效的管道,利用未标记数据进行域内遥感表示的预训练。SeCo管道由两部分组成。首先,一个有原则的程序来收集大规模的、未标记的和未经整理的遥感数据集,其中包含来自不同时间戳的多个地球位置的图像。其次,利用时间和位置不变性的自监督算法来学习遥感应用中的可转移表示。我们的经验表明,在多个下游任务中,SeCo训练的模型比ImageNet预训练的模型和最先进的自我监督学习方法取得了更好的性能。SeCo的数据集和模型将公开,以促进迁移学习并使遥感应用取得迅速进展.
二.关于遥感特征识别的技术实现流程
1.预训练
本文提出了一种先通过ImageNet进行预训练的方法,因为如果一开始不通过一个有标注大数据集的进行预训练的话,意味着每个卷积核都由初始化值进行训练,又由于遥感影像特征单一的原因,每个卷积核很有可能会提取相同的特征,但我们希望每个卷积核都能提取有用的特征,那么为了做到这一点,就需要大量的数据集。
一个好的大量数据集,以ImageNet为例,有两个特点:①. 数据量巨大,什么类别的图都有,能清楚地划分出语义特征;②. 它有一千个类标,类标数量多会使卷积核学到很好的特征。
如果直接把一个神经网络不用预训练的话,直接拿遥感数据集做训练,很有可能因为数据量过小或类别量少而导致很多卷积核学到相同的特征,这样的神经网络效果就会很差,但如果将神经网络在ImageNet上训练后再放遥感数据,相当于这个神经网络已经定型了,每个卷积核已经具备了一定的类别特征,它再去学习(数据微调)的时候,可能只是把这个特征做一些微调,这时候就会发现它保留了很多原始学到的特征,这便是用ImageNet预训练的原因。

看到这里,我迸发了一个问题:预训练的数据集极大,并且有很多生活影像(人、动物、花草等)与遥感影像特征相去甚远,那么我们的卷积核一定会学到一些我们用不到的特征

是的没错,但实际上神经网络提的特征,我们认为无法手动删除,因为我们也不知道这些特征的意义是什么,但神经网络理论上设计的越大,它包含有效特征的可能性就越多,但是这样会引来一个问题:
一旦特征量大到一定程度,会将一些有效特征冲淡。
要解决这个问题要设计到一个领域叫做计算智能,查阅后发现是个非常庞大的学术体系,但是还有一个办法可以解决:
自监督学习中的知识蒸馏(自蒸馏)自蒸馏(Self Distillation): 是采用有监督学习进行知识蒸馏。只是知识蒸馏的方法,采用的方式是teacher模型和student模型是一个模型,也就是一个模型来指导自己进行学习,完成知识蒸馏,所以是自蒸馏,自己蒸馏知识来指导自己。
举个栗子,一个教师网络,这个网络学的是ImageNet,然后再做一个很小的学生网络学习高光谱图像,然后教师网络去教学生网络,教的方法通过微调数据集(数据集用遥感高光谱影像)输入到IN网络这个大的教师模型,然后会输出属于遥感影像的特征出来,然后我让学生网络去学习这些遥感特征,非遥感特征就不存了。

2.自监督学习
首先,预训练自监督学习解决的是两个完全不同的问题,预训练技术属于知识迁移,他关注的问题是怎么让这个模型学习更加泛化,能通过借助别人的知识,让自己学到更好的一个特征;自监督学习要解决的问题是人为地找到一个普适性的分类方法,通过有效利用没标注对的原始样本
【学习笔记4】针对地面目标识别的遥感预训练与自监督学习_第1张图片
通过图可以看到最终生成了正样本和负样本,正样本就是通过一张图自己做特征增强后的数据,负样本就是一个别的领域的图,对于一个好的卷积核(特征提取器)他要学习的是一个哪怕进行旋转调色后也不发生改变的特征,但实际上对于一张图来讲,将它进行旋转后,这个特征会在低层发生变化,在高层不发生变化,因为神经网络本身的卷积核是一个滤波器,同样一个图发生旋转通过滤波器输出的结果一定是不一样的,但是越到深层卷积后,旋转前后的照片,就会趋于一致,因为浅层神经网络学习到的是一个图像的边缘或者是几何图形(比如发现一张图里有一个圆形、矩形等),但越往后学习的是语义图形(比如里面有没有耳朵、鼻子,这个是旋转也没办法改变的语义信息),所以说这篇文章便是利用了神经网络低层级的语义信息,容易受旋转和色彩进行改变的而去做的特征增强。
这里又会产生一个新的问题:为什么最终通过深层神经网络都会趋于一致,特征增强还能提高识别精度呢?
因为我们所有的分类器本质上是在一个空间上采样,这是一个拟合的过程,理论上讲我们能够采样的点越多,空间就会更快且精准地收敛,这是神经网络中最经典的奥斯卡姆剃刀,在自监督学中最大的特点就是,我需要让神经网络建立足够多的图像(特征增强),他不像有标注的数据集,采样点非常精准,无标注的点可能并不是很准,但它会在我们标注的范围内变化,如果能很好的利用起这个点那就会是曲线画的更好(K-means),因此,无监督学习它更重要的是在解决浅层神经网络,因为深层神经网络他更受限于你设计的对比损失或者人为制定的语义,对于浅层神经网络来讲,他会建立足够多的样本,学出来的特征就会更具有鲁棒性。
再举个栗子,比如我们现在去实现一个二分类任务,我们在图上画了10个正样本,10个负样本,我们找出一条线去进行划分,那么这条线的可能性是比较大的,但如果我们通过特征增强去让一个点开始变换,在图中的反应就是开始抖动,那么这个点就从一个点变成了一个范围,那么中间这条划分的线就会变得更加清晰。
遥感影像样本少,标签残缺,需要自监督学习,为了扩充样本量,又引入了特征增强这个概念,《学习笔记1》有提到就不赘述了,上次提出了一个三分支的自监督学习方式,通过旋转、对比度、灰度三种值变换以获得更多样本,ICCV这篇文章是上一篇论文的升级版,它加入了时间维度,将最近的对比自监督学习方法与卫星提供的时间信息相结合,学习对季节变化同时具有变化和不变的良好视觉表示,用人话来说就是利用哨兵二号的环球周期,对一个地区一年中发生的季节变化进行采集,同时为了避免获得来自同一时期的图像,每隔一年拍一次,以此达到特征增强的效果
三.针对该论文的创新点
1.对于神经网络预训练
目前国内由于卫星较少,数据集匮乏,大部分论文都采用ImageNet去做预训练来生成一个初步的神经网络,因为现在人们更倾向于用一个很大的数据集去做预处理,哪怕很多图不相关,那也比见的图少要好,但是遥感影像与IN数据集的色域和特征区别很大,因此不能保证初始神经网络对遥感影像的泛化能力,因此,我认为可以选择更加贴近于遥感影像且很大的数据集进行预训练,ICCV这篇文章的数据集:SeCo目前已经开源,如果它具备我们需要的特征类别的话,将会是一个很好的数据集,虽然也可以考虑自己找更好的数据集,但这个难度应该很大,不然之前大家也不会用IN了,如果之后能够找到一个更适用于遥感预训练的数据集,感觉这都是一个很厉害的论文。
这里在之后可以关注一下HRNet,这个网络结构使得不用预训练也能达到很好的效果,由于还没认真学它在此只是立个flag。
2.对于神经网络自监督学习
目前这里看过两篇论文做自监督学习的特征增强,一篇是国内:旋转、对比度、灰度值,一篇是顶会:裁剪、颜色抖动、翻转、不同时间。顶会论文是增加了时间维度,以此来增多了图像特征的数量,但鉴于我的目标是对飞机等目标进行检测,时间维度的意义并不大(一年后飞机也估计都没影了),因此我这里提出一个思想:发掘一个场景的变与不变
以飞机为例,变的是背后的场景,不变的是飞机本身的形状,那么我们可以找到很多飞机的图(最好要比我们训练集的样本清晰,不清晰也问题不大,因为直接会做标注),先把它裁剪地只剩下飞机,然后贴到我们的无飞机的遥感背景中,以此实现特征增强的效果。
还有一个思路,目前我们现在只有正样本和负样本,那么我们可以建立一种中立样本:把两张遥感图像叠在一起,相当于把两张图都变成半透明,然后全部融合到一起,比如把两个人的脸融合到一张图上,甲80%透明度,乙20%透明度,目前看到的是甲的脸,但随着透明度比例不断发生变化,人们会慢慢发现甲的脸变成乙的脸,那么对于神经网络来说,两张图是remix到一起的时候,神经网络应该输入一个在甲和乙两个类标之间的一个值,是最合理的,这也是特征增强的一种方式,输出的结果也从原先的确定值变为了可能性的比例数字

意义在于: 神经网络前面的分类器把浅层特征提取来后,后面的分类是根据浅层特征猜到底是什么语义,但实际上神经网络是一个比较混沌的东西,假设一张飞机的图,她可能会送出9张飞机的特征,但可能也送出1份车的特征,因为有可能飞机中的背景里,有个东西长得看起来似乎是一辆车,通过这种remix的方法可以让神经网络更加清晰地去理解该怎样正确输出值,举个例子,我对一个飞机图加了20%车进去,但我逼着他输出飞机的结果,这样便能一定程度上将结果进行锐化,类似于将结果做了一个L1范数正则化(也就是减少误差),这样便可以更关注车和飞机到底有哪些不同。
3.对于神经网络的卷积核
传统深度学习中,卷积核一般都是3* 3的方形,因为对于传统影像而言,一个人站着就是站着,方形能够最好的表现出语义信息,但对于遥感领域,歪曲角度表现信息的情况是比较常见的,它没有方向的统一性 ,所以在遥感领域卷积核怎么旋转,形状也是一个问题
对于现在的卷积核而言,都是3* 3的18个参数,因为5* 5的卷积核的参数是25个,两层3* 3的卷积核就相当于覆盖了一个5* 5的卷积核,两个3* 3的卷积核的感受野相当于一个5* 5的卷积核,但是参数量减少了三分之一,因为参数越多模型越难训练,因此我们尽可能让他卷积层多来减少参数量。
目前很多遥感影像都是用VGG去做神经网络而不用Resnet,尽管rn的表现效果远好于VGG,但大家还是用VGG,因为对于遥感任务,他对空间的要求非常高,但resnet他是牺牲了空间的识别能力换区了语义的复杂程度,因为rn经过一百多层以后他左上角的那个像素点不一定对应的是原始图像的左上角,但由于VGG他的结构和层数比较浅,他提取的特征图左上角和原始左上角的对应关系相对较强,所以一般遥感都用VGG做。
微软在做图像分类的时候提出过一个可变卷积核,是否可以用到遥感领域的深度学习,可以之后进一步挖掘一下,资料:https://zhuanlan.zhihu.com/p/338004985
三.技术实现路径
针对一个遥感地面目标检测技术,
1. 首先,通过类似ImageNet这样的大数据集进行预训练,目前选择SeCo数据集进行尝试,可能会有比IN更好的效果,初步建立一个具有特征类别的神经网络(如果模型太大还可以用知识蒸馏去做模型剪枝,后话了)
2. 通过自监督学习中的特征增强进行数据微调,鉴于我要做的是针对地面中飞机、车辆等物体的类别识别,目前想到的特征增强的方式,【随机裁剪】【随机色域变换】【增加物体】【随机旋转】,并加入中立样本去减少识别误差
3. 完成一些下游任务,做一些测试工作。

你可能感兴趣的:(Python,计算机视觉,深度学习,机器学习)