当前位置: 首页 > article >正文

卷积神经网络在图像分类中的历史(1989 年至今)

原文towardsdatascience.com/the-history-of-convolutional-neural-networks-for-image-classification-1989-today-5ea8a5c5fe20?sourcecollection_archive---------5-----------------------#2024-06-28深度学习和计算机视觉领域最伟大创新的视觉之旅。https://medium.com/neural.avb?sourcepost_page---byline--5ea8a5c5fe20--------------------------------https://towardsdatascience.com/?sourcepost_page---byline--5ea8a5c5fe20-------------------------------- Avishek Biswas·发布于 Towards Data Science ·阅读时间 15 分钟 ·2024 年 6 月 28 日–在卷积神经网络出现之前训练神经网络对图像进行分类的标准方法是将图像展平成像素列表并通过前馈神经网络来输出图像的类别。展平图像的问题在于它丢失了图像中至关重要的空间信息。1989 年Yann LeCun 和团队推出了卷积神经网络——过去 15 年来计算机视觉研究的基石与前馈网络不同卷积神经网络保持了图像的二维特性并能够空间处理信息在本文中我们将回顾卷积神经网络CNN在图像分类任务中的历史——从 90 年代的早期研究开始到 2010 年代中期的黄金时代那时许多最杰出的深度学习架构应运而生最后讨论当前卷积神经网络研究的最新趋势它们与注意力机制和视觉变换器展开竞争。查看此YouTube 视频视频通过动画形象地解释了本文中的所有概念。除非另有说明本文中使用的所有图像和插图均由我在制作视频版本时自行生成。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6f788fc5c6f6bbd352b7b138f5198dd1.png今天我们将讨论的论文卷积神经网络的基础CNN 的核心是卷积操作。我们扫描滤波器穿过图像并在每个重叠位置计算滤波器与图像的点积。这个输出结果称为特征图它捕捉了滤波器模式在图像中出现的程度和位置。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6a88bb9a19c81a4788e265c2bdfb7177.png卷积是如何工作的 — 卷积核在输入图像上滑动并在每个位置计算重叠部分点积— 最终输出一个特征图在卷积层中我们训练多个滤波器从输入图像中提取不同的特征图。当我们将多个卷积层按顺序堆叠并加入非线性激活函数时就得到了卷积神经网络CNN。所以每一层卷积层同时完成两项任务 —1.空间滤波即图像和卷积核之间的卷积操作和2.结合多个输入通道并输出一组新的通道。CNN 研究的 90集中在修改或改进这两项内容。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7a53ab3d99f44347e87950b7143ae2f8.pngCNN 的两大核心任务1989 年论文这篇 1989 年论文教我们如何通过反向传播从头开始训练非线性 CNN。它们输入 16x16 的灰度手写数字图像并通过两层卷积层每层有 12 个 5x5 的滤波器。滤波器在扫描过程中还以步长 2 进行移动。步长卷积对于降采样输入图像非常有用。经过卷积层后输出的特征图会被展平并传递到两个全连接网络输出 10 个数字的概率。通过 softmax 交叉熵损失函数网络被优化以预测手写数字的正确标签。每一层后还使用了 tanh 非线性激活函数——使得学习到的特征图更加复杂和富有表现力。这个网络仅有 9760 个参数相比今天那些包含数亿个参数的网络它是一个非常小的网络。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5f6ce141fce07f95a9408e58d031bf95.png1989 年的原始 CNN 架构偏向性归纳偏向性归纳Inductive Bias是机器学习中的一个概念指的是我们故意在学习过程中引入特定的规则和限制以使我们的模型避免过度泛化更加接近符合人类理解的解决方案。当人类进行图像分类时我们也会进行空间过滤以寻找共同的模式形成多个表示然后将它们结合起来做出预测。CNN 架构正是为了复制这一过程而设计的。在前馈网络中每个像素都被视为独立的特征因为层中的每个神经元都与所有像素相连——而在 CNN 中由于相同的滤波器扫描整个图像因此参数共享更多。归纳偏置使得 CNN 在数据需求上也更为节省因为它们通过网络设计能够免费获得局部模式识别而前馈网络则需要从头开始通过训练周期学习这些模式。Le-Net 51998 年https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d625a2448a44d6150887d3d8a598512d.pngLenet-5 架构来源Le-Net-5 论文1998 年Yann LeCun 及其团队发布了Le-Net 5——一个更深、更大的 7 层 CNN 模型网络。他们还使用了最大池化Max Pooling通过从 2x2 滑动窗口中提取最大值来对图像进行下采样。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/59cfe79ef5bedf3c1b0dd5b33ae17f44.pnghttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1f847d9fc9f1eab0131f8b91092d006d.pngMax Pooling 如何工作左侧以及随着 CNN 增加更多层局部感受野如何增大右侧局部感受野注意当你训练一个 3x3 卷积层时每个神经元都与原始图像中的一个 3x3 区域相连——这就是神经元的局部感受野——该神经元从中提取模式的图像区域。当我们通过另一个 3x3 层传递这个特征图时新的特征图会间接地创建一个更大的 5x5 区域的感受野来源于原始图像。此外当我们通过最大池化或步幅卷积对图像进行下采样时感受野也会增加——使得更深层的网络能够更加全局地访问输入图像。因此CNN 中的早期层只能捕捉到低级细节如特定的边缘或角落而后续层则捕捉到更为广泛的全局级别的模式。The Draught (1998–2012)尽管 Le-Net-5 非常令人印象深刻但 2000 年代初期的研究人员仍然认为神经网络在计算上非常昂贵且训练数据需求量大。另一个问题是过拟合——复杂的神经网络可能只是记住整个训练数据集而无法对新的未见数据集进行泛化。研究人员因此转向传统的机器学习算法如支持向量机这些算法在当时较小的数据集上表现出了更好的性能且计算需求远低于神经网络。ImageNet 数据集2009 年ImageNet 数据集在 2009 年开源——当时包含了 320 万张标注图像覆盖了 1000 多个不同类别。如今它已经拥有超过 1400 万张图像和超过 2 万个标注的不同类别。从 2010 年到 2017 年每年都会举行一个叫做ILSVRC的大型比赛研究小组们会发布模型以打破 ImageNet 数据集子集上的基准。在 2010 年和 2011 年传统的机器学习方法如支持向量机SVM获胜——但从 2012 年开始比赛的焦点就转向了卷积神经网络CNN。排名不同网络的指标通常是 top-5 错误率——即衡量真实类别标签未能出现在网络预测的前 5 个类别中的比例。AlexNet (2012)AlexNet由 Geoffrey Hinton 博士及其团队提出是 2012 年 ILSVRC 的冠军测试集的 top-5 错误率为 17%。以下是 AlexNet 的三大主要贡献。1. 多尺度卷积核AlexNet 在 224x224 的 RGB 图像上进行训练并在网络中使用了多种卷积核大小——分别是 11x11、5x5 和 3x3 卷积核。像 Le-Net 5 这样的模型只使用了 5x5 卷积核。较大的卷积核计算开销更大因为它们训练了更多的权重但也能从图像中捕捉到更多的全局模式。由于这些大卷积核AlexNet 拥有超过 6000 万个可训练参数。然而所有这些复杂性可能会导致过拟合。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3dbfe9a516bc0af4053955d3cbd0ae81.pngAlexNet 从较大的卷积核11x11开始并为更深的层次减少卷积核大小至 5x5 和 3x3图片来源作者2. Dropout为了缓解过拟合AlexNet 采用了一种叫做 Dropout 的正则化技术。在训练过程中每一层的部分神经元会被设为零。这可以防止网络过度依赖某些特定的神经元或神经元组来进行预测从而鼓励所有神经元学习对分类有用的通用有意义特征。3. RELUAlexNet 还将 tanh 非线性函数替换为 ReLU。ReLU 是一种激活函数它将负值变为零保留正值不变。由于当 x 值过高或过低时tanh 函数的梯度会变得很小导致优化过程变慢因此它通常会在深度网络中饱和。相比之下ReLU 提供了稳定的梯度信号使得训练速度比 tanh 快约 6 倍。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/46bebdc63f8f31a04b7b17236f3a5c49.pnghttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9853cded8ce78082f5567793b0d22c30.pnghttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/40d276fedfc70960ef639c45f76d221a.pngRELU、TANH以及 RELU 带来的差异有多大图片来源中间大数据中的人工智能右侧Alex-Net 论文AlexNet 还引入了局部响应归一化Local Response Normalization以及分布式 CNN 训练策略。GoogleNet / Inception20142014 年GoogleNet 的论文在 ImageNet 上取得了 6.67%的 Top-5 错误率。GoogLeNet 的核心组件是Inception 模块。每个 Inception 模块由不同滤波器大小1x1、3x3、5x5和最大池化层的并行卷积层组成。Inception 将这些卷积核应用于相同的输入然后将它们连接起来结合了低级特征和中级特征。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/997501a2e4dd36f4519c2d85b202386a.png一个 Inception 模块1x1 卷积它们还使用了 1x1 卷积层。每个 1x1 卷积核首先对输入通道进行缩放然后将它们结合在一起。1x1 卷积核通过与固定值相乘每个像素——这也是它被称为点卷积的原因。虽然像 3x3 和 5x5 这样的更大卷积核同时进行空间过滤和通道组合但 1x1 卷积核仅适用于通道混合而且在权重数量较少的情况下非常高效。例如一个 3x4 的 1x1 卷积层网格只需训练*(1x1 x 3x4 )* 12 个权重——但是如果使用 3x3 卷积核则需要训练*(3x3 x 3x4 )* 108 个权重。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6f234f8f634cf640af57b563c47cb50d.pnghttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/65f6501cf00fd0cbb64593fff021f896.png1x1 卷积核与更大卷积核左和使用 1x1 卷积核的降维右降维GoogleNet 使用 1x1 卷积层作为降维方法在对这些低维特征图进行 3x3 和 5x5 卷积的空间过滤之前先降低通道数量。这有助于减少可训练权重的数量相比于 AlexNet它大大减少了权重数量。VGGNet2014VGG 网络指出我们不需要像 5x5 或 7x7 这样的更大卷积核所需的只是 3x3 卷积核。两个 3x3 卷积层的感受野与单个 5x5 卷积层相同。三个 3x3 卷积层的感受野与单个 7x7 卷积层相同。深度 3x3 卷积层捕捉到的感受野与更大卷积核相同但参数更少一个 5x5 滤波器训练 25 个权重——而两个 3x3 滤波器只需训练 18 个权重。类似地一个 7x7 滤波器训练 49 个权重而三个 3x3 卷积层只需训练 27 个权重。使用深度的 3x3 卷积层长期以来成为了 CNN 架构的标准做法。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cfed290a6af3ba3dee066dc01e5f4633.png批量归一化2015深度神经网络在训练过程中可能会遇到一个问题称为**“内部协方差偏移”**。由于网络的早期层在不断训练后续层需要持续适应从前面层接收到的不断变化的输入分布。批归一化旨在通过在训练过程中将每层的输入归一化为零均值和单位标准差从而抵消这个问题。批归一化或 BN 层可以应用于任何卷积层之后。在训练过程中它会减去特征图在小批量维度上的均值并除以标准差。这意味着每一层在训练过程中将看到一个更加平稳的单位高斯分布。批归一化的优势收敛速度约为原来的 14 倍让我们使用更高的学习率并且使网络对初始权重具有鲁棒性。ResNets (2016)深度网络在做恒等映射时遇到困难想象你有一个浅层神经网络它在分类任务上表现出色。结果发现如果我们在这个网络上加上 100 个新的卷积层模型的训练准确性可能会下降这相当反直觉因为这些新层只需要做的就是复制浅层网络每层的输出——至少能够匹配原始的准确性。实际上深度网络在训练时往往非常难以调优因为在通过许多层反向传播时梯度可能会饱和或变得不稳定。在 Relu 和批归一化的帮助下我们当时能够训练 22 层深的 CNN —— 微软的优秀团队在 2015 年推出了ResNets使我们能够稳定地训练 150 层的 CNN。他们是如何做到的残差学习输入通常会通过一个或多个 CNN 层但在最后原始输入会被加回到最终输出。这些块被称为残差块因为它们不需要像传统意义上那样学习最终的输出特征图——它们只是必须加到输入上的残差特征以便得到最终的特征图。如果中间层的权重变为零那么残差块就会返回恒等函数——意味着它将能够轻松复制输入 X。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b67371d5f87b5198e3e1a03c3a62ef15.png残差网络简单的梯度流在反向传播过程中梯度可以通过这些快捷路径直接流向模型的早期层从而更快地到达有助于防止梯度消失问题。ResNet 将许多这样的块堆叠在一起形成真正深的网络而不会损失准确性https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/55b293233faca9c8f22ed808e1dd8c4f.png来自 ResNet 论文凭借这一显著的改进ResNet 成功训练了一个 152 层的模型创造了打破所有纪录的 top-5 错误率DenseNet2017https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ef9fa851e3acd1c08106018c2f39b471.pngDense-Nets 也增加了连接早期层与后期层的捷径路径。DenseNet 模块训练了一系列卷积层每一层的输出都会与模块中每个先前层的特征图拼接之后再传递给下一层。每一层仅向网络的“集体知识”中添加少量的新特征图随着图像在网络中的流动DenseNet 的网络信息流和梯度流得到了改善因为每一层可以直接访问来自损失函数的梯度。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/164f7f2c97a282693b45bcb96e2b21d7.pngDense Nets压缩与激励网络2017SEN-NET 是 ILSVRC 比赛的最终获胜者提出了将压缩与激励层引入到卷积神经网络CNN中。SE 模块旨在显式地建模特征图中所有通道之间的依赖关系。在普通的 CNN 中特征图的每个通道是相互独立计算的而 SEN-Net 采用类似自注意力的方法使得特征图中的每个通道能够感知输入图像的全局特性。SEN-Net 赢得了 2017 年 ILSVRC 比赛的最终胜利且其中一个包含 154 层的 SenNet ResNet 模型创下了令人惊讶的 top-5 错误率 4.47%。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6b871751ded64eef0b9db11f9795ad28.pngSEN-NET压缩操作压缩操作通过全局平均池化将输入特征图的空间维度压缩成一个通道描述符。由于每个通道包含捕捉图像局部特性的神经元压缩操作将关于每个通道的全局信息进行积累。激励操作激励操作通过与来自压缩操作获得的通道描述符按通道进行乘法重新调整输入特征图的尺度。这有效地将全局级别的信息传播到每个通道——使每个通道能够理解特征图中其他通道的上下文。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c37db341a2da8c50a202b6e36a3c93a6.png压缩与激励模块MobileNet2017卷积层有两个功能——1过滤空间信息2按通道合并信息。MobileNet 论文使用了深度可分离卷积这是一种将这两种操作分开到两个不同层次的技术——使用深度卷积进行过滤使用逐点卷积进行通道合并。深度卷积https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1b885d58c9a73b3b1a51592e2d9e1966.png深度可分离卷积给定一个具有 M 个通道的特征图集首先它们使用深度卷积层训练 M 个 3x3 卷积核。与普通卷积层对所有特征图进行卷积不同深度卷积层训练的滤波器仅对每个特征图单独进行卷积。其次它们使用 1x1 逐点卷积滤波器来混合所有这些特征图。像这样分开滤波和组合步骤极大地减少了权重数量使得网络变得非常轻量化同时仍保持性能。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/66344afbabc2e1473b31832405fdda81.png为什么深度可分离层减少训练权重MobileNetV2 (2019)2018 年MobileNetV2 通过引入两个创新——线性瓶颈Linear Bottlenecks和倒残差Inverted residuals——改进了 MobileNet 架构。线性瓶颈MobileNetV2 使用 1x1 逐点卷积进行降维然后是深度卷积层进行空间滤波接着再通过一个 1x1 逐点卷积层扩展通道回原来的维度。这些瓶颈不经过 RELU而是保持线性。RELU 会将降维步骤中产生的所有负值归零这可能导致网络丢失重要信息尤其是在这些低维空间大部分为负值时。线性层防止了在这一瓶颈过程中丢失过多信息。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8950a4c49cce3be0d309a0c1db0f9c82.png每个特征图的宽度旨在显示相对的通道维度。倒残差Inverted Residuals第二个创新被称为倒残差。通常残差连接发生在具有最高通道数的层之间但作者在瓶颈层之间添加了捷径。瓶颈层捕捉了低维潜在空间中的相关信息而这些层之间信息和梯度的自由流动是至关重要的。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c2e4c4eae0d3d37c24af81e463c38f2b.png视觉变换器 (2020)视觉变换器Vision Transformers简称 ViTs证明了变换器在图像分类任务中确实能够超越最先进的卷积神经网络CNN。变换器和注意力机制提供了一种高度可并行化、可扩展的通用架构用于建模序列。神经注意力是深度学习中的一个完全不同的领域本文不会涉及但你可以在这个 YouTube 视频中了解更多。ViTs 使用图块嵌入和自注意力输入图像首先被分割成一系列固定大小的图块。每个图块都通过卷积神经网络CNN或经过一个线性层独立地嵌入成一个固定大小的向量。然后这些图块嵌入和它们的位置编码作为一个令牌序列输入到基于自注意力的变换器编码器中。自注意力模型会建模所有图块之间的关系并输出新的更新后的图块嵌入这些嵌入能够理解整个图像的上下文。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/fc228d2bbe95cf7993f257be0bc535bb.png视觉变换器。每个自注意力层通过图像的全局上下文进一步对每个块的嵌入进行上下文化。归纳偏置与普适性当 CNN 引入了多个关于图像的归纳偏置时变换器则相反——没有局部化没有滑动卷积核——它们依赖于普适性和原始计算来建模图像中所有块之间的关系。自注意力层允许图像中所有块之间的全局连接无论它们在空间上相距多远。归纳偏置在较小的数据集上表现良好但变换器的优势在于大规模训练数据集最终一个通用的框架将战胜 CNN 所提供的归纳偏置。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6a450fb97b290d4419671ac36c27f673.png卷积层与自注意力层ConvNext —2020 年代的卷积网络(2022)在这篇文章中加入 Swin Transformers 是个很好的选择但那是另一个话题因为这是关于 CNN 的文章让我们集中讨论最后一篇 CNN 相关的论文。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3a0f9822f909de4a7b52dfe04861be4e.png像 VITs 一样对图像进行分块ConvNext 的输入遵循一种受视觉转换器启发的图像分块策略。一个 4x4 的卷积核步幅为 4创建了一个下采样的图像并输入到网络的其余部分。深度可分离卷积受 MobileNet 启发ConvNext 使用深度可分离卷积层。作者还假设深度卷积类似于自注意力中的加权和操作这种操作在每个通道上进行仅在空间维度上混合信息。此外1x1 的逐点卷积类似于自注意力中的通道混合步骤。更大的卷积核尺寸自 VGG 以来CNN 一直在使用 3x3 的卷积核而 ConvNext 提出了更大的 7x7 滤波器以捕捉更广泛的空间上下文尽量接近 ViTs 所捕捉的完全全局上下文同时保留 CNN 的本地化特性。还有一些其他的改进比如使用受 MobileNetV2 启发的反向瓶颈、GELU 激活函数、使用层归一化而非批量归一化等这些都塑造了 ConvNext 架构的其余部分。可扩展性ConvNext 通过深度可分离卷积提供了更高的计算效率并且在高分辨率图像上比变换器更具可扩展性——这是因为自注意力在序列长度上按平方级别扩展而卷积则不受此限制。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/273120ccbef227363f48781e3fc84edf.png最终思考卷积神经网络CNN的历史教会了我们很多关于深度学习、归纳偏置以及计算本质的知识。最终谁会胜出是很有趣的——是卷积网络的归纳偏置还是变换器的普适性。一定要查看配套的 YouTube 视频以便直观地了解这篇文章及下列列出的相关论文。参考文献带反向传播的卷积神经网络CNN with Backprop1989 年yann.lecun.com/exdb/publis/pdf/lecun-89e.pdfLeNet-5vision.stanford.edu/cs598_spring07/papers/Lecun98.pdfAlexNetproceedings.neurips.cc/paper_files/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdfGoogleNetarxiv.org/abs/1409.4842VGGarxiv.org/abs/1409.1556批量归一化Batch Normarxiv.org/pdf/1502.03167ResNetarxiv.org/abs/1512.03385DenseNetarxiv.org/abs/1608.06993MobileNetarxiv.org/abs/1704.04861MobileNet-V2arxiv.org/abs/1801.04381视觉变换器Vision Transformersarxiv.org/abs/2010.11929ConvNextarxiv.org/abs/2201.03545挤压与激励网络Squeeze-and-Excitation Networkarxiv.org/abs/1709.01507Swin Transformersarxiv.org/abs/2103.14030

相关文章:

卷积神经网络在图像分类中的历史(1989 年至今)

原文:towardsdatascience.com/the-history-of-convolutional-neural-networks-for-image-classification-1989-today-5ea8a5c5fe20?sourcecollection_archive---------5-----------------------#2024-06-28 深度学习和计算机视觉领域最伟大创新的视觉之旅。 https…...

零售行业 Multi-Agent 案例:智能导购与库存管理的协同系统拆解

零售行业 Multi-Agent 案例:智能导购与库存管理的协同系统拆解 摘要/引言 开门见山 “叮咚——您的专属导购Luna上线啦!请问今天想找什么风格的连衣裙?要不要看看系统为您推荐的通勤款A字裙,您上周收藏的碎花衫刚好可以搭配&#…...

AMD Ryzen调试神器SMUDebugTool:免费开源工具让你的处理器性能飞起来!

AMD Ryzen调试神器SMUDebugTool:免费开源工具让你的处理器性能飞起来! 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Tab…...

CANoe VN1640A的隐藏技能:CH5 I/O口实战应用,从采集电压到模拟传感器信号

CANoe VN1640A的CH5 I/O接口深度实战:从电压采集到传感器信号模拟 1. 揭开CH5接口的神秘面纱 在汽车电子测试领域,Vector的VN1640A接口模块以其稳定性和多功能性著称。大多数工程师熟悉其CAN/LIN通道的使用,却常常忽略了一个隐藏的宝藏——…...

告别QGLWidget!在Qt 5.4+中用QOpenGLWidget重构你的点云可视化工具(附完整代码)

从QGLWidget到QOpenGLWidget:现代Qt OpenGL开发的技术迁移指南 在三维可视化领域,点云数据的实时渲染一直是开发者面临的挑战之一。对于长期使用Qt框架进行图形开发的工程师来说,2014年发布的Qt 5.4引入了一个重要变化:QOpenGLWid…...

3步玩转APK下载:开源APKMirror客户端的终极实战指南

3步玩转APK下载:开源APKMirror客户端的终极实战指南 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 你是否曾因官方应用商店找不到某个历史版本而苦恼?是否担心第三方下载站点的安全性?今天&…...

别再只怪USB线了!i.MX6Q用Mfgtools烧录rootfs.tar.bz2报错的深层硬件排查指南

i.MX6Q烧录故障的硬件级诊断:从USB OTG冲突到电源完整性排查 当Mfgtools在rootfs.tar.bz2传输阶段突然报错"Push error"或"No Device Connected"时,多数开发者会本能地检查USB线缆或驱动配置。但真正棘手的故障往往潜伏在硬件交互层…...

3步打造专业预印本:arxiv.sty LaTeX排版方案实战指南

3步打造专业预印本:arxiv.sty LaTeX排版方案实战指南 【免费下载链接】arxiv-style A Latex style and template for paper preprints (based on NIPS style) 项目地址: https://gitcode.com/gh_mirrors/ar/arxiv-style 在学术研究领域,预印本排版…...

VirtualBox虚拟机中搭建VxWorks 5.5开发调试环境全攻略

1. 项目概述与核心思路最近在折腾一个老项目,需要在一个特定的嵌入式实时操作系统环境下进行调试和验证。这个系统就是VxWorks,一个在工业控制、航空航天等领域有着深厚积累的RTOS。手头没有现成的硬件板卡,搭建一套物理开发环境又费时费力&a…...

Arduino电机与舵机控制:从晶体管驱动到PWM调速实战

1. 项目概述与核心价值在机器人、智能小车或者任何一个需要“动起来”的嵌入式项目中,电机控制都是你绕不开的一道坎。你可能已经能让LED闪烁、让屏幕显示文字,但当你第一次尝试让一个小马达转起来,却发现Arduino板子上的引脚直接冒烟时&…...

在Adafruit Fruit Jam微控制器上移植运行经典游戏DOOM的完整指南

1. 项目概述:当经典FPS遇上迷你计算机作为一名在嵌入式系统和复古计算领域折腾了十多年的老玩家,我始终对“它能不能跑DOOM?”这个梗抱有极大的热情。这不仅仅是一句玩笑,更是对硬件性能和软件移植能力的终极试金石。最近&#xf…...

顶伯 + 微软 TTS,3 分钟生成专业级解说配音

🎯 顶伯 微软 TTS,3 分钟生成专业级解说配音告别繁琐录音,用顶伯文字转语音工具快速打造高品质配音。✨ 一、为什么选择顶伯与微软 TTS 的组合?在视频制作、课程讲解或产品演示中,配音质量直接影响观众体验。 顶伯文字…...

支持 SSML 标签,让配音精准控制语调与重音

🎯 支持 SSML 标签,让配音精准控制语调与重音在文字转语音(TTS)应用中,机械感的读音往往缺乏情感。 顶伯文字转语音工具全面支持 SSML(语音合成标记语言) 标签,让您通过简单标记精准…...

G-Helper终极教程:华硕笔记本轻量级性能控制神器

G-Helper终极教程:华硕笔记本轻量级性能控制神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertb…...

2026年十大最佳地区搜索排名优化工具:权威榜单赋能企业高效增长

本文全面梳理了2026年十大主流地区搜索排名优化工具的核心功能与应用价值,旨在为本地企业提供客观、实用的选型参考。通过对各工具地域关键词布局、多平台同步能力及实时数据监控等关键模块的解析,结合具体参数指标与套餐定价,系统呈现不同场…...

Ubuntu中ping命令安装与网络诊断全攻略

1. 项目概述:一个看似简单却暗藏玄机的问题“如何在Ubuntu中安装ping”,这个标题乍一看,可能会让很多老手会心一笑,甚至觉得有些“小白”。但恰恰是这个看似基础到不能再基础的问题,却是我在多年运维和开发工作中&…...

py每日spider案例之某website之xin东方选课搜索接口(难度一般 扣取代码即可)

加密位置: 逆向接口参数: 逆向接口: const g = globalThis; g.window = g; g.self = g; g.location = {<...

【实用小程序】超轻量级文件上传下载中心 (File Download Server)

站内源码及jar包下载 一、项目概述 文件下载中心一个基于 Java 内置 HTTP 服务器(com.sun.net.httpserver)构建的轻量级文件管理服务。它零第三方依赖,单 JAR 包即可运行,适合在内网环境或临时场景中快速搭建文件共享站点。 你的团队需要临时共享一批日志文件或交付物,…...

5大核心模块彻底解决Windows更新故障:Reset-Windows-Update-Tool专业修复指南

5大核心模块彻底解决Windows更新故障&#xff1a;Reset-Windows-Update-Tool专业修复指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update…...

突破性开源Switch模拟器Ryujinx:零基础实现PC端任天堂游戏全兼容

突破性开源Switch模拟器Ryujinx&#xff1a;零基础实现PC端任天堂游戏全兼容 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说&#xff1a;旷野之息》的冒险…...

golang如何实现分布式幂等方案_golang分布式幂等方案实现教程.txt

...

【PCL中Ptr释放问题 aligned_free 的2种解决方法】

PCL中Ptr释放问题 aligned_free解决方法1解决方法2解决方法1 添加avx指令&#xff0c;参考这篇博客https://blog.csdn.net/qq_60609496/article/details/123900817 解决方法2 我按照方法1尝试添加了avx或者sse等&#xff0c;都不行&#xff0c;我是要做一个静态库的时候链接…...

显存又爆了?移动云弹性KV缓存:让你告别“显存焦虑”

上下文越长&#xff0c;显存越吃紧对话轮次越多&#xff0c;延迟越明显并发量一高&#xff0c;服务就卡顿……随着AI大模型向超长上下文、高并发、多轮交互深度演进&#xff0c;AI推理所需缓存的内容呈指数级增长。显存容量的需求爆炸与显存采购的高昂成本&#xff0c;使得超长…...

基于STM32单片机人体健康检测血糖检测监测无线蓝牙APP设计S312

本系统由STM32F103C8T6单片机核心板、OLED屏、无线模块、血糖模拟检测、蜂鸣器报警、电源电路、按键电路组成。【1】液晶显示&#xff1a;OLED液晶显示心率值、心率上下限、血氧值、血氧阈值、血压值、血压阈值、血糖值、血糖上下限值以及心率血氧是否在采集测算中、当前数据是…...

用1.44寸ST7735 TFT屏DIY一个桌面天气站(附STM32/Arduino完整项目代码)

用1.44寸ST7735 TFT屏打造智能桌面天气站&#xff08;STM32/Arduino全流程实战&#xff09; 在创客圈里&#xff0c;能够实时显示天气信息的桌面小设备一直备受青睐。本文将带你从零开始&#xff0c;利用常见的1.44寸ST7735 TFT屏幕&#xff0c;构建一个功能完善的智能天气站。…...

【深度解析】Qwen 3.6 vs Gemma 4:本地大模型时代,如何选对“日常开发模型”

摘要&#xff1a; 开源权重模型正在快速逼近闭源模型能力边界。本文结合 Qwen 3.6 与 Gemma 4 的实际案例&#xff0c;从架构、上下文、显存、基准测试到落地场景&#xff0c;拆解本地大模型选型逻辑&#xff0c;并给出可直接运行的 Python 调用示例。 背景介绍 近两年&#xf…...

编写程序统计婚恋交友消费,相处长处度数据,分析理性婚恋模式,减少年轻人恋爱高频无谓消费。

构建一个婚恋交友消费与相处时长统计分析、理性婚恋模式识别的商务智能示例项目&#xff0c;去营销化、中立化&#xff0c;仅用于学习与工程实践参考。一、实际应用场景描述在当代年轻人的婚恋与社交生活中&#xff0c;存在一种普遍现象&#xff1a;- 约会高度依赖“消费型场景…...

【作品集】OpenClaw-AgentOps企业级多智能体贵金属交易分析平台

项目名称&#xff1a;OpenClaw-AgentOps 企业级多智能体贵金属交易分析平台 展示方式&#xff1a;保留原有项目架构图&#xff0c;同时加入系统真实页面切片&#xff0c;用“设计图 实物图”的方式完整展示项目。1. 项目一句话介绍OpenClaw-AgentOps 是一个面向贵金属交易研究…...

探索Mod Assistant:Beat Saber模组管理工具的高效解决方案

探索Mod Assistant&#xff1a;Beat Saber模组管理工具的高效解决方案 【免费下载链接】ModAssistant Simple Beat Saber Mod Installer 项目地址: https://gitcode.com/gh_mirrors/mo/ModAssistant Beat Saber模组管理工具Mod Assistant是一款专为PC版Beat Saber设计的…...

自学 Vibe Coding 这三个网站就够了!

背景 我之前想学 Vibe Coding&#xff0c;刷到各种"AI 编程神器"、"零基础用 AI 写代码"的文章&#xff0c;看得心潮澎湃。 结果一上手就懵了&#xff1a;装了插件、开了 AI、对着编辑器发呆&#xff0c;不知道下一步干嘛。 网上搜教程&#xff0c;要么…...