目标检测篇---R-CNN梳理

目标检测系列文章

第一章 R-CNN


目录


📄 论文标题

R-CNN: Rich feature hierarchies for accurate object detection and semantic segmentation (CVPR 2014)
作者:Ross Girshick ;Jeff Donahue;Trevor Darrell;Jitendra Malik
团队:UC Berkeley


🧠 论文逻辑梳理

1. 引言部分梳理 (动机与思想)

AspectDescription (Motivation / Core Idea)
问题背景 (Problem)2012 年之前,基于传统手工特征(如 SIFT, HOG)结合机器学习模型(如 SVM, DPM)的目标检测方法性能趋于饱和,遇到了瓶颈。
机遇 (Opportunity)与此同时,深度卷积神经网络 (CNN) 在大规模图像分类任务(如 ImageNet LSVRC)上取得了突破性进展,展现了强大的特征学习和表达能力。
挑战 (Challenge)如何将 CNN 强大的分类能力有效地应用于需要精确定位的目标检测任务?CNN 通常处理固定大小的输入图像,而检测需要在图像不同位置识别不同大小的物体
核心思想 (Core Idea)“Regions with CNN features” (R-CNN):将目标检测任务分解为两个阶段:首先使用某种机制(如 Selective Search)生成与类别无关的候选区域 (Region Proposals),然后对每个区域独立地使用 CNN 提取特征并进行分类和位置修正。
核心假设 (Hypothesis)应用深度 CNN 从候选区域中提取的丰富、有层次的特征,将显著提升目标检测的准确率,远超传统方法。

📝 三句话总结

方面内容
❓发现的老问题
  • 1、传统特征局限: HOG, SIFT 等手工特征表达能力不足,难以应对物体外观多样性。
  • 2、性能瓶颈: 以 DPM 为代表的传统检测器性能提升缓慢。
  • 3、CNN 应用鸿沟: 强大的 CNN 分类模型难于直接有效地应用于需要定位的检测任务。
💡提出的新方法 (R-CNN)
  • 核心框架: 提出一个多阶段流程:
    1. 区域提议 (Selective Search): 生成类别无关的候选区域。
    2. 特征提取 (CNN): 对每个变形后的区域(227 * 227)用(微调后)AlexNet 提取特征。
    3. 分类 (SVM): 用类别专属的线性 SVM 对特征进行分类。
    4. 定位精修 (BBR): 用类别专属的 BBR 修正候选框位置。
  • 关键技术: 成功应用迁移学习,将在 ImageNet 上预训练的知识迁移到检测任务。
⚡新方法的局限性
  • 速度慢: 对每个候选区域(~2k/图)独立运行 CNN,计算成本极高。
  • 训练复杂: 多阶段训练(CNN微调、SVM训练、BBR训练)流程繁琐,非端到端。
  • 存储开销大: 需要缓存所有区域的特征用于 SVM/BBR 训练,占用大量磁盘空间。

🔍 方法逻辑梳理

R-CNN 本身不是一个单一的端到端模型,而是一个处理流水线 (Pipeline)

  • 模型输入:

    • 一张 RGB 图像。
  • 处理流程:

    1. 候选区域生成 (Region Proposal - 外部模块):
      • 输入: 原始图像。
      • 处理: 运行 Selective Search 算法。
      • 输出: 约 2000 个候选区域的坐标 [ P 1 , P 2 , . . . , P 2 k ] [P_1, P_2, ..., P_{2k}] [P1,P2,...,P2k]
    2. 特征提取 (CNN Feature Extractor):
      • 输入: 图像和所有候选区域 P i P_i Pi
      • 处理 (Encoder 角色):
        • 对每个 P i P_i Pi,从原图中裁剪出对应区域的图像块。
        • 将图像块强制变形 (warp) 到 CNN 输入尺寸 (e.g., 227x227)。
        • 将变形后的图像块送入微调后的 AlexNet 进行前向传播。
        • 提取特定层的激活值作为特征(如 pool5 层特征 ϕ p o o l 5 ( P i ) \phi_{pool5}(P_i) ϕpool5(Pi)fc7 层 4096 维向量 ϕ f c 7 ( P i ) \phi_{fc7}(P_i) ϕfc7(Pi) )。
      • 输出: 每个候选区域 P i P_i Pi 对应的高维特征向量 ϕ ( P i ) \phi(P_i) ϕ(Pi)
    3. 分类 (Classifier - SVMs):
      • 输入: 特征向量 ϕ f c 7 ( P i ) \phi_{fc7}(P_i) ϕfc7(Pi)
      • 处理: 将特征向量输入到 N + 1 N+1 N+1 个(N 个物体类别 + 1 个背景类别)独立训练好的线性 SVM 中。
      • 输出: P i P_i Pi 属于每个类别的置信度得分。
    4. 定位精修 (Localizer - BBRs):
      • 输入: pool5 特征向量 ϕ p o o l 5 ( P i ) \phi_{pool5}(P_i) ϕpool5(Pi)(对于被 SVM 判为非背景的 P i P_i Pi)。
      • 处理: 根据 P i P_i Pi 被判定的类别 c c c,使用该类别专属的 BBR 线性模型,基于 ϕ p o o l 5 ( P i ) \phi_{pool5}(P_i) ϕpool5(Pi) 预测一个 ( d x , d y , d w , d h ) (d_x, d_y, d_w, d_h) (dx,dy,dw,dh) 变换。
      • 输出: 经过变换修正后的更精确的边界框 G ^ i \hat{G}_i G^i
    5. 后处理 (Post-processing - NMS):
      • 输入: 所有带有类别、分数和(可能修正后)边界框的候选区域。
      • 处理: 对每个类别,应用非极大值抑制 (NMS) 算法,去除重叠度高且分数较低的冗余检测框。
      • 输出: 最终的检测结果列表,每个结果包含类别、置信度和最终边界框。
  • 模型输出:

    • 图像中检测到的物体列表,每个物体包含:类别标签、置信度分数、精修后的边界框坐标。
  • 训练过程 (Multi-stage):

    1. CNN 微调 (Fine-tuning):
      • 使用 ImageNet 预训练的 AlexNet 作为起点。
      • 用目标检测数据集中的 warped region proposals 进行微调。将与真实物体 IoU > 0.5 的 proposal 视为对应类别的正样本,其余视为负样本(背景)。最后一层替换为 N+1 路 Softmax。
    2. SVM 训练:
      • 使用微调后的 CNN 提取所有 proposalsfc7 特征并存盘
      • 对每个类别,训练一个二元线性 SVM。使用真实边界框作为正样本,与所有真实物体 IoU < 0.3 的 proposals 作为负样本。使用难例挖掘 (Hard Negative Mining)。
    3. BBR 训练:
      • 对每个类别,筛选出与该类某个真实边界框 IoU 较高的 proposals P P P
      • 提取这些 P P Ppool5 特征 ϕ p o o l 5 ( P ) \phi_{pool5}(P) ϕpool5(P)
      • 训练线性回归模型,预测从 P P P 到其对应真实边界框 G G G 的变换参数 ( t x , t y , t w , t h ) (t_x, t_y, t_w, t_h) (tx,ty,tw,th)

🚀 关键创新点

  • 创新点 1: CNN 特征用于检测 (CNN Features for Detection)

    • 为什么要这样做? 传统手工特征表达能力有限,无法很好地应对物体的多样性。CNN 被证明能学习到更鲁棒、更具判别力的层次化特征。
    • 不用它会怎样? 检测精度会停留在 DPM 等方法的水平,难以大幅提升,无法充分利用深度学习带来的红利。
  • 创新点 2: 区域提议 + CNN 结合 (Region Proposals + CNN)

    • 为什么要这样做? CNN 需要固定尺寸输入,而检测需要在图像各处定位物体。区域提议提供了物体可能位置的“候选”,将检测问题转化为对大量候选区域的“分类”问题,使得 CNN 可以被应用。
    • 不用它会怎样? 如果直接在整图上用 CNN 滑窗,计算量巨大且难以处理不同尺寸和长宽比的物体;如果直接让 CNN 输出坐标,在当时的技术条件下难以实现精确且鲁棒的定位。这种结合是当时应用 CNN 进行检测的关键桥梁
  • 创新点 3: 迁移学习 (Transfer Learning: Pre-training + Fine-tuning)

    • 为什么要这样做? 目标检测数据集通常比大型分类数据集(如 ImageNet)小得多。直接在小数据集上训练深度 CNN 容易过拟合。预训练让模型学习通用的视觉模式,微调则使其适应特定检测任务。
    • 不用它会怎样? 在有限的检测数据上从头训练深度 CNN 效果会差很多,难以收敛到好的性能,无法有效利用 ImageNet 等大规模数据集蕴含的知识。
  • 创新点 4: 边界框回归 (Bounding Box Regression)

    • 为什么要这样做? Selective Search 等区域提议方法产生的候选框定位通常不够精确。
    • 不用它会怎样? 检测框的定位精度会受限于区域提议的质量,即使分类正确,框的位置也可能不够准,导致在需要高 IoU 匹配的应用或评估指标下性能下降。BBR 进一步提升了定位精度。

总而言之,R-CNN 通过巧妙地结合区域提议和强大的 CNN 特征,并利用迁移学习,成功地将深度学习引入目标检测领域,极大地提升了检测精度,开启了后续一系列基于深度学习的检测算法(Fast R-CNN, Faster R-CNN 等)的发展。


🔗 方法流程图

在这里插入图片描述


补充

边界框回归 (BBR)

在这里插入图片描述

1. BBR 的目标与核心思想

  • 目标: 解决由 Selective Search 等方法产生的候选区域框 P P P (Proposal) 定位不够精确的问题。【相当于有了先验候选区域P,进一步利用先验
  • 核心思想: 学习一个映射关系,根据从候选区域 P P P 提取的 CNN 特征,预测出将 P P P 调整到更接近真实边界框 G G G (Ground Truth) 所需的变换参数,从而得到一个更精确的预测框 G ^ \hat{G} G^

2. BBR 实现细节

输入 (Input)
  • 候选区域框 P = ( P x , P y , P w , P h ) P = (P_x, P_y, P_w, P_h) P=(Px,Py,Pw,Ph),其中 ( P x , P y ) (P_x, P_y) (Px,Py) 是中心坐标, P w , P h P_w, P_h Pw,Ph 是宽高。
  • 从该区域提取的 CNN 特征向量,R-CNN 中特指 pool5 层特征 ϕ 5 ( P ) \phi_5(P) ϕ5(P)
目标变换 (Target Transformation)

BBR 不直接预测 G G G 的坐标,而是预测从 P P P G G G 的相对变换量 t ∗ t_* t ( ∗ * 代表 x , y , w , h x, y, w, h x,y,w,h):

  • t x = ( G x − P x ) / P w t_x = (G_x - P_x) / P_w tx=(GxPx)/Pw (中心 x 平移量,宽度归一化)
  • t y = ( G y − P y ) / P h t_y = (G_y - P_y) / P_h ty=(GyPy)/Ph (中心 y 平移量,高度归一化)
  • t w = log ⁡ ( G w / P w ) t_w = \log(G_w / P_w) tw=log(Gw/Pw) (宽度对数缩放)
  • t h = log ⁡ ( G h / P h ) t_h = \log(G_h / P_h) th=log(Gh/Ph) (高度对数缩放)

这些 t ∗ t_* t 是模型训练时的真实标签

模型 (Model)
  • 每个物体类别训练一组独立的线性回归模型
  • 模型以 pool5 特征 ϕ 5 ( P ) \phi_5(P) ϕ5(P) 为输入,预测变换参数 d ∗ ( P ) d_*(P) d(P)
    d ∗ ( P ) = w ∗ T ϕ 5 ( P ) d_*(P) = \mathbf{w}_*^T \phi_5(P) d(P)=wTϕ5(P)
    其中 w ∗ \mathbf{w}_* w 是对应类别、对应变换维度 ( ∗ ) (*) ()学习到的权重向量
训练 (Training)
  1. 数据选择: 只选用与某个真实框 G G G 重叠度高 (e.g., I o U ≥ 0.6 IoU \ge 0.6 IoU0.6) 的候选框 P P P 进行训练。
  2. 标签计算: 对每个训练样本 ( P i , G i ) (P^i, G^i) (Pi,Gi),计算真实的变换目标 t ∗ i t_*^i ti
  3. 模型学习: 使用带 L 2 L_2 L2 正则化的最小二乘法 (岭回归) 寻找最优权重 w ∗ \mathbf{w}_* w,最小化预测误差:
    w ∗ = arg ⁡ min ⁡ w ^ ∗ ∑ i = 1 N ( t ∗ i − w ^ ∗ T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ ∗ ∥ 2 \mathbf{w}_* = \arg\min_{\hat{\mathbf{w}}_*} \sum_{i=1}^N (t_*^i - \hat{\mathbf{w}}_*^T \phi_5(P^i))^2 + \lambda \|\hat{\mathbf{w}}_*\|^2 w=argw^mini=1N(tiw^Tϕ5(Pi))2+λw^2
推理/应用 (Inference/Application)
  1. 对于一个通过 SVM 分类器判定为某类别 c c c 的候选框 P P P,提取其 ϕ 5 ( P ) \phi_5(P) ϕ5(P) 特征。
  2. 使用该类别 c c c 对应的已训练好的权重 w ∗ c \mathbf{w}_*^c wc 预测变换参数 d ∗ ( P ) d_*(P) d(P)
    d x ( P ) = ( w x c ) T ϕ 5 ( P ) d_x(P) = (\mathbf{w}_x^c)^T \phi_5(P) dx(P)=(wxc)Tϕ5(P), d y ( P ) = ( w y c ) T ϕ 5 ( P ) d_y(P) = (\mathbf{w}_y^c)^T \phi_5(P) dy(P)=(wyc)Tϕ5(P), …
  3. 将预测的变换 d ∗ ( P ) d_*(P) d(P) 应用于原始框 P P P,得到修正后的预测框 G ^ = ( G ^ x , G ^ y , G ^ w , G ^ h ) \hat{G} = (\hat{G}_x, \hat{G}_y, \hat{G}_w, \hat{G}_h) G^=(G^x,G^y,G^w,G^h)
    • G ^ x = P w d x ( P ) + P x \hat{G}_x = P_w d_x(P) + P_x G^x=Pwdx(P)+Px
    • G ^ y = P h d y ( P ) + P y \hat{G}_y = P_h d_y(P) + P_y G^y=Phdy(P)+Py
    • G ^ w = P w exp ⁡ ( d w ( P ) ) \hat{G}_w = P_w \exp(d_w(P)) G^w=Pwexp(dw(P))
    • G ^ h = P h exp ⁡ ( d h ( P ) ) \hat{G}_h = P_h \exp(d_h(P)) G^h=Phexp(dh(P))

3. 关键疑问解答

Q1: 为什么预测“变换” ( t ∗ t_* t) 而不是直接预测坐标 ( G x , G y , G w , G h G_x, G_y, G_w, G_h Gx,Gy,Gw,Gh)?
  • 简化学习任务: 预测相对的、归一化的“微调量”比预测绝对坐标更容易学习,尤其是对于线性模型。模型只需关注如何根据特征修正当前的 P P P
  • 尺度不变性: 变换 t ∗ t_* t 的定义(归一化平移、对数缩放)使得学习目标对物体的大小和位置不敏感,模型更鲁棒。例如,无论 P P P 大小如何,只要物体中心在 P P P 中心右侧 10% 宽度处, t x t_x tx 就大约是 0.1
  • 避免困难的绝对映射: 直接预测绝对坐标需要模型处理非常大的输出范围,对输入特征的微小变化可能导致输出剧烈变化,学习不稳定。预测变换将问题约束在一个更合理、更易于学习的空间。
  • 利用 P 的信息: 预测变换显式地利用了候选框 $P$ 作为“起点”或“参考点”【先验】
    再提一点,预测“变换” ($t_*$) 是根据损失函数来定义的
    w ∗ = arg ⁡ min ⁡ w ^ ∗ ∑ i = 1 N ( t ∗ i − w ^ ∗ T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ ∗ ∥ 2 \mathbf{w}_* = \arg\min_{\hat{\mathbf{w}}_*} \sum_{i=1}^N (t_*^i - \hat{\mathbf{w}}_*^T \phi_5(P^i))^2 + \lambda \|\hat{\mathbf{w}}_*\|^2 w=argw^mini=1N(tiw^Tϕ5(Pi))2+λw^2
Q2: 边界框回归器权重 w ∗ \mathbf{w}_* w 是什么以及如何工作?
  • 来源: 权重向量 w ∗ \mathbf{w}_* w 不是预设的,而是通过监督学习训练得到的。训练过程通过最小化预测变换 d ∗ d_* d 与真实目标变换 t ∗ t_* t 之间的误差(如上述岭回归损失函数),找到最优的 w ∗ \mathbf{w}_* w 数值。
  • 本质: w ∗ \mathbf{w}_* w线性回归模型的核心参数。对于特定类别、特定变换维度(如“猫”类别的 x 变换),就有一组对应的权重 w x c a t \mathbf{w}_x^{cat} wxcat
  • 作用机制: 通过点积运算 ( d ∗ ( P ) = w ∗ T ϕ 5 ( P ) d_*(P) = \mathbf{w}_*^T \phi_5(P) d(P)=wTϕ5(P)) 实现。这个运算本质上是一个加权求和
    d ∗ ( P ) = ∑ j = 1 K w j f j d_*(P) = \sum_{j=1}^K w_j f_j d(P)=j=1Kwjfj
    其中 f j f_j fj ϕ 5 ( P ) \phi_5(P) ϕ5(P) 特征向量的第 j j j 维, w j w_j wj w ∗ \mathbf{w}_* w 向量的第 j j j 个权重。
  • 意义: 每个权重 w j w_j wj 代表了第 j j j 个 CNN 特征 f j f_j fj 对于预测该特定变换 d ∗ d_* d重要性影响方向。训练好的 w ∗ \mathbf{w}_* w 编码了从数据中学到的知识:即哪些视觉特征模式(体现在 ϕ 5 ( P ) \phi_5(P) ϕ5(P) 中)指示了需要对边界框进行何种几何调整。它将高维的特征向量“翻译”成一个代表调整量的标量值。
Q3: 为什么还要单独训练一个SVM用作分类器呢?直接把CNN网络微调最后一层分类成21类(1类背景)作为分类器不更直接么
  • 实证性能提升: R-CNN 论文的实验结果表明,在提取了 CNN 特征(特别是 fc7 特征)之后,使用 线性 SVM 进行分类,其 mAP (mean Average Precision) 结果显著优于直接使用微调后的 CNN 的 Softmax 输出。

  • 训练策略和样本定义的差异:

  • CNN微调通常相对宽松。例如,与真实边界框 IoU 大于 0.5 的候选区域就被视为对应类别的正样本,用于微调 Softmax。负样本(背景)的选择也相对简单。

  • SVM 训练,只有真实边界框本身被视为对应类别的正样本。对于负样本,作者采用了难例挖掘 (Hard Negative Mining) 策略

一些常见技术:

难例挖掘 (Hard Negative Mining):

先用一部分负样本训练 SVM,然后将训练好的 SVM 应用到大量的、与任何真实物体 IoU 都很低的候选区域(这些都是“简单”或“潜在困难”的背景样本)上。找出那些被 SVM 错误地分为前景(即“难例” Hard Negatives)的背景样本,将这些难例加入负样本集中,重新训练 SVM。 这个过程使得 SVM 特别擅长区分那些容易与真实物体混淆的背景区域,从而提高了分类的准确性。而 CNN 微调阶段的 Softmax 通常没有经过这样专门针对难例的优化。

非极大值抑制 Non-Maximum Suppression:

对于一组指向同一物体的、相互重叠的边界框,只保留那个置信度分数最高的框,并抑制(删除)掉其他与它重叠度过高的框。
在这里插入图片描述

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

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

相关文章

Java技术栈 —— 基本规范

Java技术栈 —— 基本规范 一、接口文档生成工具二、接口设计2.1 开发顺序2.2 接口规范 三、数据类封装 一、接口文档生成工具 有很多jar包都支持swagger的接口文档&#xff0c;这样方便了接口测试&#xff0c;不需要用apifox自己写接口&#xff0c;直接调用文档里的swagger接…

Django ORM 定义模型

提示&#xff1a;定义模型字段的类型 文章目录 一、字段类型二、字段属性三、元信息 一、字段类型 常用字段 字段名描述备注AutoFieldint 自增必填参数 primary_keyTrue&#xff0c;无该字段时&#xff0c;django自动创建一个 BigAutoField&#xff0c;一个model不能有两个Au…

[密码学基础]GB与GM国密标准深度解析:定位、差异与协同发展

[密码学基础]GB与GM国密标准深度解析&#xff1a;定位、差异与协同发展 导语 在国产密码技术自主可控的浪潮下&#xff0c;GB&#xff08;国家标准&#xff09;与GM&#xff08;密码行业标准&#xff09;共同构建了我国商用密码的技术规范体系。二者在制定主体、法律效力、技术…

Day-1 漏洞攻击实战

实训任务1 漏洞攻击实战一 使用 御剑 得到网站后台地址 数据库登录与日志配置​​ 使用默认密码 root:root 登录phpMyAdmin&#xff0c;执行 SHOW VARIABLES LIKE general% 查看日志状态。 开启日志功能&#xff1a;set global general_log "ON";&#xff08;配图&…

leetcode 2563. 统计公平数对的数目 中等

给你一个下标从 0 开始、长度为 n 的整数数组 nums &#xff0c;和两个整数 lower 和 upper &#xff0c;返回 公平数对的数目 。 如果 (i, j) 数对满足以下情况&#xff0c;则认为它是一个 公平数对 &#xff1a; 0 < i < j < n&#xff0c;且lower < nums[i] …

011数论——算法备赛

素数筛 给定n, 求2~n内的所有素数 埃氏筛 利用素数的定义&#xff0c; 输出素数2&#xff0c;然后筛掉2的倍数&#xff0c;得 {2,3,5,7,9,11,13&#xff0c;…}输出素数3&#xff0c;然后筛掉3的倍数&#xff0c;得 {2,3,5,7,11,13&#xff0c;…} 继续上述步骤&#xff0…

算法之贪心算法

贪心算法 贪心算法核心思想常见应用场景典型案例案例一&#xff1a;找零问题案例二&#xff1a;活动选择问题案例三&#xff1a;货仓选址问题 贪心算法的应用详解霍夫曼编码最小生成树Dijkstra最短路径算法 总结 贪心算法 核心思想 贪心算法&#xff08;Greedy Algorithm&…

英码科技与泊川软件,携手加速AI与嵌入式系统融合创新

2025年4月15日&#xff0c;广州英码信息科技有限公司&#xff08;以下简称“英码科技”&#xff09;与广州泊川软件技术有限公司&#xff08;以下简称“泊川软件”&#xff09; 正式签署战略合作框架协议。此次合作将充分发挥双方在AI计算硬件与嵌入式操作系统领域的技术优势&a…

Flowable7.x学习笔记(九)部署 BPMN XML 流程

前言 到本篇为止&#xff0c;我们已经完成了流程定义以及其 BPMN XML 本身的查询和新增功能&#xff0c;那我们有有了XML之后就可以开始着手研究实现 Flowable7对流程的各种操作了&#xff0c;比如部署&#xff0c;挂起&#xff0c;发起等等。 首先第一步&#xff0c;我们本篇文…

electron 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;

在 Electron 中&#xff0c;有主进程和渲染进程 主进程&#xff1a;在Node.js环境中运行—意味着能够使用require模块并使用所有Node.js API 渲染进程&#xff1a;每个electron应用都会为每个打开的BrowserWindow&#xff08;与每个网页嵌入&#xff09;生成一个单独的渲染器进…

深入规划 Elasticsearch 索引:策略与实践

一、Elasticsearch 索引概述 &#xff08;一&#xff09;索引基本概念 Elasticsearch 是一个分布式、高性能的全文搜索引擎&#xff0c;其核心概念之一便是索引。索引本质上是一个存储文档的逻辑容器&#xff0c;它使得数据能够在高效的检索机制下被查询到。当我们对文档进行…

llamafactory的包安装

cuda版本12.1&#xff0c;python版本3.10&#xff0c;torch版本2.4.0&#xff0c;几个关键包版本如下&#xff1a; torch2.4.0cu121 transformers4.48.3 triton3.0.0 flash-attn2.7.1.post4 xformers0.0.27.post2 vllm0.6.3.post1 vllm-flash-attn2.6.1 unsloth2025.3.18 unsl…

Redis专题

前言 Redis的各种思想跟机组Cache和操作系统对进程的管理非常类似&#xff01; 一&#xff1a;看到你的简历上写了你的项目里面用到了redis&#xff0c;为啥用redis&#xff1f; 因为传统的关系型数据库如Mysql,已经不能适用所有的场景&#xff0c;比如秒杀的库存扣减&#xff…

【Rust 精进之路之第7篇-函数之道】定义、调用与参数传递:构建代码的基本单元

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:封装逻辑,代码复用的基石 在之前的文章中,我们已经探索了 Rust 如何处理数据(变量、标量类型、复合类型)以及如何控制程序的执行流程(if/else、循环)。这些构成了编写简…

文件有几十个T,需要做rag,用ragFlow能否快速落地呢?

一、RAGFlow的优势 1、RAGFlow处理大规模数据性能&#xff1a; &#xff08;1&#xff09;、RAGFlow支持分布式索引构建&#xff0c;采用分片技术&#xff0c;能够处理TB级数据。 &#xff08;2&#xff09;、它结合向量搜索和关键词搜索&#xff0c;提高检索效率。 &#xf…

安卓的桌面 launcher是什么

安卓的桌面Launcher是一种安卓应用程序&#xff0c;它主要负责管理和展示手机主屏幕的界面以及相关功能&#xff0c;为用户提供与设备交互的主要入口。以下是其详细介绍&#xff1a; 功能 主屏幕管理&#xff1a;用户可以在主屏幕上添加、删除和排列各种应用程序图标、小部件…

【学习笔记】计算机网络(九)—— 无线网络和移动网络

第9章 无线网络和移动网络 文章目录 第9章 无线网络和移动网络9.1 无线局域网WLAN9.1.1 无线局域网的组成9.1.2 802.11局域网的物理层9.1.3 802.11局域网的MAC层协议CSMA 协议CSMA/CD 协议 - 总线型 - 半双工CSMA/CA 协议 9.1.4 802.11局域网的MAC帧 9.2 无线个人区域网WPAN9.3…

无线网络入侵检测系统实战 | 基于React+Python的可视化安全平台开发详解

随着无线网络的普及&#xff0c;网络攻击风险也日益严峻。本项目旨在构建一个实时监测、智能识别、高效防护的无线网络安全平台&#xff0c;通过结合前后端技术与安全算法&#xff0c;实现对常见攻击行为的有效监控和防御。 一、项目简介与功能目的 本系统是一款基于 React 前…

速通FlinkCDC3.0

1.FlinkCDC概述 1.1FlinkCDC是什么&#xff1f; FlinkCDC&#xff08;Flink Change Data Capture&#xff09;是一个用于实时捕获数据库变更日志的工具&#xff0c;它可以将数据库的变更实时同步到ApacheFlink系统中。 1.2 FlinkCDC的三个版本&#xff1f; 1.x 这个版本的Fli…

B+树节点与插入操作

B树节点与插入操作 设计B树节点 在设计B树的数据结构时&#xff0c;我们首先需要定义节点的格式&#xff0c;这将帮助我们理解如何进行插入、删除以及分裂和合并操作。以下是对B树节点设计的详细说明。 节点格式概述 所有的B树节点大小相同&#xff0c;这是为了后续使用自由…