揭秘ImageNet均值与标准差:为何它们成为图像预处理的黄金标准

news2026/4/30 2:58:54
1. 从“洗菜”到“炒菜”理解图像预处理的本质如果你刚开始接触深度学习特别是计算机视觉任务看到代码里那一行mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]时是不是感觉像在念一串神秘的咒语我第一次看到的时候也是一头雾水心想这堆小数点到底在干嘛为什么几乎所有的图像处理教程都默认用这组数字后来踩过不少坑训练过几个模型之后我才彻底明白这组数字不是什么魔法而是深度学习世界里一个非常接地气的“黄金标准”。它就像我们炒菜前要洗菜、切菜一样是图像“下锅”前必不可少的准备工作。简单来说图像预处理的核心目标是把五花八门、来源各异的图片变成一种“标准格式”好让神经网络这个“大厨”能更高效、更稳定地“学习”和“烹饪”。想象一下你给大厨的食材有的是刚从泥里挖出来的带土萝卜有的是超市洗好的净菜大小、湿度、干净程度都不一样大厨每次处理都得调整方法多累啊。预处理就是帮大厨把所有食材都洗好、切成同样大小的丁他只需要专注炒菜的火候和调味就行了。在深度学习中这个“洗切”过程通常包括调整大小、归一化而减去均值mean再除以标准差std就是归一化里最关键、最常用的一步专业点叫“标准化”或“正则化”。那么为什么偏偏是[0.485, 0.456, 0.406]和[0.229, 0.224, 0.225]这组数字呢这就要说到一个在计算机视觉领域家喻户晓的数据集——ImageNet。这组数字正是从ImageNet数据集的上百万张图片中统计计算出来的RGB三通道的均值和标准差。它之所以成为“黄金标准”不是因为它们本身有多特殊而是因为基于ImageNet预训练的模型比如ResNet、VGG、AlexNet太成功了这些模型成为了我们解决其他视觉任务的强大起点。为了方便大家直接使用这些现成的“大厨”自然也就沿用了他们习惯的“食材处理标准”。接下来我就带你深入后厨看看这组数字是怎么来的以及我们到底该怎么用、什么时候该用、什么时候不该用。2. 追根溯源ImageNet均值与标准差是如何炼成的要理解这组数字的权威性我们得先回到ImageNet数据集本身。ImageNet不是一个普通的图库它是一个按WordNet层次结构组织的大规模图像数据库光是用于视觉识别挑战赛ILSVRC的数据子集就包含了超过120万张训练图像、5万张验证图像和10万张测试图像涵盖了1000个物体类别。当年研究人员为了计算出一个能代表这海量数据分布的统计量可是下了不少功夫。具体是怎么算的呢思路其实很直接但计算量巨大。我们拆开来看均值Mean的计算对于数据集中的每一张RGB图片分别计算其红色R、绿色G、蓝色B三个通道所有像素值的平均值。假设一张图片的R通道所有像素值加起来是Sum_R像素总数是N那么这张图片的R通道均值就是Sum_R / N。然后对数据集中的上百万张图片分别计算出每张图片的R、G、B通道均值再对这些均值求一个总体的平均值。最终得到的三个数就是整个ImageNet数据集在R、G、B三个通道上的全局均值。计算出来的原始值大约是[123.68, 116.779, 103.939]像素值范围0-255。标准差Std的计算标准差衡量的是数据的离散程度。计算完均值后对于每张图片的每个通道计算每个像素值与该通道全局均值的差值的平方然后对所有图片的所有像素点求这些平方值的平均值最后开方。这个过程同样针对R、G、B三个通道分别进行最终得到三个通道各自的标准差。原始计算值大约在[58.395, 57.12, 57.375]左右像素值范围0-255。等等你可能会发现我们常用的[0.485, 0.456, 0.406]和[0.229, 0.224, 0.225]跟上面这两组原始数字对不上啊这里就涉及到另一个关键操作像素值范围的缩放。在深度学习框架中为了计算方便和数值稳定性我们通常会把像素值从0-255的整数范围归一化到0-1或者-1到1的浮点数范围。最常见的做法是先除以255让像素值落在[0, 1]区间。那么原始的均值也需要同步缩放123.68 / 255 ≈ 0.485116.779 / 255 ≈ 0.456103.939 / 255 ≈ 0.406。标准差也一样58.395 / 255 ≈ 0.22957.12 / 255 ≈ 0.22457.375 / 255 ≈ 0.225。看我们熟悉的“黄金数字”就这么诞生了。我当初自己尝试用PyTorch在小型数据集上复现这个计算过程时深刻体会到了“大数据统计”的意义。当你只计算几十张风景照的均值时可能得到[0.3, 0.25, 0.2]这样偏暗的值计算一堆卡通图片时均值可能非常亮。但ImageNet这上百万张图片覆盖了自然物体、动物、场景、人造物品等几乎你能想到的一切它的统计特征——均值接近0.5中等亮度三个通道值略有差异符合自然图像中绿色通常稍多的规律标准差在0.23左右——就具有了极强的普适性和稳定性。它就像是为自然图像世界定下了一个“亮度与色彩分布”的参考坐标系。3. 不仅仅是归一化标准化背后的数学与物理意义很多教程会把“减去均值除以标准差”这个操作轻描淡写地称为“归一化”但严格来说它应该叫“标准化Standardization”。归一化Normalization通常指将数据缩放到一个固定范围如[0,1]而标准化则是将数据变换为均值为0、标准差为1的分布。这一步对神经网络训练至关重要我把它比作给运动员创造一个公平的竞赛环境。减去均值Mean Subtraction的物理意义非常直观消除共有的亮度偏差。自然图像虽然千变万化但整体上由于光照、相机曝光等因素会有一个共同的“基础亮度”。这个基础亮度对于识别物体本身比如猫的轮廓、车的形状来说是无关紧要的“背景噪音”。减去全局均值就相当于把每张图片都拉到同一个亮度基准线上让神经网络更专注于图像中物体相对亮度的变化即纹理、边缘等特征而不是去适应有的图片整体偏亮、有的整体偏暗。这能大大加速模型训练的收敛速度。你可以试试不减去均值直接训练会发现损失函数下降得慢很多而且容易不稳定。除以标准差Division by Standard Deviation的作用则更精妙一些。它的核心目的是让每个特征维度这里是R、G、B三个通道的数据尺度Scale变得一致。想象一下如果R通道的像素值范围是0-200而B通道的范围是0-50那么R通道数值的微小变化对模型的影响就会远远大于B通道。这就像用米和毫米同时去衡量一个物体的尺寸单位不统一模型优化起来就会“瘸腿”某些权重更新会特别剧烈某些则几乎不动。除以各自通道的标准差后所有通道的数据分布都被“压扁”或“拉宽”到标准差为1的尺度确保了每个输入特征对模型初始更新的贡献是均衡的。这在采用随机梯度下降SGD等优化算法时能有效缓解梯度爆炸或消失的问题让训练过程更加平稳。在实际的代码操作中这两个步骤是连续进行的。我们通常使用torchvision.transforms.Normalize(mean, std)这个变换。它内部做的事情就是input (input - mean) / std。经过这个变换后你的图像数据理论上会服从一个均值为0、标准差为1的标准正态分布当然这只是理想情况实际分布会接近。这对于很多激活函数如Sigmoid, Tanh和权重初始化方法如Xavier初始化来说是一个友好的输入分布能让网络在训练初期就处于一个良好的状态。4. 黄金标准的普适性为何你的任务也能用ImageNet的统计量这是最让人疑惑也最容易引发争论的一点我做的明明是医学影像分析比如X光片或者遥感图像识别或者动漫头像生成跟ImageNet里的猫狗汽车完全不是一回事为什么大家都建议我用这组参数这不是“张冠李戴”吗我刚开始也这么想觉得这不科学。但经过多个项目的实践我发现对于绝大多数情况使用ImageNet的均值和标准差作为预处理参数是一个非常实用且高效的选择。原因可以从几个层面来理解第一预训练模型的“惯性”力量。这是最直接、最主要的原因。如今我们很少从零开始From Scratch训练一个深度神经网络尤其是在数据量有限的情况下。更常见的做法是使用在ImageNet上预训练好的模型如PyTorch Torchvision或TensorFlow Keras中提供的模型进行迁移学习。这些模型的权重是在输入数据经过mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]标准化后通过数百万张图片学习得到的。模型的每一层卷积核、每一个神经元都已经适应了这种特定分布的数据流。如果你突然换用另一组统计量进行预处理就相当于给一个吃惯了中餐的厨师突然提供西餐食材他之前积累的“厨艺”模型权重效果会大打折扣你需要花更多时间训练轮数让他重新适应甚至可能永远达不到原来的性能。所以当你使用预训练模型时严格遵守它训练时所使用的预处理参数是保证迁移学习成功的第一铁律。第二自然图像统计特性的共通性。尽管医学影像、卫星图像的成像原理和内容与自然照片不同但它们作为数字图像在像素值的统计分布上往往与自然图像有相似之处。比如大部分图像的整体亮度不会集中在0或255的极端值而是有一个相对集中的分布。ImageNet的统计量作为一个来自海量自然图像的、平滑的、通用的统计先验能够为这些“非自然”图像提供一个合理的标准化中心。虽然它不是最优的但通常是一个安全的、不会出大错的起点。我做过一个实验在一个人脸表情识别数据集上分别使用ImageNet统计量和数据集自身统计量进行标准化最终模型准确率相差不到1%。但计算自身统计量却需要额外的数据遍历开销。第三工程实践上的便利性与一致性。在工业界和学术界使用这组“黄金标准”已经成为一种默认约定。它简化了代码的复用、模型的比较和结果的复现。当你阅读一篇论文或一个开源项目看到它使用了这组参数你就能立刻明白其预处理流程并能无缝地用自己的数据跑起来。这种一致性极大地降低了协作和研究的门槛。对于新手来说更是一个“开箱即用”的可靠选择避免了在项目初期纠结于统计量计算而分散精力。当然这绝不意味着它是“放之四海而皆准”的真理。它的普适性是一种工程上的折中和惯例在特定场景下我们确实需要打破这个惯例。5. 打破惯例何时需要计算并使用自己的统计量虽然ImageNet的统计量很好用但盲从永远是技术实践的大忌。在我的经验里遇到以下几种情况我会毫不犹豫地选择计算自己数据集的均值和标准差情况一你的数据分布与ImageNet截然不同。这是最需要警惕的情况。典型例子包括二值图像或分割掩码像素值只有0和255或0和1其均值可能接近0.5但标准差会非常小与ImageNet的0.22相差甚远。强行使用会严重扭曲数据。红外热成像、深度图这类图像通常只有一个通道或者数值范围代表温度、距离与RGB色彩空间毫无关系。经过特殊处理的图像比如已经做了直方图均衡化、或者对比度拉伸到极致的图像。风格化极强的数据例如全部是黑色背景的产品图或者整体色调高度一致的漫画。此时数据集的均值可能极度偏向某个值。情况二你计划从零开始From Scratch训练模型。如果你的数据量足够大比如几十万、上百万足以训练一个大型网络那么为你的数据“量身定制”预处理参数是最优解。这能让模型从第一轮迭代开始就学习最适合你数据分布的特征。计算自己数据集的统计量非常简单下面给一个PyTorch的示例代码import torch from torchvision import datasets, transforms from tqdm import tqdm def compute_mean_std(dataset_loader): 计算数据集中所有图像每个通道的均值和标准差 dataset_loader: 数据加载器每次返回一批 (images, labels) mean torch.zeros(3) std torch.zeros(3) total_pixels 0 for images, _ in tqdm(dataset_loader): # images shape: [batch_size, 3, H, W] 且像素值范围应在[0,1] batch_samples images.size(0) images images.view(batch_samples, images.size(1), -1) # 将每张图展平为 [C, H*W] mean images.mean(2).sum(0) # 对每张图求各通道均值再按批次累加 std images.std(2).sum(0) total_pixels batch_samples mean / total_pixels std / total_pixels return mean, std # 示例计算自定义数据集假设图片已缩放至[0,1]的统计量 transform transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor(), # 自动将像素值从[0,255]转换为[0,1] ]) custom_dataset datasets.ImageFolder(rootyour_data_path, transformtransform) data_loader torch.utils.data.DataLoader(custom_dataset, batch_size32, shuffleFalse) custom_mean, custom_std compute_mean_std(data_loader) print(f自定义数据集均值 (RGB): {custom_mean}) print(f自定义数据集标准差 (RGB): {custom_std})运行这段代码你就能得到专属于你数据集的mean和std。记住这里计算的是像素值在[0,1]范围内的统计量。如果你的ToTensor()转换后范围是[0,1]那么计算出的值可以直接用于transforms.Normalize。情况三你对模型性能有极致追求且计算资源允许。在大型竞赛或关键业务模型中哪怕0.1%的性能提升都值得争取。此时将“使用自定义统计量”作为一个超参数进行实验验证是值得的。你可以对比使用ImageNet统计量、自定义统计量、甚至不同数据增强策略下的统计量看哪个能带来更好的验证集性能。6. 实战指南在PyTorch和TensorFlow中正确应用标准化理论说了一大堆最后还是要落到代码上。怎么用才是对的这里我结合自己踩过的坑给出PyTorch和TensorFlow/Keras框架下的标准写法及注意事项。PyTorch (Torchvision) 标准流程在PyTorch中我们通常使用torchvision.transforms组合来构建数据预处理管道。关键是要注意操作顺序。from torchvision import transforms from PIL import Image # 标准且正确的流程 transform transforms.Compose([ transforms.Resize(256), # 1. 调整大小 transforms.CenterCrop(224), # 2. 中心裁剪经典ImageNet输入尺寸 transforms.ToTensor(), # 3. 转换为Tensor并缩放到[0,1]范围 ****关键**** transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # 4. 标准化 ]) # 加载一张图片并应用变换 img Image.open(your_image.jpg).convert(RGB) # 确保是RGB三通道 input_tensor transform(img) # 此时tensor的shape为 [C, H, W]数值范围已被标准化千万要注意的顺序陷阱ToTensor()必须放在Normalize()之前因为ToTensor()会把PIL Image或numpy数组值域0-255整数转换为PyTorch Tensor值域0.0-1.0浮点数。而Normalize的mean和std参数是针对值域在[0,1]的输入设计的。如果你先Normalize再ToTensor或者提供的mean/std是针对0-255范围的如[123.68, 116.779, 103.939]就会得到完全错误的结果图片看起来会是一片白或者一片黑。这是我早期常犯的错误之一。TensorFlow / Keras 标准流程在TensorFlow中预处理方式更灵活。如果你使用tf.keras.applications中的预训练模型它们通常内置了预处理函数。import tensorflow as tf from tensorflow.keras.applications.resnet50 import preprocess_input import numpy as np # 方法一使用模型自带的预处理函数推荐最不容易出错 # preprocess_input 函数内部已经包含了基于ImageNet的均值减法等操作不同模型实现可能略有差异 img tf.keras.preprocessing.image.load_img(your_image.jpg, target_size(224, 224)) img_array tf.keras.preprocessing.image.img_to_array(img) # 形状 (224,224,3)值域0-255 img_array np.expand_dims(img_array, axis0) # 扩展为 (1,224,224,3) img_preprocessed preprocess_input(img_array) # 应用预处理 # 方法二手动构建预处理层更透明易于自定义 from tensorflow.keras.layers import Rescaling # 创建一个预处理模型或序列 # 注意Rescaling(1./255) 将值域从[0,255]映射到[0,1] # 但ResNet50等模型的preprocess_input通常做的是减去均值基于0-255的均值如[123.68, 116.779, 103.939]而非除255。 # 所以手动实现时需查清对应模型的具体要求。 inputs tf.keras.Input(shape(224, 224, 3)) # 假设我们采用除以255再标准化的流程 x Rescaling(scale1./255)(inputs) # 缩放到[0,1] # 这里需要自定义一个减去均值除以标准差的层Keras没有内置可以Lambda层或自定义 mean [0.485, 0.456, 0.406] std [0.229, 0.224, 0.225] x tf.keras.layers.Lambda(lambda img: (img - mean) / std)(x) preprocessing_model tf.keras.Model(inputsinputs, outputsx)一个重要的检查技巧可视化预处理后的图片。在将数据送入网络前我养成了一个习惯将标准化后的Tensor反变换回可视化的图片看看是否还“像”个东西。如果图片变成了一堆无意义的噪点或纯色块那说明预处理参数或顺序肯定错了。下面是一个PyTorch的反标准化函数def denormalize(tensor, mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]): 将标准化后的Tensor反变换回[0,1]范围用于可视化。 tensor: 形状为 [C, H, W] 或 [B, C, H, W] dtype tensor.dtype mean torch.as_tensor(mean, dtypedtype, devicetensor.device) std torch.as_tensor(std, dtypedtype, devicetensor.device) # 反变换: output tensor * std mean tensor tensor * std.view(-1, 1, 1) mean.view(-1, 1, 1) # 确保值在[0,1]内由于浮点误差可能略微超出 return torch.clamp(tensor, 0, 1) # 使用示例 normalized_tensor transform(your_image) # 经过Normalize的tensor denorm_tensor denormalize(normalized_tensor) # 然后将denorm_tensor转换为PIL Image或numpy数组显示7. 常见误区与进阶思考围绕ImageNet的均值和标准差新手甚至有些经验的开发者都可能陷入一些误区。我在这里集中梳理一下误区一这组数字是“最优”的魔法参数。绝对不是。它只是一个在庞大、多样的自然图像数据集上计算出的统计平均值。对于你的特定任务它可能不是最优的但大概率是“足够好”且安全的。不要神化它。误区二所有预训练模型都用这组参数。大部分基于ImageNet训练的CNN模型ResNet, VGG, DenseNet, MobileNet等确实使用这组参数。但是一些较新的模型如Vision Transformers, ViT或其训练方法可能会采用不同的预处理流程比如直接使用0-255范围的像素值或者使用其他统计量。务必查阅你所使用模型的官方文档或源代码确认其预处理要求。例如某些EfficientNet变种会使用mean[0.5, 0.5, 0.5], std[0.5, 0.5, 0.5]这实际上是将像素值从[0,1]映射到[-1,1]。误区三数据增强Data Augmentation应该在标准化之前还是之后这是一个非常好的问题。正确的顺序是先做数据增强再做标准化。数据增强如随机翻转、旋转、裁剪、色彩抖动是在原始图像域进行的操作目的是增加数据的多样性。这些操作完成后我们得到了一张“新的”图像然后再对它进行标准化减去均值、除以标准差使其符合模型输入的分布。在PyTorch的transforms.Compose中ToTensor()和Normalize()通常放在所有空间和色彩变换的最后。进阶思考通道顺序RGB vs BGR问题。这是一个经典的“坑”。OpenCV默认读取图像的通道顺序是BGR而PIL Image和大多数深度学习框架PyTorch, TensorFlow内部处理的是RGB顺序。如果你用OpenCV读图然后直接套用为RGB设计的mean/std就会导致颜色通道错乱。解决方法有两种1) 用OpenCV读图后用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)转换2) 直接使用PIL库读取图片PIL.Image.open它默认就是RGB。我强烈推荐第二种更省心兼容性也更好。最后我想说的是理解并正确使用ImageNet的均值和标准差是进入计算机视觉深度学习领域一个非常扎实的起点。它背后体现的是数据标准化、迁移学习、工程实践惯例等一系列重要概念。当你熟练运用它之后就可以更自信地去探索何时应该打破这个惯例为自己的数据寻找更合适的“标准”。记住没有一成不变的规则只有对数据和模型更深刻的理解。下次你在代码里写下这组数字时希望你能清楚地知道它在为你做什么以及为什么这么做。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…