- 博客(2147)
- 资源 (16)
- 收藏
- 关注
原创 Yolov5网络架构中SPPF 层的核心价值
SPPF 是 YOLOv5 中一个轻量但高效的“上下文增强器”位于主干网络末端(P5 层);通过快速金字塔池化,低成本地融合多尺度上下文信息;显著提升模型对大目标、复杂场景、尺度变化的适应能力;是 YOLOv5 在保持高速度的同时实现高精度的关键设计之一。 主要负责“看得更深它像是一个不断深入钻研、理解图像内容本质(“是什么”)的专家。 主要负责“看得更全它像是一个站在高处、拥有广角视野的观察者,能够同时把握细节、局部和全局(“在哪里”、“有多大”、“周围有什么”)。
2025-12-17 17:12:08
3
原创 四大类型转换总结对比
失败时返回 nullptr(指针)或抛出异常(引用)当必须使用时,选择最具体、最安全的转换运算符。添加/移除 const/volatile。修改真正的 const 对象是未定义行为。 - 用 C++ 风格替代。 - 所有类型转换都要测试。 - 好的设计减少转换需求。 - 处理大部分转换需求。 - 提供运行时安全性。 - 仅在必要且安全时。 - 特别是危险的转换。不能转换不相关指针类型。 - 满足大部分需求。 - 知道你在做什么。相关类型间的明确转换。 - 作为最后手段。
2025-12-17 08:11:25
3
原创 CMake 跨平台 C 兼容 C++ 动态库 + 测试(简化版)
这个配置提供了完整的跨平台 C 兼容 C++ 动态库开发环境,包含构建、测试和错误处理的所有必要组件。:Windows、Linux、macOS 全支持。:包含 C 和 C++ 测试程序。:完整的错误代码和描述。:清晰的 API 设计。
2025-12-16 08:14:38
154
原创 CMake 跨平台 C++ 动态库 + 测试(简化版)
这个配置提供了完整的跨平台动态库开发环境,包含构建、测试和安装的所有必要组件。:Windows、Linux、macOS 全支持。:使用目标属性而不是全局变量。:包含单元测试和集成测试。:可选择是否构建测试。
2025-12-16 08:14:16
10
原创 C++ 中最常用的类型转换运算符:static_cast
在 C++ 项目中,static_cast 通常占所有类型转换的 70-80%,是最核心、最常用的类型转换工具。:比 C 风格转换更安全,比其他 C++ 转换更常用。(int↔double, enum↔int等):涵盖日常编程的大部分类型转换需求。:编译时检查,避免运行时错误。:编译时处理,无运行时成本。(能解决 80% 的问题)日常类型转换、类层次转换。与旧API交互、重载函数。:涵盖大部分类型转换场景。:明确告诉阅读者转换目的。:在编译时进行类型检查。:明确表达程序员意图。★★★★★ (最高)
2025-12-15 08:14:55
146
原创 PyTorch Data Loading 组件详解
组件层级主要用途是否必须使用频率Dataset底层定义数据接口是每次创建新数据集DataLoader中层批量加载数据是每次训练dataloader模块内部包含DataLoader实现否很少直接使用distributed模块高层分布式训练支持仅分布式训练分布式训练时。
2025-12-15 08:11:48
762
原创 C3 模块与普通 Bottleneck 堆叠区别
维度普通 Bottleneck 堆叠C3 模块设计理念残差学习CSP + 特征分治信息路径单一路径双路径(主干 + bypass)融合方式相加(Add)拼接(Concat)+ 卷积计算效率较低高(通道减半)特征保留弱(多次非线性)强(直连保留原始信息)梯度传播单一主路径多样化、更稳定任务适配通用(分类为主)专为目标检测优化可扩展性有限极强(即插即用各种模块)实际性能基准线显著优于(尤其在小目标和效率方面)
2025-12-14 09:09:49
20
原创 const_cast 详解及使用场景
是 C++ 中最危险的类型转换之一,必须谨慎使用。在大多数情况下,有更好的替代方案。 的类型转换运算符。它是唯一能够移除 const 属性的 C++ 风格转换。:尽量少用,优先考虑 mutable 和更好的设计。是 C++ 中专门用于添加或移除变量的。你确切知道对象不是真正的 const。(在 const 函数中修改缓存):充分测试,确保不会导致未定义行为。转换后不会违反 const 正确性。(需要移除 const 限定符):添加注释说明为什么必须使用。有充分的理由不使用其他方法。(确认不会修改数据)
2025-12-14 09:09:22
17
原创 reinterpret_cast详解及使用场景
就像C++类型系统中的"逃生舱",只有在真正需要逃离类型系统时才使用它,而且要知道这很危险。:使用C++标准库功能(std::bit_cast, std::memcpy):使用其他类型转换(static_cast, dynamic_cast):使用reinterpret_cast,但要小心谨慎。:尽量避免使用reinterpret_cast。:仅在低级编程、与C接口、序列化等场景使用。:只重新解释位模式,不进行任何转换。:如果必须使用,要进行充分测试。:在安全的包装函数中使用。:解释为什么必须使用。
2025-12-13 08:53:53
20
原创 COCO数据集详解 & YOLO使用指南
全称:Common Objects in Context特点:大规模、丰富标注、复杂日常场景应用:目标检测、分割、关键点检测、图像描述等📊 数据集统计 数据集划分图片数量实例数量标注文件训练集118,287860,001instances_train2017.json验证集5,00036,781instances_val2017.json测试集40,670未公开标注image_info_test2017.json注意:COCO2017是常用版本,之前有2014版本(训练集
2025-12-13 08:53:16
40
原创 PASCAL VOC数据集详解 & YOLO使用指南
合并VOC2007和VOC2012增加数据量检查标注错误和缺失文件生成训练/验证/测试集时注意数据分布。
2025-12-12 08:14:03
118
原创 dynamic_cast 详解及使用场景
提供了运行时的类型安全,但代价是性能开销。在设计系统时,应优先考虑使用虚函数和多态,只在必要时使用。简单的类型转换(用 static_cast)是 C++ 中专门用于处理。安全转换的操作符,是唯一在。进行类型检查的转换操作符。查询对象是否支持特定接口。可以用虚函数替代的场景。处理未知的派生类对象。
2025-12-12 08:02:07
93
原创 使用 Qt 创建兼容 C++ 的 C 语言静态库
这个 Qt 项目配置提供了简单而强大的方式来构建和管理 C 语言静态库,同时确保与 C++ 的完全兼容性。:在构建库后自动编译 C 和 C++ 测试程序。:支持 Windows、Linux、macOS。:可以轻松在其他 Qt 项目中使用。:自动处理不同构建配置。确保 C++ 兼容性。
2025-12-11 08:12:50
111
原创 深度学习常用数据集的分类解析
1400万图片,2万类别(常用子集:ILSVRC 2012,1000类)最新趋势是使用大规模多模态数据(图文/视频-文本对)进行跨模态预训练。10类(CIFAR-10)或100类(CIFAR-100)物体图片。20个常见物体类别,含目标检测/分割/动作识别标注。900万图片,1900万标注框,600个类别。电影评分数据集(1-5分),包含用户属性。:分析数据分布(类别/人口/地理等偏差)手写数字(0-9),6万训练+1万测试。5万条电影评论,二分类(正面/负面)10万图片,物体/属性/关系密集标注。
2025-12-11 08:12:02
371
原创 virtual函数可以设置成inline吗
情况能否内联说明通过指针/引用调用虚函数❌ 不能运行时多态通过对象直接调用✅ 可能静态绑定final方法且类型确定✅ 可能编译器可确定版本构造函数中调用❌ 不能但会静态绑定到当前类最佳实践:不要将虚函数声明为inline,让编译器在可能的情况下自动优化。如果需要高性能,考虑其他设计模式(如CRTP、策略模式等)。
2025-12-10 08:17:36
138
原创 目标检测网络框架的概述
特性/流派两阶段检测器单阶段检测器Transformer检测器核心思想提名-精修一步到位,密集预测集合预测,端到端精度通常最高较高(与两阶段相当)非常高(SOTA水平)速度较慢极快中等(训练慢,推理可优化)结构复杂度较高较低低(无手工组件)典型应用对精度要求极高的场景(如遥感检测、竞赛)实时应用(视频监控、自动驾驶、嵌入式设备)前沿研究,追求简洁架构和高性能的场景如何选择?追求极致速度与部署便利:选YOLO系列(如v8, v9)。追求高精度,不关心速度:选。
2025-12-10 08:17:03
334
原创 深入详解 C++ 动态库在 Linux 平台上的特殊性
特性Linux 平台细节与 Windows 的对比文件格式ELF 格式,扩展名为.soPE 格式,扩展名为.dll导入库不需要单独的导入库,.so文件一身二职需要单独的.lib导入库进行隐式链接符号可见性默认全部导出,需用和控制默认不导出,需用显式导出版本管理通过文件名、SONAME 和符号链接实现通常通过文件名或并行程序集(Side-by-Side)实现加载方式dlopendlsym用于显式链接用于显式链接编译选项-fPIC(强制要求),-shared-LD或相应的项目设置。
2025-12-09 08:06:35
104
原创 目标检测的发展史解析
从v1到最新的v8、v9、v10,YOLO系列通过更优的主干网络、Neck(如FPN、PAN)、Head设计以及损失函数改进,不断刷新着速度和精度的平衡,成为工业界应用最广泛的检测器。基于关键点(如CenterNet、CornerNet)或点(如FCOS)的检测器,直接预测物体的中心或角点,简化了设计,成为YOLOv1之后的新一波“无锚点”浪潮。,其“提示”驱动的分割思想,也为目标检测提供了新的可能性,推动了检测与分割的融合。,速度和精度达到新的平衡,成为两阶段检测器的标杆,并统治了此后多年的研究。
2025-12-09 08:06:07
106
原创 cv::Mat完全详解
/ 数据类型枚举enum {CV_8U=0, CV_8UC1=0, // 8位无符号, 1通道CV_8UC2, // 8位无符号, 2通道CV_8UC3, // 8位无符号, 3通道CV_8UC4, // 8位无符号, 4通道CV_8S=1, CV_8SC1=1, // 8位有符号CV_16U=2, CV_16UC1=2, // 16位无符号CV_16S=3, CV_16SC1=3, // 16位有符号CV_32S=4, CV_32SC1=4, // 32位有符号。
2025-12-08 08:12:49
230
原创 目标检测架构的浅析
架构类型代表模型优点缺点适用场景两阶段精度高速度慢,结构复杂对精度要求高的科研、离线分析单阶段YOLO, SSD速度快,结构简单传统上精度略低实时检测,如视频监控、自动驾驶端到端,无需NMS,设计简洁训练收敛慢,资源消耗大前沿研究,追求新范式和高精度当前趋势端到端化:消除NMS等后处理步骤,DETR是典型代表。无锚点化:简化模型设计,使其更简洁高效。多模态融合:结合文本、深度等信息进行检测(如 Grounding DINO)。Transformer与CNN融合。
2025-12-08 08:12:22
147
原创 动态库与静态库应用场景的选择指南
核心决策原则:部署简便性 → 静态库资源共享性 → 动态库更新灵活性 → 动态库性能极致性 → 静态库内存优化 → 动态库(多进程)稳定性要求 → 静态库核心基础库:静态链接确保稳定性业务功能模块:动态库支持灵活更新插件系统:动态加载实现扩展性容器环境:根据部署目标选择选择的关键是理解你的具体需求,在部署便利性、性能要求、内存使用和更新策略之间找到平衡点。
2025-12-07 07:56:54
26
原创 交叉编译环境中ABI(Application Binary Interface)详解
ABI函数调用约定(参数传递、返回值、栈管理)数据表示(数据类型大小、对齐方式、字节序)系统调用机制异常处理动态链接约定ABI 层次结构├── 处理器 ABI│ ├── 寄存器使用约定│ ├── 调用约定 (calling convention)│ └── 栈帧布局├── 数据 ABI│ ├── 数据类型表示│ ├── 对齐要求│ └── 字节序 (endianness)├── 系统 ABI│ ├── 系统调用编号│ ├── 信号处理│ └── 虚拟内存布局。
2025-12-07 07:56:36
37
原创 交叉编译环境变量详解
环境变量在交叉编译中起着至关重要的作用,它们控制着编译器、链接器、构建系统的行为,确保正确找到目标平台的工具、头文件和库文件。
2025-12-06 08:10:57
29
原创 交叉编译环境中构建系统配置详解
交叉编译环境中,构建系统的正确配置是成功编译的关键。不同的构建系统有不同的配置方法,下面详细解析主流构建系统的交叉编译配置。
2025-12-06 08:10:45
124
原创 使用 Makefile 创建 C++ 静态库
这个 Makefile 提供了完整的 C++ 静态库构建解决方案,包含了测试程序、安装支持和完整的工具链,可以直接使用或作为更复杂项目的基础。:支持 Linux、macOS、Windows(使用 MinGW) (Windows - 需要安装 MinGW):使用标准的 Makefile 语法。:包含清理、帮助、信息等实用目标。:可以轻松添加新的源文件。:清晰的构建目标分离。:支持调试和发布版本。:支持安装到系统目录。
2025-12-05 08:53:28
138
原创 使用 Qt 创建 C++ 静态库
这个 Qt 项目提供了完整的 C++ 静态库创建和使用示例,包含了构建脚本和测试程序,可以直接使用或作为更复杂项目的基础。:支持 Windows、Linux、macOS。选择"文件" → "打开文件或项目":可以轻松在其他 Qt 项目中使用。打开 Qt Creator。按 Ctrl+B 构建项目。按 Ctrl+R 运行项目。:使用现代 C++ 特性。选择构建套件(Kit)
2025-12-05 08:53:10
26
原创 YOLOv5 export.py 命令行参数详解
以下是 脚本的完整命令行参数说明,用于将YOLOv5模型导出为各种格式。主要参数详解模型输入相关 必需参数:预训练模型权重文件路径示例:或 , 输入图像尺寸,支持单值(正方形)或双值(高,宽)示例:或 默认值:批量大小默认值:1运行设备:或 等默认值:数据集配置文件路径(如 )如果未指定,将从权重文件中尝试读取重要:指定要导出的格式可选值:, , , , , , , , , 默认值:示例:使用FP16半精度推理可减小模型大小,提高推理速度使用INT8量化(部分格式支持)启用动态输入尺寸(
2025-12-04 08:40:19
36
原创 TensorRT精度优化详解
精度优化是TensorRT实现显著性能提升的核心技术之一,通过在可接受的精度损失范围内降低数据精度,大幅提升计算效率和内存带宽利用率。
2025-12-03 08:13:47
31
原创 讲解C++中的enum class和传统enum
优先使用enum class:提供更好的类型安全性和作用域控制传统enum慎用:仅在需要与旧代码兼容或进行位运算时使用指定底层类型:当需要控制存储大小时使用语法利用类型安全:避免意外的类型转换和比较错误enum class是现代C++编程的推荐选择,它通过强类型和明确的作用域提供了更好的代码安全性和可维护性。
2025-12-03 08:13:29
129
原创 Mamba 安装 PyTorch 环境
推荐的工作流程:创建干净的环境安装 PyTorch(根据硬件选择)# CPU 版本# GPU 版本安装额外包验证安装导出环境配置。
2025-12-02 08:33:13
58
原创 Anaconda、Miniconda、Miniforge 和 Mambaforge
Anaconda:适合新手的"全能套装"Miniconda:轻量灵活的"基础框架"Miniforge:社区导向的"纯净选择"Mambaforge:面向未来的"性能王者"个人建议:对于大多数现代数据科学工作,Mambaforge 是最佳选择,它在速度、包新鲜度和社区支持方面取得了很好的平衡。如果你是初学者,可以从Anaconda开始,等熟悉后再迁移到Mambaforge。
2025-12-02 08:32:55
193
原创 C++ STL 关联容器详解
/ 自定义比较函数});// 使用自定义比较函数的 set// 不会插入,因为 "Apple" 和 "apple" 被认为相同public:int age;// 必须定义相等运算符// 自定义哈希函数。
2025-12-01 10:07:56
402
原创 foreach 的使用范围和限制
/ 简单的自定义容器类private:public:// 提供 begin() 和 end() 方法// 可以用于自定义容器return 0;✅ 所有 Qt 容器(QList、QVector、QMap 等)✅ 所有 STL 容器(vector、list、set 等)✅ 原生 C 数组✅ 任何提供 begin()/end() 方法的自定义类型✅ C++11 初始化列表❌ 原始指针(不知道边界)❌ 不提供迭代器的自定义类型❌ 单个对象(非集合)
2025-11-30 09:34:09
30
原创 Qt foreach 用法详解
foreach是 Qt 提供的一个宏,用于简化容器的遍历操作。虽然 C++11 引入了基于范围的 for 循环,但foreach在 Qt 项目中仍然很常见。
2025-11-29 18:37:55
352
原创 C++ 哈希表详解
/ 必须定义相等运算符// 方法1:自定义哈希函数类// 结合 name 和 age 的哈希值// 方法2:使用 std::hash 特化template<>// 使用自定义哈希函数// 如果特化了 std::hash,可以省略第二个模板参数优点平均情况下 O(1) 的插入、删除和查找实现相对简单灵活性高缺点最坏情况下性能较差对哈希函数质量敏感内存使用可能不连续迭代顺序不确定在实际应用中,C++ 的和。
2025-11-28 08:08:17
36
原创 C++ std::unordered_set详解
头文件元素特性: 唯一、无序时间复杂度: 平均 O(1) 的插入、删除和查找底层实现: 哈希表public:int age;// 必须定义相等运算符// 自定义哈希函数// 检查是否包含某个 Person是一个高效的集合容器,适用于以下场景:需要快速查找、插入和删除不关心元素顺序需要存储唯一元素有良好的哈希函数可用优点平均 O(1) 时间复杂度的操作自动处理重复元素灵活的哈希策略配置缺点最坏情况下性能较差(O(n))迭代顺序不确定内存使用通常比。
2025-11-28 08:07:55
367
原创 C++ std::unordered_multiset详解
头文件元素特性: 元素可重复,无序存储时间复杂度: 平均 O(1) 的插入、删除和查找底层实现: 哈希表与 unordered_set 的区别: 允许重复元素public:int age;// 必须定义相等运算符// 自定义哈希函数// 重复元素,允许插入// 再次插入相同元素// 遍历所有 Person是一个允许重复元素的无序集合容器,适用于以下场景:需要快速插入、删除和查找不关心元素顺序需要存储重复元素需要统计元素出现次数。
2025-11-27 08:05:23
527
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2