【水下图像增强】Enhancing Underwater Imagery using Generative Adversarial Networks

news2024/11/16 9:37:46
原始题目Enhancing Underwater Imagery using Generative Adversarial Networks
中文名称使用 GAN 增强水下图像
发表时间2018年1月11日
平台ICRA 2018
来源University of Minnesota, Minneapolis MN
文章链接https://arxiv.org/abs/1801.04011
开源代码官方:https://github.com/IRVLab/UGAN (tensorflow )

摘要

自动水下航行器(Autonomous underwater vehicles (AUVs))依靠各种传感器——声学、惯性和视觉(acoustic, inertial and visual)——进行智能决策。由于其 非侵入性、被动性和高信息量,视觉(non-intrusive, passive nature, and high information content) 是一种有吸引力的传感方式,特别是在较浅的深度。然而,光的 折射和吸收( refraction and absorption)、水中悬浮粒子(suspended particles)、颜色失真(color distortion)等因素会影响视觉数据的质量,导致图像噪声和失真。因此,依赖视觉感知的 AUVs 面临着困难的挑战,因此在视觉驱动的任务中表现不佳。

本文提出了一种使用 GANs 来提高水下视觉场景质量的方法,其目标是 在 自主流程(autonomy pipeline) 中进一步改善视觉驱动行为的输入。此外,我们展示了最近提出的方法如何能够生成用于这种水下图像恢复的数据集。对于任何视觉引导的水下机器人来说,这种改进可以通过强大的视觉感知来提高安全性和可靠性。为此,我们提出了定量和定性的数据,这些数据表明,通过所提出的方法 校正的图像产生了更有视觉吸引力的图像,也为 diver 跟踪算法提供了更高的精度。

5. 结论

提出了一种利用生成对抗网络增强水下彩色图像的方法。展示了使用 CycleGAN 生成配对图像数据集,为所提出的恢复模型提供 训练集。定量和定性的实验结果验证了该方法的有效性,使用 diver 跟踪算法对校正后的潜水员图像序列进行跟踪,结果表明,与未校正的图像序列相比,校正后的 diver 图像序列具有更高的准确性。

未来的工作将专注于从水下物体中创建更大、更多样化的数据集,从而使网络更具泛化性。用粒子和灯光效果等噪声来增强 CycleGAN 生成的数据,可以提高数据集的多样性。还打算研究一些不同的定量性能指标来评估我们的方法。

1. 引言

随着新型平台、传感器和推进机制的出现,水下机器人已经成为自主领域机器人的一个稳步增长的子领域。自主水下航行器通常配备有各种传感器,而视觉感知由于其非侵入、被动和节能的特性,是一个有吸引力的选择。珊瑚礁监测[28]、深海探测[32]和海底测绘[5]是 visually-guided AUVs 和 ROVs (Remotely Operated Vehicles) 广泛使用的一些任务。这些机器人的使用确保了人类不会暴露在水下探索的危险中,因为他们不再需要冒险到深度(这是过去进行此类任务的方式)。尽管水下环境具有使用视觉的优势,但水下环境对视觉感知提出了独特的挑战,因为悬浮粒子的折射、吸收和散射会极大地影响光学。例如,由于红色波长很快被水吸收,图像往往具有绿色或蓝色色调。当越深,这种效果恶化,因为越来越多的红色色调被吸收。这种失真在本质上是极其非线性的,并且受到许多因素的影响,例如光线的数量(阴天与阳光,操作深度),水中粒子的数量,一天中的时间和正在使用的相机。这可能会导致分割、跟踪或分类等任务的困难,因为它们间接或直接使用颜色。

由于颜色和光照开始随着深度的变化而变化,基于视觉的算法需要具有通用性,以便在机器人可能操作的深度范围内工作。由于获取各种水下数据以训练视觉系统的高成本和困难,以及引入的大量噪声,算法可能(并且确实)在这些不同的领域表现不佳。图1 显示了水下环境中可能出现的视觉场景的高变化性。解决这个问题的一个步骤是能够恢复图像,使它们看起来像是在水面上,即 校正颜色并从场景中去除悬浮颗粒。通过进行 多对一(非水下的) 映射 ,即从 水下领域 到 非水下领域(图像在水面上的样子),难以跨多种形式噪声执行的算法 可能只能聚焦一个干净的领域。

drawing
图1: 自然 和 人工制品(我们的水下机器人) 的水下图像样本,显示了可能发生的失真的多样性。随着图像中相机到物体距离的变化,不同图像之间的 失真程度和褪色程度(distortion and loss of color varies) 也不同。

深度神经网络已经被证明是强大的非线性函数逼近器,特别是在视觉[17]领域。通常,这些网络需要大量的数据,要么标记为 ground truth.,要么与 ground truth. 配对。对于灰度图像[33]的自动着色问题,由于任何彩色图像都可以转换为黑白图像,因此现成的训练数据是成对的然而,水下图像受到颜色或其他现象的扭曲,缺乏 ground truth,这是采用类似方法进行校正的主要障碍本文提出一种基于 Generative Adversarial Networks, GANs 的水下视觉场景质量提升技术,旨在提升自主水下机器人视觉驱动行为的性能

我们使用最近提出的 CycleGAN[35] 方法,该方法学习在没有图像对的情况下将图像从任意域 X 转换到另一个任意域 Y,作为生成配对数据集的一种方法。 通过让 X 是一组 未失真的(undistorted) 水下图像,Y 是一组 失真的(distorted) 水下图像,我们可以生成一个看起来在水下的图像,同时保留 ground truth 。

2. 相关工作

虽然最近已经有许多成功的自动着色方法[33,11],但大多数都 专注于将灰度图像转换为彩色的任务

相当多的方法使用基于物理的技术直接模拟光的折射[15]。

针对水下图像的颜色恢复,[29]的工作采用 马尔可夫随机场的能量最小化公式

与本文提出的工作最相似的是最近提出的 WaterGAN[20],它使用对抗性方法来生成逼真的水下图像。他们的生成器模型可以分为三个阶段:

  • 1)衰减,这说明了光的范围相关衰减。
  • 2)散射,模拟由光子向图像传感器散射引起的雾霾效果;
  • 3)渐晕,在图像角点上产生阴影效果,这种效果可以由特定的相机镜头引起。

与我们的工作不同的是,他们使用 GAN 来生成水下图像,并严格使用 Euclidean loss 来进行颜色校正

我们两者都使用 GAN。此外,它们在 WaterGAN 训练期间需要深度信息,这通常很难获得,特别是在水下自主机器人应用中。本文工作在整个过程中只需要两个独立域(例如 水下 和 陆地 )中的物体的图像。

最近在生成模型,特别是 GANs 方面的工作,在 修复[24]、风格迁移[8]和图像到图像转换 等领域显示了巨大的成功[14,35]。这主要是因为它们能够提供比 欧氏距离 更有意义的损失,而 欧氏距离 已被证明会产生模糊的结果。本文将 估计水下图像真实外观的问题 构建 为 成对图像到图像的转换问题使用生成对抗网络(GANs)作为生成模型(详细信息请参见第 3.2节)。与[14]的工作非常类似,我们使用来自 两个域的图像对 作为输入和 ground
truth

3. 方法

受颜色或其他环境影响而失真的水下图像缺乏 ground truth,这是以往彩色化方法所必需的。此外,水下图像中的失真是高度非线性的; 简单的方法,如向图像添加色调,不能捕获所有的依赖关系。本文提出使用 CycleGAN 作为失真模型,以生成用于训练的成对图像。给定一个 无失真的水下图像域 和一个 有失真的水下图像域,CycleGAN 能够进行风格迁移。给定一个 未失真的图像,CycleGAN 将其失真,使其看起来像是来自 失真图像的域。然后 在我们的算法中使用这些对进行图像重建。

无失真的水下图像域: 没有水下那种颜色的图像
失真的水下图像域: CycleGAN 生成的图像

3.1 数据生成

深度、光照条件、相机模型和水下环境中的物理位置都是影响 图像失真量 的因素。在某些条件下,水下图像可能有很小的失真,或者完全没有失真。 I C I^C IC 为无失真的水下图像, I D I^D ID 为 有失真的水下图像。我们的目标是学习函数 f : I D → I C f: I^{D} \rightarrow I^{C} f:IDIC 由于收集水下数据的困难,往往不仅 I D I^D ID I C I^C IC 不存在,而且 二者都不存在。

为了避免图像对不足的问题,我们使用 CycleGAN 从 I C I^{C} IC 生成 I D I^{D} ID,它给我们一个 成对的图像数据集。给定两个数据集 X 和 Y,其中 $I^C∈X $和 I D ∈ Y I^D∈Y IDY, CycleGAN 学习一个映射 F : X → Y F: X→Y F:XY。图2 显示了从CycleGAN 生成的配对样本。从这个配对的数据集中,我们训练一个生成器 G 来学习函数 f : I D → I C f: I^D→I^C f:IDIC。应该注意的是,在 CycleGAN 的训练过程中,它同时学习映射 G : Y → X G: Y→X G:YX,这与 f f f 类似。在第 4 节中,我们将 CycleGAN 生成的图像与通过我们的方法生成的图像进行比较。

drawing
图2: ground truth 和 CycleGAN 生成的 失真的(distorted) 图像的配对样本。第一排: Ground truth。下一行: Generated samples。

3.2 对抗网络

在机器学习文献中,生成式对抗网络(GANs)[9] 代表了一类基于博弈论的生成模型,其中 生成器网络与对手竞争。从分类的角度来看,生成器网络 G 产生的实例会主动试图 “欺骗” 鉴别器网络 d。目标是让鉴别器网络能够区分来自 数据集的“真”实例 和生成器网络产生的 “假”实例。在我们的例子中,以图像 I D I^D ID 为条件,生成器被训练生成一个图像来试图欺骗鉴别器,鉴别器被训练来区分 失真和非失真的水下图像。在原始 GAN 公式中,我们的目标是解决 minimax 问题:

min ⁡ G max ⁡ D E I C ∼ p train  ( I C ) [ log ⁡ D ( I C ) ] + E I D ∼ p g e n ( I D ) [ log ⁡ ( 1 − D ( G ( I D ) ) ) ] (1) \begin{aligned} \min _{G} \max _{D} & \mathbb{E}_{I^{C} \sim p_{\text {train }}\left(I^{C}\right)}\left[\log D\left(I^{C}\right)\right]+ \\ & \mathbb{E}_{I^{D} \sim p_{g e n}\left(I^{D}\right)}\left[\log \left(1-D\left(G\left(I^{D}\right)\right)\right)\right] \end{aligned}\tag{1} GminDmaxEICptrain (IC)[logD(IC)]+EIDpgen(ID)[log(1D(G(ID)))](1)

注意为了表示法的简单性,我们将进一步省略(omit) I C   ∼   P t r a i n ( I C ) \begin{array}{l}{{I^{C}\:\sim\:{\mathcal{P}}_{t r a i n}\left(I^{C}\right)}}\end{array} ICPtrain(IC) I D    ∼    ⁣ P g e n ( I D ) I^{D}\;\sim\;\!P_{g e n}\big(I^{D}\big) IDPgen(ID)。在这个公式中,discriminator 被假设为具有 sigmoid 交叉熵损失函数的分类器,这在实践中可能会导致消失梯度和模式崩溃(collapse)等问题。

如[2]所示,随着 判别器 的提升,生成器的梯度消失,使其难以或不可能进行训练。当生成器 “坍缩” 到单个点时,就会发生模式坍缩,仅用一个实例欺骗 判别器。为了说明模式崩溃的影响,假设 GAN 被用于从 MNIST[18]数据集生成数字,但它只生成了相同的数字。实际上,我们期望的结果是生成所有数字的不同集合。为此,最近有许多方法为 判别器 假设了不同的损失函数[21,3,10,34]。本文关注 Wasserstein GAN (WGAN)[3]公式,提出通过使用 Kantorovich-Rubinstein 对偶(duality)[31]构造一个值函数 来使用 Earth-Mover 或 Wasserstein-1 距离 W。在这个公式中,W 被近似给定一组 k-Lipschitz 函数 f 建模为神经网络。为了确保 f 是 k-Lipschitz,判别器 的权重被剪切到某个范围[−c, c]。不像[3]那样裁剪网络权重,本文采用带梯度惩罚的 Wasserstein GAN with gradient penalty (WGAN-GP)[10],通过对 判别器 输出相对于输入的梯度范数实施软约束来确保 Lipschitz 约束。

L W G A N ( G , D ) = E [ D ( I C ) ] − E [ D ( G ( I D ) ) ] + λ G P E x ^ ∼ P x ^ [ ( ∣ ∣ ∇ x ^ D ( x ^ ) ∣ ∣ 2 − 1 ) 2 ] (2) \begin{aligned}\mathcal{L}_{WGAN}(G,D)=\mathbb{E}[D(I^C)]-\mathbb{E}[D(G(I^D))]+\\ \lambda_{GP}\mathbb{E}_{\hat{x}\sim\mathbb{P}_{\hat{x}}}\left[(||\nabla_{\hat{x}}D(\hat{x})||_2-1)^2\right]\end{aligned}\tag{2} LWGAN(G,D)=E[D(IC)]E[D(G(ID))]+λGPEx^Px^[(∣∣x^D(x^)21)2](2)

[2] Martin Arjovsky and L´eon Bottou. Towards principled methods for training generative adversarial networks. arXiv preprint arXiv:1701.04862, 2017.

其中 P x ^ \mathbb{P}_{\hat{x}} Px^ 被定义为来自 真实数据分布 和 生成器分布 的 点对 之间的直线上的样本,而 λGP 是一个加权因子。为了给 G 一些 ground truth 的感觉,以及捕获图像中的 low level frequencies ,我们还考虑了 L1 损失:

L L 1 = E [ ∣ ∣ I C − G ( I D ) ∣ ∣ 1 ] (3) \mathcal{L}_{L1}=\mathbb{E}[||I^C-G(I^D)||_1]\tag{3} LL1=E[∣∣ICG(ID)1](3)

结合这些,我们得到了我们网络的最终目标函数,我们称之为 Underwater GAN (UGAN):

L U G A N ∗ = min ⁡ G max ⁡ D L W G A N ( G , D ) + λ 1 L L 1 ( G ) (4) \mathcal{L}_{U G A N}^{*}=\operatorname*{min}_{G}\operatorname*{max}_{D}\mathcal{L}_{W G A N}(G,D)+\lambda_{1}\mathcal{L}_{L1}(G)\tag{4} LUGAN=GminDmaxLWGAN(G,D)+λ1LL1(G)(4)

3.3 图像梯度差损失 Image Gradient Difference Loss

通常情况下,生成模型会产生模糊的图像。本文探索了一种策略,通过直接惩罚 生成器 中图像梯度预测的differences 来锐化这些预测,如[22]提出的。给定一个 ground truth 图像 I C I^C IC,一个预测图像 I P = G ( I D ) I^{P}=G(I^{D}) IP=G(ID), α 是一个大于等于 1 的整数, Gradient Difference Loss (GDL) 为:

L G D L ( I C , I P ) = ∑ i , j ∣ ∣ I i , j C − I i − 1 , j C ∣ − ∣ I i , j P − I i − 1 , j P ∣ ∣ α + ∣ ∣ I i , j − 1 C − I i , j C ∣ − ∣ I i , j − 1 P − I i , j P ∣ ∣ α (5) \begin{array}{c}{\mathcal{L}_{G D L}(I^{C},I^{P})=}\\ {\sum_{i,j}||I_{i,j}^{C}-I_{i-1,j}^{C}|-|I_{i,j}^{P}-I_{i-1,j}^{P}||^{\alpha}+}\\ {||I_{i,j-1}^{C}-I_{i,j}^{C}|-|I_{i,j-1}^{P}-I_{i,j}^{P}||^{\alpha}}\\ \end{array}\tag{5} LGDL(IC,IP)=i,j∣∣Ii,jCIi1,jCIi,jPIi1,jPα+∣∣Ii,j1CIi,jCIi,j1PIi,jPα(5)

在我们实验中,考虑 GD L时,将网络表示为 UGAN-P,可以表示为:

L U G N - P ∗ = min ⁡ G max ⁡ D L W G A N ( G , D ) + λ 1 L L 1 ( G ) + λ 2 L G D L (6) \begin{aligned}\mathcal{L}^*_{UGN\text{-}P}=\min\limits_{G}\max\limits_{D}\mathcal{L}_{WGAN}(G,D)+\\ \lambda_{1}\mathcal{L}_{L1}(G)+\lambda_{2}\mathcal{L}_{GDL}\end{aligned}\tag{6} LUGN-P=GminDmaxLWGAN(G,D)+λ1LL1(G)+λ2LGDL(6)

3.4 网络架构

所提出的 生成器网络 是一个 全卷积编码器-解码器,类似于[14]的工作,由于输入和输出之间的结构相似性,它被设计为一个" U-Net "[26]。编码器-解码器网络 通过卷积对输入进行下采样(编码)到较低维度的嵌入,然后通过转置卷积对该嵌入进行上采样(解码)以重建图像。使用 “U-Net” 的优势来自于显式地保留 编码器产生的空间依赖关系,而不是依赖嵌入来包含所有信息。 这是通过添加 “skip connections” 来完成的,它将编码器中的卷积层 i i i 产生的激活 concatenate 到 解码器中的 转置卷积层 n − i + 1 的输入,其中 n 是网络中的总层数。我们生成器中的每个卷积层都使用 kernel size 为4 × 4,stride 为2。网络编码器部分的卷积之后是 batch normalization[12]和斜率为 0.2 的leaky ReLU activation,而解码器中的转置卷积之后是 ReLU activation 23。解码器的最后一层除外,它使用 TanH 非线性来匹配输入分布[- 1,1]。最近的工作提出了 Instance Normalization[30],以提高 图像到图像翻译任务 的质量,但我们没有观察到额外的好处。

我们的全卷积判别器是模仿[25]的,只是没有使用 batch normalization。 这是因为 WGAN-GP 单独惩罚了每个输入的 判别器 梯度的范数,batch normalization 将会是 无效的。[10]的作者推荐 layer normalization [4],但我们没有发现显著的改进。我们的 判别器 被建模为 PatchGAN[14, 19],它在 图像 patches 的 level 上进行判别。与输出真假对应标量值的常规 判别器 不同,我们的 PatchGAN 判别器输出 32 × 32 × 1 特征矩阵,它为 high level frequencies 提供了度量标准。

4. 实验

4.1 数据集

我们使用 Imagenet[7] 的几个子集 来训练和评估我们的方法。还对从 YouTubeTM 上拍摄的水下潜水员视频进行了频率和空间域 diver tracking 算法的评估。选取 含有水下图像的 Imagenet 子集 用于CycleGAN的训练,并基于 视觉检查(就是人看吧) 手动将其分为两类。设 X 为无失真的水下图像集合,Y 为有失真的水下图像集合。X 包含 6143 张图像,Y 包含 1817 张图像。然后,我们训练 CycleGAN 来学习映射 F: X→Y,这样来自 X 的图像似乎来自 Y。最后,我们用于训练数据的 图像对 是通过用 F 失真 X 中的所有图像来生成的。图2 显示了样本训练对。在与 CycleGAN 进行比较时,使用了从 FlickrTM 获取的 56 幅图像作为测试集。

4. 评估

在 CycleGAN 生成的 图像对 上训练 UGAN 和 UGAN-P,并在来自 测试集 Y 的图像上进行评估。请注意,这些图像不包含任何 ground truth,因为它们是来自 Imagenet 的原始失真图像。用于训练和测试的图像大小为 256 × 256 × 3,归一化在[−1,1]之间。图3 显示了来自测试集的样本。值得注意的是,这些图像包含不同数量的噪声。 UGAN 和 UGAN-P 都能够恢复丢失的颜色信息,以及纠正现有的任何颜色信息。

虽然许多 失真图像 在整个图像空间中都包含 蓝色 或 绿色色调,但情况并不总是如此。在某些环境中,靠近相机的物体可能没有失真,颜色正确,而图像的背景包含失真。在这种情况下,我们希望网络只纠正图像中出现扭曲的部分。图3 中的最后一行显示了这种图像的一个示例。小丑鱼的橙色保持不变,而背景中扭曲的海葵则经过颜色校正。

对于定量评估,我们将其与 CycleGAN 进行比较,因为它在训练 G: Y→X 期间固有地学习了逆映射。我们首先使用 Canny 边缘检测器[6],因为它与真实值相比提供了颜色无关的图像评估。其次,比较局部图像块,提供图像的清晰度指标。展示了现有的水下机器人跟踪算法如何通过生成的图像提高性能。

4.3 与 CycleGAN 对比

4.4 Diver Tracking using Frequency Domain Detection

MDPM tracker 在生成的图像上 比 真实图像 上的性能提升。水下图像由于能见度低,往往无法捕捉到前景与背景亮度值的真实对比。生成的图像似乎在一定程度上恢复了这些受侵蚀的强度变化,使 MDPM 跟踪器的阳性检测(正确检测增加了350%)得到了很大的改善。

4.5 训练细节和推理性能

  • 所有实验的超参数: λ 1 = 100 λ_1 = 100 λ1=100 λ G P = 10 λ_{GP} = 10 λGP=10,batch size = 32
  • 优化器和学习率:Adam, 学习率=1e−4
  • 训练策略: 和 WGAN-GP 一样,对于生成器的每次更新,判别器被更新 n 次,其中 n = 5。
  • UGAN-P 的超参数: λ 2 = 1.0 , α = 1 λ_2 = 1.0, α = 1 λ2=1.0α=1
  • 实现框架: Tensorflow
  • 硬件: GTX 1080
  • 训练方式: 从头训练 100 个 epoch
  • 推理速度:GPU 上的推理平均耗时 0.0138s,约为每秒 72帧(FPS)。在 CPU (Intel Core i7-5930K)上,推理平均耗时 0.1244s,约为 8 FPS。
  • 输入图像大小:256 ×256×3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 进程:exec函数簇

目录(1)execl(2)execlp(3)execle(4)execv(5)execvp(6)execve在进程控制中提到,子进程的最大价值在于程序替换,…

Android动态权限获取官方实现之easypermission

Android动态权限获取官方实现之easypermission Android 6.0之后,基于用户隐私和安全考虑,敏感权限都开始采用动态运行时机制获取,于是就出现如果你不向用户申请权限(弹窗,用户选择),有些功能就…

Flutter Android 打包保姆式全流程 2023 版

大家好,我是 17。 为什么要写这篇文章呢?对于一没有 android 开发经验,从未有过打包经历的新人来说,要想成功打包,是很困难的。因为受到的阻碍太多,是完全陌生的领域,几乎是寸步难行。如果有老…

hive真实表空间大小统计

1. 问题 如果是采用hdfs上传加载的表、或者是flume直接写hdfs的表空间通常看hive的属性是不准确的。 2. 思路 为了使结果更精确,我们直接使用linux下命令统计hive仓库目录下的每个表对应的文件夹目录占用空间的大小。 3. 解决方法 这里建立三层表结构 ods: 原始…

linux入门---粘滞位

为什么会有粘滞位 一台服务器有很多人使用,每个人在机器上都会有一个家目录,在家目录里可以实现自己想要的操作,但是有时候我们需要一个公共路径来完成一些操作,比如说资料分享产生临时文件的增删查改等等,这就好比我…

数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组

去重删除有序数组中的重复项题目来自:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/题目描述给你一个 升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数…

leetcode 71~80 学习经历

leetcode 71~80 学习经历71. 简化路径72. 编辑距离73. 矩阵置零74. 搜索二维矩阵75. 颜色分类76. 最小覆盖子串77. 组合78. 子集79. 单词搜索80. 删除有序数组中的重复项 II小结71. 简化路径 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 &am…

2023年再不会 IOC 源码,就要被淘汰了

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…

详细聊TTL电平、RS232接口和RS485接口

TTL电平 TTL(Transistor-Transistor Logic)是一种数字电平标准,常用于数字电子设备之间的数据传输。 TTL使用0V表示逻辑0,使用5V表示逻辑1,因此TTL信号的电平比较容易理解和处理。TTL信号传输距离较短,通…

文件服务设计

一、需求背景 文件的上传、下载功能是软件系统常见的功能,包括上传文件、下载文件、查看文件等。例如:电商系统中需要上传商品的图片、广告视频,办公系统中上传附件,社交类系统中上传用户头像等等。文件上传下载大致流程为&#…

【Java诊断工具】Arthas使用指南

文章目录一、简介二、解决什么问题 & 适用场景解决问题:适应场景:三、安装&启动四、相关命令五、来自天边的"海市蜃楼"六、结束一、简介 Arthas 是Alibaba开源的Java诊断工具。安装在系统所在服务器。通过全局视角实时查看应用 load、…

人工智能论文术语集39

Resume 简历(但在AI领域一般指:复位)Perform arithmetic operations 执行算数操作performance measurement and improvement techniques 性能测试和改进技术draw stuff with your mouse 用鼠标画东西the Color Palette 调色板high dynamic ra…

41 42Ping-Pong操作

提高电路吞吐率的结构——Ping-Pong操作 1.Ping-Pong操作原理 作用:为了让两个不匹配的模块进行对接,并且在对接的过程中让这两个模块能够同时工作,提高数据处理的吞吐率(也称throughput效能) 常见的不匹配&#xff1…

Semaphore 源码解读

一、Semaphore Semaphore 通过设置一个固定数值的信号量,并发时线程通过 acquire() 获取一个信号量,如果能成功获得则可以继续执行,否则将阻塞等待,当某个线程使用 release() 释放一个信号量时,被等待的线程如果可以成…

idea初学笔记

注:初学需安装idea专业版,方便学习使用idea运行内存配置从eclipse工具开发 转 idea工具开发,可设置idea快捷键同eclipse快捷键 file -> Settings -> Keymap -> 选择Eclipse -> OK设置idea项目整体编码格式file -> Settings -> Editor …

mysql五种索引类型---实操版本

背景 最近学习了Mysql的索引,索引对于Mysql的高效运行是非常重要的,正确的使用索引可以大大的提高MySql的检索速度。通过索引可以大大的提升查询的速度。不过也会带来一些问题。比如会降低更新表的速度(因为不但要把保存数据还要保存一下索引…

Linux【进程理解】

文章目录Linux【进程理解】一、冯诺依曼体系结构二、操作系统OS1.深入理解操作系统2.深入理解系统调用和库函数四、 进程(一)描述进程-PCB(二)组织进程和查看进程(三)通过系统调用创建进程-fork初识&#x…

【python】XML格式文件读写详解

注:最后有面试挑战,看看自己掌握了吗 文章目录XML介绍格式XML与AJAX与HTML区别联系生成XML文件案例用SAX模块处理XML用DOM模块处理XML🌸I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢:…

三:BLE协议架构简介

低功耗蓝牙体系整体架构说明1. PHY(物理层)2. LL(链路层)3. HCI(主机与控制器通信接口)4. L2CAP(逻辑链路控制及适配协议)5. ATT(属性协议)6. GATT(通用属性规范)7. GAP(通用访问规范)8. SM(安全管理)整体架构说明 架构层说明PHY1. 物理层2. 控制射频的发送和接收LL1. 链路层2.…

Java开发 - Quartz初体验

前言 在上一篇博客中,我们对单点登录有了初步了解,这也让我们独立做系统有了最基础的保障。但在业务开发中,总是会出现一些定期处理的任务,我们首先想到的是Timer,但由于其调度功能单一,我们实际并不会用它…