自监督学习详细介绍(学习笔记)

一、相关文献:

fast.ai上面关于自监督学习的资料:Self-supervised learning and computer vision.
GitHub上面每年使用自监督学习的论文列表:Awesome Self-Supervised Learning.
相关微信推送

二、自监督学习的介绍

1.自监督学习的由来

机器学习中基本的学习方法有:监督学习(supervised learning)、半监督学习(semi-supervised learning)和无监督学习(unsupervised learning)。他们最大的区别就是模型在训练时需要人工标注的标签信息,监督学习利用大量的标注数据来训练模型,使模型最终学习到输入和输出标签之间的相关性;半监督学习利用少量有标签的数据和大量无标签的数据来训练网络;而无监督学习不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类。
使用监督学习时我们需要足够的标记数据。为了获得这些信息,需要手工标记数据(图像/文本),这是一个既耗时又昂贵的过程。还有一些领域,比如医疗领域,获取足够的数据本身就是一个挑战。而在使用无监督学习的时候,例如自编码器,仅仅是做了维度的降低而已,并没有包含更多的语义特征,对下游任务并没有很大的帮助。
因此我们想要在不需要手工标记数据的情况下,训练过程还能对任务本身有很大的帮助,可以包含更多的语义特征,自监督学习因此被提出。

2.自监督学习的定义

自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。
也就是说,自监督学习不需要任何的外部标记数据,这些标签是从输入数据自身中得到的。自监督学习的模式仍然是Pretrain-Fintune的模式,即先在pretext上进行预训练,然后将学习到的参数迁移到下游任务网络中,进行微调得到最终的网络。

3.自监督学习的pretext

在计算机视觉中使用自监督学习最需要回答的问题是:“你应该使用什么pretext?”其实你有很多选择。下面是其中的一些,以及描述它们的论文,在每个部分都有一篇论文的图片展示了这种方法。

3.1图像旋转

论文:Unsupervised Representation Learning by Predicting Image Rotations (ICLR18),如图,文章提出,通过训练ConvNets来识别输入图像的2D旋转来学习图像特征。在质量和数量上证明了这个看似简单的任务,实际上为语义特征学习提供了非常强大的监督信号。其生成的标签为人为旋转图片后得到的数据。在这里插入图片描述

3.2图像着色

论文:Colorful Image Colorization|Real-Time User-Guided Image Colorization with Learned Deep Priors。使用图像灰度化来作为图像的输入数据,对应的彩色图像为标签数据训练网络。为了解决这个问题,模型必须了解图像中出现的不同物体和相关部分,这样它才能用相同的颜色绘制这些部分。因此对下游任务提供了帮助。
在这里插入图片描述

3.3图像修复

论文:Context encoders: Feature learning by inpainting。我们可以通过随机去掉图像中的某个部分来生成训练数据,原数据作为训练标签来进行预训练,对于下游任务,Pathak等人表明,在PASCAL VOC 2012语义分割的比赛上,生成器学到的语义特征相比随机初始化有10.2%的提升,对于分类和物体检测有<4%的提升。
在这里插入图片描述
上面只是举例介绍了一下自我监督的pretext有哪些,还有很多工作,大家可以去GitHub论文列表中查找相应的论文。

4.自监督学习的主要方法

自监督学习的方法主要可以分为 3 类:1. 基于上下文(Context based) 2. 基于时序(Temporal Based)3. 基于对比(Contrastive Based)

4.1基于上下文(Context Based)

基于数据本身的上下文信息,我们其实可以构造很多任务,比如在 NLP 领域中最重要的算法 Word2vec 。Word2vec 主要是利用语句的顺序,例如 CBOW 通过前后的词来预测中间的词,而 Skip-Gram 通过中间的词来预测前后的词。
而在图像中,图像拼图(将图像分割,预测每一部分的相对位置或者预测出这是哪一种打乱方式)、图像修复(上述例子中提到)、图像着色(上述例子中提到)、图像旋转(上述例子中提到)等任务都是典型的作为pretext的例子。
比较特殊的最近的任务还有两种:一种是自监督学习和具体任务紧密结合的方法(Task Related Self-Supervised Learning)Boosting Few-Shot Visual Learning with Self-Supervision_ICCV2019),另一种是自监督和半监督学习进行结合(SL: Self-Supervised Semi-Supervised Learning_ICCV2019)。

4.2基于时序(Temporal Based)

之前介绍的方法大多是基于样本自身的信息,比如旋转、色彩、裁剪等。而样本间其实也是具有很多约束关系的,这里我们来介绍利用时序约束来进行自监督学习的方法。最能体现时序的数据类型就是视频了(video)。
第一种思想是基于帧的相似性Time-Contrastive Networks: Self-Supervised Learning from Video,对于视频中的每一帧,其实存在着特征相似的概念,简单来说我们可以认为视频中的相邻帧特征是相似的,而相隔较远的视频帧是不相似的,通过构建这种相似(position)和不相似(negative)的样本来进行自监督约束。
另外,对于同一个物体的拍摄是可能存在多个视角(multi-view),对于多个视角中的同一帧,可以认为特征是相似的,对于不同帧可以认为是不相似的。
还有一种想法是来自 ICCV 2015 Unsupervised Learning of Visual Representations Using Videos.的基于无监督追踪方法,首先在大量的无标签视频中进行无监督追踪,获取大量的物体追踪框。那么对于一个物体追踪框在不同帧的特征应该是相似的(positive),而对于不同物体的追踪框中的特征应该是不相似的(negative)。
除了基于特征相似性外,视频的先后顺序也是一种自监督信息。比如ECCV 2016, Misra, I. Shuffle and Learn:unsupervised learning using temporal order verification等人提出基于顺序约束的方法,可以从视频中采样出正确的视频序列和不正确的视频序列,构造成正负样本对然后进行训练。简而言之,就是设计一个模型,来判断当前的视频序列是否是正确的顺序。

4.3基于对比(Contrastive Based)

相关资料:https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html
对比约束,它通过学习对两个事物的相似或不相似进行编码来构建表征,这类方法的性能目前来说是非常强的,主要思想是通过构建正样本(positive)和负样本(negative),然后度量正负样本的距离来实现自监督学习,即样本和正样本之间的距离远远大于样本和负样本之间的距离,可以使用点积的方式构造距离函数,然后构造一个 softmax 分类器,以正确分类正样本和负样本。这应该鼓励相似性度量函数(点积)将较大的值分配给正例,将较小的值分配给负例:
在这里插入图片描述
通常这个损失也被称为 InfoNCE,后面的所有工作也基本是围绕这个损失进行的。

三、选择一个pretext

选择的任务必须是这样的,如果解决了这个任务,就需要了解数据,这也是解决下游任务所需要的,也就是说下游任务和pretext要有一定的相关性。例如,科研学者经常使用一种叫做自动编码器的pretext。这是一个模型,它可以将一个输入图像转换成一个大大简化的形式(使用瓶颈层),然后将其转换回尽可能接近原始图像的内容。它有效地利用压缩作为借口任务。然而,解决这个问题不仅需要重新生成原始图像的内容,还需要重新生成原始图像中的任何噪声。因此,如果您的下游任务是您想要生成更高质量的图像,那么这将是一个糟糕的借口任务的选择。你也应该确保这个借口任务是一个人可以做的事情。例如,您可以将生成未来视频帧的问题作为借口任务。但是如果你试图生成的框架在未来太远了,那么它可能是一个完全不同的场景的一部分,以至于没有任何模型能够自动生成它。

四、对下游任务进行微调

一旦利用一个pretext预训练了模型,就可以进行微调了。在这一点上,应该把这当作一个迁移学习的问题,因此应该小心不要伤害预先训练的weight。参考ULMFiT论文中讨论的内容,例如逐步解冻、有区别的学习率和单周期训练。
总的来说,我建议不要花太多时间来创建完美的pretext,而应该尽可能地快速、简单地构建所能构建的任何东西。然后你就可以知道它是否适合你的下游任务。通常情况下并不需要一个特别复杂的pretext来完成下游任务。因此很容易在设计pretext上浪费时间。

五、Consistency loss

在自监督训练的基础上,可以增加一个非常有用的技巧,这在NLP中被称为“一致性损失(Consistency loss)”,在计算机视觉中被称为“噪声对比估计(noise contrastive estimation)”。基本思想是这样的:pretext是一些混乱原数据的事情,比如模糊部分,旋转,移动补丁,或者(在NLP中)改变单词位置或者把一个句子翻译成外语然后再翻译回来。在每种情况下,都希望原始项和“混乱”项在pretext中给出相同的预测,并在中间表示中创建相同的特性。并且也希望同样的东西,当以两种不同的方式“混乱”时(例如,一个图像旋转了两个不同的量),也应该有相同的一致表示。
因此,我们在loss函数中添加了一些内容,以惩罚为相同数据的不同版本获取不同的答案。这是一幅图片,来自谷歌的文章,提出了 Advancing Semi-supervised Learning with Unsupervised Data Augmentation
在这里插入图片描述
说这是“有效的”将是一个巨大的轻描淡写…例如,在上述文章中讨论的方法完全打破了我们之前的状态,他们使用的标签数据比我们少1000倍!
Facebook人工智能最近发表了两篇论文,在计算机视觉环境中使用了这一想法:Self-Supervised Learning of Pretext-Invariant Representations and Momentum Contrast for Unsupervised Visual Representation Learning。就像NLP中的谷歌论文一样,这些方法超越了以前最先进的方法,并且需要更少的数据。

六、扩展阅读

Self-supervised Visual Feature Learning with Deep Neural Networks: A Survey
Revisiting Self-Supervised Visual Representation Learning
Self-Supervised Representation Learning

<think>好的,我需要回答用户关于超声波雷达输出数据格式的问题。首先,用户属于IT领域,可能更关注数据格式的技术细节和实际应用。我需要整理已有的引用信息,结合行业标准,提供结构清晰的回答。 根据引用2,超声波雷达通常使用RS485接口和Modbus协议输出数字化的测距结果。Modbus协议是关键,需要详细说明其数据帧结构。例如,功能码03对应读取保持寄存器,数据部分可能包含地址、距离值等。 另外,引用4提到测距结果通过Echo信号的持续时间表示,但实际输出时,MCU会将其转换为数字信号,通过Modbus传输。可能需要说明原始数据和处理后的数据格式差异。 还需要考虑多路数据管理,如引用1所述,12路雷达的数据如何组织。每个雷达可能有独立的寄存器地址,数据帧中包含多个寄存器的值。例如,每个距离值占用两个字节,按顺序排列。 用户可能还想知道实际例子,比如数据帧的十六进制表示和解析,这有助于理解具体结构。同时,引用3和5虽然不直接相关,但可以忽略,除非涉及数据融合,但用户的问题集中在输出格式,所以暂时不需要涉及。 最后,生成相关问题时要围绕数据格式、协议、解析方法等,确保问题对IT专业人员有帮助。需要检查引用标记是否正确,使用正确的LaTeX格式,确保数学表达式正确。</think>### 超声波雷达输出数据格式解析(IT领域) 超声波雷达的输出数据格式通常由硬件接口和通信协议共同定义。根据引用[2],车载超声波雷达一般通过RS485接口输出数字化测距结果,并采用**Modbus协议**进行数据传输。以下是具体分析: --- #### 1. **Modbus协议数据帧结构** Modbus协议采用主从架构,数据帧包含以下字段(以读取距离值的典型场景为例): - **地址域**:1字节,标识从机设备地址(例如12路雷达对应地址1~12)。 - **功能码**:1字节,常用`0x03`(读取保持寄存器)。 - **寄存器地址**:2字节,表示距离值存储的起始寄存器地址(例如`0x0000`对应距离寄存器)。 - **数据长度**:2字节,表示读取的寄存器数量(例如`0x0001`表示读取1个寄存器)。 - **CRC校验**:2字节,用于数据完整性验证。 **示例数据帧**(十六进制): ``` 从机响应:01 03 02 00 64 CRC ``` 解析:地址`0x01`的雷达返回距离值`0x0064`(即十进制100cm),CRC为校验码[^2]。 --- #### 2. **距离数据编码方式** - **数值类型**:距离值通常以**16位无符号整数**(2字节)存储,单位为厘米(cm)或毫米(mm)。例如,`0x00C8`表示200cm。 - **多路数据组织**:12路雷达的数据可能按顺序存储在连续的寄存器中。例如,地址`0x01`对应第1路雷达的寄存器`0x0000`,地址`0x02`对应第2路的寄存器`0x0001`,以此类推[^1]。 --- #### 3. **异常状态标识** 部分设备会在数据帧中预留状态位: - **错误码**:例如`0xFFFF`表示测距失败(超出量程或信号干扰)[^4]。 - **校验失败**:若CRC校验不匹配,主设备需重新发起请求。 --- #### 4. **数据更新频率** 典型超声波雷达的数据输出频率为**10~20Hz**(即每50~100ms更新一次测距值),具体取决于硬件性能(如STM32F103的定时器配置)。 --- #### 5. **实际应用案例(STM32F103+HC-SR04)** 若基于STM32F103设计12路雷达系统(引用[2]问题3): 1. **硬件接口**:每个HC-SR04模块的Echo信号连接到STM32的GPIO,通过定时器捕获高电平时间计算距离。 2. **数据封装**:STM32将12路距离值存入保持寄存器(地址`0x0000~0x000B`),通过RS485转换芯片(如MAX485)输出Modbus数据帧。 3. **协议实现**:STM32需响应Modbus主设备的读请求,返回对应寄存器的值[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值