当前位置: 首页 > article >正文

计算机视觉---YOLOv3

YOLOv3讲解

一、YOLOv3 核心架构与创新

YOLOv3(2018年发布)在YOLOv2基础上进行了全面升级,通过多尺度预测、更强大的骨干网络和优化的分类损失函数,显著提升了检测精度,尤其是小目标检测能力,同时保持了实时性能。
在这里插入图片描述

二、YOLOv3 网络结构详解
1. 骨干网络:Darknet-53
  • 设计目标
    结合ResNet的残差结构与YOLOv2的Darknet-19,在保证计算效率的同时增强特征提取能力。
  • 结构特点
    • 包含53个卷积层,引入残差块(Residual Block)(如 1×13×3 卷积堆叠后跨层连接),缓解梯度消失问题。
      在这里插入图片描述

    • 仅使用 1×13×3 卷积核,简化网络设计。

    • 移除全连接层,采用全局平均池化进行分类(仅用于预训练)。

  • 优势
    • 比Darknet-19更深,特征表达能力更强,同时参数量少于ResNet-101/152。
    • 在ImageNet上达到82.7%的top-5准确率,速度比ResNet快。
      在这里插入图片描述
      在这里插入图片描述
2. 多尺度预测(FPN结构)
  • YOLOv2问题
    仅依赖单一尺度(13×13)或融合少量浅层特征,对小目标检测能力有限。

  • YOLOv3改进

    • 采用特征金字塔网络(FPN),在三个不同尺度上预测边界框:

      1. 大目标:13×13特征图(下采样32倍),感受野最大。
      2. 中等目标:26×26特征图(下采样16倍),融合前层特征。
      3. 小目标:52×52特征图(下采样8倍),保留细粒度信息。
    • 每个尺度使用3种锚框(共9种,通过K-means聚类生成),例如:

      13×13: 大锚框 (116×90, 156×198, 373×326)  
      26×26: 中锚框 (30×61, 62×45, 59×119)  
      52×52: 小锚框 (10×13, 16×30, 33×23)  
      

      在这里插入图片描述
      在这里插入图片描述

  • 特征融合方式
    通过上采样(UpSampling)跳跃连接(Skip Connection),将深层语义信息与浅层空间信息结合。例如,将13×13特征图上采样后与26×26特征图拼接,再用于预测。
    在这里插入图片描述
    在这里插入图片描述

3. 边界框预测机制
  • 与YOLOv2的延续
    仍使用锚框机制,通过逻辑回归预测边界框中心偏移量 ( t x , t y ) (t_x, t_y) (tx,ty)、宽高缩放 ( t w , t h ) (t_w, t_h) (tw,th) 和置信度 t o t_o to,公式与YOLOv2一致:
    在这里插入图片描述

  • 改进点

    • 每个尺度的每个网格预测3个边界框(YOLOv2为5个),但通过多尺度融合,总锚框数量更多(3×3=9种 vs. YOLOv2的5种)。
    • 引入逻辑回归(Logistic Regression)对每个锚框进行二分类,判断是否包含目标,替代YOLOv2的单一置信度预测。
4. 分类损失函数改进
  • YOLOv2的问题
    使用Softmax多分类,假设类别互斥(如“狗”和“猫”不能同时存在),不适用于多标签场景。
  • YOLOv3改进
    • 采用独立的二元逻辑分类器(Binary Logistic Classifier),每个类别使用单独的sigmoid函数进行预测,允许目标具有多个标签(如“人”和“骑车的人”)。

    • 损失函数为二元交叉熵(Binary Cross-Entropy)

      L c l a s s = − ∑ c ∈ c l a s s e s [ p ( c ) log ⁡ ( p ^ ( c ) ) + ( 1 − p ( c ) ) log ⁡ ( 1 − p ^ ( c ) ) ] L_{class} = -\sum_{c \in classes} \left[ p(c) \log(\hat{p}(c)) + (1-p(c)) \log(1-\hat{p}(c)) \right] Lclass=cclasses[p(c)log(p^(c))+(1p(c))log(1p^(c))]

  • 优势
    • 更适合多标签任务(如COCO数据集)。
    • 对长尾分布的类别更鲁棒(避免Softmax的类别竞争问题)。
5. 正负样本分配策略
  • YOLOv2的启发式分配
    每个网格仅负责一个目标,IOU最大的锚框为正样本,其他为负样本。
  • YOLOv3改进
    • 若一个真实框与某个锚框的IOU超过阈值(如0.5),则该锚框为正样本,允许一个目标由多个锚框负责。
    • 忽略IOU介于阈值之间的锚框(不计算分类和定位损失),减少模糊样本的干扰。
6. 训练策略优化
  • 预训练
    在ImageNet上使用1000类进行分类预训练,然后微调检测任务。
  • 数据增强
    继承YOLOv2的多尺度训练(输入尺寸随机调整),并增加MixUpCutMix等增强方法,提升模型鲁棒性。
  • 学习率调度
    使用余弦退火(Cosine Annealing)动态调整学习率,加速收敛。
三、YOLOv3 对比 YOLOv2 的核心改进
改进点YOLOv2YOLOv3效果/原因
骨干网络Darknet-19(19卷积层+BN)Darknet-53(53卷积层+残差结构)更深的网络+残差块提升特征表达能力,ImageNet top-5准确率从76.5%→82.7%,参数量更少。
多尺度预测单尺度(13×13)或融合少量浅层特征三尺度预测(13×13、26×26、52×52)小目标检测mAP提升约10%,对不同尺度目标更鲁棒。
锚框机制5种锚框(全局共享)9种锚框(3个尺度各3种)更细粒度的锚框设计,覆盖更广的尺度范围,召回率提升。
分类损失函数Softmax多分类(类别互斥)二元逻辑分类器(多标签独立预测)支持多标签任务,对非互斥类别更友好,如COCO数据集中的“人”和“骑车的人”。
特征融合Passthrough层(简单通道叠加)FPN结构(上采样+跳跃连接)更复杂的特征金字塔,有效融合深层语义与浅层细节。
正负样本分配启发式分配(IOU最大的锚框为正样本)基于IOU阈值(>0.5为正,<阈值忽略)减少模糊样本干扰,优化训练稳定性。
小目标检测较弱(依赖单一尺度)显著提升(52×52特征图专门检测小目标)在COCO数据集上,小目标AP从10%→19%。
训练策略多尺度训练(320×320~608×608)多尺度+MixUp/CutMix数据增强增强模型对数据扰动的鲁棒性,提升泛化能力。
检测精度(COCO mAP)约57.9%(YOLO9000)约57.9%(相同参数量下),但APS更高在相同参数量下保持精度,小目标检测能力更强。
速度与精度平衡FPS≈67(416×416)FPS≈32(416×416)速度略有下降(因多尺度预测),但精度提升显著,尤其在小目标和多标签场景。
四、YOLOv3 性能总结
  • 精度
    • 在COCO数据集上,YOLOv3达到57.9%的mAP(与YOLOv2相近),但小目标AP从10%提升至19%
    • 在VOC数据集上,mAP@0.5达到87%,接近SSD和Faster R-CNN的水平。
  • 速度
    • 在Titan X上,输入416×416时FPS约32,仍保持实时性。
  • 优势
    • 多尺度设计使其在不同尺寸目标上均有良好表现。
    • 多标签分类更符合实际应用需求(如监控场景中的多属性识别)。
    • 模型架构灵活性:可通过调整输入尺寸平衡速度与精度(如输入320×320时FPS达91)。
五、YOLOv3 的局限性
  • 精度瓶颈
    单阶段检测器在小目标和密集目标检测上仍落后于两阶段方法(如FPN+Mask R-CNN)。
  • 损失函数设计
    定位损失仍使用简单的均方误差,未考虑IOU/GIOU等更先进的度量(后续YOLOv4引入CIOU损失)。
  • 后处理依赖
    仍需NMS进行后处理,对密集重叠目标处理效果有限(后续YOLOv5引入Soft-NMS和IoU-aware机制)。
总结

YOLOv3通过多尺度预测、二元逻辑分类器和更强大的骨干网络,显著提升了小目标检测能力和多标签分类性能,同时保持了YOLO系列的实时性优势。其设计思想(如特征金字塔、多标签分类)成为后续目标检测模型的标配,为YOLOv4、v5等版本奠定了基础。


残差连接(Residual Connection)

一、核心概念与起源

残差连接(Residual Connection)是一种跨层跳跃连接技术,其核心思想是让输入信号绕过一个或多个网络层,直接与输出相加,形成残差学习的路径。该技术由何恺明团队于2015年在ResNet中首次提出,旨在解决深层网络训练中的梯度消失网络退化问题

核心公式
假设某层的输入为 ( x ),经过非线性变换后的输出为 ( F(x) ),则残差连接的输出为:

H ( x ) = F ( x ) + x H(x) = F(x) + x H(x)=F(x)+x
其中 ( F(x) ) 称为残差映射,表示输入 ( x ) 与输出 ( H(x) ) 之间的差异。网络只需学习残差 ( F(x) = H(x) - x ),而非直接学习复杂的 ( H(x) ),从而显著降低训练难度。

二、残差连接的核心作用
  1. 缓解梯度消失
    传统深层网络中,梯度通过链式法则逐层传递时易因连乘效应衰减至零。残差连接通过捷径路径(Shortcut Connection)为梯度提供直接回传通道,使得底层网络层仍能获得足够梯度更新。数学上,反向传播时梯度为:

    ∂ Loss ∂ x = ∂ Loss ∂ H ( x ) ⋅ ( ∂ F ( x ) ∂ x + 1 ) \frac{\partial \text{Loss}}{\partial x} = \frac{\partial \text{Loss}}{\partial H(x)} \cdot \left( \frac{\partial F(x)}{\partial x} + 1 \right) xLoss=H(x)Loss(xF(x)+1)
    即使 ∂ F ( x ) ∂ x \frac{\partial F(x)}{\partial x} xF(x) 很小,恒等项 ( 1 ) 仍能保证梯度有效传递。

  2. 信息保留与复用
    残差连接允许输入 ( x ) 直接参与输出计算,避免深层网络因多层变换导致的信息丢失。例如,在YOLOv3的Darknet-53中,浅层的边缘信息通过残差连接与深层语义特征融合,提升小目标检测能力。

  3. 支持更深的网络结构
    ResNet通过残差连接训练出152层的网络,而传统网络在30层后即出现性能退化。残差连接使网络深度增加时仍能保持训练稳定性和准确率。

三、残差块(Residual Block)的结构设计

残差块是残差连接的具体实现单元,通常包含以下组件:

  1. 基础残差块(Basic Block)

    • 结构:两个3×3卷积层,中间插入BN和激活函数(如ReLU),输入 ( x ) 通过捷径连接直接与输出相加。
    • 应用场景:ResNet-18/34等较浅网络。
  2. 瓶颈残差块(Bottleneck Block)

    • 结构:1×1卷积(降维)→ 3×3卷积(特征提取)→ 1×1卷积(升维),输入 ( x ) 与输出相加。
    • 优势:通过降维减少计算量,适用于ResNet-50/101/152等深层网络。
  3. Darknet-53中的残差块

    • 结构:1×1卷积(降维)→ 3×3卷积(升维),输入与输出相加。
    • 作用:在YOLOv3中构建53层Darknet-53网络,通过23个残差块提升特征提取能力,同时保持实时性。
四、残差连接的关键技术细节
  1. 维度匹配
    捷径连接要求输入 ( x ) 与输出 ( F(x) ) 的维度一致。若维度不同,需通过以下方式调整:

    • 1×1卷积:调整通道数(如ResNet中的维度匹配)。
    • 零填充:保持空间尺寸一致(如YOLOv3中部分残差块)。
  2. 激活函数选择

    • ReLU:在残差块内部使用,增加非线性表达能力。
    • 无激活函数:残差加法后不使用激活函数,避免破坏残差学习的特性。
  3. 与归一化层的结合

    • Post-Norm:残差加法后进行层归一化(Layer Normalization),如原始Transformer架构。
    • Pre-Norm:归一化层置于子层前,缓解深层网络梯度消失问题,成为现代Transformer的主流选择(如GPT-3)。
五、残差连接在YOLOv3中的具体应用
  1. 主干网络Darknet-53

    • 结构:53层卷积网络,包含23个残差块,每个残差块由1×1和3×3卷积组成。
    • 作用
      • 残差连接允许网络加深至53层,提升特征提取能力(ImageNet Top-1准确率77.2%)。
      • 全卷积结构支持任意尺寸输入,输出3个尺度特征图(13×13、26×26、52×52),用于多尺度检测。
  2. 多尺度特征融合

    • 特征金字塔(FPN):通过上采样和残差连接融合浅层与深层特征。例如,13×13特征图经上采样后与26×26特征图拼接,增强小目标检测能力。
    • 锚框分配:每个尺度检测头对应3个锚框(共9个),通过残差连接传递的特征更丰富,提升召回率。
  3. 训练策略

    • 多尺度训练:输入尺寸动态调整为320×320至608×608,残差连接确保深层网络在不同尺度下仍能稳定训练。
    • 标签平滑对类别标签添加噪声(如0.1),缓解过拟合,残差连接的稳定性对此策略有辅助作用。(10%的标签会被随机修改)
六、残差连接的优势与局限性
  1. 优势

    • 训练稳定性:解决深层网络梯度消失和退化问题,支持训练数百层的网络。
    • 特征复用:保留输入信息,避免深层特征丢失,适用于小目标检测等复杂任务。
    • 参数效率:残差块通过降维减少计算量,例如Darknet-53的参数量(61M)仅为ResNet-152(60M)的1.02倍,但速度更快。
  2. 局限性

    • 计算量增加:残差连接引入额外的加法操作,可能略微增加推理时间。
    • 结构复杂度:需精心设计残差块的维度匹配和连接方式,否则可能导致性能下降。
七、残差连接的扩展与变种
  1. 密集连接(DenseNet)

    • 每个层与之前所有层直接相连,特征复用更彻底,但参数量较大。
  2. 分组残差(ResNeXt)

    • 将卷积层分组,平衡计算量与特征多样性,提升模型效率。
  3. 动态残差(Dynamic Residual)

    • 引入门控机制动态控制残差路径的权重,增强模型灵活性。
八、总结

残差连接是深度学习领域的革命性技术,其通过残差学习捷径路径彻底改变了深层网络的训练范式。在YOLOv3中,残差连接与Darknet-53的结合不仅提升了特征提取能力,还通过多尺度检测和特征融合显著增强了小目标检测性能。尽管存在一定局限性,残差连接仍是现代神经网络(如Transformer、UNet)的核心组件,其思想为后续模型优化提供了重要启示。


我崇拜流浪、变化和幻想,不愿将我的爱钉在地球某处。 —赫尔曼·黑塞

相关文章:

计算机视觉---YOLOv3

YOLOv3讲解 一、YOLOv3 核心架构与创新 YOLOv3&#xff08;2018年发布&#xff09;在YOLOv2基础上进行了全面升级&#xff0c;通过多尺度预测、更强大的骨干网络和优化的分类损失函数&#xff0c;显著提升了检测精度&#xff0c;尤其是小目标检测能力&#xff0c;同时保持了实…...

#RabbitMQ# 消息队列进阶

目录 消息可靠性 一 生产者的可靠性 1 生产者的重连 2 生产者的确认 (1 Confirm* (2 Return 二 MQ的可靠性 1 数据持久化 2 Lazy Queue* 三 消费者的可靠性 1 消费者确认机制 2 消费失败处理 3 业务幂等性 四 延迟消息 消息可靠性 在消息队列中&#xff0c;可靠性…...

React从基础入门到高级实战:React 核心技术 - React Router:路由管理

React Router&#xff1a;路由管理 在现代 Web 应用开发中&#xff0c;路由管理 是构建多页面或单页应用&#xff08;SPA&#xff09;的核心技术之一。React Router 是 React 生态中最受欢迎的路由管理库&#xff0c;它为开发者提供了强大的工具来实现页面导航、动态路由和权限…...

【深度学习】损失“三位一体”——从 Fisher 的最大似然到 Shannon 的交叉熵再到 KL 散度,并走进 PET·P-Tuning微调·知识蒸馏的实战

一页速览&#xff1a; 1912 Fisher 用最大似然把「让数据出现概率最高」变成参数学习&#xff1b; 1948 Shannon 把交叉熵解释成「最短平均编码长度」&#xff1b; 1951 Kullback-Leibler 用相对熵量化「多余信息」。 三条历史线落到今天深度学习同一个损失——交叉熵。 也…...

5 分钟速通密码学!

让我们开始第一部分&#xff1a;密码学基础 (Cryptography Basics)。 第一部分&#xff1a;密码学基础 (Cryptography Basics) 1. 什么是密码学&#xff1f; 想象一下&#xff0c;在古代战争中&#xff0c;将军需要向远方的部队传递作战指令。如果直接派人送信&#xff0c;信…...

Linux——IP协议

1. 现实意义 • IP协议&#xff1a;提供一种能力&#xff0c;把数据报从主机A跨网络送到主机B • TCP/IP协议&#xff1a;核心功能&#xff0c;把数据100%可靠的从主机A跨网络送到主机B 注&#xff1a;TCP协议负责百分百可靠&#xff0c;通过三次握手、滑动窗口、拥塞控制、延…...

Lua 脚本在 Redis 中的运用-24 (使用 Lua 脚本实现原子计数器)

实践练习:使用 Lua 脚本实现原子计数器 实现原子计数器是许多应用程序中的常见需求,例如跟踪网站访问量、限制 API 请求或管理库存。虽然 Redis 提供了 INCR 命令用于递增整数,但在复杂场景或与其他操作结合时直接使用它可能并不足够。本课程探讨了如何在 Redis 中利用 Lua…...

Linux信号量(32)

文章目录 前言一、POSIX 信号量信号量的基础知识信号量的基本操作 二、基于环形队列实现生产者消费者模型环形队列单生产单消费模型多生产多消费模型 总结 前言 加油&#xff0c;加油&#xff01;&#xff01;&#xff01; 一、POSIX 信号量 信号量的基础知识 互斥、同步 不只…...

技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(上)

ABC大脑架构&#xff1a;连接大模型与物理世界的具身智能新范式 在具身智能和类人机器人技术快速发展的背景下&#xff0c;如何高效整合“大模型的认知理解能力”与“对真实物理世界的精准控制”&#xff0c;成为当前智能体系统设计中最具挑战性也是最关键的问题之一。尽管大语…...

使用堡塔和XShell

使用堡塔和XShell 一、SSH协议介绍 SSH为SecureShell的缩写&#xff0c;由IETF的网络小组(NetworkWorkingGroup)所制定;SSH为建立在应用层基础上的安全协议。SSH是较可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中…...

软件项目交付阶段,验收报告记录了什么?有哪些标准要求?

软件项目交付阶段&#xff0c;验收报告扮演着至关重要的角色&#xff0c;它相当于一份详尽的“成绩单”&#xff0c;具体记录了项目完成的具体情况以及是否达到了既定的标准。 项目基本信息 该环节将展示软件项目的核心信息&#xff0c;包括项目名称、开发团队构成、项目实施…...

LightGBM的python实现及参数优化

文章目录 1. LightGBM模型参数介绍2. 核心优势3. python实现LightGBM3.1 基础实现3.1.1 Scikit-learn接口示例3.1.2 Python API示例 3.2 模型调优3.2.1 GridSearchCV简介3.2.2 LightGBM超参调优3.2.3 GridSearchCV寻优结果解读 在之前的文章 Boosting算法【AdaBoost、GBDT 、X…...

封装渐变堆叠柱状图组件附完整代码

组件功能 这是一个渐变堆叠柱状图组件&#xff0c;主要功能包括&#xff1a; 在一根柱子上同时显示高、中、低三种危险级别数据使用渐变色区分不同危险级别&#xff08;高危红色、中危橙色、低危蓝色&#xff09;悬停显示详细数据信息&#xff08;包括总量和各级别数据&#…...

分布式项目保证消息幂等性的常见策略

Hello&#xff0c;大家好&#xff0c;我是灰小猿&#xff01; 在分布式系统中&#xff0c;由于各个服务之间独立部署&#xff0c;各个服务之间依靠远程调用完成通信&#xff0c;再加上面对用户重复点击时的重复请求等情况&#xff0c;所以如何保证消息消费的幂等性是在分布式或…...

山东大学软件学院创新项目实训开发日志——第十三周

目录 1.开展prompt工程&#xff0c;创建个性化AI助理&#xff0c;能够基于身份实现不同角度和语言风格的回答。 2.对输出进行格式化&#xff0c;生成特定格式的会议计划文档。 3.学习到的新知识 本阶段我所做的工作 1.开展prompt工程&#xff0c;创建个性化AI助理&#xff…...

如何在sublime text中批量为每一行开头或者结尾添加删除指定内容

打开你的文件&#xff1a;首先&#xff0c;在 Sublime Text 中打开你想要编辑的文件&#xff0c;然后全选 行首插入&#xff1a; 选择所有行的开头&#xff1a; 使用快捷键 Ctrl Shift L&#xff08;Windows/Linux&#xff09;或 Cmd Shift L&#xff08;Mac&#xff09;&…...

Cesium 透明渐变墙 解决方案

闭合路径修复 通过增加额外点确保路径首尾相接 透明渐变效果 使用RGBA颜色模式实现从完全不透明到完全透明的平滑渐变 参数可调性 提供多个可调参数&#xff0c;轻松自定义颜色、高度和圆环尺寸 完整代码实现 <!DOCTYPE html> <html> <head><meta …...

网络原理与 TCP/IP 协议详解

一、网络通信的本质与基础概念 1.1 什么是网络通信&#xff1f; 网络通信的本质是跨设备的数据交换&#xff0c;其核心目标是让不同物理位置的设备能够共享信息。这种交换需要解决三个核心问题&#xff1a; 如何定位设备&#xff1f; → IP地址如何找到具体服务&#xff1f;…...

day022-定时任务-故障案例与发送邮件

文章目录 1. cron定时任务无法识别命令1.1 故障原因1.2 解决方法1.2.1 对命令使用绝对路径1.2.2 在脚本开头定义PATH 2. 发送邮件2.1 安装软件2.2 配置邮件信息2.3 巡检脚本与邮件发送2.3.1 巡检脚本内容2.3.2 制作时任务发送邮件 3. 调取API发送邮件3.1 编写文案脚本3.2 制作定…...

新增 git submodule 子模块

文章目录 1、基本语法2、添加子模块后的操作3、拉取带有submodule的仓库 git submodule add 是 Git 中用于将另一个 Git 仓库作为子模块添加到当前项目中的命令。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录&#xff0c;同时保持它们各自的提交历史独立。 1、基…...

List优雅分组

一、前言 最近小永哥发现&#xff0c;在开发过程中&#xff0c;经常会遇到需要对list进行分组&#xff0c;就是假如有一个RecordTest对象集合&#xff0c;RecordTest对象都有一个type的属性&#xff0c;需要将这个集合按type属性进行分组&#xff0c;转换为一个以type为key&…...

Linux 使用 Docker 安装 Milvus的两种方式

一、使用 Docker Compose 运行 Milvus (Linux) 安装并启动 Milvus Milvus 在 Milvus 资源库中提供了 Docker Compose 配置文件。要使用 Docker Compose 安装 Milvus&#xff0c;只需运行 wget https://github.com/milvus-io/milvus/releases/download/v2.5.10/milvus-standa…...

AR眼镜+AI视频盒子+视频监控联网平台:消防救援的智能革命

在火灾现场&#xff0c;每一秒都关乎生死。传统消防救援方式面临信息滞后、指挥盲区、环境复杂等挑战。今天&#xff0c;一套融合AR智能眼镜AI视频分析盒子智能监控管理平台的"三位一体"解决方案&#xff0c;正在彻底改变消防救援的作业模式&#xff0c;为消防员装上…...

编程技能:字符串函数10,strchr

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;字符串函数09&#xff0c;strncmp 回到目录…...

使用tunasync部署企业内部开源软件镜像站-Centos Stream 9

使用tunasync部署企业内部开源软件镜像站 tunasync 是清华大学 TUNA 镜像源目前使用的镜像方案&#xff0c;本文将介绍如何使用 tunasync 部署企业内部开源软件镜像站。 基于tunasync mirror-web nginx进行镜像站点搭建。 1. tunasync设计 tunasync架构如下&#xff1a; …...

c/c++的opencv像素级操作二值化

图像级操作&#xff1a;使用 C/C 进行二值化 在数字图像处理中&#xff0c;图像级操作 (Image-Level Operations) 是指直接在图像的像素级别上进行处理&#xff0c;以改变图像的视觉特性或提取有用信息。这些操作通常不依赖于图像的全局结构&#xff0c;而是关注每个像素及其邻…...

C++----Vector的模拟实现

上一节讲了string的模拟实现&#xff0c;string的出现时间比vector靠前&#xff0c;所以一些函数给的也比较冗余&#xff0c;而后来的vector、list等在此基础上做了优化。这节讲一讲vector的模拟实现&#xff0c;vector与模板具有联系&#xff0c;而string的底层就是vector的一…...

Mac redis下载和安装

目录 1、官网&#xff1a;https://redis.io/ 2、滑到最底下 3、下载资源 4、安装&#xff1a; 5、输入 sudo make test 进行编译测试 会提示 ​编辑 6、sudo make install 继续 7、输入 src/redis-server 启动服务器 8、输入 src/redis-cli 启动测试端 1、官网&#xff…...

[25-cv-05718]BSF律所代理潮流品牌KAWS公仔(商标+版权)

潮流品牌KAWS公仔 案件号&#xff1a;25-cv-05718 立案时间&#xff1a;2025年5月21日 原告&#xff1a;KAWS, INC. 代理律所&#xff1a;Boies Schiller Flexner LLP 原告介绍 原告是一家由美国街头艺术家Brian Donnelly创立的公司&#xff0c;成立于2002年2月25日&…...

【PhysUnits】9 取负重载(negation.rs)

一、源码 这段代码是类型级二进制数&#xff08;包括正数和负数&#xff09;的取反和取负操作。它使用了类型系统来表示二进制数&#xff0c;并通过特质&#xff08;trait&#xff09;和泛型来实现递归操作。 use super::basic::{B0, B1, Z0, N1}; use core::ops::Neg;// 反…...