从交叉熵到SupCon:深入解析监督对比损失的核心思想与实现
1. 从“认人”到“认脸”为什么我们需要超越交叉熵大家好我是老张在AI这个行当里摸爬滚打了十来年从早期的传统机器学习一路跟到现在的深度学习大模型。今天想和大家聊聊一个特别有意思的话题损失函数。别一听“函数”就觉得头大咱们今天不搞复杂的数学推导就用大白话聊聊为什么在图像分类这些任务里大家开始慢慢“嫌弃”用了很多年的交叉熵损失转而拥抱像SupConSupervised Contrastive Learning Loss监督对比损失这样的新方法。想象一下你是一个刚入职的保安负责在小区门口认人。老板给了你一本花名册上面有每个住户的名字和一张标准证件照。你的任务就是每当有人进来你就对照花名册看看他像谁然后放行。这个过程就特别像传统的交叉熵损失。花名册上的照片和名字就是模型要学习的“权重”。模型也就是你看到一个新来的人输入图像就拼命在脑子里计算这个人和花名册上每一张照片的“像不像”程度计算logits分数最后找出最像的那个喊出名字输出预测类别。你学习的核心是“这个人”和“花名册上的标准模板”之间的匹配关系。这个方法直接有效干了这么多年功劳不小。但它有几个“暗坑”。第一它太“照本宣科”了。如果住户今天换了发型、戴了口罩、或者光线不好你可能就认不出来了因为你的判断极度依赖于和那张单一标准照的对比。第二它没有让保安之间形成“共识”。假设住户老王和他的双胞胎兄弟都住在小区交叉熵只关心来的人像不像“老王”这个模板但它不会主动去学习“老王们”所有老王这个人应该长得有多像以及老王和他兄弟应该长得有多不像。它只关心最终的名字对不对。而SupCon的思路更像是一个经验丰富的保安队长带新人的方式。队长不会只给你看标准照他会把小区里所有住户都叫过来让你现场认。他会指着人群说“看这几个都是老王他们是一家的长得像你得多看看他们共同的特点那边那几个是老李家的和老王家长得不一样你得能区分开。” 在这个过程中你学习的不是“来的人像不像模板”而是直接在人群中观察和总结同一家人同一类别的脸有哪些共同特征特征相似不同家人的脸有哪些区别特征相异。你学到的是一套“认脸”的底层能力而不是“查户口”的映射技巧。这就是从交叉熵到SupCon最根本的范式转变从学习一个“分类器”查花名册转变为学习一个强大的“特征提取器”练就火眼金睛。后者学到的特征对于换发型、戴口罩、光线变化数据增强、甚至遇到没登记的新亲戚下游迁移任务都具备更强的适应性和鲁棒性。接下来我们就掰开揉碎看看这个“保安队长训练法”具体是怎么运作的。2. 庖丁解牛拆解SupCon损失函数的每一个部件理解了核心思想我们来看看SupCon的具体实现公式。别怕我们一步步来我保证你看完就能懂。原论文的公式长这样L^{sup} \sum_{i1}^{2N} L_i^{sup} \sum_{i1}^{2N} \frac{-1}{|P(i)|} \sum_{p \in P(i)} \log \frac{\exp(z_i \cdot z_p / \tau)}{\sum_{a \in A(i)} \exp(z_i \cdot z_a / \tau)}乍一看有点唬人但我们把它分解成几个关键部分就非常清晰了。这个公式描述的是对一个批次Batch里所有样本计算损失的总和。我们重点关注其中一个样本i的损失L_i^{sup}理解了它整体求和就是顺理成章的事。2.1 核心角色定义锚点、正样本与负样本首先我们要明确几个关键角色这是理解对比学习的基石锚点样本就是当前我们关注的这个样本i。你可以把它想象成保安队长正在考你的那个“目标人物”。正样本集合 P(i)这是SupCon的“监督”灵魂所在。它不仅仅包括锚点样本i通过数据增强比如裁剪、变色得到的另一个视图这是自监督对比学习如SimCLR的做法更重要的是它包括当前整个训练批次中所有和锚点i属于同一个真实类别的其他样本也就是说如果批次里一共有5张“猫”的图片可能来自不同的猫不同的角度那么对于其中任意一张猫图作为锚点另外4张猫图都是它的正样本。这相当于保安队长把小区里所有老王都拉到你面前说“这些都是一家的你好好看看。”负样本集合在公式的分母求和部分a \in A(i)A(i)通常代表批次中除i本身外的所有样本。但注意在分子中我们已经为正样本p单独计算了相似度。因此对于锚点i来说所有不属于P(i)的样本都可以被视为负样本。也就是所有“非猫”的图片比如狗、车、房子等。队长会说“这些都不是老王家的你得和老王家的区分开。”特征向量 z这是锚点样本i经过神经网络主干比如ResNet和一个小小的投影头通常是一两层MLP后得到的向量。最关键的一步是这个向量会进行L2归一化即将其长度缩放到1。这样做之后两个特征向量z_i和z_j的点积z_i·z_j就直接等于它们夹角的余弦值也就是余弦相似度取值范围在[-1, 1]之间。相似度越高点积值越接近1。温度参数 τ这是一个非常重要的超参数。它控制着损失函数对“难负样本”的敏感程度。什么是难负样本就是那些和锚点长得有点像但类别不同的样本比如豹猫和家猫。当τ值较小时exp(z_i·z_a / τ)会对较大的相似度值正样本产生非常陡峭的响应同时对那些相似度稍高的负样本难负样本给予更严厉的惩罚从而让模型更努力地“拉开”这些容易混淆的样本。τ太大则会导致分布过于平滑学习动力不足。2.2 损失计算一场“团结与斗争”的游戏现在我们代入保安的情境看看公式在做什么对于锚点“老王A”分子exp(z_i · z_p / τ)。我们计算“老王A”和每一个“真老王”正样本集合P(i)里的每一个p的相似度并求指数。这鼓励模型让同一个人的特征向量尽可能靠近余弦相似度趋近于1。分母∑ exp(z_i · z_a / τ)。我们计算“老王A”和批次里所有其他人包括其他老王和其他所有人的相似度之和。这迫使模型在拉近与真老王距离的同时还必须推开所有其他人。对数与求和log(分子/分母)这个操作本质上是计算“老王A与真老王们的相似度”占“老王A与全世界人相似度总和”的比例。我们希望这个比例越大越好所以前面加个负号变成最小化损失。最后1/|P(i)|是对所有正样本求个平均确保不管有几个“真老王”在场损失尺度是稳定的。所以SupCon的优化目标非常直观对于每一个样本拉近它与同类样本的距离拉远它与所有异类样本的距离。整个训练过程就是让模型在特征空间里把同一类别的数据点“抱成一团”并把不同类别的数据团“推得越远越好”。3. 与交叉熵的终极对决空间、目标与哲学理解了SupCon的运作机制我们再回头和交叉熵进行一场深度对比你会发现它们的区别远不止公式不同而是代表了两种不同的学习哲学。3.1 战场不同样本空间 vs. 类别空间这是最根本的区别。我们用一个简单的代码比喻来说明。交叉熵的战场在“类别空间”或“参数空间”。它学习的是一个分类器权重矩阵W。# 交叉熵的典型前向传播过程简化 features backbone(image) # 提取特征形状 [batch_size, feature_dim] logits linear_classifier(features) # 线性层形状 [batch_size, num_classes] # logits[i, j] features[i] · W[:, j] b[j] loss cross_entropy(logits, labels)模型的核心是学习那个W矩阵。W的每一列可以看作一个“类别原型向量”。计算features[i]和W[:, j]的点积就是在问“第i个样本的特征像不像第j个类别的标准模板” 损失函数促使样本特征向它所属类别的原型向量靠拢并远离其他类别的原型向量。它比较的是“样本”和“抽象类别模板”。SupCon的战场则在“样本空间”或“特征空间”。它没有这个显式的分类器W。# SupCon的典型前向传播过程简化 features backbone(image) # 提取特征 projected_features projection_head(features) # 投影头形状 [batch_size, proj_dim] normalized_features F.normalize(projected_features, p2, dim1) # L2归一化 # 计算批次内所有样本对之间的相似度矩阵 similarity_matrix torch.mm(normalized_features, normalized_features.T) # [2N, 2N] loss supervised_contrastive_loss(similarity_matrix, labels, temperaturetau)模型的核心是直接调整backbone和projection_head的参数使得归一化后的特征向量z满足对比关系。它直接比较“样本”和“样本”。类别信息labels在这里不是用来计算和模板的匹配度而是用来定义哪些样本之间应该互相靠近正样本对。3.2 目标不同判决器 vs. 编码器由此衍生出两者截然不同的学习目标。交叉熵训练一个“判决器”。它的终极目标是做对分类。特征提取backbone只是为最终的分类判决服务。它倾向于学习到那些对区分类别最有效的、但可能是表面的、脆弱的特征。就像一个只为应付考试的學生只背诵考点知识体系不扎实。SupCon训练一个“编码器”。它的终极目标是获得好的特征表示。分类任务在它这里被解耦了先用SupCon损失训练一个强大的特征编码器训练完成后冻结这个编码器的参数然后只需要在其输出的特征上训练一个非常简单的线性分类器甚至就是一个逻辑回归就能达到很好的效果。这证明它学到了本质的、可分离的、泛化性强的特征。就像一个理解概念本质的學生能举一反三应对各种题型。3.3 公式的隐秘联系统一的Softmax视角虽然战场和目标不同但有趣的是两者的损失函数在数学形式上可以通过一个统一的视角来理解那就是Softmax 交叉熵的框架。我们把交叉熵损失-log(exp(s_y) / ∑_j exp(s_j))稍微改写一下。这里的s_y是样本对应真实类别y的logit分数。我们可以把这个“真实类别”想象成一个特殊的“正样本”而其他所有类别都是“负样本”。那么交叉熵就是在最大化“样本与真实类别原型”的相似度相对于“样本与所有类别原型”相似度总和的比例。SupCon的损失-1/|P(i)| ∑_{p in P(i)} log(exp(sim_ip) / ∑_a exp(sim_ia))有着几乎一模一样的形式只不过它的“正样本”从一个真实类别变成了多个同类的所有样本。它的“相似度”从样本-原型点积(features · W_y)变成了样本-样本点积(z_i · z_p)。它是对多个正样本的损失进行了平均。从这个角度看交叉熵可以看作是SupCon在“类别原型空间”中且每个锚点只有一个正样本其类别原型的特例。SupCon则将这个对比过程从抽象的类别空间拉回到了具体的样本特征空间并充分利用了批次内的所有监督信号来构建更丰富的正样本对。这种丰富的正样本对正是其鲁棒性和泛化能力的关键来源。4. 实战指南手把手实现SupCon损失理论说了这么多不敲代码都是纸上谈兵。下面我用PyTorch带你实现一个清晰、高效的SupCon损失函数并分享几个我踩过坑才总结出来的调参经验。4.1 纯手工实现与逐行解析import torch import torch.nn as nn import torch.nn.functional as F class SupConLoss(nn.Module): 监督对比损失SupCon Loss的实现 假设输入特征已经过L2归一化。 def __init__(self, temperature0.07, contrast_modeall): super(SupConLoss, self).__init__() self.temperature temperature self.contrast_mode contrast_mode # 通常用‘all’ def forward(self, features, labelsNone, maskNone): 参数: features: 归一化后的特征向量形状为 [batch_size, feature_dim]。 注意一个batch通常包含原始样本及其增强因此batch_size2N。 labels: 每个样本的标签形状为 [batch_size, ]。如果为None则退化为自监督对比损失。 mask: 可选的布尔掩码形状 [batch_size, batch_size]指定哪些样本对是正样本。 如果提供了mask则忽略labels。 返回: 损失值。 device features.device batch_size features.shape[0] if labels is not None and mask is not None: raise ValueError(不能同时指定labels和mask) # 1. 计算所有样本对之间的相似度矩阵 # features已归一化所以点积即余弦相似度 similarity_matrix torch.matmul(features, features.T) # [batch_size, batch_size] # 2. 构建正样本掩码 if mask is None: if labels is None: # 自监督模式正样本是自身的增强视图 # 假设batch是[img1_aug1, img1_aug2, img2_aug1, img2_aug2, ...] mask torch.eye(batch_size, dtypetorch.bool, devicedevice) # 我们需要的是“不同视图”之间也是正样本所以需要更复杂的掩码 # 这里简化假设正样本对是每个样本与它的另一个增强配对 # 更通用的自监督实现需要知道配对索引这里不展开 pass # 为了聚焦监督学习我们跳过自监督分支 else: # 监督模式核心逻辑 labels labels.contiguous().view(-1, 1) # [batch_size, 1] # 比较标签是否相等生成布尔矩阵 mask torch.eq(labels, labels.T).bool() # [batch_size, batch_size] # 将对角线自己与自己置为False因为在分母中我们通常不包含自己 # 但注意在SupCon原论文公式中分母求和A(i)包含除i外的所有样本包括正样本。 # 正样本在分子中已被计算在分母中也被计算这是合理的。 # 我们只需要在计算logits时将对角线的相似度乘上一个大的负数使其在softmax中权重为0即可。 else: # 使用用户提供的掩码 mask mask.bool() # 3. 将对角线位置设为极负值在softmax中近似为0排除自身 # 创建一个单位矩阵将对角线设为True self_mask torch.eye(batch_size, dtypetorch.bool, devicedevice) # 将对角线位置的相似度设为一个很大的负数这样exp()后就接近0 similarity_matrix similarity_matrix.masked_fill(self_mask, -1e9) # 4. 计算对比损失 # 除以温度参数 logits similarity_matrix / self.temperature # [batch_size, batch_size] # 计算exp(logits) exp_logits torch.exp(logits) # [batch_size, batch_size] # 计算分母对每一行每个锚点求和所有样本除自身外的exp_logits # 因为我们已经把自身的logits设为了-1e9其exp≈0所以这里直接按行求和即可 log_prob_denominator torch.log(exp_logits.sum(dim1, keepdimTrue)) # [batch_size, 1] # 计算分子对每个锚点i只对它的正样本mask[i]为True的logits求和 # 注意mask[i, i]是False因为我们已经用self_mask排除了自身 # 我们需要计算 log( sum_{p in P(i)} exp(logits[i,p]) ) # 但是损失公式是 -1/|P(i)| * sum_{p in P(i)} log( exp(logits[i,p]) / sum_a exp(logits[i,a]) ) # 我们可以利用log的性质log(exp(logits_ip) / D) logits_ip - log(D) # 所以对于单个正样本p其贡献是 (logits_ip - log(D)) # 对于所有正样本求和后再除以|P(i)| # 计算 logits_ip - log(D) 对于所有i,p log_prob logits - log_prob_denominator # [batch_size, batch_size] # 只取正样本位置的值 pos_log_prob (mask * log_prob).sum(dim1) # [batch_size] # 计算每个锚点的正样本数量排除自身 pos_count mask.sum(dim1) # [batch_size] # 避免除零如果某个类别在批次中只有一个样本则正样本数可能为0但至少有其增强视图 # 在监督模式下如果使用增强至少有一个增强视图是正样本。 # 这里我们加一个小的epsilon防止除零 pos_count pos_count.clamp(min1e-9) # 计算每个样本的损失 - (1/|P(i)|) * sum_{p} (logits_ip - log(D)) loss_per_sample -pos_log_prob / pos_count # [batch_size] # 求整个批次的平均损失 loss loss_per_sample.mean() return loss关键点解析与踩坑提醒特征归一化是必须的输入特征features必须在传入损失函数前进行L2归一化。这通常通过在投影头后添加一个F.normalize层来实现。如果不归一化点积的大小会受到特征向量模长的影响破坏相似度的可比性训练极易不稳定。温度参数 τ 需要精细调节这是我踩过最大的坑。τ不是一个固定值。对于不同的数据集、不同的批次大小、不同的特征维度最优的τ可能不同。一般从0.05到0.2之间开始尝试。一个经验是批次越大特征维度越高可以尝试稍大一点的τ反之则小一点。τ太小会导致梯度爆炸训练震荡τ太大会导致学习动力不足收敛缓慢。批次大小至关重要SupCon的效果严重依赖于批次大小。因为负样本来自批次内的其他样本批次越大提供的负样本就越丰富、越多样模型学到的特征判别力就越强。在实际项目中如果GPU内存有限无法使用很大的批次可以考虑使用动量编码器MoCo系列方法或内存库Memory Bank等技术来维护一个大的负样本队列。投影头的设计原论文使用了一个简单的单层或双层MLP作为投影头将主干网络提取的特征映射到对比损失空间。这个投影头在训练后是丢弃不用的我们只保留主干网络作为特征提取器。投影头的维度也是一个超参数通常128或256维效果就不错。4.2 在真实训练循环中集成# 假设我们有一个模型包含主干网络和投影头 model YourBackbone() # 例如 ResNet projection_head nn.Sequential( nn.Linear(backbone_feature_dim, 512), nn.ReLU(), nn.Linear(512, 128) # 投影到128维对比空间 ) criterion SupConLoss(temperature0.07) # 训练循环 for images, labels in dataloader: # images: [batch_size, C, H, W] # 假设我们使用两种增强视图 aug1, aug2 your_augmentation_pipeline(images) # 形状均为 [batch_size, C, H, W] # 拼接在一起形成对比学习批次 concat_input torch.cat([aug1, aug2], dim0) # [2*batch_size, C, H, W] concat_labels torch.cat([labels, labels], dim0) # [2*batch_size] features model(concat_input) # [2*batch_size, backbone_feature_dim] projected projection_head(features) # [2*batch_size, proj_dim] normalized F.normalize(projected, p2, dim1) # L2归一化 loss criterion(normalized, labelsconcat_labels) optimizer.zero_grad() loss.backward() optimizer.step()训练完成后用于下游任务如分类时我们只加载model的参数丢弃projection_head。然后在model提取的特征上训练一个简单的线性分类器。5. SupCon的优势、局限与适用场景经过上面的剖析和实战SupCon的优势已经很明显了但我必须客观地和大家聊聊它的“脾气”以及什么时候该请它出马什么时候可能传统方法更合适。5.1 核心优势为什么它常常更胜一筹对难样本和噪声标签更鲁棒这是SupCon最突出的优点。交叉熵是“非黑即白”的一个样本分错了就产生很大的损失。而SupCon关注的是特征空间的整体结构。即使某个“猫”的图片被误标为“狗”只要它的特征在特征空间里更靠近其他“猫”的集群SupCon的损失就不会太大。因为它的目标是把同类样本拉近这个被误标的“猫”客观上确实更靠近猫群所以模型不会受到过于严厉的惩罚。这在实际数据充满噪声的场景下简直是福音。学到更通用、更可迁移的特征由于SupCon直接优化特征空间的结构它学到的特征往往具有更好的线性可分离性。这意味着在它的特征空间里不同类别的数据簇之间有着更清晰的边界。这不仅有利于本任务的分类当我们需要把预训练好的模型迁移到新的、但相关的任务上时比如从ImageNet预训练迁移到细粒度鸟类分类这些通用特征只需要微调甚至只训练一个线性层就能取得很好的效果。缓解类别不平衡问题在交叉熵中头部类别样本多的类的梯度会主导训练过程导致模型忽视尾部类别。而在SupCon中每个样本的损失主要取决于它和批次内其他样本的对比。只要在一个批次内尾部类别的样本能和同类样本形成正对并与其他类形成负对它就能得到有效的学习。批次采样的策略在这里变得很重要有时需要采用类别平衡的采样器来确保小类别也能在批次中出现。提供更丰富的监督信号一个样本不再只和它的标签发生关系而是和批次内所有同标签的样本产生互动。这种“一对多”的监督信号比交叉熵的“一对一”要丰富得多让模型能从更多角度理解“同一类”应该是什么样子。5.2 不得不说的局限与挑战当然SupCon不是银弹它也有自己的“阿喀琉斯之踵”。对批次大小极度敏感这是对比学习方法共有的挑战。负样本的数量和质量直接取决于批次大小。小批次意味着负样本少模型可能学不到充分的判别特征容易陷入平凡解比如把所有样本都映射到同一个点。虽然有如MoCo、SimSiam等方法试图解决这个问题但它们引入了额外的复杂性和超参数。在实际资源受限的情况下这成了一个主要的门槛。计算和内存开销大计算所有样本对之间的相似度矩阵其复杂度是O(batch_size^2 * feature_dim)。当批次很大、特征维度很高时显存和计算成本会急剧上升。这限制了它在超大模型或超高分辨率图像上的直接应用。超参数调优更复杂温度参数τ需要仔细调节。此外数据增强策略对SupCon的影响比交叉熵更大。增强的强度、类型直接决定了正样本对的“难度”进而影响特征学习的质量。这需要更多的实验来找到最优的数据增强组合。并非在所有任务上都领先对于一些非常简单的分类任务或者类别边界本身就很清晰、数据非常干净的任务交叉熵可能简单直接训练更快效果也不差。SupCon的优势在数据复杂、有噪声、需要强泛化能力的场景下才更加明显。5.3 我的一些经验与选型建议根据我这些年的项目经验我会在以下场景优先考虑使用或尝试SupCon及其变种数据标签有噪声比如从网络爬取的数据、众包标注的数据。需要学习强泛化特征用于下游任务比如做预训练模型后续要支持多个不同的下游任务分类、检测、分割。细粒度图像分类不同子类别间差异细微SupCon拉大类间距离的能力很有帮助。类别极度不平衡配合平衡采样器SupCon能更好地照顾到少数类。而在以下场景我可能还是会先从交叉熵开始任务极其简单数据非常干净快速验证原型。计算资源极其紧张无法使用大批次。项目周期短没有时间精细调参交叉熵的调参经验更成熟更容易快速出结果。说到底SupCon为我们提供了一种全新的、更接近人类“通过比较来学习”本质的特征学习范式。它把监督信号从简单的类别标签转化为对特征空间几何结构的约束。从我个人的使用体验来看当你为模型在复杂数据上的泛化能力发愁或者被噪声标签折磨得焦头烂额时花点时间折腾一下SupCon很可能会带来意想不到的收获。它就像给你的模型换上了一副能看清数据本质结构的“眼镜”虽然配镜过程调参有点麻烦但一旦戴上世界会清晰很多。

相关新闻

YOLACT系列模型实战:从零搭建自定义数据集实例分割任务(附COCO格式转换脚本)

YOLACT系列模型实战:从零搭建自定义数据集实例分割任务(附COCO格式转换脚本)

实战指南:基于YOLACT系列模型的自定义数据集实例分割全流程 在计算机视觉领域,实例分割任务因其能同时完成目标检测与像素级分割而备受关注。对于许多希望将AI能力落地到具体业务场景的开发者而言,如何将前沿的实例分割模型应用于自己的数据…

2026/7/3 18:24:29 阅读更多 →
DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码)

DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码)

DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码) 在精密仪器、自动化测试设备或者高保真音频系统中,我们常常需要生成多路高精度、高同步性的模拟信号。传统的单通道DAC方案不仅占用宝贵的MCU引脚和PCB面积&#xf…

2026/5/17 8:35:36 阅读更多 →
实时手机检测-通用实战落地:零售门店顾客手机使用行为分析

实时手机检测-通用实战落地:零售门店顾客手机使用行为分析

实时手机检测-通用实战落地:零售门店顾客手机使用行为分析 1. 项目背景与价值 在现代零售环境中,了解顾客行为是提升服务质量的关键。顾客在店内的手机使用行为能够反映多种信息:哪些区域吸引顾客停留、哪些商品引发线上搜索、顾客是否在比…

2026/5/17 2:23:49 阅读更多 →

最新新闻

性能测试核心指标全解析:从用户感知到系统瓶颈的实战指南

性能测试核心指标全解析:从用户感知到系统瓶颈的实战指南

1. 项目概述:为什么我们需要一份“吐血整理”的性能指标清单?干了这么多年性能测试,最怕听到的一句话就是:“系统卡了,是不是性能有问题?” 然后就是一场鸡飞狗跳的排查。开发说数据库慢,运维说…

2026/7/3 18:24:16 阅读更多 →
长期观察后,数字人直播的真实表现

长期观察后,数字人直播的真实表现

数字人直播平台(融汇旗下) vs. 抖音虚拟主播、腾讯智影、百度智能云曦灵、阿里云虚拟直播:真实表现揭秘在直播电商与本地经营深度融合的当下,数字人直播早已不是噱头,而是商家降本增效的切实工具。但市面上产品参差不齐…

2026/7/3 18:24:16 阅读更多 →
中国自动驾驶标准如何走向全球:从路况建模到国际采纳

中国自动驾驶标准如何走向全球:从路况建模到国际采纳

1. 项目概述:当“中国方案”开始定义全球自动驾驶的标尺“中国 自动驾驶 标准何以走向全球”——这个标题乍看像一篇政策评论,但作为在智能网联汽车领域摸爬滚打十二年、参与过5项国标起草、3次UN/WP.29(联合国世界车辆法规协调论坛&#xff…

2026/7/3 18:22:15 阅读更多 →
多路摄像头AI分析性能优化指南

多路摄像头AI分析性能优化指南

在将视觉AI算法从“单路Demo”推向“多路并发”的产业化落地阶段,大部分架构师和工程师都会遭遇一场性能灾难:原本在开发机上跑得好好的算法,一旦接入32路、64路现场摄像头,系统轻则疯狂丢帧、告警延迟拉长到几分钟,重…

2026/7/3 18:22:15 阅读更多 →
【小白也能轻松玩转龙虾】虾壳云一键部署图文版,零基础弄懂 OpenClaw v2.7.9 整套搭建逻辑(附最新安装包)

【小白也能轻松玩转龙虾】虾壳云一键部署图文版,零基础弄懂 OpenClaw v2.7.9 整套搭建逻辑(附最新安装包)

OpenClaw(小龙虾)Windows 一键部署实操手册|十分钟搭建专属本地数字员工 适配平台:Windows 10/11(64 位)|零基础友好|全可视化界面|无编程门槛 当下热度较高的开源 AI 智…

2026/7/3 18:20:14 阅读更多 →
2026视频去水印软件推荐电脑手机在线免费无广告

2026视频去水印软件推荐电脑手机在线免费无广告

日常整理学习素材、收藏喜欢的短视频内容时,画面上的平台水印往往会影响观看体验,也给后续的个人剪辑练习带来不便。2026 年市面上的去水印工具覆盖小程序、电脑软件、在线站点等多种形态,不少用户挑选时会关注是否免费、有无广告弹窗&#x…

2026/7/3 18:20:14 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻