TowardsDataScience 博客中文翻译 2020(七百八十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

用于密集光流估计的自监督注意机制

原文:https://towardsdatascience.com/self-supervised-attention-mechanism-for-dense-optical-flow-estimation-b7709af48efd?source=collection_archive---------30-----------------------

内部人工智能

使用自监督深度学习的多目标跟踪

在我们进入自我监督注意力的含义之前,让我们先了解一下光流估计的直觉,以及它如何作为人类和计算机视觉系统跟踪物体的一种方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

人们一致认为,物体跟踪是人类婴儿在大约两到三个月的早期发展起来的基本能力。然而,在神经生理学的水平上,人类视觉系统的实际工作机制仍然有些模糊。与人类视觉系统类似,计算机视觉系统也广泛用于各种应用,如视频监控和自动驾驶。跟踪算法的目标是在给定的视频序列中重新定位在初始帧中已经识别的一组特定的对象。在与跟踪相关的研究文献中,它在两个主要类别下被研究,即视觉对象跟踪(VOT)和半监督视频对象分割(半 VOS)。第一种(VOT)旨在通过在整个视频序列中重新定位对象边界框来跟踪对象。而后者(半 VOS)通过像素级分割掩模在更细粒度的级别上跟踪对象。在这篇博客中,我们将讨论后一种方法背后的原始想法,即密集光流估计,以及这种密集跟踪方法是如何通过自我监督的注意机制实现的。

密集光流估计

稠密光流是光流概念的范畴之一。光流可以定义为视频序列的连续帧之间的物体运动,是物体和摄像机之间相对运动的结果。用科学的语言来解释,我们可以说,光流是图像中亮度模式的表观运动速度的分布,它是由物体和观察者的相对运动产生的。光流研究为稀疏光流密集光流稀疏光流导出帧中仅几个感兴趣像素的流矢量,这些流矢量描绘了对象的某个边缘或角落。另一方面,密集光流导出给定帧中所有像素的流矢量,从而以更多的计算和更低的速度为代价给出更高的精度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网球运动员的密集光流估计

密集光流为视频序列中的每一帧的每个像素计算一个光流向量。与稀疏光流不同,这种方法为视频分割和运动结构学习等应用提供了更合适的输出。密集光流可以通过各种方法实现。其中,使用最简单的算法之一是 Farneback 方法。它基于 Gunner Farneback 的算法,Gunner Farneback 在 2003 年的“基于多项式展开的两帧运动估计”中解释了该算法。OpenCV 为这个算法提供了代码函数来寻找密集光流。要快速体验 Farneback 的算法是什么,请运行下面的代码片段。

运行上述代码后,您将在视频(Dense-optical-flow.mp4)中获得以下输出(右侧)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在下面的 GIF 中描述了可视化的光流。(重 gif,可能需要时间加载)

Farneback 算法是一种通过比较视频序列中的两个连续帧来估计某些图像特征的运动的有效技术。该算法首先使用多项式展开变换 通过二次多项式逼近图像帧的窗口。多项式展开变换是专门在空间域中设计的信号变换,并且可以用于任何维度的信号。该方法观察多项式变换的平移,以从多项式展开系数估计位移场。该方法然后在一系列迭代改进之后计算密集光流。在实现代码中,该算法从一个双通道流向量阵列(dx/dt,dy/dt)计算光流的方向和大小。然后,计算的方向和大小通过 HSV 颜色表示的值可视化,该值被设置为最大值 255 以获得最佳可见性。

用于密集光流估计的深度学习

从历史上看,光流问题是一个优化问题。在深度学习的最近发展之后,许多研究人员已经应用深度学习来解决这个优化问题,通过处理连续的视频帧作为输入来计算运动物体的光流。尽管这些方法一次只处理两个连续的帧,但是视频的本质仍然在这两个帧中被捕获。视频与图像的主要区别在于,除了图像的空间结构之外,视频还拥有时间结构。然而,视频也有其他形式,如声音,但它们在这种情况下没有用。因此,连续的帧流可以被解释为以特定时间分辨率(fps)操作的图像的集合。这意味着视频中的数据不仅在空间上编码,而且在顺序上编码,这使得对视频进行分类非常有趣,同时也具有挑战性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

通常,深度神经网络需要大量的训练数据来学习和优化逼近函数。但是在光流估计的情况下,训练数据尤其难以获得。这背后的主要原因是难以将图像中每一点的精确运动精确标记到亚像素精度。因此,为了解决标记视频数据的问题,计算机图形被用于通过指令来模拟大量的现实世界。由于指令是已知的,所以视频帧序列中每个像素的运动也是已知的。试图解决光流问题的一些最近的研究是 PWC-Nets、ADLAB-PRFlow 和 FlowNet。光流被许多应用广泛继承,如通过基于特征的光流技术从固定的摄像机或附着在车辆上的摄像机进行目标检测和多目标跟踪的车辆跟踪和交通分析。

用于跟踪的自我监督深度学习

如前所述,在视频分析领域,视觉跟踪对于许多任务都是不可或缺的,如识别、交互和几何。但与此同时,由于对标记视频数据的巨大需求,使用深度学习来完成这些任务变得不可行。无论如何,为了实现高性能,大规模跟踪数据集变得必要,这反过来需要大量的努力,从而使深度学习方法更加不切实际和昂贵。牢记这一点,最近的研究人员将他们的信心放在了一种有前途的方法上,通过利用大量未标记和原始视频数据,使机器在没有人类监督的情况下进行学习(标记数据)。这种对自我监督学习的追求始于谷歌研究团队的一项研究提案,该提案建议通过在视频彩色化的代理任务上训练一个模型来制作一个视觉跟踪系统,这不需要任何额外的标记数据(自我监督)。然而,研究表明,不是让模型预测输入灰度帧的颜色,而是它必须学会从一组参考帧中复制颜色,从而导致能够在时间设置中跟踪视频序列的空间特征的指向机制的出现。这些自我监督方法的可视化和实验表明,尽管在没有任何人工监督的情况下训练了网络,但是在网络内部自动出现了用于视觉特征跟踪的机制。在对从互联网上收集的未标记视频进行大量训练后,自监督模型能够跟踪视频帧序列的初始帧中指定的任何分割区域。然而,自我监督的深度学习方法是在假设帧序列中的颜色是时间稳定的情况下训练的。显然,也有例外,比如视频中的彩灯可以打开和关闭。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在视频着色代理任务上训练的指针机制- 来源

跟踪中的自监督学习的目标是学习适合于沿着视频的帧序列匹配对应的特征嵌入。通过利用帧序列中的自然时空一致性来学习对应流。对应流可以理解为连续帧之间存在的特征相似流。用简单的语言来说,这种方法学习一种指针机制,它可以通过从一组参考帧中复制像素信息来重建目标图像。因此,要制作这样的模型,研究人员在设计架构时必须谨记一些注意事项。首先,我们必须防止模型学习该任务的琐碎解决方案(例如,基于低级颜色特征匹配连续帧)。第二,我们必须使跟踪器漂移不那么严重。跟踪器漂移(TD)主要是由于对象的遮挡、复杂的对象变形和随机的光照变化引起的。TD 通常通过在具有周期一致性和预定采样的长时间窗口上训练递归模型来处理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对应流匹配视频上帧之间的对应关系— 来源

最后,在我们深入了解这个指针机制之前,让我们先了解一下上面提到的在设计这种模型时必须考虑的一些要点。首先,重要的是要记住,对应匹配是这些模型的基本构件。因此,在通过逐像素匹配进行帧重建时,模型很有可能会学习平凡解。为了防止模型过度适应一个平凡的解决方案,添加颜色抖动和通道方向的丢失是很重要的,这样该模型被迫依赖于低级别的颜色信息,并且必须对任何类型的颜色抖动都是鲁棒的。最后,如前所述,为了处理 TD,在具有前后一致性和预定采样的长时间窗口上进行递归训练是减轻跟踪器漂移问题的最佳方式。如果我们应用上述方法,我们可以确定模型的鲁棒性将增加,并且该方法将能够利用视频的时空一致性,并且颜色将能够充当用于学习对应关系的可靠的监督信号。

引擎盖下自我监督的注意力

如果你更深入地观察这里所学的指针机制,你会得出结论,它是一种注意力机制。是的,它最终是著名的 QKV 三重奏(查询-关键-值,大多数注意力机制的基础)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

正如我们所知,自监督模型的目标是通过有效地编码特征表示来学习鲁棒的对应匹配。简单地说,有效复制的能力是通过对代理任务的训练来实现的,其中模型通过线性组合来自参考帧的像素数据来学习重建目标帧,权重测量像素之间的对应强度。然而,分解这个过程,我们发现我们处理的每个输入帧都有一个三元组(Q,K,V)。Q、K、V 指的是查询、键和值。为了重建 T 帧中的像素 I,注意机制被用于从原始序列中的先前帧的子集复制像素。只是,在这种情况下,查询向量(q)是当前帧(I)的特征嵌入(目标帧),关键向量是先前的 frame’s(I⁰)特征嵌入(参考帧)。现在如果我们计算点积。)并取计算乘积的 softmax,我们可以得到当前帧(I)和先前参考帧(I⁰).)之间的相似性当在推断期间与参考实例分割掩模(V)相乘时,该计算的相似性矩阵将为我们的目标帧提供指针,从而实现密集光流估计。因此,这个指针只是 Q、K 和 V 的组合,是在这个自我监督系统下工作的实际注意力机制。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个人都需要关注— 来源

注意力机制训练的一个关键要素是建立一个适当的信息瓶颈。为了避开注意力机制可能求助的任何学习捷径,使用了前面提到的有意丢弃输入颜色信息和通道丢失的技术。然而,颜色空间的选择仍然在通过自我监督训练这些注意机制中起着重要作用。许多研究工作已经验证了使用去相关颜色空间导致自监督密集光流估计的更好特征表示的推测。简单地说,使用 LAB 格式的图像比 RGB 格式的效果更好。这是因为所有 RGB 通道都包含一个亮度表示,使其与 Lab 中的亮度高度相关,因此成为一个微弱的信息瓶颈。

限制对最小化物理内存成本的关注

上面提出的注意机制通常伴随着高的物理存储成本。因此,处理用于对应匹配的高分辨率信息会导致较大的存储器需求和较慢的速度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

为了避免存储开销,ROI 定位用于从存储体中非局部地估计候选窗口。直观上,我们可以说,对于时间上接近的帧,时空一致性自然存在于帧序列中。这种 ROI 定位导致注意力受限,因为现在目标帧中的像素仅与参考帧的空间相邻像素进行比较。可比较像素的数量由注意力被限制的扩大窗口的大小决定。窗口的扩展速率与存储体中当前帧和过去帧之间的时间距离成比例。在计算受限注意区域的亲和度矩阵之后,可以以非局部方式计算细粒度匹配分数。因此,通过提出的记忆增强的限制注意机制,该模型可以有效地处理高分辨率信息,而不会导致大量的物理内存开销。

结论

在这篇博客中,我们首先介绍了光流的概念,并研究了它在物体跟踪中的应用。我们还研究了这个概念如何启发了深度学习跟踪系统,以及自我监督和视觉注意力如何在制作这些系统中发挥关键作用。计算出的光流矢量开启了无数可能的应用,这些应用需要对视频进行如此深入的场景理解。所讨论的技术主要应用于行人跟踪、自主车辆导航和许多更新颖的应用。可以应用光流的各种应用仅受限于其设计者的独创性。

我个人认为,由于自我监督的普遍性和灵活性,它将很快成为被监督的对手的有力竞争者。在看不见的物体类别上,自我监督轻而易举地超越了大多数监督方法,这反映了它在未来的时间里的重要性和力量,因为我们正在朝着解决人类智能的方向前进。

我的博客反映了我的工作,并简单地传达了我对这些话题的理解。我对深度学习的解读可以和你不一样,但我的解读只能和我一样无误。

参考

[1] [1981-AI,Horn-Schunck 方法]确定光流

[2] [2003-SCIA,法内贝克流]基于多项式展开的两帧运动估计

[3] [2007-DAGM,TVL1 方法]一种基于对偶的实时 tv-l1 光流方法

[4]赖,子航,,谢."视频通信流的自我监督学习."ArXivABS/1905.00875(2019):n . PAG。

[5]赖,郑,陆,鄂,谢,魏(2020).主追踪器:记忆增强自我监督追踪器。 ArXiv,abs/2002.07793

[6]冯德里克、施里瓦斯塔瓦、法蒂、瓜达拉马和墨菲(2018 年)。跟踪是通过给视频着色而出现的。 ArXiv,abs/1806.09594

SFM 自我监督深度估计:打破观念

原文:https://towardsdatascience.com/self-supervised-depth-estimation-breaking-down-the-ideas-f212e4f05ffa?source=collection_archive---------7-----------------------

无需手动标注的学习深度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.概观

这篇文章最后一次更新是在 2020 年 8 月 10 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

视差预测

这篇文章致力于探索通过自我监督学习进行深度估计的想法。关于深度估计的一些概念性想法充当先决条件。你可以参考这篇讨论相关话题和相关问题的文章。

自我监督的方法放松了对有注释的基础事实的硬性要求,这本身是麻烦的。它需要使用昂贵的高分辨率激光雷达,必须与相机进行良好的校准,以获得准确、良好的投影深度和同步数据。

由于上述原因,这种方法在研究人员中日益流行。它始于周[1]的开创性工作,其准确性大大落后于监督学习方法。从那以后,人们对这一领域的兴趣激增。许多工作已经开始系统地确定和解决这个框架中的每个组件,迅速缩小与监督学习方法的差距。

在本文中,我们将介绍以下内容:

  • 自我监督深度估计框架:训练深度模型所需的组件
  • 管道中每个组件需要考虑的相关问题
  • 致力于解决这些问题的研究工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从 RGBD 序列重建的场景

2.自我监督的深度估计是如何工作的?

这种方法是自我监督的,因为地面实况来自输入信号本身。在这种情况下是 RGB 图像。不需要任何外部数据或信号来教导网络→深度估计器本身就是自己的老师!

因此,我们将目标定义为基于一些输入图像重新合成图像。在我们的上下文中,通过利用 3D 场景几何来合成图像。其以数学理论为基础来模拟 3D 世界和图像平面之间的关系。

A.自我监督学习框架

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自监督深度估计流水线

在大画面上,当提供了深度和自我运动时,我们可以通过从相机视点应用投影扭曲来合成新的视图(目标)。从上图可以看出,变形是使用视图合成模块实现的。请注意,深度是模块的输入,在我们的例子中,深度是由神经网络预测的。

然后,通过最小化目标和预测目标之间的代理光度损失来指导学习,并且通过双线性采样器模块和深度网络来导出和传播梯度。因此,如果目标图像和预测的目标在外观上相似,这意味着深度是隐含地和正确地学习的。

源图像可以取自视频序列或从其他相机(如双目或三目设置)捕获的图像。前者需要估计[R|t],而后者需要在摄像机之间进行良好的校准,以获得外部属性。

我们将关注基于 SFM 的自监督深度估计,其需要从神经网络估计姿态。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SFM 管道公司

B.从结构到运动的深度[SFM]

使用 SFM 的深度估计源于这样的想法,即我们能够通过在 3D 环境周围移动来感知和从结构上理解 3D 环境。当观察者移动时,它们周围的物体根据它们与观察者的距离而移动不同的量。这被称为 运动视差 ,从这个深度信息可以用来生成我们周围世界的精确 3D 表示。

在计算机视觉中,这是通过移动📷捕捉场景并测量每个时间步的视图变化之间的重叠。深度网络用于理解运动视差。而姿态网络用于预测帧间观察的变化。

C.深度模型

该网络不是直接回归深度,而是通过输出图层经过 sigmoid 激活来预测差异,从而给出 0-1 之间的连续值。

因此,可以使用1/(a*disp + b)将该值转换为深度,其中 a、b 控制获得的最小和最大深度值的范围。

多尺度预测 :这是用来缓冲从低纹理区域学习的影响,这在合成时经常是不明确的。因此,建议通过使用较低分辨率的特征来增加可以导出梯度的空间区域。

为此,来自解码器的中间输出将分别通过 sigmoid 激活,以预测每个相应比例的视差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度推理流水线

维姿网络

姿态网络应该预测从I_t-1 / I_t+1I_t的摄像机姿态[R|t]的 6 自由度相对变化。最终卷积层的输出缩放至 0.01,如[5]所示。网络输出的旋转角度遵循轴角表示法,可以使用 Rodrigues 旋转公式转换成旋转矩阵R

注意,输入之间存在时间一致性,从而保持顺序。这简化了学习过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

姿态推理管道

E.视图合成

如前所述,目标是在给定源图像的情况下合成目标图像。我们想重现从不同摄像机视角看到的场景。这可以通过将目标像素坐标投影到另一个给定深度和视图相对变化(姿态)的摄像机视点上来实现。

有了预测的深度、depth_pred和姿态[R|t]_pred,下一步就是把图像I_t-1, I_t+1投影扭曲成I_t

如果目标图像I_t和扭曲图像I_t_pred之间的像素亮度相似,这意味着深度和姿态网络确实已经成功地学会预测深度和相对相机姿态。

要执行转换,请执行以下操作:

  • 首先使用depth_pred将目标图像I_t反投影到 3D 点云。我已经写了一篇关于深度反投影的文章。你可以参考它来理解背后的概念,并看到它的实际应用。
  • 接下来,使用预测的相机姿态对点云执行线性变换,以获得cam_t->t-1/cam_t->t+1坐标中的目标点。然后通过投影变换将三维点投影到图像平面上。
  • 使用类似于 STN [3]中介绍的可微分双线性采样方法的机制,从源图像I_t-1/I_t+1中采样相应的像素坐标,以获得两个样本的I_t_pred

下图总结了这些步骤。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看合成管道

F.设计损失函数

通过计算目标和合成视图之间的代理光度损失来更新和学习权重。有几种方法可以测量图像之间的外观。最常见的是天真的 L1/MSE。从那以后,为了更好地捕捉图像中的外观和结构,已经提出了一些修改。我们将在这里讨论它们。

考虑结构内容:由于 L1/MSE 只考虑了像素间的亮度差异,因此没有结构内容的概念。即许多失真的图像可能产生相同的强度误差

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结构相似指数,SSIM :该度量将相似性度量的任务分成 3 个比较;两幅图像之间的亮度、对比度和结构。这个想法是通过减少亮度和对比度的权重来更加强调图像的结构。

3.普通框架的问题

不幸的是,通过实现上述流水线,可以用不同程度的伪像来训练深度估计。仍然存在几个需要解决的问题。在本节中,我们将讨论一些不足之处。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该图示出了预测图像和目标图像之间的像素级绝对差异,观察到模型在边界和细长结构附近挣扎。L1 误差图中较高的强度表示较高的绝对差异。

A. SFM 在静态世界的前提下运作

在自然场景中,它通常既包括静止的背景,如墙壁、结构和建筑物,也包括运动的实体,如人。通过采用 SFM,我们假设了一个静态世界假设,并且只有静态部分可以实现。

静态假设是什么意思?

  1. 静态:视频中静态部分的运动完全由摄像机运动和深度结构引起。帧之间的投影 2D 图像运动可以完全由深度结构和相机运动来确定
  2. 动态:具备大位移*(想想光流)的特点。由摄像机运动和特定物体运动共同作用。这不是 SFM 的模型。*

B.SFM 对损失的暗示

除了违反静态世界假设之外,该框架还带来了许多其他考虑

  1. 未考虑物体运动:当使用估计的姿态将目标点转换到另一个摄像机视图时,构建的场景不会考虑场景中的运动,而只是基于预测的自身运动。导致具有运动的像素的目标图像和预测图像之间的不匹配。
    这暗示了即使模型正确预测了深度,模型仍然会受到惩罚。
  2. 深度的性能与姿态网络紧密耦合:性能不佳的姿态网络会降低深度性能。因为姿态网络负责计算视图中的相对变化。
  3. 预测“无限深度”或洞:这是动态物体的另一个结果,也是一个非常特殊的例子,其中*物体以与相机相同的速度移动。*物体相对于摄像机看起来是静止的。这也可以在任何事物无限远的情况下实现。物体的任何移动都被认为是不可观察的,并且看起来是静止的。这可以触发深度网络来预测无限深度,因为对象不移动,表现为洞。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

C.光度损失是你最好的赌注吗?

基于外观的损失是深度损失的有效替代。然而,使用图像强度作为衡量标准有一定的缺陷。

  • 我们无法从 2D RGBD 图像中推断出世界的实际大小:由于我们在 2D 图像空间中计算损失,因此在双线性采样阶段后,我们会丢失比例信息。即许多投影预测实际上可以给出相同的正确图像*。更多细节可以在这个帖子中找到。结果,所学习的深度在 3D 度量空间中将是尺度模糊的,但是在图像空间中是一致的。
    关于 Kitti 基准上的结果,许多工作依赖于根据地面真实情况找到中值深度来解决比例问题。*
  • 标度模糊导致深度收缩 : 标度模糊的另一个危险方面是深度塌陷的可能性。本文表明,随着比例的减小,相同的场景可以用更小的深度图来构建,直到它退化为零。该论文建议通过增加归一化步骤来防止平均深度崩溃

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 即使合成图像在几何上不一致,损失也能得到满足:在某些场景中,当深度预测错误而姿态正确时,或者反之亦然,重建图像仍有可能得到很好的预测。这种情况在无纹理的区域更常见,如墙壁和天空。在这种情况下,深度和姿态网络不会因为不良预测而受到惩罚和奖励。
  • 不同的视图会导致严重的损失:考虑像素在目标图像中可见而在源图像中被遮挡或不在视图中的情况。当重新投影这些点时,在这些区域中将会出现不匹配。因此,即使深度被正确预测,模型仍然是不利的。
  • 要考虑的边缘情况:除了上面提到的,反射的表面(违反视图之间的朗伯假设)、失真的图像或色彩饱和的图像也会导致不匹配并降低损耗计算。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由于非朗伯曲面,在 SFM 环境中不一致的场景

D.对深度模型的影响

考虑到上述因素,文献中的大多数深度模型倾向于产生具有以下伪像的结果:

  1. 沿遮挡边界的平滑深度和深度不连续:深度网络倾向于预测这些边界附近的过度平滑深度,而不是保留边缘。这可能是由于缺少明确定义的边缘感知,并且损失主要由平滑表面造成。这导致了出血边缘效应。反向投影的点没有被很好地定义。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

2。闪烁效果:深度图随时间推移产生的几何效果不一致。在下图中可以观察到深度的巨大变化。尤其是在薄结构和边界处。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.研究进展

这一部分将根据新的发现不断更新。

在对相关问题有了更清楚的理解之后,让我们继续讨论文献中提出了什么解决方案来试图解决这些问题。我将在这里强调一些文件。

已经提出的许多想法可以大致归类为解决以下任务:

  1. ***使光度损失有意义:*通过考虑场景中的运动和遮挡,或者从损失计算中移除它们。
  2. ***解决尺度模糊:*为了在 3D 空间中进行度量上合理的深度预测,存在通过利用帧之间的额外一致性来解决这个问题的工作
  3. 通过注入额外的模态来提高性能:许多人利用了各种模态,例如使用光流、表面法线来模拟物体运动,或者使用语义分割来提高场景理解。
  4. 边界细化:通过使用额外的模态或作为后处理阶段,一些努力集中于明确地细化边缘和遮挡边界。
  5. 设计更好的深度网络:关于如何最好地表现深度和视差,有许多工作正在进行。或者设计更好地保存和捕捉场景结构的架构。
  6. ***采用半监督框架:*想法是通过具有某种形式的注释,通过从低分辨率激光雷达获取稀疏地面真实,模型将受益于弱监督。

A.解决不完美的光度损失

MonoDepth2,ICCV2019 中对此进行了大量调查和处理。他们的想法简单而有效,可以提高性能。

***自动屏蔽源和目标之间的静止像素:*为了防止静态场景违规,他们提出在计算损失时简单地忽略这些像素。当其他对象以与相机相同的速度移动时,或者当相机在帧之间静止时,会发生这种情况。

针对所有预测视图逐个像素地选择最小误差:这种情况处理相邻视图中由于自身运动造成的遮挡或视图外像素。这种简单的方法能够锐化遮挡边界并减少伪影。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为 I_t+1 预测没有被遮挡,所以在该区域中选取像素,并丢弃那些来自 I_t-1 的像素

B.模型进展

这里,我们看到的架构设计本质上应该能够最好地从 RGB 图像中捕获结构信息,并提取连续的深度/视差值。一个研究方向主要集中在通过修改基本编码器-解码器架构来保留空间内容,而另一个方向集中在开发视差输出的更好表示。

编码-解码特性:这一系列工作寻求优化网络中的信息流。在 SuperDepth ICRA2019 中,他们提出使用亚像素卷积层来有效和准确地超解析来自其较低分辨率输出的差异,取代解码器中的上采样层。

操作如下:使用相移对图像进行整形,称为像素混洗,其重新排列 H × W × C r 张量的元素以形成 rH × rW × C 张量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

子像素卷积:像素在深度和空间维度之间混洗

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PackNet,CVPR2020 中,他们认为编码器中的标准下采样阶段在空间上对密集深度预测有害。类似地,上采样策略无法在解码器层传播和保留足够的细节来恢复准确的深度预测。他们提出通过用打包解包块来代替下采样池和上采样来保存信息。因此,不是执行 2x2 最大池,即选择 4 像素区域中的最大值并丢弃其余值,而是通过Space2Depth操作将特征打包到深度维度中。这样,就不会有信息被删除。在论文中,他们提到卷积 2D 并不是为捕获深度通道而设计的。因此,特征空间被扩展到 4D,并通过卷积 3D 馈送。解包块执行相反的操作,其工作方式与超深度相同,使用子像素卷积来恢复特征。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

包装和拆包

着眼于表现深度和视差:除了预测每像素深度,还有其他人着眼于深度预测,以提高鲁棒性和稳定性。

神经 RGB- > D Sensing,CVPR2019 中,他们决定将不确定性估计纳入视差估计,同时在贝叶斯滤波框架下随时间累积,生成视差概率体(DPV)。然后降低深度不确定性估计并提高鲁棒性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这篇论文中,他们提出预测离散视差体积,ECCV2020 。这是受众所周知的监督方法 DORN,CVPR2018 的启发,该方法选择将回归任务构建为有序回归问题。DORN 在单目深度估计中取得了优异性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

C.探索不同的模式

表面法线、视差和光流在表示图像中的结构方面与深度有许多相似之处。表面法线可以解释为深度梯度的方向。光流可以通过自我运动和物体运动自然地链接到深度。视差与深度成反比关系。虽然语义没有任何直接关系,但许多人使用分割图作为学习更精细深度的指导。有许多研究这些联合互补性质的著作。

***在多任务学习框架中共同学习:*学习的一个方向是与其他任务一起共同学习深度。这些工作中有许多在经验上显示出积极的结果,并证明它是一个有前途的方向。这些任务是紧密相关的,在共享主干的多任务环境中,它们将相互受益。在 GeoNet,CVPR2018 中,考虑联合学习光流、深度和姿态,同时加强几何一致性,而在另一个作品 SceneNet 中,CVPR2019 专注于学习深度和分割。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

地理网

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SceneNet

利用语义分割:语义本身与深度没有任何数学关系。然而,一些作品在语义应该通过提供某些线索来指导深度估计的想法上追求这个方向。例如,天空应该位于远处,并且自然地具有非常高的深度值。像素标签的变化很可能指示对象的边界,并导致深度的显著变化。

本作品由 TRL,ICLR2020 完成。他们提出用语义模型来指导几何表征学习。他们设计了一个精心制作的语义指导功能模块,在网络的不同阶段注入语义信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

D.解决比例模糊

如前一节所述,预测的深度在比例上是不明确的。在与 PackNet 相同的论文中,他们表明来自姿势的预测平移分量和地面真实姿势之间的位移的弱监督可以解决度量尺度。通过约束姿态,它确保姿态网络预测度量准确的估计。

F.稀疏深度半监督

假设某种形式的深度可以从距离传感器(如激光雷达)获得,那么可以以半监督的方式使用它来创建稀疏深度图。这已经在熊伟桂子林等人的 2019 年 CoRL2019 中进行了广泛的探讨。我认为这是一个有趣的分析。他们研究了与训练期间可用的激光雷达点的数量相关的深度改善的效果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

自我监督关键点学习综述

原文:https://towardsdatascience.com/self-supervised-keypoint-learning-aade18081fc3?source=collection_archive---------6-----------------------

关键点或兴趣点检测是许多计算机视觉任务的一个重要组成部分,例如 SLAM (同时定位和地图绘制)【SfM】(从运动得到的结构)和摄像机校准。关键点检测在深度学习之前有很长的历史,许多广泛行业应用中的辉煌算法(如 FASTSIFTORB )都是基于手工制作的特征。正如在许多其他计算机视觉任务中一样,人们一直在探索如何使用深度学习来胜过手工制作的算法。在本帖中,我们将回顾这一领域的一些最新进展。

语义关键点与兴趣点

在我们继续之前,让我们弄清楚一些概念。在计算机视觉中通常使用两种类型的关键点。语义关键点是对图像中的物体具有语义意义的兴趣点,例如人脸的左眼角、人的右肩或汽车的左前轮胎轮毂。兴趣点更多的是可能没有明确语义的低级点,比如线段的一个角点或者终点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

深度学习方法主导了最先进的语义关键点检测。Mask RCNN(ICCV 2017)和pif PAF(CVPR 2019)是语义关键点检测的两种代表性方法。这些方法是监督学习,需要大量昂贵的人工注释。这使得它们难以容易地应用于兴趣点检测,因为兴趣点在语义上是不明确的,因此人类注释者不能可靠地和重复地识别同一组兴趣点。因此,不可能将兴趣点检测的任务公式化为监督学习问题。

现在进入自我监督学习。自监督学习(或无监督学习,如果你关注它不需要明确的人类注释的事实)是 2020 年初重新出现的话题。这包括最近的进展,如 FAIR 的 、MoCo 和 Geoffrey Hinton 团队的 SimCLR 。(关于自我监督学习的更多一般趋势,我会推荐 Lilian Weng 的博客。)与监督学习相比,自监督学习受益于每个训练样本多几个数量级的监督比特,并且不需要昂贵的和特定任务的人工注释。由于难以从人类获得可靠的注释,这非常适合于兴趣点检测。

**这篇文章的主题是将自我监督学习应用于兴趣点学习。**下面我们将互换使用兴趣点关键点

下面这篇博文是基于我第一次阅读这篇论文时的笔记。欢迎星/叉/评论!

[## 帕特里克-llgc/学习-深度学习

这个知识库包含了我关于深度学习和机器学习的论文阅读笔记。它的灵感来自丹尼·布里兹…

github.com](https://github.com/patrick-llgc/Learning-Deep-Learning)

超级点

SuperPoint :自监督兴趣点检测与描述 (CVPR 2018)是利用自监督学习进行兴趣点检测与描述的开创性工作。总之,它首先在合成数据上预训练兴趣点检测器,然后通过使用已知的单应变换生成图像对来学习描述符。

寻找兴趣点的任务由探测描述组成。检测是图像中感兴趣点(或特征点,或关键点,取决于文献)的定位,描述是用向量(即描述符)描述每个检测到的点。总体目标是有效和高效地找到有特征的和稳定的视觉特征。在下面的博文中,我们将看到兴趣点学习是如何处理检测和描述这两项任务的。

本文仍然遵循许多经典算法的思路:先检测后描述。首先如何学习一个健壮的检测器?我们可以使用已知兴趣点的 3D 对象来绘制 2D 投影,例如长方体的角和线段的端点。作者称这种探测器为 Magic point(Magic Leap 的作者起的一个好听的名字。).

现在你可能会说,这与兴趣点在语义上定义不清的事实相矛盾,但在实践中,这似乎工作得很好。当然,这就为以后的作品留下了一个需要改进的地方(比如下面讨论的)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MagicPoint:对合成数据进行预处理

从合成图像到真实图像,为了弥补真实图像之间的差距,使用测试时间增强(TTA)来积累兴趣点特征。这种密集的 TTA(约 100 次扩充)被称为“单应适应”。该步骤隐含地要求 MagicPoints 以低假阳性率产生高精度检测结果。聚合步骤是增加回忆和创造更多兴趣点。类似的技术也在最近的作品 UR2KiD 中使用(他们在一种称为组-概念检测器-描述的技术中聚集了来自不同概念组的关键点)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单应性适应:一种弥合模拟真实传输差距的 TTA 方案

现在,从生成建模的角度来看,如果我们知道一幅图像的关键点,我们就可以将图像和关键点一起进行单应变换。这将生成大量的训练数据来学习描述符。作者使用对比损失 (CVPR 2006,Yann LeCun 的小组)来学习描述符,该描述符基本上包括成对点的拉动项和不成对点的推动项。注意这个损失中有很多项,O(N)其中 N 是每个图像的点数。这是将明确定义的数学问题的知识转移到神经网络的又一个例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SuperPoint 对检测器和描述符使用相同的编码器,以便快速推断

我发现一项特别有趣的技术是,检测器使用分类和通道 2 图像技巧来实现高精度检测。总之,它将特征图中每个像素表示的输入图像中的每个 8×8 像素扭曲为 64 个通道,后跟一个垃圾箱通道。如果在 8×8 区域没有关键点,垃圾箱具有高激活度。否则,其他 64 个通道通过 softmax 在 8×8 区域找到关键点。

以上步骤很大程度上总结了 SuperPoint 的主要思路。

  • MagicPoint:对关键点检测器的合成数据进行预处理
  • 同形适应:实像上的 TTA
  • SuperPoint: MagicPoint,使用经过已知单应变换的图像对训练的描述符。描述符用于图像匹配任务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SuperPoint 的三个主要步骤

在大多数基准测试中,SuperPoints 优于手工算法。在配有 GPU 的机器上,480p (480x640)的运行速度为 13 毫秒或 70 FPS,240p (320x240)的运行速度为 167 FPS。

未点

:端到端无监督兴趣点检测器和描述符通过消除检测器预训练步骤,进一步采用了 superPoint 的概念。关键点在训练中自然出现。

该网络的架构在一个 VGG 风格的主干上有三个头。

  • 第一个输出是粗略评分热图(x8 下采样)。它消除了 NMS 的需要,并鼓励关键点更均匀地分布在图像上。
  • 子像素位置回归以预测 8×8 像素区域内的精确位置。
  • 描述符描述。它使用子像素位置进行插值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

未点的网络架构

SuperPoint 之间有几个区别/改进:

  • 没有对关键点位置的直接监督。没有对合成数据和单应自适应繁琐的预处理。
  • 用于亚像素位置预测的直接回归而不是逐通道分类。
  • 插值发生在网络内部。SuperPoint 在推理后做插值,占用宝贵的 CPU 周期。

未点引入吨损失!平衡它们是一项艰巨的任务。为了计算这些损失,必须建立点对对应关系。UnsuperPoint 使用了贪婪匹配算法。如果目标图像(pt)中的点在已知的单应变换(pt)下变形到源图像后,在源图像中有一个关键点(ps)在阈值(4 个像素)内,那么 ps 和 pt 称为点对***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

寻找点对(来源: KP3D

注意,这不是匈牙利匹配,因此不是内射的。换句话说,目标图像中的一个点在源图像中可能有多个匹配。在没有直接监督的其他数据协会论文中可以找到类似的匹配步骤,例如,像素到图形 (NeurIPS 2017)。

利用定义的点对,定义了以下损失项。

  • 点对的位置损失:像素坐标间的欧几里德 L2 距离。
  • 点对的分数损失:点对中的点应该有相似的分数。
  • 匹配损失:它确保点分数实际上是关键点的置信度分数。它鼓励网络为网络认为在单应变换下可以可靠检索的点输出高分。具体地说,它是点对的平均得分和零均值距离的乘积。
  • 均匀分布损失:它鼓励[0,1]内分布均匀。这取决于排序函数是可微的这一事实。这是第一次(正如作者所声称的,据我所知)损失被应用于强制神经网络预测的特定分布。
  • 描述符损失:对比损失,同 SuperPoint。
  • 去相关损失:鼓励描述符之间的维度是独立的。具体是相关矩阵中非对角元素的 L2 范数(见ICCV L2 网 2017 )。

通过仔细平衡这些损失项,UnsuperPoint 在准确性和速度方面都优于 superPoint。UnsuperPoint 对于 480p 图像以 65 FPS 运行,对于 240p 图像以 119 FPS 运行,比 superPoint 稍慢。

KP2D

【KP2D】:自监督关键点学习的神经离群点剔除 (ICLR 2020)是丰田研究所的后续工作之一。虽然工作看起来是渐进的,但是建议的技巧产生了具体的改进。

相对于 UnsuperPoint 有三大改进。

  • 一种更具表现力的关键点位置回归方法。UnsuperPoint 将子像素回归的输出限制在[0,1]内,甚至使用了专门设计的损失来强制每个 8×8 像素区域中的均匀分布。KP2D 没有鼓励[0,1]的分布是均匀的,而是深入研究了分布不均匀的原因,并将值放宽到[0,1]之外,允许每个 8×8 像素区域为其边界之外的关键点投票。

我认为这是因为点对匹配不是内射的。仅通过距离阈值就可以将源图像中的一个点匹配到目标图像中的多个点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

KP2D 中的每个 8×8 像素区域可以为其相邻区域中的关键点投票

  • 快速和学习的上采样层,即亚像素 ConvNet ( 使用高效亚像素卷积神经网络,CVPR 2016)的实时单个图像和视频超分辨率)用于在执行插值之前将特征地图上采样 2x2。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用于快速超分辨率的亚像素卷积(通道 2 空间)

  • 基于异常值拒绝的附加代理任务,仅在训练期间使用。所谓的 InlierOutlierNet (IO-Net)的灵感来自于神经引导的 Ransac (ICCV 2019),其本身就是受 PointNet 的启发。IO-Net 接受一个点对(2 个点的坐标,带有一个数量的附加描述符距离),并预测该点对是否是用于下游任务(如单应性估计)的 Ransac 类鲁棒匹配方案中的内侧集。

此外,在超点和非超点中使用的对比损失由三重损失代替。总体而言,KP2D 始终比 UnsuperPoint 表现出色。它的运行速度与 SuperPoint 和 UnsuperPoint 差不多,在 240p (320x240)下为 175 FPS。

KP3D

KP3D :用于自我运动估计的自监督 3D 关键点学习 (ArXiv 12/2019)由来自丰田研究所的 KP2D 的相同作者完成,并将自监督关键点学习的思想进一步推进到 SLAM 的端到端视觉里程表前端。KP3D 结合了近年来新兴的两个热门话题:基于视频的关键点自监督学习(如 KP2D)和单目逐像素深度估计(如 sfm 学习器野外深度尺度一致 sfm 学习器)。

KP3D 借鉴了 KP2D (ICLR 2020)和规模一致的 sfm 学习者 (NeurIPS 2019)在上述两个领域的 SOTA 表现。特别地,在尺度一致的 sfm 中,学习器增加了帧之间的深度一致性,这对于精确的自我运动估计是至关重要的。

综合来看,KP3D 有一个令人惊叹的 SLAM 演示视频。作为一种单目方法,KP3D 击败了所有以前的 SOTA 单目和几乎所有的立体 SLAM 方法。它唯一没有胜过的立体 SLAM(DVSO:深度视觉立体里程计,ECCV 2018)也是基于深度学习的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2D 关键点完全从无标签的单目视频中学习,匹配稀疏缓慢,并在 KP3D 中产生惊人的远程单目视觉里程计

注释

乍一看,这篇论文数学很重。确切地说,它需要更多的 SLAM 领域知识来理解。为了更深入地研究算法,我们必须考虑一些符号约定:

  • pt∈是目标图像中的关键点,PS∈是源图像中的关键点。
  • pt(MV)∈是基于描述子空间的源图像中 pt 的匹配关键点。(MV 是多视图的简写)基于这对 pt↔pt(MV,我们可以计算相关的自我运动 Xt→s。描述符损失基于此。
  • pt∑∈是源图像中的扭曲 pt(类似于 UnsuperPoint 和 KP2D 中的 pt)。稀疏关键点位置损失介于 pt(MV)和 pt 之间。
  • 一旦 Xt→s 已知,密集光度损失和稀疏关键点位置损失被公式化。

在整个流水线中,计算 pt 是最难的。在以前的 2D 关键点作品(例如,SuperPoint、UnsuperPoint、KP2D)中,pt可以很容易地计算,但是在多视图适应中,这很难,并且需要首先用估计的深度投影到 3D,然后用估计的自我运动投影到另一个视图。

我认为 KP3D 的作者误解了单应适应的原始命名,这是 SuperPoint 中第第二阶段使用的 TTA 技术。他们似乎把这种技术误认为是第第三阶段的超级要点,即利用已知的单应变换来产生训练信号。这个细节不会对我们理解这篇论文有太大影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据多视图适应变换的各种关键点

可微分三维姿态估计

KP3D 不是直接使用 CNN 来进行姿态估计(在 sfm 学习器中的 PoseNet),而是使用匹配的关键点来进行姿态估计,这可能是更好的性能的关键,因为上面回顾的上述 2D 关键点学习方法已知会产生非常好的 HA 或单应性准确性。

本文的一个主要贡献是如何以完全可微的方式从匹配的 2D 点执行姿态估计。快速入门经典算法基于 极线几何 从两幅图像中匹配的 2D 点估计自我运动。基本思想是估计图像对的基本矩阵或本质矩阵,然后从任一矩阵中恢复旋转和平移。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

极线约束:三维点及其在 2D 图像上的投影之间的几何关系

因为我们联合估计每个像素的密集深度,所以我们可以使用 Epnp ( 透视 n 点)来估计帧之间的相对姿态。然而,这是不可微的,因此只能作为一个初步的猜测。

KP3d 提出的方法是,我们可以粗略地使用关键点的变换的 3D 位置(具有初始猜测)来获得点在新的相机坐标中的 3D 位置。那么本质上,该问题被简化为基于两组匹配的 3D 点来估计相对相机姿态变化。这个问题被称为正交 Procrustes 问题,具有诸如 ICP(迭代闭合点,通常用于激光雷达点云配准)的良好解决方案。在我们知道 3D 点之间的匹配的假设下,ICP 具有基于 SVD(矩阵的奇异值分解)的封闭形式的公式,称为 Kabsch 算法

外卖食品

近年来,使用深度学习的关键点检测和描述领域受到了越来越多的关注。正如 KP2D 的公开评论中所指出的,“ 这个问题是老问题,但还没有完全解决,因为手工制作的 SIFT 仍然在基准测试中胜出。

  • SuperPoint 提出使用已知单应变换来生成用于关键点检测和描述的监控信号。这是这篇文章中所有论文探索的开创性思想。
  • SuperPoint 使用合成数据来预训练关键点探测器,并使用称为单应自适应的测试时间增加技术来转换到真实数据。
  • UnsuperPoint 建议取消关键点检测器繁琐的预训练阶段。通过巧妙地平衡损失,关键点的检测和描述都将从训练中出现。
  • KP2D 用几种技术改进了 UnsuperPoint,最显著的是用代理损失来确定建议的点对是否匹配 inlier。
  • KP3D 结合了 KP2D 的工作和单目深度估计的最新进展,以提供基于 SOTA 单目 SLAM 系统。

参考

自我监督学习和深度学习中减少标记数据的探索

原文:https://towardsdatascience.com/self-supervised-learning-and-the-quest-for-reducing-labeled-data-in-deep-learning-db59a563e25b?source=collection_archive---------8-----------------------

深度学习的现状以及自我监督如何可能是更健壮模型的答案

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自来自 www.picjumbo.com 的免费库存照片来自 Pixabay

T 这里有一件事是每个深度学习实践者都同意的。

深度学习模型是数据低效的。

让我们首先考虑计算机视觉中流行的分类任务。以 ImageNet 数据库为例。它包含来自 1000 个不同类别的 130 万张图片。对于这些图像中的每一个,都有一个人注释的标签。

ImageNet 无疑是当前深度学习复兴的垫脚石之一。其中大部分始于 2012 年的那篇(krijevsky 等人)论文。在这里,ConvNets 第一次大幅度击败了当前最先进的模型。在竞争对手中,它是基于 ConvNet 的单一解决方案。之后,ConvNets 变得无处不在。

在深度学习之前,ImageNet 挑战一直被认为是非常困难的。在主要原因中,其较大的可变性最为突出。事实上,要建立能在这么多种类的狗中通用的手工制作的特征并不容易。

然而,随着深度学习的发展,我们很快意识到,让 ImageNet 如此艰难的原因实际上是让深度学习如此有效的秘密成分。这就是丰富的数据。

然而,经过多年的深度学习研究,有一点变得很清楚。用于训练精确模型的大型数据库的必要性成为一个非常重要的问题。当需要人工标注的数据时,这种低效率会成为一个更大的问题。

而且,在当前的深度学习应用中,数据的问题无处不在。再以 DeepMind 的 AlphaStar 模型为例。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: AlphaStar:精通即时战略游戏星际争霸 2

AlphaStar 是一个深度学习系统,使用监督和强化学习来玩星际争霸 2。在训练过程中,AlphaStar 只能看到来自游戏控制台的原始图像像素。为了训练它,DeepMind 的研究人员使用了一种分布式策略,他们可以并行训练大量的代理人。每个代理都经历了至少 200 年的实时星际争霸游戏(不间断)。AlphaStar 接受了与职业选手相似的训练。它在官方游戏服务器上的活跃玩家中排名超过 99.8%——这是一个巨大的成功。

尽管使用了所有通用技术来训练系统,但有一件事对成功构建 AlphaStar(或几乎任何其他 RL 代理)至关重要——数据的可用性。事实上,最好的强化学习算法需要许多(但许多)试验才能达到人类水平的性能。这与我们人类的学习方式完全相反。

因此,巨大的成功来自于有大量可用数据的受限的、定义良好的场景。看看 DeepMind 的这篇论文。最好的 RL 方法需要近 100 小时(1080 万帧)的不间断播放,才能达到专业人员在一套 Atari 游戏上的相同性能水平。尽管最近有所改善,但这似乎还是太多了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学分:彩虹:结合深度强化学习的改进

要了解更多关于 AlphaStar 的信息,请看一下这个来自 批次 的简短摘要。

我可以用更多的例子来烦你,但是我想这两个例子说明了我想要表达的观点。

目前的深度学习是基于大规模数据的。当它们的环境和约束得到满足时,这些系统就像魔法一样工作。然而,在一些奇怪的情况下,他们也会灾难性地失败。

让我们稍微回到 ImageNet 上的分类。具体来说,该数据库估计人为错误率为 5.1% 。另一方面,目前最先进的 深度学习 top-5 准确率在 1.8% 左右。因此,人们完全可以说深度学习在这项任务上已经比人类做得更好了。但是是吗?

如果是这样的话,我们如何解释这些事情?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学分:用对抗性例子攻击机器学习

这些例子在互联网上非常流行,被称为反例。我们可以认为这是一个优化任务,旨在欺骗机器学习模型。这个想法很简单:

我们如何改变先前被分类为“熊猫”的图像,以便分类器认为它是“长臂猿”?

我们可以简单地认为它是精心设计的输入示例,用来欺骗 ML 模型,使其犯分类错误。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

致谢:愚弄深度神经网络的一个像素攻击

正如我们所看到的,优化是如此有效,以至于我们无法(用肉眼)感知真实(左)和对立(右)图像之间的差异。事实上,造成错误分类的噪声不是任何类型的已知信号。相反,它被精心设计来探索这些模型中隐藏的偏见。此外,最近的研究表明,在某些情况下,我们只需要改变 1 个像素,就可以完全欺骗最好的深度学习分类器

在这一点上,我们可以看到问题开始相互叠加。我们不仅需要大量的例子来学习一项新的任务,而且我们还需要确保我们的模型学习正确的表示。

来源:用对立的例子愚弄图像识别

当我们看到深度学习系统像那样失败时,一个有趣的讨论就来了。显然,我们人类不会轻易被这样的例子愚弄。但这是为什么呢?

有人可能会说,当我们需要掌握一项新任务时,我们实际上并不是从零开始学习。取而代之的是,我们使用了大量在我们的生活和经历中获得的先验知识。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们了解重力及其含义。我们知道,如果我们让一枚炮弹和一根鸟毛从同一个起点落下,由于两个物体中空气阻力的不同作用,炮弹将首先到达地面。我们知道物体不应该浮在空中。我们了解世界如何运转的常识。你知道如果你的父亲有一个孩子,他或她将是你的兄弟姐妹。我们知道,如果我们在报纸上看到有人出生在 20 世纪,他/她可能已经不在人世,因为我们知道(通过观察世界)人们通常不会活超过 120 岁。

我们理解事件之间的因果关系。最令人好奇的是,我们实际上在生命的早期就学习了许多这些高层次的概念。事实上,我们只用 6 到 7 个月就学会了像重力和惯性这样的概念。这个年纪,和世界的互动几乎没有!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

婴儿的早期概念习得。 Yann LeCun 幻灯片

从这个意义上说,有人可能会说,将算法的性能与人类进行比较是不“公平的”

在他的一次关于自我监督学习的演讲中,Yann LeCun 认为至少有三种方法可以获得知识。

  • 通过观察
  • 来自监督(大多来自家长和老师)
  • 来自强化反馈

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人类通过生活获得的不同知识来源。通过观察/互动、监督和反馈来学习。

然而,如果我们以人类婴儿为例,在那个年龄几乎没有互动。然而,婴儿设法建立一个直观的世界物理模型。因此,像重力这样的高级知识只能通过纯粹的观察来学习——至少,我还没有见过任何父母给 6 个月大的婴儿教物理。

只是在生命的后期,当我们掌握了语言并开始上学时,监督和互动(有反馈)才变得更加普遍。但更重要的是,当我们到达人生的这些阶段时,我们已经发展出一个强健的模型世界。这可能是为什么人类比现在的机器数据效率更高的主要原因之一。

正如 LeCun 所说,强化学习就像蛋糕中的樱桃。监督学习是糖衣,自我监督学习是蛋糕!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: Yann LeCun

自我监督学习

在自我监督学习中,系统学习从其输入的其他部分预测其输入的一部分— LeCun

自监督学习源于无监督学习。它涉及从未标记的数据中学习语义上有意义的特征。在这里,我们主要关注的是计算机视觉环境下的自我监督。

一般的策略是通过设计一个借口任务,将一个无监督的问题转化为一个有监督的任务。通常,一个借口任务有一个总的目标。这个想法是让网络从图像或视频中捕捉视觉特征。

借口任务和常见的监督问题有一些相似之处。

我们知道监督训练需要标签。反过来,这些通常是由人类注释者收集的。然而,在许多情况下,标签要么非常昂贵,要么不可能获得。此外,我们还知道深度学习模型天生就需要数据。其直接结果是,大规模标注数据集成为进一步发展的主要障碍之一。

嗯,自我监督学习也需要标签来训练托词任务。然而,这里有一个关键的区别。用于学习借口任务的标签(或伪标签)具有不同的特征。

事实上,对于自监督训练,伪标签仅从数据属性中单独导出。

换句话说,不需要人为标注。事实上,自我学习和监督学习的主要区别在于标签的来源。

  • 如果标签来自人类注释者(像大多数数据集一样),这是一个监督任务。
  • 如果标签来自数据,在这种情况下,我们可以自动生成它们,我们谈论的是自我监督学习。

最近的研究提出了许多借口任务。一些最常见的包括:

  • 旋转
  • 七巧板
  • 图像彩色化
  • 图像修复
  • 使用 GANs 生成图像/视频

在这里 查看每个 借口任务的概要描述。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学分:深度神经网络的自我监督视觉特征学习:综述

在自我监督训练期间,我们挑战网络来学习托词任务。同样,伪标签是从数据本身自动生成的,并用作训练目标。一旦训练结束,我们通常使用学习到的视觉特征将知识转移到第二个问题——下游任务中。

一般来说,下游任务可以是任何被监督的问题。这个想法是使用自我监督的特性来提高下游任务的性能。通常,下游任务的数据有限,过度拟合是一个大问题。在这里,我们可以看到在大型标记数据库(如 ImageNet)上使用预训练的 ConvNets 进行普通迁移学习的相似性。但有一个关键优势。

通过自我监督训练,我们可以在难以置信的大型数据库上预先训练模型,而不用担心人类标签。

另外,托辞和平时的分类任务有个茬儿区别。在纯分类中,网络学习表示,目标是在特征空间中分离类别。在自我监督学习中,托辞任务通常挑战网络来学习更一般的概念。

以图像着色托辞任务为例。为了在其中脱颖而出,网络必须学习解释数据集中对象的许多特征的通用特征。这些包括物体的形状,它们的一般纹理,担心光线,阴影,遮挡等。

简而言之,通过解决托词任务,网络将学习语义上有意义的特征,这些特征可以很容易地转移到学习新问题。换句话说,我们的目标是在接受监督之前从未标记的数据中学习有用的表示法

结论

自我监督学习允许我们在不使用大型注释数据库的情况下学习良好的表示。相反,我们可以使用未标记的数据(这是丰富的)并优化预定义的借口任务。然后,我们可以使用这些特征来学习数据稀缺的新任务。

感谢阅读

参考

  • 用对立的例子攻击机器学习
  • 阿尔法星:精通即时战略游戏星际争霸 2
  • 《彩虹:结合深度强化学习的改进》第三十二届 AAAI 人工智能大会。2018.
  • 景,龙龙,田英丽。“深度神经网络自监督视觉特征学习:综述.” arXiv 预印本 arXiv:1902.06162 (2019)。
  • Gidaris,Spyros,Praveer Singh 和 Nikos Komodakis。“通过预测图像旋转的无监督表示学习.” arXiv 预印本 arXiv:1803.07728 (2018)
  • 较少标签的高保真图像生成。 arXiv 预印本 arXiv:1903.02271 (2019)
  • 苏、佳伟、达尼洛·瓦斯康塞洛斯·巴尔加斯和樱井幸一。“愚弄深度神经网络的一个像素攻击.” IEEE 进化计算汇刊 (2019)。

基于图像上下文恢复的医学图像分析自监督学习

原文:https://towardsdatascience.com/self-supervised-learning-for-medical-image-analysis-using-image-context-restoration-557c8c35d27f?source=collection_archive---------23-----------------------

一种称为上下文恢复的新型自我监督学习策略

这是论文“使用图像上下文恢复进行医学图像分析的自我监督学习”的博客帖子。

原载于wiki . tum . de

介绍

深度学习方法在计算机视觉领域取得了巨大成功。特别是,CNN 最近在医学图像领域,如疾病分类[1]和器官分割[2]中展示了令人印象深刻的结果。好的深度学习模型通常需要相当数量的标签,但在许多情况下,未标记的数据量远远大于已标记的数据量。此外,来自自然图像的预训练模型在医学图像上没有用,因为强度分布不同。此外,标记自然图像很容易,简单的人类知识就足够了。然而,医学图像的注释需要专业知识。

那么,我们应该如何学习无标签的表征呢?

答案很简单;从数据或图像本身获得监督。这意味着我们可以通过以特定的形式构建监督学习任务来实现这一点,以利用其余信息来预测仅一部分信息。这就是所谓的自我监督学习

什么是自我监督学习?

它仍然是监督学习,因为它使用标记数据。它提取并使用自然可用的相关上下文。从这一事实来看,有监督的大量训练实例是可用的。由于这一点,基于这种自我监督来预训练 CNN,它导致基于具有有限人工标签的数据来初始化后续 CNN 的有用权重。图 1 向我们展示了自我监督学习的概要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。自我监督学习概述[3]

由于现有的自我监督学习策略在医学图像上没有显著的性能改善,作者提出了另一种自我监督策略,称为上下文恢复

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图二。上下文恢复方法概述(图片由作者提供)

图 2 是上下文恢复如何工作的很好的概述。基本上,有输入图像,然后算法破坏并试图恢复它们。在这个恢复过程中,它学习权重,这将在处理后续任务时给我们带来更好的结果。

其中一项名为*通过上下文预测的无监督视觉表示学习【4】*的自我监督研究,从给定图像中预测 3 × 3 面片网格中中心面片与其周围面片之间的相对位置。例如,图 3-a 向我们展示了猫的右耳相对于猫的眼睛应该在右上的位置。但是它有三个缺点:可能有多个正确答案(例如,汽车或建筑物),它仍然学习在医学图像中没有用的琐碎特征,最后,补丁不包含关于图像的全局上下文的信息。

在特征学习方面,提出了另一个自我监督的研究,名为*上下文编码器:通过修复进行特征学习[5]。*它被训练来填补图像中缺失的一块,如图 3-b 所示,因此,在学习有意义的潜在表征的同时,重构原始输入。此外,这种方法也有一些缺点:它改变了图像的强度分布。因此,所得到的图像属于另一个域,并且所学习的特征对于原始域中的图像可能是无用的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3。相对位置(a)和上下文预测(b)方法的演示[4,5]

方法学

论文提出了一种新的自我监督策略,他们称之为上下文恢复。该方法很简单,在给定的图像中随机选择两个孤立的小块并交换它们的上下文。重复这些操作 T 次,直到强度分布仍然保留,但其空间信息被改变。图 4 向我们展示了迭代 1 和 10 后的情况。

本文在医学成像中的三个常见问题上验证了上下文恢复策略:分类定位分割。胎儿 2D 超声图像中的扫描平面检测:在计算机断层摄影(CT)图像中定位腹部器官;为了分割多模态磁共振(MR)图像中的脑肿瘤,使用了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4。生成用于自监督上下文乱序的训练图像:分别是大脑 T1 MR 图像、腹部 CT 图像和 2D 胎儿超声图像。在第二列的图中,红框突出显示了第一次迭代后交换的面片。(图片由作者提供)

所提出的自监督学习策略使用了细胞神经网络,它由两部分组成:一个分析部分和一个重构部分。图 5 示出了可行 CNN 的一般架构的概述。分析部分将给定的无序图像编码成特征图,重建部分使用这些特征图来产生正确上下文的输出图像。

分析部分

这部分包括卷积单元和下采样单元的堆栈,它们从给定的图像中提取特征图。

重建部分

这里,它包括卷积层和上采样层的堆栈,从而恢复图像。每个后续任务的重建部分是不同的。对于分类任务,简单的结构如几个反褶积层是优选的。对于分割任务,与分割 CNN 一致的复杂结构是优选的。

结果,几乎所有后续分割 CNN 的权重都可以使用在自我监督预训练中学习到的权重来初始化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5。用于上下文恢复自监督学习的通用 CNN 结构。(图片由作者提供)

实验装置

所提出的使用上下文恢复任务的自我监督可以由 CNN 在三个不同的数据集上执行,包括脑部 MR 图像、腹部 CT 图像和胎儿 US 图像,并且他们使用预训练的 CNN 分别执行后续任务,例如分类、定位和分割。对于这些问题中的每一个,使用不同的 CNN 架构和数据:

分类

该数据集由 2694 个胎龄在 18 至 22 周之间的胎儿(224×288)的 2D 超声检查组成[6]。

这个分类问题的 CNN 是 SonoNet-64,它在[6]中取得了最好的性能。

CNN 在这种分类任务中的性能通过精确度、召回率和 F1 分数来测量。

本地化

采用了来自 150 名受试者 3D 腹部 CT 图像的数据集[7]。

数据集被随机分成两半。前半部分用于训练和验证,另一半用于测试。

用于多器官定位任务的 CNN 类似于 SonoNet [6]。由于输入图像为 512×512,大约是每侧已处理 2D 超声帧的两倍,因此它比 SonoNet 多了一个卷积堆栈和池层。

通过计算边界框之间的质心和墙的距离来测量性能。

分割

BraTS 2017 挑战赛的数据集,由 285 名受试者组成[8]。每个对象都有多种模式的 MR 图像,即自然 T1 (T1)、增强后 T1 加权(T1-Gd)、T2 加权(T2)、T2 液体衰减反转恢复(FLAIR)。如果您想进一步了解这些术语,请访问本网站

285 幅图像中的 142 幅用于训练和验证,剩余的 143 幅用于测试。

本实验中使用的 CNN 是 2D U-Net [9]。

他们在 BraTS 2017 挑战赛中使用了相同的评估指标:骰子得分、灵敏度、特异性和 Hausdorff 距离。

作者比较了不同的自我监督学习策略,即随机[6],随机+增强,自动编码器[10],使用补丁相对位置预测的自我监督[4],Jigsaw [11],以及使用局部上下文预测的自我监督[5]和提议的上下文恢复。

结果和讨论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6。胎儿 2D 超声图像标准扫描平面的分类(图片由作者提供)

图 6 展示了不同配置下 CNN 的性能结果。由于自我监督的预训练,当使用小训练数据集时,CNN 的性能可以得到改善。上下文恢复预训练对 SonoNet 性能的改善最大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7。CNN 在不同训练环境下解决多器官定位(本结果中为左肾)问题的表现(图片由作者提供)

图 7 表示 CNN 在不同训练方法中的定位性能。在某些情况下,使用上下文恢复预训练的 CNN 在更多标记的训练数据上与无预训练相当甚至更好。就在左肾上的性能而言,CNN 在半个训练数据上略微优于在所有训练数据上。值得注意的是,如果较少的训练数据导致结果显著下降,自我监督学习往往会显著改善结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8。不同训练设置下定制 U-Nets 的分割结果(图片由作者提供)

图 8 显示了 BraTS 问题的结果。增强的肿瘤核心中的 Dice 分数甚至稍好。并且,它向我们展示了使用一半的训练数据集,所提出的自监督策略产生了与使用整个训练数据集相似的性能。同样,我们可以看到基于上下文恢复的自我监督为分段任务提供了最佳的预训练方法。

提出了一种新的基于上下文恢复的自监督学习策略。这使得 CNN 能够在没有任何标签的情况下学习有用的图像语义,并用于后续任务。因此,我们可以总结出以下要点:

  • 在分类、定位和分割这三项任务中,使用上下文恢复预训练比其他方法表现更好
  • 如果减少训练数据导致性能显著下降,上下文恢复预训练可以提高性能
  • 语境还原有三个显著特征;学习语义图像特征;这些语义特征对于不同的后续任务是有用的;实现简单明了
  • 缺点是 L2 损失导致图像模糊。

未来作品

探索更有效的自我监督学习策略,使自我监督预训练在未来能像监督预训练一样好,是值得关注的。此外,还会出现以下问题:

  • 如果使用更大的数据集会发生什么?还是优化的自我监督学习模型?
  • 如果他们可以使用 3x3 补丁并随机交换,结果会受到什么影响?
  • 添加额外的模型?
  • 使用另一种损失函数代替 L2,例如对抗性损失?

作者:粱晨、保罗·本特利、森健作、三泽和里、藤原道孝、丹尼尔·吕克特

关于这项工作的更多细节,请查看关于科学指导的论文

参考

[1]王,x,彭,y,陆,l,陆,z,巴盖里,m,萨默斯,R. M,2017 .ChestX-ray8:医院规模的胸部 X 射线数据库和常见胸部疾病的弱监督分类和定位基准。IEEE 计算机视觉和模式识别会议论文集。第 3462-3471 页。网址 https://arxiv.org/abs/1705.02315。

[2]Suk h .-I .,Lee s-w .,Shen d .,Initiative,A. D. N .等人,2014 年。用于 AD/MCI 诊断的分层特征表示和具有深度学习的多模态融合。神经影像 101,569–582。网址https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4165842/

[3] Yann LeCun,自我监督学习:机器能否像人类一样学习,2018。网址youtube.com

[4]多尔施,c .,古普塔,a .,埃夫罗斯,A. A .,2015。基于上下文预测的无监督视觉表征学习。IEEE 计算机视觉国际会议论文集。第 1422-1430 页。网址https://arxiv.org/abs/1505.05192

[5] Pathak,d .,Krahenbuhl,p .,Donahue,j .,Darrell,t .,Efros,A. A .,2016 年。上下文编码器:通过修补进行特征学习。IEEE 计算机视觉和模式识别会议论文集。第 2536-2544 页。网址https://arxiv.org/abs/1604.07379

[6]鲍姆加特纳,C. F .,卡姆尼萨斯,k .,马修,j .,弗莱彻,T. P .,史密斯,s .,科赫,L. M .,坎因茨,b .,吕克特,d .,2017。SonoNet:徒手超声中胎儿标准扫描平面的实时检测和定位。IEEE 医学成像汇刊 36 (11),2204–2215。网址https://arxiv.org/abs/1612.05601

[7] Tong,t .,Wolz,r .,Wang,z .,Gao,q .,Misawa,k .,藤原,m .,Mori,k .,Hajnal,J. V .,Rueckert,d .,2015 年。用于腹部多器官分割的判别字典学习。医学图像分析 23 (1),92–104。网址 https://www.ncbi.nlm.nih.gov/pubmed/25988490。

[8] Menze,B. H .,Jakab,a .,Bauer,s .,Kalpathy-Cramer,j .,Farahani,k .,Kirby,j .,Burren,y .,Porz,n .,Slotboom,j .,Wiest,r .,等人,2015 年。多模态脑肿瘤图像分割基准(BRATS)。IEEE 医学成像汇刊 34 (10),1993–2024。网址 https://ieeexplore.ieee.org/document/6975210。

[9]罗内贝格,o .,菲舍尔,p .,布罗克斯,t .,2015。生物医学图像分割的卷积网络。医学图像计算和计算机辅助介入国际会议论文集。第 234-241 页。网址https://arxiv.org/abs/1505.04597

[10]本吉奥,y .,兰布林,p .,波博维奇,拉罗歇尔,h .,2007 年。深度网络的贪婪分层训练。神经信息处理系统进展。第 153-160 页。网址https://papers . nips . cc/paper/3048-greedy-layer-wise-training-of-deep-networks . pdf

[11]诺鲁齐,m .,法瓦罗页,2016 年。通过解决拼图游戏实现视觉表征的无监督学习。《欧洲计算机视觉会议论文集》。第 69-84 页。网址https://arxiv.org/abs/1603.09246

视频的自监督表示学习

原文:https://towardsdatascience.com/self-supervised-representation-learning-on-videos-3a63872971c5?source=collection_archive---------64-----------------------

如今,从 Imagenet 迁移学习是计算机视觉中的绝对标准。自我监督学习主导了自然语言处理,但这并不意味着计算机视觉没有值得考虑的重要用例。

在处理图像时,确实有很多很酷的自我监督的任务,比如拼图游戏、图像着色、图像修补,甚至是无人监督的图像合成。

但是当时间维度开始起作用时会发生什么呢?您如何处理您想要解决的基于视频的任务?

所以,让我们从头开始,一次一个概念。什么是自我监督学习?和迁移学习有什么不同?什么是借口任务?

自我监督学习与迁移学习

毫无疑问,迁移学习是一个公平的起点。

迁移学习使我们能够利用用于任务 A 的神经网络的权重,并将其应用于另一个任务(B),假定输入域以某种方式相关***。***

任务 A 中的训练过程在机器学习术语中称为预训练。这背后的核心思想是,任务 A 所获得的“知识”可以被用来增强任务 b 中的概括。这通常是这样,因为谁想从随机权重初始化开始呢?

显然,迁移学习是最大化模型性能的一种方式,通过在类似的监督的(视频)数据集上预训练。然而,在视频等领域,标注(监督)的问题很快出现。很难找到视频注释数据和转移权重。

但在此之前,我们先来澄清一下自我监督学习 VS 迁移学习的内在区别。我创建这个简单的图表是为了让事情变得非常清楚:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片,自我监督 VS 迁移学习

作为监督缺失领域的解决方案,自我监督学习是转移权重的一种方式,通过在标签上预先训练你的模型,这些标签是从 数据/视频中人工产生的

正如我们将看到的,这可以通过一系列不同的(有时是欺骗性的)转换来实现。这就是我们所说的自我监督的表征学习。

注意,对于自我监督学习,你甚至可以只使用你自己的数据,没有提供的标签。

本质上,在自我监督学习中,我们试图 猜测 一个相关的任务 A,因此将权重转移到任务 B,将是比随机更好的初始化点。

符号、概念和示例任务

设计的自我监督任务 A 通常被称为借口代理任务,而我们想要解决的期望任务 B 在文献中被称为下游任务。我通常也称之为原始任务。

回到视频的世界,基于视频的学习属于顺序学习的范畴。这些方法可以大致分为两类:序列预测验证。此外,(图像)元组指的是将被用作深度学习架构的输入的一串视频帧。

连体模型或多分支模型在不同论文中交替使用。基本上是多个输入数据的独立预测*。您可以简单地认为,在向后传递之前,必须执行暹罗模型的许多向前传递,而提取的特征将在接下来的层中进行融合。因此,将反向传播的损失考虑了所有正向传递。*

现在我们对自我监督有了明确的高层概念。让我们看看它为什么重要,尤其是在视频数据集上!

为什么要自我监督学习?

首先,你不能为每个特定的任务创建一个新的视频数据集(或任何种类的数据集)。视频注释也是昂贵且耗时的。其次,在医学影像这样的领域,根本很难获得任何专家的注释。另一方面,youtube 上每天都有数十万小时的未标记视频被上传!如果你仍然不相信自我监督学习是一个令人敬畏的方向,让我们向专家提出建议:

我们人类学习的大部分东西和动物学习的大部分东西都是在一种 自我监督模式 下进行的,而不是强化模式。它基本上是观察这个世界,并与它进行一点互动,主要是通过独立于测试的方式进行观察。~艾研究中心主任杨乐存(公正)

现在我相信你已经被说服了。然而,要知道每一个令人兴奋的想法都伴随着它的假设和对应物。但在此之前,让我们先澄清我们的术语。

继续,视频自我监督学习的核心假设是什么?

直觉上,我们认为成功地解决“托词”任务 A 将 允许我们的模型学习有用的视觉表示,以恢复视频的时间连贯性 ,或者通常从视频的统计时间结构中学习。

时间一致性的一个例子可能是观察物体(汽车、人)如何在场景中移动。

你可能会想到的一些问题:

  1. 给定空间和时间视频结构,模型如何在没有监督的情况下从视频中学习?
  2. 自我监督模型学习什么样的表征?有意义吗?
  3. 与监控的图像/视频数据相比,学习的表示是互补的还是相似的?"

我们将通过考察不同的方法来回答这些问题。但即使在此之前,一个人如何设计一个自我监督的任务

“总之,一个好的自我监督的任务既不简单也不含糊”
~
诺鲁齐等人【6】*。
*

我们考虑的另一个关键因素是人类是否能解决借口任务。举个例子,试着理解下面这些帧的顺序。通过一点点关注相对姿势和对“一个人如何移动”的猜测,我们可以预测这些帧的时间顺序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由李信颖等人制作

此外,我们需要选择一些事情,如果解决了,就需要理解我们的数据**。这就是为什么无论如何它都属于表征学习的范畴:)。**

洞察力:关键思想是利用原始图像的固有结构和 问题公式化为判别(分类)或引入重建损失函数来训练网络。

也就是说,我希望你已经准备好简要地检查最有影响力的视频自我监督表示学习论文。

1.洗牌和学习:使用时序验证的无监督学习,ECCV 2016

这是 Misra 等人[1]介绍的首批作品之一。他们将他们的托词任务公式化为序列验证问题。

在时序中,一个预测序列的’'。**

在这项工作中,作者探索了任务视频帧序列是否处于正确的时间顺序*。为了做到这一点,他们必须使用一种采样方案来对视频进行采样。这很重要的原因当然是计算的复杂性。***

为此,他们根据每帧的平均光流幅度对高速运动的图像进行采样。为了创建阳性和阴性元组,使用五个帧的样本作为输入。正样对应正确顺序*,而负样是指错误顺序中的帧。下图进一步说明了这种差异。***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

视频混洗的例子,正反例子。由 Misra 等人[1]拍摄的图像。链接:https://link . springer . com/chapter/10.1007/978-3-319-46448-0 _ 32

训练技巧:在训练过程中,作者使用了相同的开始和结束帧,而只改变了正反例的中间帧*。因此,鼓励网络关注这个信号,以了解积极和消极之间的微妙差异,而不是无关的特征。***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提议的网络架构概述。由 Misra 等人[1]拍摄的图像。链接:https://link . springer . com/chapter/10.1007/978-3-319-46448-0 _ 32

基于该架构方案,值得注意的是,AlexNet 独立地处理每一帧*,而图像特征输出被连接用于最终分类。***

最后,他们使用了大约 90 万个图像元组,具有正负实例的平衡小批量比率。正如所发现的那样,对于订单验证来说,拥有更大比例的反面例子(75%)是至关重要的。

结果和讨论

提出的问题是模型真正从时间结构中学到了什么?在下图中,作者声称显示了这些单位的感受野(用红框标出)。由于我们的网络是在人体动作识别视频上训练的,许多单元显示出对人体部位和姿势的偏好,因为它们与高速运动有关。虽然在论文中它被称为感受域,但事实是这是层的特征激活。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**可视化激活,如原文所述。图片由 Misra 等人提供。链接:https://link . springer . com/chapter/10.1007/978-3-319-46448-0 _ 32

在数字上,通过将该方案与 imagenet 预训练权重相结合,我们获得了与视频监督几乎相同的平均准确度,如下图所示(UCF sup。是有动作视频的监督数据库):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Misra 等人提供。链接:https://link . springer . com/chapter/10.1007/978-3-319-46448-0 _ 32

挑战性动作识别任务的结果。

最后,基于呈现的结果,可以验证序列验证需要理解手边的基于视频的任务(动作识别)。

2.通过排序序列的无监督表示学习,ICCV 2017

核心贡献:Lee 等 2017 [2]提出了一种顺序预测网络(OPN)架构,通过成对特征提取解决序列排序任务。

扩展之前的工作,我们正在尝试排序混洗图像序列。如果验证需要理解图像的统计时间结构,人们可能会猜测图像分类将提供更丰富和更一般化的视觉表示*。为此,作者尝试在给定四个采样图像的元组的情况下,使用这样的代理任务进行训练,如下所示。***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

形象由李信颖等人塑造。顺序采样和排序

对于一个有 n 帧的元组,有 n!(!是阶乘的可能组合。在实践中,作者使用了四个随机洗牌的框架。类似于拼图难题[6],他们把问题铸为多类分类。对于每个四帧元组,有 24 种可能的排列。然而,向前和向后的排列可以被转换为一个类,因为它们可以是动作的可能的解决方案,导致总共 12 个类。

训练数据采样

与其他作品类似,他们基于运动幅度对帧进行采样。除了仅使用光流大小进行帧选择之外,他们进一步选择具有大运动的空间补片(图中的 a)。另外,它们在已经提取的裁剪图像中应用空间抖动(如图中的 b 所示)。此外,他们引入了一种新的策略,称为渠道分裂(如 c 所示)。这大致类似于使用灰度图像,但是基于实验分析,它表现得更好。具体来说,他们选择一个通道,并将值复制到 RGB 图像的其他两个通道。结果,引导网络关注图像的语义,而不是低级特征。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练抽样技巧。 图片由李新英等人制作

模型架构、数据和一些结果

与[1]类似,它们基于典型的卷积神经网络产生图像特征。在文献中,这被称为连体建筑。同样,每个帧由同一个模型独立处理(通常称为多分支,更好一些),而参数是相同的。另一个要点是成对特征提取,如架构概述所示。如下所示,fc6 特征的特征用于形成帧特征对。这些允许某种融合,或者换句话说,考虑特征的成对关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有成对特征提取的连体模型架构。 图片由李新英等人制作

最后,他们从~30K 的 UCF-101 动作识别数据集提取 280k 元组作为训练数据,相对大批量 128。输入补丁为 80x80。值得注意的是,使用较大补丁的性能不佳的一个潜在原因可能是训练数据量不足。

下面是一些功能激活的图示。可以观察到,特征激活对应于人的头部和对象部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原作中呈现的激活。 形象由李新英等人*【2】*

3.2017 年 CVPR,利用奇数一输出网络的自监督视频表示学习

让我们从这个被设计出来的任务开始,这个任务叫做奇数一个出局。简而言之,奇一出学习的目标是从一组其他相关元素中预测* 奇(不相关 ) 元素。***

形式上,给定一组多个相关元素和,只有一个奇数元素构成问题 q = {I_1,.。。,I_{N+1},其中 I_i 是元素。在这种情况下,我 {1},。。。,I{N+1} 是从视频中采样的子序列集。所描述的 N 个子视频具有正确的时间顺序。奇数不相关视频子序列是来自同一视频的无效顺序。为了防止平凡的解决方案,作者随机化奇数元素的位置。因此,奇一出预测任务被视为一个 N+1 分类问题。**

模型架构

预测模型是多分支 CNN,称为奇一出网络(O3N)。O3N 由 N + 1 个输入分支组成,每个分支包含 5 个 conv。图层(权重在输入图层间共享)。奇数一出任务需要在(N+1)个元素中进行比较。要解决这个问题,不能只看单个的元素。因此,他们进一步引入了一个融合层来合并来自不同分支的信息。最后,他们实验了两种融合,串联和差和。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模型概述。图像由 徐等人【4】

4.通过视频剪辑顺序预测的自我监督时空学习,CVPR 2019

再次,徐等 2019 [4]制定的任务顺序预测,作为一个分类问题。除了以前的作品,他们通过制作小视频剪辑的独立特征而不是纯图像来整合 3D CNN*。因此,手头的任务现在被称为剪辑顺序预测。他们的方法可以总结如下:***

  • 首先,从视频中采样几个固定长度(16 帧)的剪辑并随机打乱,
  • 然后,使用共享权重(暹罗架构),使用 3D CNNs 来提取这些片段的独立特征。
  • 最后,使用一个简单的神经网络来预测混洗剪辑的实际顺序。

学习的 3D CNNs 可以用作剪辑特征提取器或预训练模型,以针对动作识别进行微调。为了证明他们的想法,评估了三种强大的 3D-CNN 架构,即 C3D [9]、R3D 和 R(2+1)D [10](在下图中表示为 3D ConvNets)。提议的架构概述如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

建议的模型架构。图像由 徐等人【4】

****注意:由于剪辑顺序预测只是一个代理任务,并且目标是学习视频表示,所以该任务应该是可解决的。对于元组长度,每个元组选择 3 个片段,批量大小为 8 个元组。视频剪辑由用于 3D CNNs 的 16 帧组成,而视频之间的间隔被设置为 8 帧,以避免琐碎的解决方案。

为了验证所学习的表示,他们使用基于从 3D-CNN 产生的特征的最近邻检索。为了评估他们的动作识别方法,从视频中采样 10 个剪辑以获得剪辑预测,然后对其进行平均以获得最终的视频预测。

最后一点,虽然这项研究显示了有希望的结果,但在较大数据集(如 Kinetics)上监督预训练的微调仍然是最佳预训练方案*。***

结论

我希望你现在明白了。我们将会看到越来越多的自我监督学习的酷应用。简而言之,我们开始了自我监督学习,重点是视频。我们介绍了额外时间维度带来的问题以及如何应对它们。

另外,Yann LeCun 在 ICLR 2020 中做了一个非常值得一看的鼓舞人心的演讲。我想虚拟会议的积极一面。我很喜欢看这部电影。

对于那些想要更高级的东西的人,你可以继续前往自我监督的生成对抗网络,因为你知道我们有多喜欢人工智能夏天的生成学习。最后,为了更全面地总结大量自我监督的表征学习(没有关注视频),请查看 Lilian Weng 的这篇博客文章【8】。

参考

[1] Misra,I .,Zitnick,C. L .,& Hebert,M. (2016 年 10 月)。洗牌学习:使用时序验证的无监督学习。欧洲计算机视觉会议(第 527–544 页)。斯普林格,查姆。**

[2]李海燕,黄,J. B .,辛格,m .,,杨,M. H. (2017)。通过排序序列的无监督表示学习。IEEE 计算机视觉国际会议论文集(第 667-676 页)。

[3] Fernando,Basura,et al . .用单输出网络进行自监督视频表示学习IEEE 计算机视觉和模式识别会议论文集。2017.

[4]徐,丁,肖,赵,赵,邵,谢,庄,杨(2019).通过视频剪辑顺序预测的自我监督时空学习。在IEEE 计算机视觉和模式识别会议论文集(第 10334–10343 页)。**

[5]焦,j .,德罗斯特,r .,德鲁克尔,l .,帕帕乔乔,A. T .,&诺布尔,J. A. (2020 年 4 月)。超声视频的自监督表示学习。载于 2020 年 IEEE 第 17 届国际生物医学成像研讨会(ISBI) (第 1847-1850 页)。IEEE。

[6]米·诺鲁齐和法瓦罗出版社(2016 年 10 月)。通过解决拼图游戏对视觉表征进行无监督学习。欧洲计算机视觉会议(第 69–84 页)。斯普林格,查姆。**

[7] Gopnik,a .,Meltzoff,A. N .,& Kuhl,P. K. (2000 年)。 婴儿床里的科学家:早期学习告诉我们关于大脑的什么 。威廉·莫罗平装本。

[8] 自我监督表征学习,翁,李莲 2019

[9] Tran,d .,Bourdev,l .,Fergus,r .,Torresani,l .,和 Paluri,M. (2015 年)。用 3d 卷积网络学习时空特征。IEEE 计算机视觉国际会议论文集(第 4489–4497 页)。**

[10] Tran,d .,Wang,h .,Torresani,l .,Ray,j .,LeCun,y .,& Paluri,M. (2018 年)。近距离观察用于动作识别的时空卷积。在IEEE 计算机视觉和模式识别会议论文集(第 6450–6459 页)。**

原载于 2020 年 7 月 29 日 https://theaisummer.com**T21

通过视频彩色化的自我监督跟踪

原文:https://towardsdatascience.com/self-supervised-tracking-via-video-colorization-7b2b066359d5?source=collection_archive---------44-----------------------

作为代理任务的视频着色和作为下游任务的对象跟踪

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

普里西拉·杜·普里兹在 Unsplash 上的照片

在这篇文章中,我们将了解一种新颖的自监督目标跟踪方法。自我监督是模型自我学习的一种方法😎,这本身就让题目很有意思。在这里,我们将看到我们的模型如何学会自己跟踪对象。我们将从物体跟踪的基础开始,然后讨论什么是计算机视觉的自我监督学习,最后详细讨论这种方法。

这个方法的实现可以在这里找到

对象跟踪简介🎯

用简单的语言来说,它可以理解为在整个视频序列中识别唯一的对象。要跟踪的对象通常被称为*目标对象。*跟踪可以通过 包围盒 或者 实例分割 *来完成。*有两种类型的公共对象跟踪挑战。

  1. 单个对象跟踪:在整个视频序列中跟踪感兴趣的对象。例如 VOT 挑战
  2. 多目标跟踪:在整个视频序列中跟踪多个感兴趣的目标。例如 MOT 挑战

研究趋势

用于解决对象跟踪的一些著名的经典 CV 算法是:

  1. 均值漂移
  2. 光流
  3. 卡尔曼滤波器

其中最著名的多目标跟踪算法 SORT 以卡尔曼滤波器为核心,非常成功。

随着深度学习时代的到来,非常创新的研究进入了社区,DL 在公共跟踪挑战方面成功地胜过了经典的 CV 方法。尽管 DL 在公共挑战上取得了巨大成功,但它仍在努力为现实世界的问题陈述提供通用的解决方案。

深度模型的挑战💭

当训练深度 CNN 模型时,我们面临的主要挑战之一是训练数据。

  • **训练数据:**深度学习方法需要大量数据,这几乎每次都会成为瓶颈。此外,像多目标跟踪这样的任务很难注释,并且这个过程变得不切实际且昂贵。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DL 模型需要大量数据

自我监督学习营救😯

我们都知道监督和非监督学习技术。这是一种相当新的类型,被称为自我监督学习。在这些类型的学习中,我们试图利用数据中已经存在的信息,而不是任何外部标签,或者有时我们说模型自己学习。在现实中,我们所做的是训练 CNN 模型来完成一些其他的任务,间接帮助我们实现我们的目标,模型会自我监督。这些任务被称为“代理任务或“借口任务”。
代理任务的几个例子是:

  • 着色

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CNN 模型学习从灰度图像预测颜色。[ 来源

  • 将图像补丁放置在正确的位置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些小块是从图像中提取出来的,并被混洗。该模型学习解决这个拼图,并按照正确的顺序排列瓷砖,如图 3 所示。[ 来源

  • 按照正确的顺序放置框架

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该模型学习对视频序列中的混洗帧进行排序。[ 来源

许多这样的任务可以用作计算机视觉问题的代理任务。这种培训的一个主要好处是,培训不需要手动注释数据,并且适合解决现实生活中的用例。

通过视频彩色化的自我监督跟踪

我们已经看到了什么是自我监督模型,你一定已经猜到了我们将使用着色作为我们的代理任务的名称。

[## 通过给视频着色,跟踪出现了

我们使用大量未标记的视频来学习模型,以便在没有人工监督的情况下进行视觉跟踪。我们…

arxiv.org](https://arxiv.org/abs/1806.09594)

介绍

着色是我们的代理任务借口任务,物体跟踪是主任务下游任务。大规模无标签视频用于训练模型,没有任何单个像素被人类标注。视频的时间相干性用于使模型学习给灰度视频着色。这可能看起来令人困惑,但坚持下去,我会把事情弄清楚。

模型将如何学习跟踪?

我们将取两个帧一个目标帧(在时间 t)和一个参考帧(在时间 t-1),并通过模型。期望该模型根据参考帧的颜色的先验知识来预测目标帧的颜色。这样,模型内部学习指向正确的区域,以便从参考帧复制颜色,如图所示。这种指向机制可以用作推断过程中的跟踪机制。我们将很快看到如何做到这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该模型接收一个彩色帧和一个灰度视频作为输入,并预测下一帧的颜色。该模型学习从参考帧复制颜色,这使得能够在没有人类监督的情况下学习跟踪机制[ 来源

我们不复制网络中的颜色,而是训练我们的 CNN 网络来学习目标帧的像素和参考帧的像素之间的相似性*(相似性是灰度像素之间的相似性)*,然后当与参考帧的真实颜色线性组合时,该相似性矩阵给出预测的颜色。数学上,让 Cᵢ 是参考帧中每个像素 i 的真实颜色,让 Cⱼ 是目标帧中每个像素 j 的真实颜色。该模型给出了目标帧和参考帧之间的相似性矩阵 Aᵢⱼ 。我们可以通过线性组合得到预测的颜色 yᵢ

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

[ 来源

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式 1 :预测颜色与参考颜色的线性组合

相似矩阵怎么算?

当通过模型时,图像、参考帧和目标帧都学习对每个像素的低级嵌入,这里 fᵢ 是对参考帧中的像素 i 的嵌入,类似地, fⱼ 是对目标帧中的像素 j 的嵌入。那么相似性矩阵可以通过下式计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式 2: 内部
产品相似度由 softmax 归一化

相似性矩阵中的每一行表示参考帧的所有像素 i 和目标帧的像素 j 之间的相似性,因此为了使总权重为 1,我们对每一行应用 softmax。

Lets look an example with dimension to make it clear,we try to find a similarity matrix of 1 pixel from target frame.
An illustration of this example is shown below.Consider reference image and target image, size (5, 5) => (25,1)for each pixel, cnn gives embedding of size (64, 1)
*fᵢ*, embedding for reference frame, size (64, 25)
*fⱼ*, embedding for target frame, size (64, 25)
*at j=2 f₂*,  embedding for 3rd pixel in target frame, size (64, 1)**Similarity Matrix,** between reference frame and target pixel, j=2
 *Aᵢ₂* =softmax *(fᵢᵀ x f₂)* , size (25, 64) *x* (64, 1) => (25,1) =>   (5, 5)
we get a similarity between all the ref pixels and a target pixel at j=2.**Colorization,** To copy the color (here, colours are not RGB but quantized colour of with 1 channel) from reference frame,
*cᵢ*, Colors of reference frame size (5, 5) => (25, 1)
*Aᵢ₂*, Similarity matrix, size (5, 5) => (1, 25)**Predicted color** at j=2, 
*y₂ = Aᵢ₂ x cᵢ*, size (1, 25) *x* (25, 1) => (1, 1)From the similarity matrix in below figure, we can see reference color at i=1 is dominant(0.46), thus we have a color copied for target, j=2 from reference, i=1**PS:** 1\. ᵀ denotes transpose
2\. matrix indices starts from 0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(a)示出了大小为(5,5)的 2 个帧,(b)参考帧嵌入和 j =2 处的目标像素嵌入的内积,(softmax 之后的相似性矩阵,(d)相似性矩阵和参考帧的真实颜色的线性组合[ ]

类似地,对于目标帧中的每个目标像素( *(5,5)= > 25 像素),*我们将具有大小为(5,5)的相似性矩阵,即大小为(5,5,25) = (25,25)的完整相似性矩阵 Aᵢⱼ
我们将在实现中使用(256 x 256)图像扩展相同的概念。

图像量化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一行显示原始帧,第二
行显示来自 Lab space 的 ab 颜色通道。第三行将颜色空间量化为离散的面元,并扰动颜色以使效果更加明显。[ 来源

颜色是低空间频率,所以我们可以使用低分辨率的帧。我们不需要 C(255,3) 颜色组合,所以我们创建了 16 个聚类,并将颜色空间量化到这些聚类中。现在我们只有 16 种独特的颜色,(见上图第三栏)。聚类是使用 k-means 完成的。16 个簇会丢失一些颜色信息,但足以识别物体。我们可以增加聚类的数量来提高着色的精度,但代价是增加计算量。

为什么 LAB 色彩空间优于 RGB?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

为了将图像量化成簇,我们将使用 LAB 色彩空间的 AB 通道,而不是 RGB 色彩空间。上图显示了 RGB 和 LAB 通道间相关性,我们可以从图中得出以下结论

  • RGB 往往比 LAB 有更多的相关性。
  • LAB 将迫使模型学习方差,它将迫使学习更健壮的表示,而不是依赖于局部颜色信息

可以使用 sklearn 的 KMeans 包来完成集群。

这个类将被用来制作颜色簇,我们将把它作为泡菜来保存。

履行💻

注意:我用 pytorch 实现,它遵循(N,C,H,W)格式。在处理矩阵整形时,请记住这一点。如果你对形状有任何疑问,请联系我们。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该模型从参考帧学习给视频帧着色。[ 来源

投入

该模型的输入是下采样到
256 × 256 的四个灰度视频帧。三个参考帧和一个目标帧。

预处理

首先,我们将把所有的训练视频压缩到 6 帧/秒。然后预处理帧以创建两个不同的集合。一个用于 CNN 模型,另一个用于着色任务。

- Video fps is reduced to 6 fps**SET 1 - for CNN Model**- Down sampled to 256 x 256- Normalise to have intensities between [-1, 1]**SET 2 - for Colourization**- Convert to LAB colour space- Downsample to 32 x 32- Quantize in 16 clusters using k-means- Create one-hot vector corresponding to the nearest cluster centroid

模型架构

使用的主干是 ResNet-18 ,因此结果与其他方法相当。ResNet-18 的最后一层被更新以给出 32 x 32 x 256 的尺寸输出。ResNet-18 的输出然后被传递到 3D-Conv 网络,最终输出是 32 x 32 x 64。(下面的代码块显示了从 ResNet-18 网络获取输入的 3D 网络)

培养

培训可分为以下 3 个步骤:

  1. 网络通道
    我们将使用预处理帧的集合 1,即大小为(256 x 256)的 4 个灰度帧通过网络,以获得具有 64 个通道的(32 x 32)空间图。这可以解释为对(32 x 32)图像的每个像素进行 64 维嵌入。因此,我们有四个这样的像素级嵌入,三个用于参考图像,一个用于目标图像。

  2. 相似性矩阵 利用这五个嵌入,我们找到参考帧和目标帧之间的相似性矩阵。对于目标帧中的像素,我们将通过 softmax 将所有三个参考帧中的所有像素的相似性值归一化为 1。

3。着色 我们将使用预处理帧的集合 2,即四个下采样为(32 x 32)并量化的帧用于着色。将三个参考帧与相似性矩阵组合以获得预测的量化帧。我们用预测的颜色找到 交叉熵损失 (记得我们将帧量化为 16 个簇,现在我们有 16 个类别。我们在这些颜色上发现了多类别交叉熵损失。)

推理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

跟踪预测示例[ 来源

在学习了着色的任务之后,我们有了一个可以为一对目标和参考帧计算相似矩阵 Aᵢⱼ 的模型。现在对于实际的跟踪任务,我们利用了我们的模型在标签空间中是非参数的特性。我们简单地重复使用 e 方程 1 来传播,但是不是传播颜色,而是传播类别的分布。对于第一帧,我们有地面真实遮罩,我们将把所有实例遮罩安排为独热向量 c ᵢ(这类似于训练期间使用的量化颜色的独热向量)。将 c 与我们的相似性矩阵 Aᵢⱼ 结合起来,找到蒙版*、*的新位置,但是记住预测 c 在随后的帧中会变软,表示模型的置信度。要做一个艰难的决定,我们可以简单地取最有信心的一类。推理的算法将是:

**WHILE (**target frame, reference frames) in the videostep 1\. Pass the target and reference frames through CNN modelstep 2\. Find Similarity Matrixstep 3\. Take ground truth object masks as one-hot encodingstep 4\. Linear combine the object masks with similarity matrixstep 5\. Update ground truth object masks by predicted masks

故障模式

让我们讨论一下在某些情况下模型什么时候会失败,这主要是着色失败的情况,这意味着着色与跟踪有很高的相关性。
在以下情况下会发现一些故障:

  • 当视频中的光线剧烈或频繁变化时
  • 该方法成功地跟踪具有轻微到中等遮挡物体,但是当物体经历较大遮挡时仍然失败
  • 物体尺寸的突然变化

结论

在这里,我们看到了一个模型如何在没有任何手动注释数据的情况下从自己的模型中学习。我们学习了如何在一些代理任务上训练 CNN 模型,并利用这种学习来完成实际的任务。我们使用着色作为代理,但不限于此,各种新的方法作为新的代理任务出现。自我监督的方法是当前的需要,它们可以消除现实世界用例的昂贵数据收集的主要限制。这个模型还不能击败目前的 SOTA 监督模型,但优于许多其他模型。

该方法在方法和灵活性方面非常有前途。由于自身的优势,自监督模型将很快成为解决最大似然问题的首选。这篇文章是基于“ Google Research ”的研究和他们所有的功劳。我试图根据我的知识和理解来解释这项研究。

关于我

我是 Tushar Kolhe,在 Fynd 担任深度学习工程师。我的兴趣是建立解决现实世界问题的计算机视觉模型。
通过电子邮件寻求任何建议或帮助。

我坚信,如果有足够的动力,任何人都可以学到任何东西,深度模型也是如此😛。

附录

目标跟踪领域的一些有趣研究:

  1. 简单的在线实时跟踪,具有深度关联度量。【 论文→扩展排序
  2. 没有花里胡哨的跟踪。【 论文
  3. 单次多目标跟踪的简单基线- FairMOT论文
  4. 学习用于多目标跟踪的神经解算器。【 论文**

你可以找到更多有趣的研究,评论你觉得有趣的研究。

参考

  1. 冯德里克、施里瓦斯塔瓦、法蒂、瓜达拉马和墨菲(2018 年)。跟踪是通过给视频着色而出现的。 ArXiv,abs/1806.09594
  2. 。用于图像识别的深度残差学习。ArXivABS/1512.03385
  3. 张曦轲菲利普·伊索拉阿列克谢·阿·埃夫罗斯。彩色图像彩色化。ArXivT58ABS/1603.08511
  4. 迈赫迪·诺鲁齐,保罗·法瓦罗。通过解决拼图游戏实现视觉表征的无监督学习。 ArXiv abs/1603.09246
  5. 李新英贾-黄斌辛格明-杨玄。通过排序序列的无监督表示学习。 ArXiv abs/1708.01246
  6. https://www.fast.ai/2020/01/13/self_supervised/

自学成才的数据科学家:用个人网站展示自己

原文:https://towardsdatascience.com/self-taught-data-scientist-showcase-yourself-with-a-personal-website-79fc31580c2?source=collection_archive---------16-----------------------

一个简单且几乎免费的初学者循序渐进指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

爱丽丝·山村在 Unsplash 上的照片

没有数据科学的大学学位,很难让别人相信你的技能。没有任何工作经验更是难上加难。

我知道,这似乎不公平!

当你在电脑上花了无数个小时努力开发所有这些技能,弄清楚那些令人绞尽脑汁的算法是如何工作的时候,你认为雇主必须承认你是一名体面的数据科学家,并给你你努力争取的工作机会。

除非你用确凿的证据向他们展示你的所有技能,让自己与众不同,否则这种情况不会发生。

拥有一个个人网站为你提供了一个展示技能的平台。

在这篇文章中,我将解释你如何能容易地并且几乎免费地创建你的网站。

在这篇文章的第一部分,我将介绍你应该在你的网站上展示什么。然后在后面的部分,我会告诉你如何从头到尾处理网站开发任务,包括设置主机/域名服务和处理 HTML/CSS 开发。

所有的源代码都在我的 GitHub 库中提供,你可以访问我的个人网站来查看所有的操作。

作为一名自学成才的数据科学家,你应该在你的网站上展示什么

在开始开发你的网站之前,你应该考虑如何构建你网站的内容。下面是你的网站应该包含的主要部分;

  • 您的博客帖子
  • 您的数据科学产品组合
  • 你的简历
  • 您的社交媒体资料

开始写博客

如果你在自学数据科学家之旅的早期就开始写博客,会有很大帮助。写文章不仅能让你在旅途中学到的东西具体化,还能向别人展示你的发现和论点传达得有多好。

以下是您可以撰写的数据科学主题列表;

  • 数据采集和准备
  • 特征工程
  • 机器学习
  • (英)可视化(= visualization)
  • 传达调查结果

你可以开发自己的博客网站,也可以使用免费平台,如 Medium

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

亚历杭德罗·埃斯卡米拉在 Unsplash 上的照片

发展你的投资组合

你可能会参加许多 CourseraBootcamp 的课程,但让你与众不同的是你如何将你的知识应用到实际问题中。这是让招聘人员相信你的技能的原因。

因此,拥有一个适当的数据科学组合并在您的网站上展示它会产生巨大的影响。

但是,什么是好的数据科学投资组合呢?

  • **独立边项目:**这些项目向别人展示你在现实生活中如何运用你的数据科学知识。最好不要使用概念验证数据库来解决琐碎的问题。相反,开发你独特的数据库,调查一个有趣的问题。
  • **Kaggle 竞赛:**参加 Kaggle 竞赛是展示你相对于该领域其他人的技能水平的一种方式。
  • **开源项目:**开源项目为您提供了一个发展数据科学经验的绝佳机会。

创建您的简历

招聘人员浏览简历以确定可能的候选人。因此,拥有一份结构良好、易于阅读的简历会增加你被聘用的机会。为了更好地展示自己,你至少应该在简历中包括以下内容:

  • 个人信息
  • 位置
  • 教育
  • 项目
  • 能力和个人技能

建立你的社交媒体档案

作为一名数据科学家,你需要在一定程度上使用社交媒体。推特是和你的同龄人交流的最好方式。它有助于保持更新。

如果你想被雇佣,你应该使用 LinkedIn,因为它是招聘人员寻找潜在候选人的主要来源。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Igor Miske 在 Unsplash 上拍摄的照片

如何建立你的网站

一旦你完成了开发和组织内容这一过程中的困难部分,剩下的就很容易了。

由于提供了免费的服务、库和模板,开发一个个人网页从未如此容易。

我会用 Bootstrap 4.0 这是一个开源的前端 web 开发库。它支持响应式和移动优先的网页开发流程,确保我们的网站能够在移动设备上正常运行。

连同 Bootstrap 4.0,我将在我的项目中使用免费版的 字体牛逼 图标库。

不是从头开始处理所有的 HTML/CSS 开发工作,我将修改一个我从这个链接下载的引导模板。

对于托管我的网站,我将使用 谷歌 Firebase ,并带有自定义域名。我在 isimtescil.net注册了我的自定义域名,花了 8 美元。你可以随意使用任何其他的主机和域名服务。

让我们建造它

在本地计算机上创建一个包含所有项目文件的文件夹结构。

****$ mkdir** ds-personal-website
**$ cd** ds-personal-website
**$ mkdir** public**

然后 把自由职业者模板 的源代码下载到你的电脑里,把你的‘public’项目文件夹里的所有文件都复制下来。稍后,Firebase 会在将文件部署到托管服务器时查看公共文件夹,因此将所有文件复制到我们刚刚创建的‘public’文件夹中非常重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Github 中的自由职业者免费模板源代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卡尔·海尔达尔在 Unsplash 上拍摄的照片

修改 HTML 的 Head 部分

作为第一步,我们需要做的是根据我们的需要修改 HTML 元素。让我们在编辑器中打开 ‘index.html’ ,先修改 head 部分。

我修改的是网页的元数据和标题。这些标签向搜索引擎提供关于我们页面内容的数据。

此外,我已经修改了与 root 相关的 href 属性,以便可以在托管环境中访问 CSS & JavaScript 源文件。

我在下面用粗体标出了修改。

****Modifications are noted in bold
../public/Index.html**<head><meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1,   
 shrink-to-fit=no"><meta name="description" content="**Erdem Isbilen - Automotive & 
 Mechanical Engineer,Machine Learning and Data Science Enthusiasts**"><meta name="author" content="**Erdem Isbilen**"><title>**Erdem ISBILEN - My Personal WebPage**</title><!-- Custom fonts for this theme --><link **href="../vendor/fontawesome-free/css/all.min.css"**     
 rel="stylesheet" type="text/css">

 <link href="https://fonts.googleapis.com/css?
 family=Montserrat:400,700" rel="stylesheet" type="text/css"><link href="https://fonts.googleapis.com/css?  
 family=Lato:400,700,400italic,700italic" rel="stylesheet" 
 type="text/css"><!-- Theme CSS -->
 <link **href="../css/freelancer.css"** rel="stylesheet"></head>**

修改 HTML 的导航部分

我在导航部分添加了我的 logo,保持导航部分的其余部分基本不变。多亏了引导库,导航条可以完美地工作,并通过折叠来调整自己以适应不同的屏幕尺寸。

我在导航栏的布局上做了一些小改动,分别添加了作品集、博客、简历和联系我部分。

根据您希望呈现内容的方式,您可以添加任意多个部分。

****Modifications are noted in bold
../public/Index.html**<!-- Navigation -->
<nav class="navbar navbar-expand-lg bg-secondary text-uppercase fixed-top" id="mainNav"><div class="container">**<a class="navbar-brand js-scroll-trigger" href="#page-top">
 <img class="brand-logo" src="/img/eisbilen-logo.svg" alt="">
</a>**<button class="navbar-toggler navbar-toggler-right text-uppercase   
 font-weight-bold bg-primary text-white rounded" type="button" data-
 toggle="collapse" data-target="#navbarResponsive" 
 aria-controls="navbarResponsive" aria-expanded="false"
 aria-label="Toggle navigation">
   <i class="fas fa-bars"></i>
 </button><div class="collapse navbar-collapse" id="navbarResponsive"><ul class="navbar-nav ml-auto">

   <li class="nav-item mx-0 mx-lg-1">
    <a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger"    
    **href="#portfolio">Portfolio**</a>
   </li><li class="nav-item mx-0 mx-lg-1">
    <a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger" 
    **href="#blog">Blog**</a>
   </li>

   <li class="nav-item mx-0 mx-lg-1">
    <a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger" 
    **href="#resume">Resume**</a>
   </li><li class="nav-item mx-0 mx-lg-1">
    <a class="nav-link py-3 px-0 px-lg-3 rounded js-scroll-trigger" 
    **href="#connect">Connect Me**</a>
   </li>

 </ul>
</div>
</div>
</nav>**

修改 HTML 的报头部分

在 HTML 的报头部分,我添加了我的照片、名字和头衔。

由于这一部分位于页面折叠的上方,访问者无需滚动就可以看到,所以它是访问者在网站上看到的第一个内容。

为了给人留下良好的第一印象,放上你最好的职业照片,并选择最恰当的词语来描述你。

拥有一张自己的专业照片也将有助于他人信任你和你的企业。

****Modifications are noted in bold
../public/Index.html**<!-- Masthead -->
<header class="masthead bg-primary text-white text-center">
 <div class="container d-flex align-items-center flex-column"><!-- Masthead Avatar Image -->
 **<img class="masthead-avatar mb-5" src="/img/ei-photo-min.png"   
 alt="">**<!-- Masthead Heading -->
 **<h2 class="masthead-heading text-uppercase mb-0">ERDEM ISBILEN</h2>**<!-- Icon Divider -->
 <div class="divider-custom divider-light">
  <div class="divider-custom-line"></div>
   <div class="divider-custom-icon">
    <i class="fas fa-star"></i>
   </div>
  <div class="divider-custom-line"></div>
 </div><!-- Masthead Subheading -->
 **<h8 class="masthead-subheading font-weight-light mb-0">Automotive 
  & Mechanical Engineer</h8>
  <h8 class="masthead-subheading font-weight-light mb-0">Machine 
  Learning and Data Science Enthusiasts</h8>**</div>
</header>**

修改 HTML 的其余部分

以类似的方式修改其余的 HTML 部分,因此您可以根据需要调整它们或包含额外的内容。

博客、简历和投资组合部分是你的网页上应该有的最少部分,以恰当地传达你的数据科学技能和专业。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 imgixUnsplash 上拍摄

设置 Google Firebase

现在,我们已经准备好了所有的项目文件,是时候用免费的“星火计划”来建立托管我们内容的 Firebase 了。

假设你已经有了一个‘谷歌账户’,登录 FireBase 并创建一个新项目。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Firebase —创建新项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Firebase 仪表板

此时,我们已经准备好使用带有 Firebase CLI 的本地计算机将文件部署到 Firebase。

将您的网站部署到 Firebase

在将我们的网站部署到 Firebase 之前,我们应该在本地计算机上安装 Firebase CLI。

****$** npm install -g firebase-tools**

然后,我们将登录并初始化 Firebase。转到项目文件夹的根目录,使用下面的终端命令登录 Firebase。它会引导你到一个网站,在那里你使用你的“谷歌账户”来授权 Firebase。

****ds-personal-website$** firebase login**

登录后,现在我们可以初始化 Firebase 项目并配置主机细节。

选择‘Hosting’选项,并提供公共目录作为‘public’**,所有准备部署的文件都存储在本地计算机中。不要选择覆盖到“index.html”选项,因为这将修改您的“index.html”。**

****ds-personal-website$** firebase initYou're about to initialize a Firebase project in this directory:
**/Users/erdemisbilen/Angular/my-personal-webpage**Before we get started, keep in mind:
***** You are initializing in an existing Firebase project directory? **Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices.**Hosting: Configure and deploy Firebase Hosting sites**=== Project Setup** First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running **firebase use --add**, but for now we'll just set up a default project.**i ** .firebaserc already has a default project, using my-personal-webpage-c7096.**=== Hosting Setup** Your **public** directory is the folder (relative to your project directory) that will contain Hosting assets to be uploaded with **firebase deploy**. If you have a build process for your assets, use your build's output directory.? **What do you want to use as your public directory?** public
? **Configure as a single-page app(rewrite all urls to /index.html)?**No
? **File public/404.html already exists. Overwrite?** Yes
**✔ ** Wrote **public/404.html**? **File public/index.html already exists. Overwrite?** No
**i ** Skipping write of **public/index.html
i ** Writing configuration info to **firebase.json**...
**i ** Writing project information to **.firebaserc**...**✔ ** Firebase initialization complete!**

现在您已经登录并初始化了 Firebase,您可以用一行命令部署所有文件。

如果你成功地完成了正确的设置,Firebase 将部署你所有的文件,并给你一个网址,你可以在你的浏览器上看到你的网站。

****ds-personal-website$** firebase deploy**=== Deploying to 'my-personal-webpage-c7096'...****i ** deploying **hosting
i  hosting[my-personal-webpage-c7096]:** beginning deploy...
**i  hosting[my-personal-webpage-c7096]:** found 91 files in **public
✔  hosting[my-personal-webpage-c7096]:** file upload complete
**i  hosting[my-personal-webpage-c7096]:** finalizing version...
**✔  hosting[my-personal-webpage-c7096]:** version finalized
**i  hosting[my-personal-webpage-c7096]:** releasing new version...
**✔  hosting[my-personal-webpage-c7096]:** release complete**✔ ** **Deploy complete!****Project Console:** [https://console.firebase.google.com/project/my-personal-webpage-c7096/overview](https://console.firebase.google.com/project/my-personal-webpage-c7096/overview)**Hosting URL:** [https://my-personal-webpage-c7096.firebaseapp.com](https://my-personal-webpage-c7096.firebaseapp.com)**

在 Firebase 中配置您的自定义域名

你不能使用 Firebase 提供的 URL,因为它是让你试验你的设计并在浏览器上看到它的东西。

当你对你的网站在浏览器上的外观感到满意后,还有最后一步用自定义域名使你的网站独一无二。

有几个提供商可以让你注册一个特定的域名。对我来说,它是【www.erdemisbilen.com】,我在【isimtescil.net】注册了这个域名,每年花费 8 美元。

您可以向您选择的任何 DNS 服务提供商注册您的域名。

注册了唯一的域名后,进入 Firebase Dashboard——托管部分,Firebase 会要求您添加自定义域名。

向 Firebase 提供自定义域名后,您将获得一个 TXT 文件。使用您的 DNS 提供商的仪表板,用 Firebase 提供的记录替换您的域名的 TXT 记录。

一旦完成,Firebase 将要求您修改“A”记录。因此,相应地修改 A 记录。

几个小时后,您会看到 Firebase 连接到您的自定义域。

也就是说,所有的工作都完成了,你的网站开始运行了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Firebase 自定义域名配置

摘要

在这篇文章中,我试图解释我为自学成才的数据科学家建立个人网站的方式。

我希望我的文章能帮助你建立自己的网站,展示你的数据科学技能。

自然语言理解的自我训练

原文:https://towardsdatascience.com/self-training-for-natural-language-understanding-d5c369b5a7f6?source=collection_archive---------24-----------------------

这篇文章将解释自然语言处理中令人兴奋的发展。提出了一种半监督学习算法,该算法通过自训练显著提高了 RoBERTa 的性能。如果你喜欢这篇论文的视频解释,请看看这个!

迁移学习在深度学习方面取得了极大的成功。这描述了用从另一个任务学习的权重初始化深度神经网络。在计算机视觉中,这另一项任务通常是 ImageNet 监督学习。在自然语言处理中,另一项任务通常是使用互联网规模的语料库进行自我监督的语言建模。

迁移学习的成功激发了深度学习研究人员探索更多用于预训练的任务。一个有希望的替代任务是自我训练。自训练是知识蒸馏的逆过程,它被开发来压缩大型深度神经网络。

自我训练和知识蒸馏描述了使用一个神经网络来标记另一个神经网络的训练数据。知识蒸馏用较大网络标注较小网络的数据,自练用较小网络标注较大网络的数据。这可以循环渐进增长或收缩的几个步骤。

自我训练在嘈杂学生的框架内实现了图像网络分类的最先进水平[1]。在其他组成部分中,吵闹的学生在半监督学习的环境中实现自我训练。Zoph 等人[2]表明,在从分类到对象检测和语义分割的一些计算机视觉问题上,自训练优于使用 ImageNet 监督学习的预训练。如果感兴趣,下面的视频解释了这项研究,它与我们在本文中讨论的论文极其相似:

半监督学习描述了这样一种环境,其中我们有少量的已标记数据和大量(通常是绝对大量的)未标记数据。表征学习的许多最新进展,如 SimCLRv2 [3],就是以这种方式工作的。这似乎适用于大多数深度学习问题,如图像分类、问题回答,甚至是蛋白质结构建模等应用,其中有一小组实验验证的 3D 结构和一大组在自然界中发现的验证的氨基酸序列。

本文讨论了在半监督学习环境下,应用于自然语言理解的自我训练。

使半监督学习工作良好的一个核心因素是未标记的数据至少与标记的数据在同一域内。这是什么意思?对于下游的 NER 生物医学任务,没有标签的生物医学论文比流行文化新闻文章要好。Gururangan 等人[4]在“不要停止预训练”中用更多相关领域的顺序语言建模证明了这一点。例如,在为文章主题分类装配标签之前,从普通爬行到用于语言建模的新闻文章。下面的视频解释了那篇论文,如果感兴趣的话:

作者提出了 SentAugment 来过滤基于最域内和相关子集的未标记数据。该算法通过训练语义文本相似性模型来工作,该模型将整个未标记集(例如来自常见爬行的 50 亿个句子)嵌入到向量空间中。这些向量空间被称为“大规模句子嵌入空间”。

使用相同的编码模型将整个标记数据集嵌入到单个矢量表示中。这是通过对每个标记句子的向量进行平均、基于下游标签进行平均或者对标记集合中的每个句子使用单独的查询来完成的。查询向量用于在未标记的文档索引中查找最近的邻居。像 FAISS [5]这样的库加速了这个过程。

所以总而言之,算法是这样工作的:

  • 语义相似度模型被训练并嵌入未标记集合中的每个句子。该模型还形成了标记集的嵌入,以用作检索查询。
  • 教师模型最初是在小标签集上用监督学习来训练的。该教师模型然后伪标记来自检索的前 K 个最相似的文档。
  • 学生模型在老师的这些伪标签上训练。
  • 你可以根据需要切换学生和老师,通常每一步都增加学生的规模(在自我训练的情况下,注意知识升华与此相反)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文探讨的完整管道的可视化

作者使用常见的爬行语料库和一些范围从大约 5k 到 65k 的标记示例的文本分类数据集进行实验。文档和查询编码器用由释义和平行句子数据集组成的数据集上的三元组损失来训练。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 2 显示了来自预训练的 RoBERTa 大模型的自我训练的收益。请注意,持续的语言建模(ICP)会损害性能,可能会过度适应自我监督的学习任务。还要注意的是,SST-2 比其他数据集拥有更多的数据,而其他数据集的增益要大得多。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 4 显示了 SentAugment 的优势。顶行突出显示了 RoBERTa Large 的表现明显优于 RoBERTa small。中间一行(GT)显示了使用标记数据集从大到小的知识提取的成功。在中间一行中,(RD)指的是从未标记和标记的组中随机取样进行蒸馏。在中间一行中,(SA)显示 SentAugment 几乎恢复了单独使用最近邻检索的蒸馏的地面真实性能。底部一行显示了使用额外的未标记数据的好处(比如 100K 对 5k,与中间一行进行比较)。与随机选择未标记的句子进行提取相比,这显示了检索过滤的巨大优势。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 3 显示了少量学习的结果。这描述了使用极小的标记集,例如在情感分类中的正面和负面类别中的每个类别中有 20 个例子。与最近的结果相比,如 GPT-3,或更实际的模式探索训练,这是一个有希望的结果,解释如下:

作者进一步研究了构造 SentAugment 算法的不同方法。值得注意的是,他们探索了使用 word2vec 嵌入与使用串联文本相似性语料库训练的 Transformer 嵌入之间的差异。他们还研究了为监督学习集构建查询的不同方法。如果您有兴趣学习更多关于检索模型的知识,我强烈推荐您查看检索增强生成模型。如果你感兴趣,这里有一个解释这一点的视频:

作者还包括这个检索系统的不同查询的最近邻居的可视化,如下所示。我很喜欢用“大规模句子嵌入空格”这个术语来描述这项研究。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我一直认为知识提炼是成功的,因为老师利用其较大的模型尺寸为较小的学生制作了更详细的标签。自我训练的成功表明不仅仅是这样。我怀疑这种转移与优化格局有关。感谢您的阅读!

参考

[1]与吵闹的学生一起进行自我训练可提高 ImageNet 分类。谢启哲,Minh-Thang Luong,Eduard Hovy,郭诉乐。https://arxiv.org/abs/1911.04252

[2]反思职前培养和自我培养。Barret Zoph、Golnaz Ghiasi、宗、尹翠、刘韩啸、Ekin Cubuk、Quoc V. Le。https://arxiv.org/pdf/2006.06882.pdf

[3]大的自我监督模型是强的半监督学习器。陈婷,西蒙·科恩布鲁斯,凯文·斯维斯基,穆罕默德·诺鲁齐,杰弗里·辛顿。https://arxiv.org/abs/2006.10029

[4]不要停止预训练:使语言模型适应领域和任务。Suchin Gururangan,Ana Marasovic,Swabha Swayamdipta,Kyle Lo,Iz Beltagy,Doug Downey,Noah A. Smith。【https://arxiv.org/pdf/2004.10964.pdf 号

[5] Faiss:一个用于高效相似性搜索的库。埃尔韦·杰古,马特吉斯·杜泽,杰夫·约翰逊。https://engineering . FB . com/data-infra structure/faiss-a-library-for-efficient-similarity-search/

自我训练提高自然语言理解的预训练:https://arxiv.org/pdf/2010.02194.pdf

感谢阅读,如果你喜欢深度学习论文的摘要,请在 YouTube 上查看 Henry AI Labs!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于全卷积网络的语义图像分割

原文:https://towardsdatascience.com/semantic-image-segmentation-using-fully-convolutional-networks-bf0189fa3eb8?source=collection_archive---------10-----------------------

语义分割/扩展卷积

Severstal 钢缺陷检测——案例研究

人类有一种与生俱来的能力,能够识别他们在周围世界看到的物体。我们大脑中的视觉皮层几乎可以在短时间内毫不费力地区分猫和狗。这不仅适用于猫和狗,也适用于我们看到的几乎所有物体。但是计算机没有人脑聪明,无法自己做到这一点。在过去的几十年里,深度学习研究人员试图通过一种特殊类型的人工神经网络(称为卷积神经网络(CNN))来弥合人脑和计算机之间的这种差距。

什么是卷积神经网络?

在对哺乳动物大脑进行了大量研究后,研究人员发现,大脑的特定部分在特定类型的刺激下会被激活。例如,当我们看到垂直边缘时,视觉皮层的一些部分被激活,当我们看到水平边缘时,一些部分被激活,当我们看到特定的形状、颜色、脸等时,一些部分被激活。ML 的研究人员将这些部分想象成神经网络的一层,并考虑了这种层的大型网络可以模仿人脑的想法。
这种直觉导致了 CNN 的出现,这是一种神经网络,其构建块是卷积层。卷积层只不过是一组称为核或滤波器的权重矩阵,用于对诸如图像的特征矩阵进行卷积运算。

卷积: 2D 卷积是一个相当简单的操作,你从一个内核开始,然后“跨越”(滑动)2D 输入数据,与它当前所在的输入部分执行逐元素乘法,然后将结果相加到单个输出单元中。内核对它滑过的每个位置重复这个过程,将 2D 特征矩阵转换成另一个 2D 特征矩阵。
内核在输入特征矩阵上滑动的步长称为 步距 。在下面的动画中,输入矩阵的四边都添加了额外的零条纹,以确保输出矩阵的大小与输入矩阵的大小相同。这称为(零)填充。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2D 卷积 : 内核大小=3x3,填充=1 或‘相同’,步幅= 1**【GIF 来源: pyimagesearch**

语义图像分割

图像分割是基于一些特征将数字图像分割成多个片段(像素组)的任务。目标是将图像简化或改变成更有意义和更容易分析的表示。
语义分割是指给定图像中的每个像素分配一个类别标签。参见下面的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:马丁托马/ CC0

请注意,分段不同于分类。在分类中,完整的图像被分配一个类别标签,而在分割中,图像中的每个像素被分类到一个类别中。

1.商业问题

对卷积网络和语义图像分割有了一个公平的想法,让我们进入我们需要解决的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源: Kaggle

俄罗斯北方钢铁公司是世界 50 大钢铁生产商之一,也是俄罗斯高效钢铁开采和生产的最大参与者。谢韦尔钢铁公司的主要产品之一是钢板。平板钢板的生产工艺精细。从加热和轧制,到干燥和切割,当扁钢准备装运时,几台机器会接触到它。为了确保钢板生产的质量,今天,谢韦尔钢铁公司使用高频摄像机的图像来驱动缺陷检测算法。
通过这次比赛,Severstal 希望人工智能社区能够通过
定位和分类钢板上的表面缺陷来改进算法。

业务目标和约束

  1. 有缺陷的纸张必须被预测为有缺陷的,因为如果我们将有缺陷的纸张错误地分类为无缺陷的,将会有严重的质量问题。即每个类别都需要高召回值。
  2. 我们不需要一眨眼就给出给定图像的结果。(没有严格的延迟问题)

2.机器学习问题

2.1.将业务问题映射到 ML 问题

我们的任务是

  1. 使用图像分割检测/定位钢板中的缺陷
  2. 将检测到的缺陷分成[1,2,3,4]中的一个或多个类别

放在一起就是一个语义图像分割问题。

2.2.绩效指标

使用的评估指标是平均 Dice 系数。Dice 系数可用于比较预测的分割与其对应的基本事实之间的逐像素一致性。该公式由下式给出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 X 是预测的像素组,Y 是地面实况。
在这里阅读更多关于骰子系数的内容

2.3.数据概述

我们收到了一个 2GB 大小的 zip 文件夹,其中包含以下内容:

  • **train_images**—包含 12,568 张训练图像的文件夹(。jpg 文件)
  • **test_images** —包含 5506 个测试图像的文件夹(。jpg 文件)。我们需要检测和定位这些图像中的缺陷
  • **train.csv** —为属于 ClassId = [1,2,3,4]的缺陷提供分段的训练注释
  • **sample_submission.csv** —正确格式的样本提交文件,每个 ImageId 重复 4 次,4 个缺陷类别各一次。

关于数据的更多细节将在下一节讨论。

3.探索性数据分析

解决任何机器学习问题的第一步应该是彻底研究原始数据。这为我们解决问题的方法提供了一个合理的思路。通常,它还能帮助我们发现数据的一些潜在方面,这些方面可能对我们的模型有用。让我们分析这些数据,试着得出一些有意义的结论。

3.1.正在加载 train.csv 文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

train.csv 告知图像中哪个像素位置存在哪种类型的缺陷。它包含以下列:

  • **ImageId**:图像文件名。jpg 扩展
  • **ClassId**:缺陷的类型/等级,为【1、2、3、4】中的一种
  • **EncodedPixels**:以游程编码像素的形式表示图像中缺陷像素的范围(缺陷开始的像素数<空格>缺陷的像素长度)。
    例如“29102 12”表示缺陷从像素 29102 开始,总共有 12 个像素,即像素 29102、29103、………、29113 有缺陷。像素从上到下,然后从左到右进行编号:1 对应于像素(1,1),2 对应于(2,1),依此类推。
**train_df.ImageId.describe()**count              7095
unique             6666
top       ef24da2ba.jpg
freq                  3
Name: ImageId, dtype: object
  • 有 7095 个数据点对应于包含缺陷的 6666 张钢板图像。

3.2.分析 train_images 和 test_images 文件夹

训练和测试图像的数量 让我们了解一下训练和测试图像的比例,并检查有多少训练图像包含缺陷。

Number of train images :  12568
Number of test images :  5506
Number of non-defective images in the train_images folder: 5902
  • train_images 文件夹中的图像比 train.csv 中的唯一图像 id 还多。这意味着,并非 train_images 文件夹中的所有图像都具有缺陷 1、2、3、4 中的至少一个。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

列车数据中有缺陷和无缺陷图像的百分比

训练图像和测试图像的尺寸 让我们检查一下训练图像和测试图像的尺寸是否相同。如果没有,我们必须使它们大小相同。

{(256, 1600, 3)}
{(256, 1600, 3)}
  • 训练和测试文件夹中的所有图像大小相同(256×1600×3)

3.3.标签分析:ClassId

让我们看看训练数据是如何分布在各个类中的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Number of images in class 1 : **5150 (77.258 %)**
Number of images in class 2 : **897 (13.456 %)**
Number of images in class 3 : **801 (12.016 %)**
Number of images in class 4 : **247 (3.705 %)**
  • 数据集看起来不平衡。
  • 与其他类别的图像相比,具有类别 3 缺陷的图像的数量非常高。77%的缺陷图像具有 3 级缺陷。
  • 类别 2 是最少出现的类别,train.csv 中只有 3.7 %的图像属于类别 2。

注意,上述分析中的百分比值之和大于 100,这意味着一些图像具有属于一个以上类别的缺陷。

每幅图像标记的标签数量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Number of images having 1 class label(s): **6239 (93.594%)**
Number of images having 2 class label(s): **425 (6.376%)**
Number of images having 3 class label(s): **2 (0.03%)**
  • 大多数图像(93.6%)只有一类缺陷。
  • 只有 2 个图像(0.03%)具有 3 类缺陷的组合。
  • 其余的图像(6.37%)具有两类缺陷的组合。
  • 没有图像具有所有 4 类缺陷。

4.数据准备

在我们继续训练深度学习模型之前,我们需要将原始数据转换为可以输入模型的形式。此外,我们需要构建一个数据管道,它将执行所需的预处理,并为训练生成成批的输入和输出图像。

作为第一步,我们创建一个 pandas dataframe,包含列**ImageId**下的列车图像的文件名,以及一个或多个列**Defect_1****Defect_2, Defect_3, Defect_4** 下的 编码像素,这取决于 train.csv 中图像的ClassId*。没有任何缺陷的图像将这 4 列全部留空。以下是数据帧的示例:***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.1.列车,CV 分流 85:15

我会在 85%的训练图像上训练我的模型,并在 15%上验证。

(10682, 5)
(1886, 5)

4.2.用于将 RLE 编码像素转换为遮罩的实用函数,反之亦然

让我们想象一下每个班级的一些图片和他们的面具。钢板图像中属于缺陷区域的像素在掩模图像中用黄色表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的深度学习模型将钢板图像作为输入(X)并返回四个掩码(Y)(对应于 4 个类别)作为输出。这意味着,为了训练我们的模型,我们需要将成批的训练图像和它们相应的掩码输入到模型中。
我已经为 train_images 文件夹中的所有图像生成了遮罩,并将它们存储在名为 train_masks 的文件夹中。

4.3.使用 tensorflow.data 的数据生成器

以下代码是数据管道,用于对输入图像应用预处理、增强,并生成用于训练的批次。

4.4.定义度量和损失函数

我使用了一个混合损失函数,它是由*【BCE】*骰子损失 组合而成的。BCE 对应于每个像素的二进制分类(当与地面真实掩模比较时,0 表示该像素处缺陷的错误预测,1 表示正确预测)。骰子损失由(1 骰子系数)给出。
BCE 骰子损失= BCE +骰子损失

5.模型

有几种用于语义图像分割的模型/架构。在这个案例研究中,我尝试了其中的两个:i)U-Net 和 ii) Google 的 DeepLabV3+。

5.1。第一个切割解决方案:用于语义图像分割的 U-Net

这个模型是基于德国弗赖堡大学Olaf RonnebergerPhilipp FischerThomas Brox 于 2015 年发表的研究论文 U-Net:卷积网络用于生物医学图像分割 。在本文中,作者构建了一个优雅的架构,称为“全卷积网络”。他们已经将此用于电子显微镜堆栈和少数其他生物医学图像分割数据集中的神经元结构的分割。

5.1.1。架构
网络的架构如下图所示。它由收缩路径(左侧)和扩张路径(右侧)组成。扩展路径与收缩路径对称,使得网络的形状类似于英文字母“U”。由于这个原因,这个网络被称为 U-Net。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

U-net 架构(以最低分辨率的 32x32 像素为例)。每个蓝框对应一个多通道特征图。盒子的顶部标明了频道的数量。x-y 尺寸位于框的左下边缘。白色方框表示复制的要素地图。箭头表示不同的操作。[图片来源:弗赖堡大学 ]

收缩路径遵循卷积网络的典型架构。它由两个 3×3 卷积(无填充卷积)的重复应用组成,每个卷积后跟一个整流线性单元(ReLU)和一个跨距为 2 的 2×2 最大池操作,用于下采样。在每个下采样步骤中,特征通道的数量会翻倍。在此路径中,模型从图像中捕获重要的特征(类似于钢板中的缺陷)并丢弃不重要的特征,从而降低图像在每个卷积+最大池层的分辨率。
在扩展路径中,每一步都包括特征图的上采样,随后是将特征通道的数量减半的 2x2 卷积(上卷积)、与来自收缩路径的相应裁剪的特征图的连接,以及两个 3x3 卷积,每个卷积之后是 ReLU。由于每次卷积都会丢失边界像素,因此裁剪是必要的。在最后一层,使用 1x1 卷积将每个 64 分量的特征向量映射到所需的类别数(在我们的例子中为 4)。
为了精确定位,来自收缩路径的高分辨率特征被裁剪并与上采样输出相结合,并被馈送到后续卷积层,该卷积层将学习组装更精确的输出。

  • 不是在第一层中使用 64 个滤波器,而是仅使用 8 个滤波器(后续层中的滤波器数量也相应改变)。这导致较不复杂的模型,与具有 64 个过滤器的模型相比,训练更快。
  • 钢板图像的原始尺寸为 256x1600。大尺寸图像包含更多像素,因此需要更多卷积、池化等计算。由于计算资源的限制,我已经将图像的大小调整到一半(128x800)。
  • 我在每个卷积块后添加了一个小的 dropout = 0.2,以避免模型过度拟合。

U-Net 模型的代码可以在我的 GitHub 库中找到。

5.1.2。训练
我已经使用 Keras Adam optimizer 以 50 个时期的默认学习速率训练了模型。优化器试图最小化的损失函数是 bce_dice_loss ,在前面的第 4.4 节中定义。

随着培训的进行,我已经使用 Keras 模型检查点来监控验证骰子系数**,并保存具有最佳验证骰子系数分数的模型。TensorBoard 已被用于在训练时动态绘制损失和得分。**

5.1.3。训练图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.1.4。测试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由于 Kaggle 要求我们提交原始大小的预测,而不是一半大小的图像,我用输入大小= (256,1600,3)重建了模型,并加载了在 128×800 图像上训练的模型的权重。我这么做是因为 CNN 对于不同的输入大小是相当稳定的。

  • 当我在 Kaggle 上上传这个模型的预测时,Dice 系数得分相当不错。我在私人排行榜得到了 0.80943 的分数,在公共排行榜得到了 0.81369 的分数。

5.2.最终解决方案:DeepLab V3+

DeepLab 是谷歌在 2016 年设计并开源的最先进的语义分割模型。从那以后,对该模型进行了多次改进,包括 DeepLab V2、DeepLab V3 和最新的 DeepLab V3+。
DeepLab V3+基于 Google 于 2018 年发表的论文采用阿特鲁可分离卷积进行语义图像分割的编解码器

5.2.1。架构 与前面讨论的 U-Net 类似,DeepLab V3+也是一种编解码架构。主要区别在于它使用阿特鲁卷积而不是简单卷积。在这一节的后面,我们将了解更多关于阿特鲁卷积的知识。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DeepLab V3+架构【图片来源:原创研究论文

编码器模块通过在多个尺度上应用复杂的卷积来编码多尺度上下文信息,而简单的 effective 解码器模块沿着对象边界重新定义分割结果。

阿特鲁卷积
在二维信号的情况下,对于输出特征图 y 上的每个位置 i 和卷积滤波器 w ,如下所示对输入特征图
×
应用 atrous 卷积:**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中, r 决定了我们对输入信号进行采样的步距。注意,标准卷积是速率 r = 1 的特例。通过改变膨胀/收缩率值,滤波器的视野得到自适应修改。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标准卷积(左)vs 扩张或阿特鲁卷积(右)【GIF 来源: Sik-Ho Tsang 经由走向数据科学

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源: ResearchGate/CC

深度方向可分离卷积 深度方向可分离卷积通过将标准卷积分成两个子部分
i .深度方向卷积
ii,大大降低了计算复杂度。逐点卷积。

第一部分是深度方向卷积,为每个输入通道独立执行空间卷积。其后是逐点卷积(即 1×1 卷积),用于合并深度卷积的输出。

让我们借助一个例子来理解这一点。假设我们有一个由 3 个通道组成的 12×12 的图像。我们希望对该输入应用 5×5 的卷积,得到 8×8×256 的输出。

在第一部分,深度方向卷积,我们给输入图像一个不改变深度的卷积。我们通过使用 3 个形状为 5×5×1 的核来实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一部分:深度卷积【图片来源:齐-汪锋经由走向数据科学

逐点卷积之所以如此命名,是因为它使用 1×1 核或遍历每个单点的核。无论输入图像有多少通道,该内核都具有深度;在我们这里是 3 个。因此,我们通过我们的 8×8×3 图像迭代 1×1×3 核,得到 8×8×1 图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二部分:逐点卷积【图片来源:齐-汪锋经由走向数据科学

为了获得 8×8×256 的输出图像,我们需要简单地将 1×1×3 核的数量增加到 256。

编码器架构 DeepLab V3+编码器使用 例外架构 进行以下修改—

  • 我们在中间流程中添加更多的层
  • 所有的最大池操作都被具有步长的深度可分卷积所取代
  • 在每个 3×3 深度方向卷积之后,添加额外的批标准化和 ReLU。

编码器的输出是比输入特征图小 16 倍的特征图。这由解码器进行补偿,该解码器将编码器特征图上采样 4 倍两次(参考模型架构图)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DeepLab V3+编码器架构【图片来源:原创研究论文

5.2.2。训练 我已经使用 Keras Adam optimizer 以 47 个时期的默认学习率训练了模型。优化器试图最小化的损失函数是 bce_dice_loss ,在前面的第 4.4 节中定义

与 U-Net 的情况一样,我保存了具有最佳验证 dice_coefficient 的模型的权重。

5.2.3。训练图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,模型在第 37 个时期后开始过度拟合,验证分数没有进一步提高。因此,我使用了保存在第 37 纪元的模型权重。

5.2.4。测试 下图显示了来自验证数据的一些样本图像,以及它们的基本事实遮罩和预测遮罩。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这种情况下,使用原始输入大小(256,1600,3)重建模型并加载按一半大小训练的模型的权重效果不佳。我不得不使用不同的策略——我使用训练好的模型在 128×800 的图像上进行预测,并将预测的遮罩大小调整为 256×1600。这种方法在 DeepLab V3+上运行得非常好。

结果比较和最终提交

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我最后提交的是 DeepLab V3+,无论是私信还是公信都给了一个像样的分数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现有方法和改进

这个 Kaggle 比赛很受欢迎,许多人用不同的方法解决了这个问题。然而,他们中的大多数都使用了 U-Net 的某种变体或类似的编码器-解码器架构。

我使用 simple U-Net 作为我的第一个 cut 解决方案,它在测试数据上给出了不错的性能,这要归功于半尺寸上的训练和全尺寸策略上的预测。

我已经实现了 DeepLab V3+,这是一种从零开始的语义图像分割技术。帮我把分数从 0.809 提高到 0.838。

未来的工作

  • 一些超参数调整可以用 U-Net 来完成。
  • 可以尝试其他图像分割架构,如 U-Net++、SegNet 和 Mask R-CNN。
  • 可以利用在大数据集上训练的各种骨干的迁移学习的思想。

结论

谢谢你看了这么长的博客,感谢你的耐心。我非常喜欢写它,希望你也喜欢读它。

我跳过了大部分代码,因为我不想用代码淹没读者。请参考我的 GitHub 库获取完整的 Keras 代码。

如果您有任何疑问、建议或讨论,请随时在下面的评论区提出。我将尽我所知努力解决这些问题。
你可以在 LinkedIn 上联系我,这是我的简介

参考

  1. https://www.kaggle.com/c/severstal-steel-defect-detection/
  2. https://arxiv.org/abs/1505.04597v1
  3. https://arxiv.org/abs/1802.02611v3
  4. https://www . analyticsvidhya . com/blog/2019/02/tutorial-semantic-segmentation-Google-deep lab/
  5. https://arxiv.org/abs/1610.02357
  6. https://github . com/MLearing/Keras-deep lab-v3-plus/blob/master/model . py
  7. https://www.appliedaicourse.com/

用 5 行代码对 150 类对象进行语义分割

原文:https://towardsdatascience.com/semantic-segmentation-of-150-classes-of-objects-with-5-lines-of-code-7f244fa96b6c?source=collection_archive---------16-----------------------

用 PixelLib 对 150 类对象进行语义分割

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在可以使用带有 PixelLib 的 ade20k 模型对 150 类对象进行分割。Ade20k 模型是在 ade20k 数据集上训练的 deeplabv3+模型,ade 20k 数据集有 150 个对象类。感谢tensorflow deep lab 的模型动物园,我从它的 tensor flow 模型检查点提取了 ade20k 模型。

安装最新版本的 tensorflow (tensorflow 2.0)和:

  • pip3 安装张量流

安装 Pixellib:

  • pip3 安装 pixellib —升级

用 PixelLib 实现语义分割:

用 deeplabv3+模型实现语义切分的代码在 ade20k 数据集上进行训练。

我们将观察每一行代码:

import pixellib
from pixellib.semantic import semantic_segmentation segment_image = semantic_segmentation()

执行语义分割的类是从 pixelLib 导入的,我们创建了该类的一个实例。

segment_image.load_ade20k_model(“deeplabv3_xception65_ade20k.h5”)

在上面的代码中,我们加载了在 ade20k 上训练的用于分割对象的 xception 模型。模型可以从这里下载。

segment_image.segmentAsAde20k(“path_to_image”, output_image_name = “path_to_output_image)

我们加载了该函数来对图像执行分割。该函数有两个参数…

  • 路径至图像:- 这是待分割图像的路径。
  • 输出图像名称:- 这是保存分割图像的路径。它将保存在您当前的工作目录中。

Sample.jpg

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:W ikicommons (CC0)作者 Acabashi

注: 使用 Ade20k 模型,可以用 PixelLib 对室内和室外场景进行语义分割。

输出图像

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

室外场景的语义分割

分割后保存的图像,图像中的物体被分割。如果您愿意,可以在图像上应用分段覆盖。

segment_image.segmentAsAde20k("sample.jpg", output_image_name = "image_new.jpg", overlay = True)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们添加了额外的参数叠加,并将其设置为,我们获得了一个对象上带有分割叠加的图像。

Sample2.jpg

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:W ikicommons 。由卡伦·马尔达尔

segment_image.segmentAsAde20k(“sample2.jpg”, output_image_name = “image_new2.jpg")

输出图像

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

室内场景的语义分割

PixelLib 的特殊用途可能需要您返回分段输出的数组:

使用代码获得分段输出的数组

segmap, output = segment_image.segmentAsAde20k()

您可以测试获取数组的代码,并通过修改下面的语义分段代码打印出输出的形状。

  • 使用以下代码获得 segmap 和分段覆盖图的数组,
segmap, seg_overlay = segment_image.segmentAsAde20k(overlay = True)

基于 ADE20K 模型的视频分割

我们将在下面解释每一行代码。

import pixellibfrom pixellib.semantic import semantic_segmentationsegment_video = semantic_segmentation()

我们导入了用于执行语义分段的类,并创建了该类的一个实例。

segment_video.load_ade20k_model("deeplabv3_xception65_ade20k.h5")

我们加载了在 ade20k 数据集上训练的 xception 模型来执行语义分割,它可以从这里下载。

segment_video.process_video_ade20k("video_path",  overlay = True, frames_per_second= 15, output_video_name="path_to_output_video")

我们调用函数对视频文件进行分割。

它采用以下参数:-

  • video_path :这是我们要分割的视频文件的路径。
  • *每秒帧数:*该参数用于设置保存的视频文件每秒帧数。在这种情况下,它被设置为 15,即保存的视频文件每秒将有 15 帧。
  • 输出 _ 视频 _ 名称:这是保存的分段视频*的名称。*输出的视频将保存在您当前的工作目录中。

样本 _ 视频

输出视频

这是使用 ade20k 模型保存的分段视频。

现场摄像机的语义分割。

我们可以使用相同的模型在相机上执行语义分割。这可以通过对用于处理视频文件的代码进行少量修改来实现。

import cv2capture = cv2.VideoCapture(0)

我们导入了 cv2 并包含了捕捉相机帧的代码。

segment_video.process_camera_ade20k(capture,  overlay = True, frames_per_second= 15, output_video_name="output_video.mp4", show_frames= True,frame_name= "frame")

在执行分割的代码中,我们将视频的文件路径替换为捕获,即我们正在处理摄像机捕获的帧流,而不是视频文件。为了显示摄像机画面,我们添加了额外的参数:

  • *显示帧:*该参数处理分段摄像机帧的显示,按 q 退出帧的显示。
  • *帧名:*这是显示的摄像机帧的名称。

展示 pixelLib 使用 ade20k 模型对摄像机输入进行语义分割的输出的演示。

*干得好!*它成功地把我分段了。

访问 PixelLib 的官方 GitHub 库。

访问 PixelLib 的官方文档

通过以下方式联系我:

电子邮件:olafenwaayoola@gmail.com

推特: @AyoolaOlafenwa

脸书:阿尤拉·奥拉芬娃

Linkedin: 阿尤拉·奥拉芬娃

如果您喜欢这篇文章,您会喜欢阅读关于 PixelLib 的其他文章:

用 5 行代码实现图像分割

[## 用 5 行代码实现图像分割

用 PixelLib 进行语义和实例分割。

towardsdatascience.com](/image-segmentation-with-six-lines-0f-code-acb870a462e8)

用 5 行代码实现视频分割

[## 用 5 行代码实现视频分割

视频的语义和实例分割。

towardsdatascience.com](/video-segmentation-with-5-lines-of-code-87f798afb93)

使用 Django API——DeepLabV3 进行语义分割

原文:https://towardsdatascience.com/semantic-segmentation-using-a-django-api-deeplabv3-7b7904ddfed9?source=collection_archive---------53-----------------------

构建一个 Django API,使用语义分段执行后台定制

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sole D’Alessandro G. 在 Unsplash 上拍摄的原始照片

介绍

图像分割一直是热门话题。涉及分割的各种用例出现在许多不同的领域,机器视觉、医学成像、物体检测、识别任务、交通控制系统、视频监控等等。这些智能系统背后的直觉是捕捉形成图像的各种组件,从而教会计算机视觉模型掌握更多洞察力,更好地理解场景和背景。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左边是 Melody JacobUnsplash 上的原图,右边是分段版

常用的两种图像分割类型是:

  • 语义分割:识别图像中的不同类别,并相应地分割
  • 实例分割:预先确定图像中的不同类别,识别每个类别包含的实例数量。图像被分解成与模型被训练的不同类实例相关的多个标记区域。

在本文中,我将使用 Google DeepLab V3 分割模型的 Pytorch 实现来自定义图像的背景。其目的是分割前景,并将其与其余部分分离,同时用一幅完全不同的图片替换剩余的背景。该模型将通过 Django REST API 提供服务。

概观

  1. DeepLab V3 的一点背景知识
  2. 使用 Pytorch 的 DeepLab V3-Resnet101 实现
  3. 设置 Django API
  4. 结论

你可以在我的 Gihut repo 下查看这个项目的全部代码。

[## aymanehachham/背景-定制

在 GitHub 上创建一个帐户,为 aymanehachham/后台定制开发做贡献。

github.com](https://github.com/aymanehachcham/Background-Customization)

1.DeepLab V3 的一点背景知识

分割模型使用完全卷积神经网络 FCNN 在之前的图像检测阶段,将遮罩和边界放置到位,然后通过深度极大的网络处理输入,在该网络中,累积的卷积和汇集会导致图像的分辨率和质量显著降低,因此产生的结果会损失大量信息。DeepLab 模型利用阿特鲁卷积和阿特鲁空间金字塔池(ASPP)架构解决了这一挑战。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同分割模型之间的差异和比较,鸣谢:Francisco Massa, Torchvision 0.3:分割、检测模型、新数据集等

在 DeepLab 架构的正向流程中涉及四个主要阶段:

  • 用主干模型提取图像特征。我们案例中使用的主干是 Resnet 101 对象检测模型,作为第一个卷积管道来捕捉和屏蔽重要的特征图。
  • 为了控制输出特征图的大小,在主干的最后几层中使用阿特鲁卷积。
  • 在最后阶段,ASPP 架构对输出图像的不同像素进行分类,并通过 1 x 1 卷积层进行处理,以恢复其原始大小。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有 atrous 卷积(ASPP)的并行模块,增强了图像级特征,信用: 重新思考用于语义图像分割的阿特鲁卷积

2.使用 Pytorch 的 DeepLab V3-Resnet101 实现

让我们通过创建一个包装原始 DeepLab V3 模型的 Pytorch 模块来开始这个过程。最初,Pytorch 团队已经提出了他们在 COCO 数据集上预先训练的 Google DeepLab V3 架构的实现,以及可供选择的各种主干。对于我们的特定任务,我们将使用可从torchvision.models.segmentation API 包轻松加载的 deeplabv3-resnet101 预训练模块。

创建您的 python 虚拟环境

使用pip virtualenv设置您的 python 虚拟环境,并安装所有需要的包:

。指定 python 虚拟环境的路径:

virtualenv absolute/path/to/virtual/env/pytorch-en

**二。**激活您的虚拟环境:

source /absolute/path/pytorch-env/bin/activate

**三。**安装所需的库:

pip install torch torchvision

pip install opencv-python

pip install numpy

pip install Pillow=2.2.1

实现数据集示例

在编写 Pytorch 包装器之前,您需要定义一个 Pytorch 数据集类,用多种方法将输入图像文件采样到一个高级对象中。这样,模型将处理被采样的对象,而不是转换和处理所有相关的文件。

def __init__(self, root_dir, image_file, device)init 方法负责将图像文件转换为Pillow图像对象,然后转换为 torch 张量,在内部定义一组预处理规则,将初始张量转换为更适合 deeplabv3 模型的输入。目的是生成一个形状良好的张量,以避免图像文件和模型之间任何令人讨厌的不匹配。

为 DeepLab V3 推理创建 Pytorch 包装器模块

SemanticSeg(nn.Module)包装器模块有三个主要方法:

  • def __init__(self, pretrained, device)用预训练值初始化加载一个已经训练好的 deeplabv3-resnet101 模块,设备参数指定处理推理时的 CPUGPU 加速。
  • def forwar(self, input)SegmentationSample输入应用模块推理,并返回预测张量。
  • def load_model(self, pretrained=False)torchvision.models.segmentation API 加载 deeplabv3-resnet101 模块。

添加一个方法来帮助处理结果。请记住,输出张量有 21 个通道与模型训练的每个目标类的预测结果相匹配。因此,我们需要解码张量形状,以便能够输出正确的图像结果。

background_custom(self, input_image, source, background_source, channel=21)该方法采用具有[1, 21, H, W]形状的输出张量图像、图像文件的路径、背景图像文件的路径以及已经设置为 21 的通道数。目标是从输出中提取人物通道( class 15 ),排除所有标记为背景的剩余通道,最后将定义的背景与新的图像源合并。

设置 Django API

我们将使用 Django REST 框架为我们的模型构建一个简单的 API。关键的想法是配置所有需要的文件,包括模型、路由管道和视图,这样我们就可以通过一个简单的转发 POST 和 GET 请求轻松地测试推理。

你也可以遵循 Bennett Garner 的教程,它详细介绍了让你的 API 运行的所有必要步骤。

[## 用 Django REST 框架构建您的第一个 REST API

在 Django 中构建 REST API 非常简单。在本教程中,我们将逐步完成您的第一个 API

medium.com](https://medium.com/swlh/build-your-first-rest-api-with-django-rest-framework-e394e39a482c)

通常,API 是数据库的一个窗口。API 后端处理数据库查询和响应格式化。您收到的是一个静态响应,通常是 JSON 格式的,是您请求的任何资源的静态响应。

建立 Django 项目

安装djangodjangorestframework : pip install django pip install djangorestframework

前往你将要工作的地方,开始你的项目:django-admin startproject semanticsegmentation

semanticsegmentation/文件夹中,您将找到一个manage.py脚本来运行您的 localhost 项目:python manage.py runserver

在 127.0.0.1:8080 港口,您应该登陆欢迎 Django 页面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Django 本地主机 127.0.0.1:8080

从现在开始,你的 Django 后端已经正确设置并运行了。

创建您的 API 应用程序

您将在前一个文件夹中生成一个专门用于 API 管理的新应用程序。

运行以下命令创建文件夹:python manage.py startapp api

向项目文件夹注册新的 API app:转到semanticsegmentation/settings.py添加 API 的路径,

INSTALLED_APPS = [
'api.apps.ApiConfig',
'django.contrib.admin',
'django.contrib.auth',
...
]

定义您的模型并使用 Django ORM 管理它们

现在,为了从 Django 数据库中保存和检索对象,您需要构建一个模型类来表示我们将在 API 请求中处理的实体。对于我们的特殊情况,我们需要张贴图像,应用模型推理来获得语义过滤器,然后恢复它们。因此,最合适的是一个具有两个属性的类,用于将输入和输出图像文件上传到服务器,一个特定的 id models.UUIDField链接到每个存储的图像,一个名称CharField用于标识它们,并且可选地,一个DateTimeField用于保存它们被存储的确切时间。

在单独的脚本中定义处理文件上传逻辑的方法:

get_input_image_path

get_output_image_path

将您的更改迁移到数据库:python manage.py makemigrations

python manage.py migrate

定义与模型类匹配的序列化程序,一个序列化程序用于输入图像,另一个用于输出结果:

在管理站点admin.site.register(ImageSegmentation)注册你的新模型

建立你的观点

我们将创建简单的 get 和 post 方法来处理简单的操作:

  • POST api_view :发送两个文件图像,应用模型推理进行处理,保存到对应的输入输出文件夹。

  • GET api_view: 检索保存的图像,并将其作为静态资源。

配置 URL 端点并运行您的 API

  1. semanticsegmentation/urls.py文件中设置 url 模式:
urlpatterns = [
   path('admin', admin.site.urls),
   path(r'bg_custom_api', include('API.urls'))
]

2.在api.urls文件中定义 API 端点的地址:

urlurlpatterns = [
 path(r'test/', views.test_api, name='test_api_communication'),
 path(r'images/', views.get_images, name='get_images'),
 path(r'api/', views.run_inference, name='run_inference_on_images'),
]

在邮递员上运行您的 API

下载 Postman 并开始在本地测试您的 API。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

截屏(邮递员)127 . 0 . 0 . 1 上的 post 请求:8000/api/inference/

  • 在**127 . 0 . 0 . 1:8080/API/gray/**上运行灰度推断

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上角的 Calvin LupiyaUnsplash 上的原始照片,其右侧为灰度版本,左下角的 Unsplash 上的 CDC 的原始彩色照片,其右侧为分段版本。

  • 在**127 . 0 . 0 . 1:8080/API/inference/**上运行后台自定义推理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乔安娜·尼克斯-沃克普在 Unsplash 上的照片 Kiana BosmanUnsplash 上的照片

结论

一旦你设置了 API 正确运行所需的所有组件,你就可以开始用 DeepLab V3 尝试一些非常酷的功能,包括背景自定义、背景灰度、背景模糊以及我相信你能想到的许多其他创造性的东西。

在为模型服务构建 API 之后,一个自然的步骤是开发一个小的移动应用程序,作为与 Django 后端交互的客户端,因此您可以测试并获取之前看到的所有结果。我愿意在我的下一篇文章中考虑这个选项,所以请继续关注第二部分。

如果您对代码有任何疑问,请与我联系,不要犹豫,给我发电子邮件到aymanehachchaming@gmail.com

本文的整个项目代码可以在我的 GitHub repo 中找到:

[## aymanehachham/背景-定制

在 GitHub 上创建一个帐户,为 aymanehachham/后台定制开发做贡献。

github.com](https://github.com/aymanehachcham/Background-Customization)

本文的参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值