JPEG图像格式加速神经网络训练--使用DCT训练CNN
JPEG图像格式加速神经网络训练
- JPEG图像格式加速神经网络训练
- 工作原理
- DCT系数与JPEG
- 直接利用DCT系数
- 阶段 1: 数据准备
- 步骤 1: 读取JPEG文件结构
- 步骤 2: 提取量化表和Huffman表
- 步骤 3: 解析图像数据
- 步骤 4: 反量化
- 步骤 5: 获取DCT系数
- 阶段 2: 输入处理
- 预处理 1: 正规化(Normalization)
- 预处理 2: 中心化(Centering)
- 预处理 3: 选择性剔除
- 预处理 4: 量化系数补偿
- 预处理 5: 重排DCT系数
- 预处理 6: 分布调整
- 预处理 7: 批量处理
- 阶段 3: 网络架构适配
- 1. 输入层调整
- 2. 卷积核大小和卷积层设计
- 3. 频率选择性特征映射
- 4. 抗量化噪声能力
- 5. 特征融合策略
- 6. 模型深度和复杂性
- 7. 训练策略
- 8. 输出层和损失函数
- 9. 软件和硬件兼容性
- 例子
- 阶段 4: 模型训练
- 阶段 5: 模型评估与优化
- 阶段 6: 部署与推理
- 实际应用
- 网络训练加速
- 保留信息完整性
- 相关开源内容
- 相关论文
JPEG图像格式加速神经网络训练
在处理和利用图像数据训练神经网络的过程中,JPEG是一种广泛采用的图像格式。传统的方法需要将JPEG图像解码成RGB像素值后才能够输入给卷积神经网络(CNN)进行训练,这个解码过程不仅增加了额外的计算成本,还可能导致原始数据信息的丢失。然而,“从JPEG图像格式直接加速神经网络(Faster Neural Networks Straight from JPEG)”的研究,提出了一种新的观点:直接在JPEG图像格式的块状离散余弦变换(DCT)系数上训练CNN。
研究结果(https://www.uber.com/en-CA/blog/neural-networks-jpeg/):
我们发现速度的提升仅仅是由于输入层和后续层上的数据量较小,正如人们所期望的那样。精度的提高主要归功于 DCT 表示的具体使用,结果证明它对于图像分类非常有效。令人惊讶的是,简单地将 ResNet-50 的第一个卷积层替换为步长 8 DCT 变换会带来更好的性能。它的效果甚至比完全相同形状的学习变换还要好。换句话说,与传统观点相反,我们发现使用较大的感受野和步幅(各 8 个)比使用较小的感受野和步幅效果更好,并且对第一层进行硬编码比学习它效果更好。当Residual Networks在 2015 年确立了 ImageNet 的最新技术水平时,只需用冻结的 DCT 替换第一层就可以进一步提高现有技术水平。
工作原理
DCT系数与JPEG
JPEG图像文件使用的压缩技术基于一种称为离散余弦变换(Discrete Cosine Transform,DCT)的方法。DCT是一种将信号或图像矩阵转换到不同频率空间的技术。在JPEG压缩中,DCT用于将图像数据从其空间域(即原始像素)转换到频率域。这个转换的结果就是一组DCT系数,它们描述了图像区块的频率成分。
具体来说,JPEG压缩过程包括以下步骤:
-
颜色空间转换:首先,图像从RGB颜色空间转换到YCbCr颜色空间。Y代表亮度(也就是灰度),而Cb和Cr代表色差分量。
-
分块处理:图像被分割成8x8像素的块。
-
计算DCT:对每个8x8的块进行DCT,由空间域的64个像素值到频率域的64个DCT系数。这些DCT系数代表了不同频率的信息,其中的第一个系数(DC系数)代表块的平均亮度,其余的63个系数(AC系数)代表更高频率内容的细节。
-
量化:DCT系数接着被量化,以实现数据压缩。量化过程中高频系数通常会被大幅度缩减,因为人类视觉对这些细节的敏感度较低。
-
编码与压缩:量化后的DCT系数然后用不同的编码技术(如Huffman编码)进行编码,并存储为JPEG文件。
在传统的图像处理流程中,一个JPEG文件在被送入神经网络之前,需要将上述过程逆转,通过解码、逆DCT及色域转换回RGB空间。然而,“直接从JPEG的DCT系数训练神经网络”这一技术提倡跳过这些步骤,直接使用压缩后的DCT系数作为网络的输入,从而减少计算开销和加快训练速度。
直接利用DCT系数
该研究利用的关键想法是:由于DCT系数已经包含在JPEG文件中,可以直接将这些系数用作网络的输入,省去了将JPEG解码到RGB像素的步骤。这种方法降低了模型训练的前期准备工作,并且保留了图像的原始频率特征。
以下是一个基于DCT系数直接应用于机器学习的流程:
阶段 1: 数据准备
在数据准备阶段,无需将JPEG图像文件解压缩到完整的RGB像素矩阵,而是直接解析JPEG文件,提取图像的DCT系数。
将JPEG图像文件解析为DCT系数涉及到对JPEG文件格式的了解以及图像解码的相关技术。通常,这个过程涉及以下步骤:
步骤 1: 读取JPEG文件结构
JPEG文件由多个不同的段组成,如Start of Image (SOI)段、Define Quantization Tables (DQT)、Start of Frame (SOF)、Huffman Tables (DHT)、Start of Scan (SOS)和图像数据本身等。
步骤 2: 提取量化表和Huffman表
量化表和Huffman表是解码JPEG图像至关重要的部分。它们分别定义了如何量化DCT系数和如何使用Huffman编码对这些系数进行失真压缩。
步骤 3: 解析图像数据
在SOS段之后,实际的图像数据开始。这些数据是使用Huffman编码压缩过的。解码器需要使用提取的Huffman表来解码这些数据,还原成原始的DCT系数。
步骤 4: 反量化
由于在JPEG编码过程中,DCT系数被量化以减少数据大小,因此解码包括反量化步骤,这涉及到将编码的DCT系数与量化表中的值相乘,以恢复大致的原始DCT系数。
步骤 5: 获取DCT系数
完成上述步骤后,就可以获得每个8x8像素块的DCT系数。这些系数现在可以直接用于机器学习或其他图像处理任务。
为了实现以上步骤,可以使用各种编程语言的库或工具。例如,在Python中,可以使用jpeg4py
或Pillow
库进行JPEG图像的解析与处理。下面是一个简单的代码示例,展示如何利用Pillow
库获取JPEG图像的DCT系数:
from PIL import Image
import numpy as np
import jpeg4py as jp# 使用jpeg4py库加载图片
image = jp.JPEG('path_to_your_image.jpg').decode()# 此时,image变量包含了图像的DCT系数
# 你可以进一步处理DCT系数或者直接使用它们进行机器学习训练
需要注意的是,不同的库可能提供不同层次的解析能力。某些库可能直接提供DCT系数,而其他较低级的库则可能需要进行一些额外的步骤来手动提取这些信息。为了处理更加复杂的图像或进行大量图像的处理,可能需要深入了解JPEG文件格式。
阶段 2: 输入处理
针对从JPEG文件中提取出的DCT系数,进行必要的归一化或其他预处理操作,使其适应训练模型的输入要求。
下面是一些通常在DCT系数上执行的预处理步骤:
预处理 1: 正规化(Normalization)
由于量化过程影响了DCT系数的数值范围,所以常常需要将DCT系数进行正规化处理,以保证输入数据处于相对统一和有助于网络学习的范围内。正规化可以简单地通过将系数值缩放到一个特定的范围,比如[0, 1]或[-1, 1]。
预处理 2: 中心化(Centering)
中心化是将数据的平均值移动到原点的过程。对于DCT系数,这意味着从每个系数中减去该系数在训练集中的平均值,有助于减少不同图片间亮度差异导致的影响。
预处理 3: 选择性剔除
在JPEG压缩时,很多高频的DCT系数可能因为量化操作被设置为零或近零值,这些系数包含的信息量很少。因此,有时可以选择性剔除一些不重要的高频DCT系数,以减少输入数据的维度。
预处理 4: 量化系数补偿
考虑到JPEG的量化过程会导致图像质量的损失,可以通过对量化系数进行补偿来尝试恢复一些信息,例如通过乘以量化表中的逆量化系数。
预处理 5: 重排DCT系数
通常DCT系数是按照Zigzag顺序排序的,这种顺序是为了更好的数据压缩。但在输入到CNN之前,可能需要将这些系数重排到更适合卷积操作的顺序。
预处理 6: 分布调整
DCT系数的分布可能会由于图像内容而有很大的变化,要使用机器学习算法,一种可能的预处理步骤是转换DCT系数的分布,让其更接近于正态分布或其他有利于模型学习的分布。
预处理 7: 批量处理
在准备用于神经网络训练的批量数据时,需要确保所有数据的维度一致,可以通过填充或剪切来保证这一点。
这些预处理步骤不是全部必须执行的。实际操作中,适用哪些预处理取决于具体的应用场景、所使用的机器学习模型和期望达到的性能指标。进行适当的数据探索和实验来确定最优预处理步骤通常是实践中的一个重要环节。
阶段 3: 网络架构适配
设计适合DCT系数输入的网络架构,这可能包括改变传统用于像素输入的卷积层,使其能够处理频率域的数据。例如,可以使用适应频率特征的卷积滤波器。
设计能够接受DCT系数作为输入的网络架构,需要考虑DCT数据的特性和卷积神经网络(CNN)对输入数据的预期。DCT系数代表的是图像块的频率信息,和常规的基于像素的图像数据有所不同。这意味着网络需要能够处理和学习这种频率域的信息。以下是设计适应DCT输入的网络架构的一些关键考虑因素:
1. 输入层调整
CNN的第一个层通常是一个卷积层,用于提取输入数据的特征。对于DCT输入,网络的输入层需调整为接受单通道或多通道的DCT系数,这取决于使用的量化表的数量和种类(例如Y, Cb, Cr通道)。
2. 卷积核大小和卷积层设计
由于DCT块是8x8的大小,通常网络中第一层卷积(或前几层)的卷积核大小需要匹配这个尺寸,或者设计为能够有效处理这种尺寸的卷积核。这有助于网络学习到这些8x8块内的频率模式。
3. 频率选择性特征映射
可以设计专门针对低频和高频DCT系数的特征映射,以此分别处理图像的不同频率成分。例如,网络可以有分支或模块,专注于低频信息的广义内容和高频信息的细节特征。
4. 抗量化噪声能力
DCT系数由于经过了压缩和量化,可能包含噪声。网络设计需要具备对量化噪声的鲁棒性,通过网络层的设计和训练策略来减少这种噪声的不利影响。
5. 特征融合策略
在网络中应用特征融合的策略可以是关键,特别是对于将低频和高频信息结合起来的任务。可以使用不同级别的特征融合技术,如串联、加和或者注意力机制。
6. 模型深度和复杂性
考虑模型的深度和复杂性,以保证模型可以提取足够丰富的特征而不致过于复杂导致过拟合。DCT系数可能不需要非常深层的网络来处理,深度和复杂度需要通过实验来确定。
7. 训练策略
设计网络时应考虑训练策略,如使用预训练权重、数据增强、正则化技术,以及学习率调度,以提高训练的稳定性和模型的泛化能力。
8. 输出层和损失函数
根据任务(分类、回归、检测等)选择适当的输出层和损失函数,以确保网络输出符合期望的任务结果。
9. 软件和硬件兼容性
确保所设计的网络架构能够在目标软件框架和硬件上有效运行,以利用现有的算力资源。
在设计适应DCT输入的网络架构时,实验和迭代是非常重要的。通常需要进行多次试验来找到性能最佳的网络配置。利用现有的神经网络架构为基础,并对其进行适应性调整,是一种常见的策略。这样做的好处是可以借鉴已有架构的优点,同时为特定数据类型做出优化。
例子
构建一个接受DCT系数输入的最简单的示例神经网络通常会从一个基本的卷积神经网络(CNN)开始,其核心功能是识别图像中的模式,即使是在频率域中的模式。以下是一个简单CNN框架的实现,用于处理DCT系数输入,我们将以Python和Keras作为示例:
from keras.models import Sequential
from keras.layers import Conv2D, Flatten, Dense, MaxPooling2D# 假设我们已经有了DCT系数的输入数据,大小为(batch_size, 8, 8, 1),
# 其中8x8代表一个DCT块的大小,1代表单通道(灰度图)。# 创建一个Sequential模型
model = Sequential()# 添加第一个卷积层,用于提取DCT系数的特征,使用较小的卷积核进行细粒度的特征检测
# 选择合适的卷积核大小和数量。这里使用3x3大小的卷积核,并定义了16个不同的卷积核。
model.add(Conv2D(16, (3, 3), activation='relu', input_shape=(8, 8, 1)))# 添加最大池化层以减小特征图的维度,同时保留最重要的特征
model.add(MaxPooling2D((2, 2)))# 展平特征图,以便可以传递给后面的全连接层
model.add(Flatten())# 添加一个全连接层(即稠密层),这里用64个神经元
model.add(Dense(64, activation='relu'))# 最后添加输出层,注意这里的节点数需要根据你的任务来设置
# 例如,如果是一个10类分类问题,则应该有10个节点
model.add(Dense(10, activation='softmax')) # 适用于10类分类的输出层# 编译模型,选择合适的损失函数和优化器。
# 对于多类分类,损失函数通常是'categorical_crossentropy'。
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])# 打印网络结构
model.summary()# 现在模型已经定义好,接下来可以在准备好的DCT系数数据集上对其进行训练。
在这个示例中,输入假定是一批8x8大小的单通道DCT系数。网络开始于一个卷积层,随后是池化层和全连接层,最后是适合分类任务的输出层。需要根据具体的应用场景调整网络的深度、卷积层的数量、卷积核的大小、层间连接方式以及激活函数等。此示例网络假设您已经有了预处理后的DCT系数数据,并准备好用于训练。在实际应用中,您还需要写代码来加载和预处理JPEG图像以获得DCT系数。
阶段 4: 模型训练
正常训练神经网络,只是这一次输入的是处理过的DCT系数而不是完整的像素数据。依旧通过前馈、梯度下降等步骤来训练网络,优化模型参数。
阶段 5: 模型评估与优化
在验证集上评估模型的性能,并根据实际应用场景调整网络结构和参数,以进一步提升模型的准确率和效率。
阶段 6: 部署与推理
将训练好的模型部署到实际的应用环境中,直接使用DCT系数进行快速推理。
使用DCT系数的关键优点是能够减少图像从JPEG格式到输入张量转换过程中产生的计算开销。而且,由于避免了解压缩和颜色空间转换的步骤,理论上可以保留更多的原始图像信息,有助于提高模型的性能。
然而,直接使用DCT系数需要克服一些挑战,比如设计一个能够适应JPEG压缩特性的网络架构,以及适应于量化后DCT系数的范围和分布的预处理技术。此外,由于DCT系数包含大量的高频信息,可能已在JPEG压缩过程中被抑制,因此模型需要在高频信息不足的情况下进行有效学习。
实际应用
网络训练加速
采用直接从JPEG图像的DCT系数训练CNN的方法,可以显著减少数据预处理的时间,从而加速整个网络训练过程。
保留信息完整性
由于没有进行额外的解码或转换,原始的图像信息得以更好地保留,在某些情况下,这可能有助于提高模型的表现。
相关开源内容
-
jpeg-sandbox
- 描述:在浏览器中交互式编辑任何JPEG图像中的个别DCT块。
- 语言:JavaScript
-
epeg
- 描述:使用极小的开销进行极快的JPEG/JPG缩略图缩放,它利用了libjpeg的特性,即只解码重建所需大小图像的DCT系数即可加载图像。
- 语言:C
-
jpeg2dct
- 描述:直接来自 JPEG 的更快神经网络:jpeg2dct 子例程。
- 语言:C++
-
jpgjs
- 描述:JPEG/DCT数据解码器。
- 语言:JavaScript
-
jpegio
- 描述:一个Python包,用于访问JPEG文件格式的内部变量,如DCT系数和量化表。
- 语言:C
相关论文
- [1] Faster Neural Networks Straight from JPEG: 本文提出并探讨了直接在JPEG的DCT系数上训练CNN的简单理念。
- [2] Accelerating Faster Neural Networks Straight from JPEG: 这篇文章进一步探讨了如何通过DCT系数加速卷积神经网络的训练。
- [3] Faster Neural Networks Straight from JPEG - OpenReview: 提供了关于使用JPEG格式中可用的DCT系数作为卷积网络输入表示的有效性的评述。
相关文章:

JPEG图像格式加速神经网络训练--使用DCT训练CNN
JPEG图像格式加速神经网络训练 JPEG图像格式加速神经网络训练工作原理DCT系数与JPEG直接利用DCT系数阶段 1: 数据准备步骤 1: 读取JPEG文件结构步骤 2: 提取量化表和Huffman表步骤 3: 解析图像数据步骤 4: 反量化步骤 5: 获取DCT系数 阶段 2: 输入处理预处理 1: 正规化…...

【代码】Processing笔触手写板笔刷代码合集
代码来源于openprocessing,考虑到国内不是很好访问,我把我找到的比较好的搬运过来! 合集 参考:https://openprocessing.org/sketch/793375 https://github.com/SourceOf0-HTML/processing-p5.js/tree/master 这个可以体验6种笔触…...

Junit常用注解
注解是方法的“标签” 说明每个方法的“职责” Q:总共有那些注解? 参见官方的API文档 0.常用主机及其特点 BeforeClass 只会执行一次必须用static修饰常用来初始化测试需要的变量 Before 会执行多次(只要写一次)在每个Test执行执行之前执行可以和…...

【机器学习】支持向量机(SVM)
支持向量机(SVM) 1 背景信息 分类算法回顾 决策树 样本的属性非数值 目标函数是离散的 贝叶斯学习 样本的属性可以是数值或非数值目标函数是连续的(概率) K-近邻 样本是空间(例如欧氏空间)中的点目标函…...

C语言指针全解
1.什么是指针: 指针是存放地址的地方,是内存中最小单元的地址(编号),内存被分为一个个小的单元格,每一格有一个字节。比如说int a0;a会占据四个字节的大小,每个字节对应单元格都有自…...

rtt设备io框架面向对象学习-看门狗设备
1.看门狗设备基类 / components / drivers / include / drivers /下的watchdog.h 定义了如下看门狗设备基类 struct rt_watchdog_device { struct rt_device parent; const struct rt_watchdog_ops *ops; }; 看门狗设备基类的方法定义如下 struct rt_watchdog_ops { rt_err_…...

加固平板电脑丨三防智能平板丨工业加固平板丨智能城市管理
随着智能城市的不断发展,人们对于城市管理的要求也在不断提高,这就需要高效、智能的城市管理平台来实现。而三防平板就是一款可以满足这一需求的智能设备。 三防平板是一种集防水、防尘、防摔于一体的智能平板电脑,它可以在复杂的环境下稳定运…...

Redis的配置文件
目录 前言: 一、 Units 二、 INCLUDES 三、 NETWORK 3.1 bind 3.2 protected-mode 3.3 port 3.4 tcp-backlog 3.5 timeout 3.6 tcp-keepalive 3.7 示例演示 四、 GENERAL 4.1 daemonize 4.2 pidfile 4.3 loglevel 4.4 logfile 4.5 databases 五、…...

懒人精灵 之 Lua 捕获 json解析异常 ,造成的脚本停止.
Time: 2024年2月8日20:21:17 by:MemoryErHero 1 异常代码 Expected value but found T_END at character 12 异常代码 Expected value but found T_OBJ_END at character 223 处理方案 - 正确 json 示范 while true do--Expected value but found T_END at character 1--Ex…...

Python 列表操作详解
Python 是一种流行的编程语言,它以其简洁的语法和强大的功能而闻名。在 Python 中,列表是一种常用的数据结构,它可以包含任意类型的元素,并且可以随时添加或删除元素。在这篇文章中,我们将详细介绍 Python 列表的一些常…...

【Jenkins】Jenkins关闭Jenkins关闭、重启
目录 一、Jenkins关闭、重启 二、Jenkins服务的启动、停止方法。 一、Jenkins关闭、重启 1.关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit,关闭Jenkins服务。 例如:http://localhost:8081/exit 2.重启Jenkies 只有在Jenkins服务启动…...

【Linux】学习-动静态库
动静态库 头文件与库的区别 头文件一般而言,是声明和宏定义。头文件是在预处理阶段使用的 库文件是已经编译好的二进制代码。是一种目标文件,库文件是在链接阶段使用的 对于头文件和库我们可以这样理解,就是头文件提供的是一个函数的声明&…...

人工智能之数学基础【最小二乘法】
原理 最小二乘法由勒让德(A.M.Legendre)于1805年在其著作《计算彗星轨道的新方法》中提出,主要思想是最小化误差二次方和寻找数据的最佳匹配函数,利用最小二乘法求解未知参数,使得理论值与观测值之差(即误差,或称为残差)的二次方和达到最小,即: E = ∑ i = 1 n ϵ …...

【Java安全】ysoserial-URLDNS链分析
前言 Java安全中经常会提到反序列化,一个将Java对象转换为字节序列传输(或保存)并在接收字节序列后反序列化为Java对象的机制,在传输(或保存)的过程中,恶意攻击者能够将传输的字节序列替换为恶…...

Nginx报错合集(502 Bad Gateway,504 Gateway nginx/1.18.0 (Ubuntu) 等等报错)
1.504 Gateway Time-outnginx/1.18.0 (Ubuntu) 日志报错: 2024/02/11 04:38:54 [error] 564#564: *29 upstream timed out (110: Connection timed out) while reading response header from upstream, client: *******, server: *******, request: "GE…...

Rust开发WASM,WASM Runtime运行
安装wasm runtime curl https://wasmtime.dev/install.sh -sSf | bash 查看wasmtime的安装路径 安装target rustup target add wasm32-wasi 创建测试工程 cargo new wasm_wasi_demo 编译工程 cargo build --target wasm32-wasi 运行 wasmtime ./target/wasm32-wasi/d…...

快速重启网络服务 IP Helper
有时候,因为需要配置虚拟机,又或者网络环境复杂的情况下。win10重启后,会造成网络服务失效。所以这时候需要重启网络服务。即重启IP Helper。每次 我的电脑->鼠标右键 管理->服务和应用程序->服务->IP Helper 右键重启࿰…...

【MySQL】MySQL函数学习和总结
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Ny0xnYjfHqF7s3aS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...

MySQL进阶查询篇(7)-触发器的创建和使用
MySQL数据库触发器的创建和使用 触发器(Trigger)是MySQL数据库中非常强大且有用的功能,它可以在特定的数据库事件发生时自动执行一段预定义的代码。触发器可以用于实现数据完整性约束、自动化业务逻辑、审计日志等功能。本文将介绍MySQL数据库中触发器的创建和使用…...

前端面试题——JS实现反转链式表
前言 反转单向链表就是将整个单链表的数据进行倒序的过程。 例如,如果反转之前的单链表是0->1->2->3,那么反转之后的单链表应该是3->2->1->0。这个操作通常是通过改变链表中每个节点的指针方向来实现的,即让每个节点的指…...

小周带你正确理解Prompt-engineering,RAG,fine-tuning工程化的地位和意义
有人会说:"小周,几天不见这么拉了,现在别说算法了,连code都不讲了,整上方法论了。" 我并没有拉!而且方法论很重要,尤其工程化的时候,你总得知道每种技术到底适合干啥&…...

【精选】java多态进阶——多态练习测试
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…...

Git详细讲解
文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作(git commit)2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操…...

k8s弃用docker后使用ctr导入镜像
很多公司的k8s安装比较早,在生产环境一般很少升级,因此还是老版本,在使用新版本的时候,容易陷入老版本的思维中,从而掉坑,这里记录一下整个排查过程,希望对遇到类似的同学起到一定的帮助。 k8s 抛弃弃用docker 学习容器技术的过程中,我看到有不少同学留言问 Kubernet…...

mxxWechatBot开发中..
大家伙,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 免责声明:该工具仅供学习使用,禁止使用该工具从事违法活动,否则永久拉黑封禁账号!!!本人不对任何工具的使用负责&am…...

C#系列-C#log4net日志保存到文件(15)
在C#中使用log4net将日志保存到文件是一个常见的做法。log4net是一个功能强大的日志记录框架,它允许你配置日志的输出格式、级别、目标(例如文件、控制台、数据库等)等。 下面是如何配置log4net以将日志保存到文件的基本步骤: 安…...

linux 08 文件查找
02. 第一. alias:起别名(可以输入别名就可以执行对应的命令),语法:alias 别名‘ls -l’ 第二. locate: locate 找不到最近的文件 更新locate 后 find命令: find: find 路径 选项 文件名&#x…...

【Java面试】数据类型常见面试题
什么是包装类型 将基本类型包装进了对象中得到的类型 基本类型和包装类型有什么区别 用途不同:基本类型一般用于局部变量,包装类型用于其他地方存储方式不同:用于局部变量的基本类型存在虚拟机栈中的局部变量表中,用于成员变量…...

unity学习案例总结
动态标签 GitHub - SarahMit/DynamicLabel3D: Simple dynamic labels for a 3D Unity scene...

Halcon 频域缺陷检测
文章目录 傅里叶变换频谱矩形圆菱形黑白相间的亮带去除图纹(反傅里叶变换)去除图纹滤波器处理 Halcon 频域空间域检测缺陷Halcon 频域差分空间域 缺陷检测(lines_gauss 提取线)Halcon 频域差分空间域(blob特征…...