SPAR类比推理模型学习(与常见小目标检测方法总结) - 详解

news/2025/9/21 15:13:58/文章来源:https://www.cnblogs.com/yfceshi/p/19103707

代码链接:Analogical-Reasoning

传统目标检测

RCNN

1. Selective Search:初始分割+相似区域(颜色、纹理)合并,生成候选框(约2000个)

2. 特征提取:对所有候选框进行裁剪缩放,输入到CNN中提取特征

3. 分类:将所有候选框特征送进多个SVM分类器(二分类模型),选择置信度最高的类别

4. 边界框回归:对正样本(IoU较高)的候选框做线性回归,修正框的大小和位置,让预测更接近目标真实边界

Faster RCNN

相对于普通RCNN:引入了RPN(Region Proposal Network)

1. 直接对整张图片进行特征提取

2. 生成候选框(RPN):判断anchor内是否有目标(置信度)+偏移量

3. Rol Pooling:把不同大小的候选框区域映射到特征图上,并池化成固定大小

4. 根据特征图得到类别

Yolo

1. 缩放图像到固定大小,特征提取(DarkNet)

2. 把图像分割成S*S的网格,每个网格负责预测落在该网格中心的物体

3. 预测内容(每个网格):

B个边界框:中心坐标(x,y)、高宽(w,h)

置信度:边界框内囊括物体的置信度(P*IoU,预测框和真实框的交并比)

C个类别概率分布:每个已知类别的概率

输出张量:S*S*(B*5+C)(后续优化了边界框的参数化和解码方式:Anchor Box+偏移量,多尺度(分辨率)预测,损失函数优化)

4. 组合预测结果:对于一个边界框的Class Confidence=confidence * P(Class|Object)

5. NMS非极大值抑制:选取分数最高的检测框去掉与它IoU大于阈值的其它框,循环直至没有候选框

前言

卫星遥感图像检测的挑战:物体尺寸较小,动态背景

目前解决方向

1. 区域划分+局部放大,提升密集目标检测效果

2. 增加网络结构模块以提升特征提取效果(注意力机制/多尺度特征融合)

高分辨率:保留更多细节,但语义信息弱

低分辨率:目标位置模糊,但语义信息强

3. 图像增强技术

Related Works

1.1ClusDet

先通过类似Faster-RCNN的方式生成集群区域检测框,得到映射后的特征图(Rol Pooling),对该集群区域进行检测,与全局检测结果进行NMS

1.2 Casceded zoom-in

添加“crop”类,截取图像中物体密集区域标注为新类别,上采样后与原始图像一起加入训练,多级级联获得更详细子图。在推理时类似:识别基础类别物体与物体密集区,对高质量物体密集区(IoU合并结果)上采样后推理,合并检测结果

———————————————————————————————————————————

一点想法:先通过人工标注的物体密集区训练一个大模型,在该训练过程中,模型会截取物体密集区域并做裁剪、上采样等操作并合成为一个新的材料集,该数据集作为无监督学习/弱监督学习数据集在刚才的大模型基础上做微调。(大模型打伪标签/对比学习/半监督)

三路结构:

Backbone路:在无标注信息上做自监督预训练,学习图像特征,得到backbone初始化权重

Cluster路:训练Cluster Proposal Net:用少量密集区标注学习哪里有目标簇,裁切、上采样,生成密集区子图

Instance路:用少量实例级标注训练初始Teacher,Teacher给密集区子图&原图打伪标签用于Student半监督学习

训练阶段:

1. 自监督预训练(MAE/对比学习)

2. 双头监督预热:CPN头和Instance检测头,训练框簇预测模型和实例预测模型(Teacher v0)

3. 生成伪标签:CPN在无标签图上做预测+上采样获得子图,Teacher分别在原图和子图做推理,得到候选框做NMS作为伪标签

4. 半监督Student训练:监督损失(有标注)+无监督损失(未标注+弱标注)训练Student;Teacher更新

5. 迭代自训练:用当前更新的Teacher刷新伪标签,再训练

———————————————————————————————————————————

1.3Adazoom

基于强化学习。

状态State:基础特征图+历史信息图(记录已被采样的区域)

动作Action:PolicyNet:动作被解耦为三类分量:Fixation(定位)、Scale(尺度)、Aspect ratio(长宽比);分别预测作为focus区域并用policy gradient优化

奖励Reward:对落在focus region内每个目标赋予权重(小目标高权重),region大尺度(与目标尺度相比)会被赋予系数衰减

检测网络:在原图和AdaZoom生成并放大的region上做检测;AdaZoom生成对检测有帮助的区域,检测器的输出反过来调整AdaZoom的reward(对检测器容易错过或置信度低的真实目标增加权重)

2.1TPH-Yolo v5

在Yolo v5的基础上引入了注意力模块和多尺度融合

Backbone

Focus:把图片切分成4个部分并堆叠,类似对一张图片的Mosaic

Conv+C3(CSP Bottleneck):卷积层+跨阶段部分残差结构,提取特征

SPP:多尺度池化

Trans:用Transformer层代替部分卷积块,增强全局建模

Neck

Upsample+Concat:上采样+与浅层特征拼接

CBAM:通道注意力+空间注意力;输入特征按通道加权

TPH

在检测头中引入Transformer层:图像C、H、W(通道数、高度、宽度)展平成N*C(N=H*W),相当于一段长度为通道数的序列,每个“词”的维度数是图片像素数量

———————————————————————————————————————————

(基础知识学习)

1. 信息增强方法:扩展数据集,提升模型泛化能力。包括:Photometric(对图像色相、饱和度进行调整)、Geometric(对图像随机缩放、平移、裁剪、旋转等)、MixUp(通过线性插值生成新的图像和标签)、CutMix(切割并拼接两张图像的不同区域生成新的训练样本,混合标签)、Mosaic(将四张不同的图像按一定比例拼接成新的图像,调整标签)

2. 目标检测结果混合方法:多模型检测结果合并。包括:非极大值抑制(NMS)、Soft-NMS(根据IoU值对相邻边界box的置信度设衰减函数,而不是直接将其删除)、Weighted Boxes Fusion(WBF,通过加权平均来融合候选框,而不是抛弃)

3. 基于CNN的物体检测分类:

(1)One-Stage检测器:直接在图像的每个位置做端到端预测,无需生成候选框,例如Yolo v3

(2)Two-Stage检测器:先生成一组候选框,再对框进行精细预测,例如Faster-RCNN

(3)Anchor-Based检测器:采用预设的多尺度锚框,每个锚框代表一个潜在目标的位置, 训练尺度和比例,例如Scaled-Yolo v4、Yolo v5等

(4)Anchor-Free检测器:无需锚框,直接通过像素位置进行目标预测,例如YoloX

(5)无人机专用检测器:RRNet、PENet、CenterNet等

4. 检测器的组成

(1)Backbone:特征提取

(2)Neck:负责对特征图进行处理、融合和强化,包括:多尺度特征融合、凭借额外层(自注意力层等)提高模型在复杂场景的辨识能力

(3)Head:检测头,输出目标类别和边界框

———————————————————————————————————————————

2.2 Sifdal

SIFDAL 利用通道拆分 + 对抗训练让模型分别学习“scale-related”(与尺度相关)和“scale-invariant”(与尺度无关)的特征,增强小目标检测对尺度变化的鲁棒性

3.1 CoOp

CoOp用可学习的上下文提示替代人工写的 prompt,并通过对比学习来优化,使 CLIP 在下游任务的表现更强。

CLIP在下游任务上zero-shot prediction的text encoder输入的text是固定的,例如:“A photo of a {object}”;而在CoOp中,输入的text是learnable的,它会随着下游任务的few-shot样本而更新。

CoOp设计了两种learnable prompt:

1. Unified Context

通过此时,输入text encoder的prompt能够表示为:

t=[V]_{1}[V]_{2}...[V]_{M}[CLASS]

或者:

t=[V]_{1}...[V]_{\frac{M}{2}}[CLASS][V]_{\frac{M}{2}+1}...[V]_{M}

2. Class-Specific Context (CSC)

每个类别都有一个自己的Unified Context

3.2 EDA

EDA引入 对象级别的标注或检测说,EDA 技巧利用对象级别的标注来指导训练,使模型不仅在全局上对齐图像和文本,还在局部对象-词语层面对齐,从而捕捉更细致的语义信息。就是,知道图像里的每个对象区域(bounding box)是什么;然后要求这些对象区域的特征和文本里的相应词语也要对齐。也就

3.3 GLIP

GLIP把图片分成很多候选区域/边界框(region proposals);把文本拆分成短语;学习让边界框特征 ↔ 文本短语特征对齐。它通过学习此种跨模态对齐,使模型可以在更广泛的类别和场景下进行检测,而不仅仅局限于训练内容集里的预定义类别。

4.1 Vild

训练一个 学生探测器 (detector),学生的 区域嵌入 (region embedding) 要和 教师(teacher)CLIP 推断出的图像/文本嵌入 保持一致。

4.2 GridClip

将图像分成多个小 patch,每个 grid cell 经过视觉编码器(如 ResNet / ViT),得到一个局部特征向量;将类别文本提示(如 "a photo of a dog")处理成若干词或短语 embedding;这些短语嵌入与图像的局部 grid 特征一一对齐。(类似EDA)

4.3 ProposalCLIP

用 CLIP 来做弱监督/无监督目标检测

4.4 ARegionClip

把 CLIP 扩展到区域级 (region-level)的预训练,显式学会区域 ↔ 文本短语 对齐。

———————————————————————————————————————————

EDA:需要bounding box和标签来学习;GridCLIP:无bounding box,而是切割图像学习对齐;ARegionCLIP:生成一些候选框(不确定正确性),再学习区域和文本的对齐。

———————————————————————————————————————————

4.5 DenseCLIP

提取图像 密集特征(feature map),每个位置(像素/patch)都保留一个特征;把每个视觉位置的特征和文本 embedding 做对齐。

5. 目标检测中的关系推理 (Relational Reasoning)

5.1 基于上下文信息 (Contextual reasoning)

SMN:把多个目标实例整合成一个“伪图像 (pseudo-image)”,让模型在更大的上下文里做推理。

GCRN:图神经网络 (graph-based)来建模上下文,帮助发现“出格”的物体(out-of-context objects),比如“鱼在天上”这样的不合理场景。

5.2 基于空间与语义关系 (Spatial & semantic reasoning)

Reasoning-RCNN:把全局语义知识和推理机制融合到 Faster R-CNN 框架中,改进分类和边界框回归。

C-GCN:用图卷积网络 (GCN) 来建模目标间的两两关系(pairwise relations),特有适合小目标检测,因为小目标往往依赖周围上下文才能识别。

———————————————————————————————————————————

图卷积网络(GCN)

关键概念:

1. 邻接矩阵A

A_{ij}表示节点i和j之间有一条边,否则为0;对于无向图,邻接矩阵是对称的(A=A^{\top });邻接矩阵用来表示图的连接结构,即决定“信息从哪些节点传播到哪些节点”

2. 度矩阵D

D是对角矩阵,第i个对角元素D_{ii}=节点i的度(degree),也就是它和多少个邻居相连:

D_{ii} =\sum_{j}^{}A_{ij}

度矩阵用于归一化邻接矩阵,防止度数高的节点信息过强、度数低的节点信息过弱。

3. 拉普拉斯矩阵L=D-A

对任意节点特征向量x\epsilon \mathbb{R}^{n},考虑二次型:

x^{\top }Lx=x^{\top }Dx-x^{\top }Ax

x^{\top }Lx = \sum_{i = 1}^{n}D_{ii}x_{i}^{2}-\sum_{i,j}^{}A_{ij}x_{i}x_{j}=\sum_{i=1}^{n}\sum_{j = 1}^{n}(A_{ij}x_{i}^{2}-A_{ij}x_{i}x_{j})

又基于对称矩阵满足:

\sum_{ij}^{}A_{ij}x_{i}^{2}=\sum_{ji}^{}A_{ji}x_{j}^{2}=\sum_{ij}^{}A_{ij}x_{j}^{2}

所以:

x^{\top }Lx=\frac{1}{2}\sum_{ij}^{}A_{ij}(x_{i}-x_{j})^{2}

因此,如果两个相连节点特征i和j相差很大,这项就会贡献很大的能量,所以为了让x^{\top }Lx尽量小,就要让相连的节点x_{i},x_{j}尽量接近,从而鼓励相邻节点的特征值相似。

GCN关键用于解决只有少部分标签已知的节点分类问题

原理:

1. 在GCN中,每个节点(node)都有一组描述它的特征(feature);假设有5个节点,每个节点的NLP特征嵌入为一个3维向量,则总的特征矩阵为一个5*3的矩阵

2. 我们对每个节点计算包括其本身的所有相连节点的特征平均值,得到平均特征矩阵;具体来说,假设邻接矩阵5*5表示节点相连信息,将邻接矩阵与特征矩阵相乘即可得到所有邻接特征向量的加权和,如下图所示:

但是这样直接相乘有两个挑战:这个加权和并没有包括节点本身的信息,同时特定大或特别小的特征向量相乘时可能导致梯度爆炸或者梯度消失的障碍;对于这两个问题,GCN提出:

(1)加自环

我们会先把邻接矩阵改成:

\tilde{A}=A+kI

其中,I为单位矩阵,k通常取 1,表示给每个节点加一条“自环边”,让节点在聚合邻居信息时也保留自己的特征;通过调整k,我们还能控制“自己 vs 邻居”的重要性比重。

(2)通过对度矩阵求倒数来计算平均

我们会对邻接矩阵做归一化,即:

\tilde{A}=\tilde{D}^{-1}\tilde{A}

或者:

\tilde{A}=\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}

其中\tilde{D}是自加环后对应的度矩阵。这样,每个节点更新后的特征是它所有邻居特征的加权平均,而不是仅仅简单加和。避免了梯度的挑战。

上面的过程可以如下图所示:

3. 由上所述,GCN层公式为:

整个计算过程包括:

(1)加自环:\tilde{A}=A+kI

(2)归一化邻接矩阵:\tilde{A}=\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}

(3)特征传播:\tilde{A}H^{(l)}

(4)线性变换:乘权重矩阵W^{l},做特征空间映射

(5)非线性激活

输出得到下一层节点特征H^{(l + 1)}

———————————————————————————————————————————

SPAR

Self-Prompting模块

目的:把图像特定的上下文语义注入类别文本embedding,使文本embedding能更好指引像素级注意力,从而找到“更可能包含目标”的像素位置。

1. Prompt构造

每个类别c_{k}的描述为:

d_{k}=[p,c_{k}]

其中p\in \mathbb{R}^{N\times C},表示 N 个可学习的 prompt tokens,每个 token 是一个C维向量(embedding),它们在训练中像模型参数一样更新,不对应具体词,而是用来学习最佳的上下文表示。(类似CoOp)

然后通过 CLIP-text encoderT得到文本 embedding:

e_{k}=T(d_{k})

结果e_{k}\epsilon \mathbb{R}^{C},对所有类别组合成矩阵T_{e}\epsilon \mathbb{R}^{K\times C}(每个类别对应一个文本embedding)。

2. 将局部视觉特征与文本进行交互

把 backbone 的三个尺度特征C_{3},C_{4},C_{5}​ 做 max-pool 到 4×4,每个尺度变成 16×C,再把三尺度 concat 成f\epsilon \mathbb{R}^{48\times C}。这样把多尺度语义汇聚进一个小矩阵,便于跨尺度上下文融合。

然后对文本与图像做多头交叉注意力(text as Query,visual as Key/Value):

相当于Query是需要主动查找信息的对象;Key/Value相当于特征库,用于提供信息。

3. 得到 context-aware prompt

T^{(new)}_{e}=T_{e}+\alpha T_{sp}

\alpha是可学习缩放因子)。这样每个类的文本 embedding 就包含了“当前图像的上下文信号”。

4. 生成 prompt score map

对每个尺度的视觉 feature mapf_{i} \epsilon \mathbb{R}^{H_{i}\times W_{i}\times C},计算与T^{(new)}_{e}的相似度:

p_{i}(h, w, k)=\beta \cdot f_{i}(h,w)\cdot T_{e}^{(new)}(k)^{T}+\gamma

f_{i}(h,w)表示图像特征中,第i张图像在空间位置(h,w)的特征向量;T_{e}^{(new)}(k)^{T}表示类别k的文本嵌入;\beta, \gamma是可学习的缩放和偏置参数(scaling & bias),相乘后即可得到H_{i}\times W_{i}\times K,表示每个空间像素与类别K的相似度分数。得到每个位置的prompt score

s_{i}(h, w) = max_{k}p_{i}(h, w, k)

5. 用 score map 更新视觉特征

f_{i}^{'}=f_{i}\bigodot \sigma (s_{i})^{\top }+f_{i}

\sigma是sigmoid,这样在高 objectness 的位置放大特征,在低区下降低响应,从而得到被提示增强的多尺度视觉表示。

总结Self-Prompting过程:

Self-Prompting = 自动生成图像相关的 prompts → prompts 与视觉特征交互得到相似度分布 → 用这个分布来引导/更新视觉特征,使模型专注于语义相关区域。

Analogical Reasoning(图推理)模块

目标:利用语言级别(类别语义)与像素级(视觉)之间的关系,通过图结构传播语义/特征,使“容易识别/语义明确”的节点把信息传给“难以检测/视觉模糊”的节点,从而实现类比式推断(analogical inference)。

1. 构图(Graph Construction)

类别节点:从 self-prompting 得到的更新后文本 embeddingT_{e}^{(new)}\epsilon \mathbb{R}^{K\times C},一共K个

像素节点:从增强后的特征图中选出 M 个高分区域,每个位置的特征向量就是节点特征。

把它们拼接,得到节点特征矩阵:

H^{(0)}\epsilon \mathbb{R}^{(K+M)\times C}

边和邻接矩阵:用节点之间的相似度(可学习度量 + 内积)构造邻接矩阵:

\tilde{A}_{ij}=\left \langle Wh_{i},\wedge (Wh_{j}) \right \rangle

其中W1\times 1卷积变换,用于调整特征空间的维度,使不同尺度的原始特征能投影到一个最合适做相似度计算的空间;\wedge通过是可学习对角矩阵,用以给不同特征维度不同的权重。这样设计能够让模型学习到“哪些特征维度更重要、哪些要被抑制”,建立可训练的相似度度量。

加自环

\tilde{A}\leftarrow \tilde{A}+I

计算度矩阵

\tilde{D}_{ii}=\sum_{j}^{}\tilde{A}_{ij}

2. 归一化

对邻接矩阵做归一化,得到邻居特征的加权平均值:

\tilde{A}=\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}

3. 图卷积传播

更新节点特征:聚合邻居特征,得到加权平均;线性变换到新特征空间;非线性激活;

H^{(l+1)}=\sigma (\tilde{A}H^{(l)}W^{(l)})

经过L层后,得到更新后的节点特征(分别用类别节点特征和像素节点特征表示):

H^{(L)}=[H_{c}^{(L)};H_{p}^{(L)}]

4. 回写特征图

把更新后的像素节点特征回填到原始空间位置:

f^{e}_{i}(h_{m},w_{m})=f^{'}_{i}(h_{m},w_m)+H^{(L)}_{p}(m)

m表示对M个高分区域进行更新,文本节点也同时进行更新。

分类头与损失函数

1. 逐像素打分

增强后的特征图为:f_{i}^{e}\epsilon \mathbb{R}^{H_{i}\times W_{i}\times C}

更新后的类别文本嵌入为:T_{e,i}^{new}\epsilon \mathbb{R}^{K\times C}

把每个位置的向量f_{i}^{e}(w,h)\epsilon \mathbb{R}^{C}与所有类别向量做点积:

z_{i}(w,h)=f_{i}^{e}(w,h)(T^{(new)}_{e,i})^{\top }\epsilon \mathbb{R}^{K}

归一化得到类别分布(类似DenseCLIP):

S_{i}(w,h)=Softmax(z_{i}(w,h))\epsilon \mathbb{R}^{K}

2. 像素级标签

这样处理在计算损失时对图像标注的要求较高,要求每个像素都包含像素级标签;SPAR在训练时检测标注 (b, c)(框与类别)投影成像素级 one-hot 标签图

对位于某个 GT 框内部的像素j(把二维坐标展平为索引j),其标签向量y_{i,j}\epsilon {(0,1)}^{K}在对应类别位置为 1,其余为 0;

背景像素则是全 0 向量(通常也会通过采样/权重进行平衡)。

3. 分类损失

将该损失与YOLO backbone损失结合:

L=\sum_{i}^{}L_{i}^{cls}+L_{YOLO}

得到最终损失函数。

改进方向

1. 将图卷积替换为更灵活的图注意力(GAT)或 Transformer-on-graph,并尝试对类别节点做多提示(prompt ensemble);

2. 研究如何高效批处理可变大小图(e.g. 采用稀疏邻接或分组机制);

3. 结合 Region-proposal(而非像素网格)以获得更精确的局部节点(类似 ViLD/ARegionCLIP 的思路);

4. 研究是否把 CLIP 文本 encoder 微调(或保留冻结)对性能的影响。

全文总结

传统目标检测方法大多直接在图像上进行处理,并依赖于对检测框的回归和调优。随着 Transformer 的引入,以及 ViT、CLIP 等跨模态模型的发展,如何将文本信息与图像特征有效融合,成为提升目标检测性能的重要方向。针对小目标检测,现有研究大致可分为以下几类:

  • 区域聚焦类方法(ClusDet、AdaZoom、Cascaded Zoom-in):通过显式选择或强化学习聚焦于目标密集区域,从而提升小目标的召回率。

  • 骨干改进类方法(TPH-YOLOv5、SIFDAL):增强网络的全局建模能力和对尺度变化的鲁棒性。

  • 跨模态对齐类途径(CoOp、EDA、GLIP、GridCLIP、DenseCLIP):引入文本提示和局部对齐,使检测器能够处理开放词表任务,并捕捉细粒度的语义关系。

  • 关系推理类方法(SMN、C-GCN):通过建模上下文与目标间的空间或语义关系,提升繁琐场景下的检测精度。

在此基础上,SPAR 提供了一种全新的“类比推理”思路。它不仅关注目标的外观特征,更关注上下文语义,并融合了 CLIP 风格的图文对齐机制,将容易检测目标的上下文信息迁移到小目标和困难目标的识别上:

  • Self-Prompting 阶段:生成的文本嵌入不再是静态模板,而是与当前图像交互后的结果,携带了图像特有的上下文语义,例如“车在马路上”此种组合信息。

  • Analogical Reasoning 阶段:类别节点作为图中的一部分,通过图卷积与像素节点进行双向信息传播。如果某个像素节点对应一辆难以识别的小车,它会从“容易识别的大车”节点吸收语义特征,包括“车一般出现在马路上”的上下文线索,从而补强自身特征。

  • 特征增强与分类:更新后的像素特征被回写到特征图,分类头再与更新后的类别嵌入对齐,使得小目标能够借助上下文和类比信息被更可靠地判定。

综上,SPAR 通过文本嵌入更新、图卷积推理和特征增强多阶段协同,将上下文语义逐步融入检测过程,实现了从“容易目标”到“小目标”的语义迁移。这种技巧突破了单纯依赖局部外观的检测范式,为小目标和困难目标的识别给予了新的解除思路。

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

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

相关文章

Oracle EBS ERP——常见查询业务场景 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

「MCOI-05」魔仙

题意 给定一个 \(n\), 构造长度为 \(n\) 的序列,使得和为 0,乘积为 \(n\)。 解答 我们考虑 \(n\) 的性质,发现 \(0\) 是一个偶数,如果序列中没有偶数,作为一对奇数乘积的 \(n\) 自然也会是奇数,奇数个奇数整不出…

BlueHat v18 会议资料现已发布:前沿安全技术与漏洞缓解策略

微软安全响应中心公开BlueHat v18会议资料,包含主题演讲、前沿技术追踪和攻击类型缓解策略的幻灯片与视频,同时宣布BlueHat以色列站征稿启动,鼓励安全研究者提交前沿研究成果。上个月我们成功举办了又一届精彩的Blu…

label和brand的区别(品牌=brand?错了,你们的英语都学错了!)

如果要你将“面向大众的品牌”翻译成英语,你觉得应该怎么翻译? economical brand? 大错特错。地道的表达方式是“mass-market label”。 mass-market这个不知道很正常,他不是一个口语化的概念,而是一个市场营销包…

2025.9.21——1绿

普及+/提高 P4427 [BJOI2018] 求和 树上的问题,lca+dfs+预处理就能解决。 但我因为dfs初始化的参数给错了、答案的计算方式写错了,WA了好几次。 顺便我8个月前居然还写过这道题,当时没用预处理WA了subtask。

故障处理:ORA-04031真实案例分享

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本案例来自一…

图解24:8种常用的缓存淘汰策略

最近都在开发AI集成项目,博客文章也试试AI特效处理,使用AI效果还可以,也可以做点水印,只是图片没有原图那么高清了

读书笔记:更智能的数据库索引:只关注你需要的数据

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

JS设计模式-模块模式

模块模式好像不是经典的设计模式,但不可避免的每种编程语言都加入了模块的概念。有时候可能用了模块模式但并不知道自己用的是模块模式。虽然不是经典的设计模式,但是作为JS创建模块的一种模式也是经常被使用。这里对…

关于天猫精灵喵控的初步拆机研究

结论: 晶晨RTOS方案,有移植Linux可能 近期在pdd发现天猫精灵喵控这个天猫系的新品,和天猫精灵一样可以当语音助手用,还可以用作红外遥控器~ 到手真的是很小一个圆饼,却有着强大的功能。揭开背面防滑垫,拆开后盖。…

利用Burpsuite实现抓取https流量

Burpsuite官方下载地址: https://portswigger.net/burp/communitydownload一、访问burpsuite监听端口下载证书 确保浏览器已设置代理(这里我用Firefox浏览器示例)【一定要勾选“也将此代理用于HTTPS”】,并确保代理…

C++完全攻略:从新手到高手的编程进化之路 - 详解

C++完全攻略:从新手到高手的编程进化之路 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

02-Media-6-rtsp_server.py 使用RTSP服务器流式传输H264和H265编码视频和音频的示例程序 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:敏捷开发-Scrum(下)

深入解析:敏捷开发-Scrum(下)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…

RTX4090双卡本地布署QwenImage模型并生成OpenAI API - yi

RTX4090双卡本地布署QwenImage模型并生成OpenAI API #新建man.py文件,加入代码from modelscope import DiffusionPipeline, FlowMatchEulerDiscreteScheduler, snapshot_download import torch import math import os…

Visual Studio 报错:“9_自定义命令”名称在默认命名空间“9_自定义命令”中无效。请更正项目文件中的 RootNamespace 标记值。

当修改项目文件名后,可能会遇到类似上面的报错,这时,需要在项目上点击右键,选择属性,在【默认名称空间】中,修改为程序中实际使用的名称空间(namespace)最后再保存就可以了。

ubuntu22.04下搭建iRedMail邮件服务器 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

图解23:datetime和timestamp的区别

除了之前开发国际化项目使用timestamp时区的特性,其他基本都是使用datetime

深入解析:SQL语句优化的步骤详解

深入解析:SQL语句优化的步骤详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

在Java中识别泛型信息

Java中泛型信息在编译时由于类型擦除的原因,通常是不可获取的。类型擦除是Java在编译泛型代码时采取的一种措施,用于保证新的泛型代码能与旧的非泛型代码兼容。它将泛型类型参数替换为它们的边界,如果类型参数是无边…