深入浅出目标检测:从入门到YOLOv3,揭开计算机视觉的“火眼金睛”
目录
- 揭开目标检测的神秘面纱
- 什么是目标检测?为什么它如此重要?
- 定义:图像分类、目标检测、目标跟踪、实例分割的区别与联系
- 应用场景
- 讲解目标检测的输出:边界框 (Bounding Box) 和类别 (Class)
- 目标检测在AI领域的地位和发展趋势(面向论文)
- 传统目标检测方法概览
- 滑动窗口 + 特征提取 (HOG/SIFT) + 分类器 (SVM) 的基本流程
- 传统方法的局限性(计算量大、鲁棒性差)
- 传统方法的缺点(面向论文)
- 深度学习在目标检测中的崛起
- CNN (卷积神经网络) 的基本概念:卷积、池化、激活函数
- 介绍两阶段检测器 (如 R-CNN 系列) 的基本思想
- 介绍单阶段检测器 (如 SSD, YOLO 系列) 的基本思想
- 目标检测发展史上的里程碑(面向论文)
- YOLO 系列的演进:从 YOLOv1 到 YOLOv3 (快速回顾)
- YOLOv1 的核心思想:将检测问题转化为回归问题,网格预测
- YOLOv2 (YOLO9000) 的改进:Anchor Boxes, Batch Normalization, Darknet19等
- YOLOv3 的改进:多尺度预测, Darknet53, FPN结构思想
- YOLO 系列的设计理念与迭代动机(面向论文)
揭开目标检测的神秘面纱
什么是目标检测?为什么它如此重要?
目标检测(Object Detection)的核心在于:在图像(或视频帧)中找到所有感兴趣的物体,并准确确定它们的位置和类别。举例来说,在家庭照片中识别出每个人,并用一个框标记他们的位置,同时识别出旁边的宠物猫和狗,并分别标记。
这项技术之所以重要,在于它是许多更高级计算机视觉应用的基础。只有当计算机能够准确地“看见”并定位图像中的物体,才能进一步进行理解、分析和交互,例如:理解场景构成、跟踪特定目标、甚至对物体进行精细的像素级分析。
定义:图像分类、目标检测、目标跟踪、实例分割的区别与联系
为了更好地理解目标检测,我们需要区分几个相关的计算机视觉任务:
- 图像分类(Image Classification): 判断整张图像属于哪个单一类别(例如,“这张图片包含一只猫”)。输出是图像的整体标签。
- 目标检测(Object Detection): 在图像中找出所有感兴趣的物体,并给出每个物体的边界框 (Bounding Box) 和对应的类别标签(例如,“在图片的这个位置有一个猫,在那个位置有一只狗”)。
- 目标跟踪(Object Tracking): 在视频序列中,给定一个或多个初始目标的位置,在后续帧中持续预测这些目标的位置和运动轨迹。通常需要在第一帧或某些关键帧先进行目标检测来初始化目标。
- 实例分割(Instance Segmentation): 这是更精细的任务,不仅定位和分类物体,还要为图像中的每个物体实例(即使是同类物体,比如两只不同的猫)生成一个像素级的掩膜 (Mask),精确描绘出物体的轮廓。
联系: 目标检测是实现目标跟踪和实例分割的关键前置步骤。它为后续更复杂的任务提供了物体的初始位置和身份信息。图像分类可以视为对目标检测中单个边界框内区域进行分类的基础。
应用场景
目标检测技术具有广泛的应用:
- 自动驾驶: 识别并定位车辆、行人、骑行者、交通标志、车道线等道路元素,是实现安全决策和路径规划的关键感知能力。
- 安防监控: 检测入侵、异常行为、人群密度、遗留物等,提升监控系统的智能化水平。
- 医疗影像分析: 在医学扫描图像(如 X 光、CT、MRI)中辅助医生检测和定位病灶、肿瘤等异常区域。
- 工业自动化: 进行产品质量检测(识别缺陷)、零部件定位、机器人抓取目标识别等。
- 零售分析: 分析顾客在店内的行为、管理货架商品、实现无人零售。
- 增强现实 (AR): 识别现实世界的物体或平面,以便将虚拟内容精确地叠加到其上。
讲解目标检测的输出:边界框 (Bounding Box) 和类别 (Class)
一个目标检测模型的标准输出,对于它在图像中发现的每一个可能物体,通常会给出以下信息:
- 边界框 (Bounding Box): 一个矩形框,用来标记物体在图像中的位置和范围。边界框通常由四元组表示,如 (xmin,ymin,xmax,ymax)(左上角和右下角坐标)或 (xcenter,ycenter,width,height)(中心点坐标及框的宽度和高度)。同时,模型会输出一个置信度分数 (Confidence Score),表示这个框包含一个真实物体的可能性。
- 类别 (Class): 预测框内物体的具体类别,例如 "人", "车", "猫" 等。这通常伴随一个类别概率 (Class Probability),表明该物体属于特定类别的可能性。
最终呈现给用户的检测结果通常会经过筛选,只保留置信度分数和类别概率都高于一定阈值的边界框。
目标检测在AI领域的地位和发展趋势
在人工智能领域,目标检测是计算机视觉的核心研究方向之一,其性能的提升直接推动着许多下游应用的发展。当前的研究不断追求更高的检测精度、更快的推理速度、更强的鲁棒性以及在复杂场景(如小目标、遮挡、模糊、低光照)下的有效性。对这些发展趋势的了解,有助于把握领域前沿。
传统目标检测方法概览
在深度学习技术广泛应用之前,目标检测主要依赖一系列精心设计的算法和手工特征。了解这些传统方法,能帮助我们更好地理解深度学习带来的范式转变。
滑动窗口 + 特征提取 (HOG/SIFT) + 分类器 (SVM) 的基本流程
这是早期目标检测的经典流程:
- 滑动窗口 (Sliding Window): 在图像上使用一个固定大小的窗口,以一定的步长遍历所有可能的位置。为了检测不同大小的物体,需要在多个尺度(即对图像进行缩放)上重复此过程。这会生成大量的图像子区域(候选区域)。
- 特征提取 (Feature Extraction): 对每一个滑动窗口框定的子区域,提取能够代表其内容的特征向量。常用的手工设计特征包括:
- SIFT (Scale-Invariant Feature Transform): 具有尺度和旋转不变性,能捕捉图像的局部纹理特征。
- HOG (Histogram of Oriented Gradients): 描述图像局部区域的边缘方向梯度分布,对形状轮廓变化有较好的鲁棒性,常用于行人检测。
- 分类器 (Classifier): 使用一个预先训练好的分类器(如 SVM (Support Support Vector Machine))来判断特征向量是否属于目标物体类别。分类器根据提取的特征来决定当前窗口区域是否包含目标。
整个过程是对图像中的每一个潜在区域进行特征提取和分类判别。
传统方法的局限性(计算量大、鲁棒性差)
传统方法虽然在一定程度上实现了目标检测,但存在显著的局限性:
- 计算效率低下: 滑动窗口需要在所有位置和尺度上扫描,生成的候选区域数量巨大,导致特征提取和分类的计算成本极高,难以实现实时检测。
- 特征表示能力有限: 手工设计的特征(如 HOG, SIFT)难以捕捉图像中丰富且复杂的语义信息,对光照、视角、背景变化、物体形变等情况不够鲁棒。
- 流程复杂且割裂: 整个检测流程由多个独立模块(窗口生成、特征提取、分类、后处理如非极大值抑制)组成,每个模块都需要单独优化,整体性能提升困难,并且模块间的错误容易累积。
传统方法的缺点(面向论文)
理解这些传统方法的缺点,特别是其计算瓶颈和特征表示的不足,能够更好地突出深度学习方法所带来的优势和改进,为阅读和理解相关研究论文提供了重要的背景信息。
深度学习在目标检测中的崛起
随着计算能力的提升和大量数据的可用,深度学习技术在计算机视觉领域取得了突破性进展。强大的卷积神经网络(CNN)被引入目标检测,彻底改变了这个领域。
CNN (卷积神经网络) 的基本概念:卷积、池化、激活函数
卷积神经网络 (CNN) 是一种特别适用于处理网格状数据(如图像)的神经网络结构,它能够自动从原始像素数据中学习到层次化的、越来越抽象和语义化的特征表示。
- 卷积层 (Convolutional Layer): CNN 的核心。通过小型滤波器(卷积核)在输入图像上滑动,执行卷积操作。每个滤波器能够检测图像中的特定局部模式,如边缘、纹理等。不同的滤波器提取不同的特征图。随着层数的加深,滤波器能够学习识别更复杂的模式组合。
- 池化层 (Pooling Layer): 用于下采样,减小特征图的空间尺寸,降低计算量,并使网络对图像的微小位移和形变具有一定的鲁棒性。常见的有最大池化和平均池化。
- 激活函数 (Activation Function): 通常在卷积层之后使用,引入非线性。常用的如 ReLU。非线性是神经网络学习复杂模式的关键。
通过多层卷积、池化和激活函数的堆叠,CNN 能够构建一个强大的特征提取器,从低级的局部特征(如边缘)逐步学习到高级的全局特征(如物体部件、甚至整个物体)。
介绍两阶段检测器 (如 R-CNN 系列) 的基本思想
深度学习时代,目标检测首先发展起来的是两阶段 (Two-Stage) 方法。其基本思路是将检测过程分为两个主要步骤:
- 生成候选区域 (Region Proposal): 第一阶段,通过一个专门的算法或网络(如 Selective Search 或 Region Proposal Network, RPN)快速找出图像中所有可能包含物体的区域(即候选框)。这些候选框的数量远少于滑动窗口,且更可能覆盖真实物体。
- 分类与边界框回归 (Classification and Bounding Box Regression): 第二阶段,对每个生成的候选区域,使用一个强大的 CNN 提取其特征,然后通过分类器判断该区域包含哪一类物体,并使用回归器对边界框进行微调,使其更紧密地贴合物体。
代表性的两阶段检测器系列包括:R-CNN、Fast R-CNN 和 Faster R-CNN。Faster R-CNN 是两阶段检测器的经典范式,引入了 RPN,实现了端到端的训练,并在检测精度上通常表现优异。
介绍单阶段检测器 (如 SSD, YOLO 系列) 的基本思想
与两阶段方法不同,单阶段 (One-Stage) 检测器旨在一步到位地完成目标检测。它们不进行单独的区域建议步骤,而是直接在整个图像或特征图上预测边界框和类别。
单阶段检测器的基本思想是:将图像划分为一个网格,或者在不同尺度的特征图上预设一系列可能的边界框(称为 Anchor Boxes),然后网络对这些网格单元或预设框直接预测其包含物体的概率、物体的类别以及边界框的精确位置和尺寸。
代表性的单阶段检测器包括:SSD (Single Shot MultiBox Detector) 和 YOLO (You Only Look Once) 系列。单阶段检测器由于省去了区域建议这一步,通常比两阶段检测器速度更快,更适合实时应用,但早期的版本在精度上可能略逊一筹。
目标检测发展史上的里程碑
理解目标检测领域深度学习方法的发展历史及其关键里程碑,对于把握现有技术格局和阅读相关研究论文至关重要。R-CNN 系列(特别是 Faster R-CNN 及其 RPN 的引入)建立了基于区域建议的两阶段检测范式,而 SSD 和 YOLO 系列则开创并发展了单阶段直接预测的检测范式。这些经典模型是后续众多研究的基础。
YOLO 系列的演进:从 YOLOv1 到 YOLOv3 (快速回顾)
YOLO(You Only Look Once)系列是单阶段检测器的杰出代表,它以其端到端的设计和出色的速度性能在目标检测领域占据重要地位。让我们快速回顾一下它的前几个主要版本的核心思想和关键改进。
YOLOv1 的核心思想:将检测问题转化为回归问题,网格预测
YOLOv1 是 YOLO 系列的奠基之作,它提出了一个革命性的思路:将整个目标检测过程建模为一个端到端的回归问题。
其核心思想是:将输入图像划分为一个 S×S 的网格 (Grid)。如果一个物体的中心落入某个网格单元,则该网格单元负责检测此物体。每个网格单元预测 B 个边界框(包含位置和尺寸)及其置信度 (Confidence Score),以及 C 个类别概率 (Class Probability)。最终输出是 S×S×(B×5+C) 个预测值。推理时通过非极大值抑制 (NMS) 筛选结果。YOLOv1 最大的优势在于其极高的推理速度。
YOLOv2 (YOLO9000) 的改进:Anchor Boxes, Batch Normalization, Darknet19等
YOLOv1 速度很快,但在检测小目标和密集目标时性能受限,且边界框定位精度有待提高。YOLOv2 通过引入多项改进,显著提升了模型的精度和泛化能力。
主要改进点包括:引入Anchor Boxes 预测相对于预设框的偏移(借鉴 Faster R-CNN),使用 Batch Normalization 稳定训练,设计更强大的 Darknet-19 骨干网络,使用更高分辨率输入进行预训练,通过 K-means 聚类确定 Anchor Boxes 的尺寸,以及多尺度训练和引入细粒度特征等,以提高对不同尺度目标的鲁棒性和检测精度。
YOLOv3 的改进:多尺度预测, Darknet53, FPN结构思想
YOLOv3 在 YOLOv2 的基础上进一步提升了精度,特别是在检测不同大小的物体方面有了显著改善。
主要改进点包括:引入多尺度预测,在三个不同尺度的特征图上进行独立检测,以更好地处理物体尺度变化问题(类似于特征金字塔网络 FPN 的思想);使用更深更强的骨干网络 Darknet-53;将类别预测由 Softmax 改为对每个类别独立使用逻辑回归,以支持多标签分类。
YOLO 系列的设计理念与迭代动机
YOLO 系列的核心设计理念在于其端到端的预测框架,将检测视为直接的回归或预测任务以追求极致的速度。从 YOLOv1 的基本回归思想,到 YOLOv2 引入 Anchor Boxes 和 Batch Norm 提升精度和稳定性,再到 YOLOv3 引入多尺度预测处理尺度变化,每一次迭代都建立在前一个版本的基础上,并通过引入有效的技术手段来克服其局限性,在速度和精度之间寻找更好的平衡。理解 YOLOv1-v3 的演进过程,有助于把握单阶段检测器的核心思想和发展脉络,并为理解 YOLOv4 及其后续版本打下基础。
相关文章:
深入浅出目标检测:从入门到YOLOv3,揭开计算机视觉的“火眼金睛”
目录 揭开目标检测的神秘面纱 什么是目标检测?为什么它如此重要?定义:图像分类、目标检测、目标跟踪、实例分割的区别与联系应用场景讲解目标检测的输出:边界框 (Bounding Box) 和类别 (Class)目标检测在AI领域的地位和发展趋势&…...
Odoo:免费开源的轧制品行业管理软件
Odoo免费开源的轧制品行业管理软件能够帮助建材、电线电缆、金属、造纸包装以及纺织品行业提高韧性和盈利能力,构筑美好未来。 文 | 开源智造(OSCG)Odoo金牌服务 提高供应链韧性,赋能可持续发展 如今,金属…...
51单片机实验六:通用型1602液晶操作方法
目录 一、实验环境与实验器材 二、实验内容及实验步骤 1. 目标:用C语言编程,实现在1602液晶的第一行显示“I LOVE MCU!”,在第二行显示WWW.TXMCU.COM。 2.目标:用C语言编程,实现第一行从右侧移入“Hello everyone!”…...
原型模式详解及c++代码实现(以自动驾驶感知场景为例)
模式定义 原型模式(Prototype Pattern)是一种创建型设计模式,通过克隆已有对象来创建新对象,避免重复执行昂贵的初始化操作。该模式特别适用于需要高效创建相似对象的场景,是自动驾驶感知系统中处理大量重复数据结构的…...
datasheet数据手册-阅读方法
DataSheet Datasheet(数据手册):电子元器件或者芯片的数据手册,一般由厂家编写,格式一般为PDF,内容为电子分立元器件或者芯片的各项参数,电性参数,物理参数,甚至制造材料…...
C言雅韵集:野指针
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
2 celery环境搭建
1. 安装 Celery 及依赖 1.1 安装 Celery 使用 pip 安装 Celery(推荐 Python 3.7 环境): pip install celery1.2 选择并安装 Broker Celery 需要一个消息中间件(Broker)来传递任务。以下是两种常用 Broker 的安装方…...
alertManager部署安装、告警规则配置详解及告警消息推送
java接受告警请求RestController RequestMapping("/alert") Slf4j public class TestApi {private static final DateTimeFormatter FORMATTER DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");RequestMappingpublic void sendTemplate(HttpServl…...
day45——非递减数列(LeetCode-665)
题目描述 给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 < i < n-2),总满足 nums[i] < nums[i …...
LeetCode19.删除链表的倒数第N个节点
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。请用一次扫描实现 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出ÿ…...
Kafka系列之:计算kafka集群topic占的存储大小
Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…...
Logisim数字逻辑实训——计数器设计与应用
4位递增计数器 六进制计数器 十进制计数器 六十进制计数器 二十四进制计数器 计时器...
安卓手机如何改ip地址教程
对于安卓手机用户而言,ip修改用在电商、跨境电商、游戏搬砖、社交软件这些需要开多个账号的项目。因为多个设备或账号又不能在同一ip网络下,所以修改手机的IP地址防检测成为一个必要的操作。以下是在安卓手机上更改IP地址的多种方法及详细步骤࿰…...
论文阅读--Orient Anything
通过渲染3D模型来学习不同方向下物体的外观,并从单张和自由视角的图像中估计物体方向 1. 数据生成:基于 3D 渲染构建大规模方向标注数据集 - 数据来源: 使用 Objaverse 数据库中的高质量 3D 模型,进行筛选和预处理。 - 筛选规范…...
ASP.NET MVC 实现增删改查(CRUD)操作的完整示例
提供一个完整的 ASP.NET MVC 实现增删改查(CRUD)操作的示例。该示例使用 SQL Server 数据库,以一个简单的 Product 实体为例。 步骤 1:创建 ASP.NET MVC 项目 首先,在 Visual Studio 中创建一个新的 ASP.NET MVC 项目…...
ASP.NET常见安全漏洞及修复方式
Microsoft IIS 版本信息泄露 查看网页返回的 Header 信息,默认会包含 IIS,ASP.NET 版本信息: 隐藏 Server 标头 编辑 web.config 文件,在 system.webServer 节点中配置 requestFiltering 来移除Server标头: <sec…...
文件系统的npu和内核的npu有什么区别
我在编译rk3588的内核和文件系统时候,发现都编译到rknpu这个文件,那么文件系统的npu和内核的npu有什么根本的区别吗? 我可以理解为,文件系统下是应用程序,内核下是驱动程序。 功能定位 内核中的 NPU 源码 核心功能&am…...
RUI桌面TV版最新版免费下载-安卓电视版使用教程
在智能电视的使用中,拥有一款好用的桌面应用能极大提升体验,RUI桌面TV版就是这样一款实用的工具。下面为大家带来它的免费下载及安卓电视版使用教程。 一、下载步骤 首先确保你的安卓电视已连接网络。打开电视自带的应用商店,在搜索栏输入“…...
android的配置检查 查看安卓设备配置
Android系统属性配置与内存管理指南 在Android开发过程中,了解系统属性配置和内存管理机制对应用性能优化至关重要。本文将介绍如何通过adb命令查询和修改系统属性,以及如何合理管理应用内存。 一、adb命令查询当前堆内存信息 1. 查询所有配置 adb s…...
RHCE的简单配置
一:配置qq第三方客户端验证 1.安装第三方邮件客户端软件 2.mail程序登录验证qq账号 3.在qq客户端程序(如浏览器中进入邮箱登录QQ邮箱->设置->账户)中通过设置开启imap/smtp服 务提供第三方程序账号的授权码 4.因为需要 QQ 邮箱的 S…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(7):(1)ながら 一边。。一边 (2)。。。し。。。し。。 又……又……
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(7):(1)ながら 一边。。一边 (2)。。。し。。。し。。 又……又…… 1、前言(1)情况说明(2)工程师…...
【 图像梯度处理,图像边缘检测】图像处理(OpenCv)-part6
13 图像梯度处理 13.1 图像梯度 边缘提取是图像处理中的一个重要任务,其目的是检测图像中灰度值发生显著变化的区域,这些区域通常对应于图像中的物体边界、纹理变化或深度变化等。边缘提取的原理可以分为以下几个关键步骤: 1. 边缘的定义和…...
一本通 2063:【例1.4】牛吃牧草 1005:地球人口承载力估计
Topic: Ideas: 为什么把这两道题放在一起呢?就是因为这两道题很类似,都是很简单的数学题,只要你会列出数学等式,你就学会这道题了! 下面把计算过程展示给大家 Code: //2025/04/18…...
下载HBuilder X,使用uniapp编写微信小程序
到官网下载HBuilder X 地址:HBuilderX-高效极客技巧 下载完成后解压 打开解压后的文件夹找到HBuilderX.exe 打开显示更多,发送到桌面快捷方式 到桌面上启动HBuilderX.exe启动应用 在工具点击插件安装 选择安装Vue3编译器 点击新建创建Vue3项目 编写项目…...
4.18---缓存相关问题(操作原子性,击穿,穿透,雪崩,redis优势)
为什么要用redis做一层缓存,相比直接查mysql有什么优势? 首先介绍Mysql自带缓存机制的问题: MySQL 的缓存机制存在一些限制和问题,它自身带的缓存功能Query Cache只能缓存完全相同的查询语句,对于稍有不同的查询语句,…...
前端:uniapp中uni.pageScrollTo方法与元素的overflow-y:auto之间的关联
在uniapp中,uni.pageScrollTo方法与元素的overflow-y:auto属性之间存在以下关联和差异: 一、功能定位差异 uni.pageScrollTo 属于页面级滚动控制,作用于整个页面容器34。要求页面内容高度必须超过屏幕高度,且由根元素下…...
获取不到AndroidManifest中的meta-data
现象描述 最近在项目中接入穿山甲广告的sdk,快速实现了核心功能验证。接下来就准备规范代码正式使用,却掉了一个坑,略做记录。 穿山甲sdk提供了一个appid的参数,不同渠道包是不同的,所以将其配入了gradle的productFl…...
Python学习之Matplotlib
Python学习之Matplotlib Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.通过Matplotlib,开发者可以仅需要几行代码,便可以生成饼图,直方图,功率谱,条形图,错误图,散点图等 1.1 图形的基本构成 一个完整的图,包括figure,a…...
Motion Tracks:少样本模仿学习中人-机器人之间迁移的统一表征
25年1月来自Cornell和Stanford的论文“MOTION TRACKS: A Unified Representation for Human-Robot Transfer in Few-Shot Imitation Learning”。 教会机器人自主完成日常任务仍然是一项挑战。模仿学习 (IL) 是一种强大的方法,它通过演示向机器人灌输技能ÿ…...
【Spring Boot】MyBatis入门:连接Mysql数据库、测试单元、连接的常见错误
MyBatis入门 1.什么是MyBatis?2.准备工作2.1.创建项目2.2.MySQL数据准备2.3.创建对应的实体类 3.写配置文件和获取数据3.1写配置文件3.2 持久层代码 4.单元测试5.连接数据库时常见的错误5.1 url 配置错误5.2 MySQL账号密码错误5.3 找不到数据库5.4 表错误5.3 云服务…...
【AI插件开发】Notepad++ AI插件开发实践:支持配置界面
一、引用 此前的系列文章已基本完成了Notepad的AI插件的功能开发,但是此前使用的配置为JSON配置文件,不支持界面配置。 本章在此基础上集成支持配置界面,这样不需要手工修改配置文件,直接在界面上操作,方便快捷。 注…...
《Spring Boot 测试框架指南:@SpringBootTest与Mockito的最佳实践》
大家好呀!👋 今天我要和大家聊聊Spring Boot测试的那些事儿。作为一名Java开发者,写代码很重要,但写测试同样重要!💯 想象一下,你建了一座漂亮的房子🏠,但如果没有质量检…...
《数据结构初阶》【时间复杂度 + 空间复杂度】
《数据结构初阶》【时间复杂度 空间复杂度】 前言:-----------------------------------------1. 什么是数据结构?2. 什么是算法? -----------------------------------------算法的时间复杂度和空间复杂度1. 为什么要引入时间复杂度和空间复…...
【深度学习—李宏毅教程笔记】Self-attention
目录 一、Self-attention 的引入 1、多样化的输入形式 2、典型的下游任务下游任务 3、传统“全连接 窗口”方法的局限 4、Self‑Attention 的引入 二、Self-attention 的架构 1、Self-attention层的框图表示 2、Self-attention 层的矩阵运算过程 三、Multi-head Self…...
PHP腾讯云人脸核身获取Access Token
参考腾讯云官方文档: 人脸核身 获取 Access Token_腾讯云 public function getAccessToken(){$data [appId > , //WBappid,https://cloud.tencent.com/document/product/1007/49634secret > ,grant_type > client_credential, //授权类型version > 1…...
pytorch基本操作2
torch.clamp 主要用于对张量中的元素进行截断(clamping),将其限制在一个指定的区间范围内。 函数定义 torch.clamp(input, minNone, maxNone) → Tensor 参数说明 input 类型:Tensor 需要进行截断操作的输入张…...
Linux服务器配置Anaconda环境、Pytorch库(图文并茂的教程)
引言:为了方便后续新进组的 师弟/师妹 使用课题组的服务器,特此编文(ps:我导从教至今四年,还未招师妹) ✅ NLP 研 2 选手的学习笔记 笔者简介:Wang Linyong,NPU,2023级&a…...
idea 许可证过期
今天打开IDEA写代码突然提示:Your idea evaluation has expired. Your session will be limited to 30 minutes 评估已过期,您的会话将限制为 30 分钟。也就是说可以使用,但30min就会自动关闭 1 下载 ide-eval-resetter-2.1.6.zip https…...
Git常用命令分类汇总
Git常用命令分类汇总 一、基础操作 初始化仓库git init添加文件到暂存区git add file_name # 添加单个文件 git add . # 添加所有修改提交更改git commit -m "提交描述"查看仓库状态git status二、分支管理 创建/切换分支git branch branch_name …...
归并排序:数据排序的高效之道
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
分布式训练(记录)
为什么要分布式训练? 单机训练有物理上限: 显存不够(大模型根本放不下) 单机计算慢(数据量一多就耗时太长) 多卡并行性不高 分布式训练的常见方式 Data Parallel(数据并行) 每个G…...
vue3中使用拖拽组件vuedragable@next
vue3中使用拖拽组件vuedragablenext 官网传送门 下载 npm install vuedraggablenext基本使用 <script setup> import draggable from vuedraggable import { ref } from vue const list ref([{ id:1,name:第一个 },{ id:2,name:第二个 },{ id:3,name:第三个 }, ]) <…...
Oracle、MySQL、PostgreSQL三大数据库对比分析
Oracle、MySQL、PostgreSQL 三大数据库的对比分析,结合 Java SpringBoot 项目开发 的实际场景,重点说明分库分表、主从复制的实现难度及案例。 一、数据库核心对比 1. 核心区别与适用场景 维度OracleMySQLPostgreSQL定位企业级商业数据库轻量级开源数据…...
java八股之并发编程
1.java线程和操作系统线程之间的区别? 现在java线程本质上是操作系统线程,java中采用的是一对一的线程模型(一个用户线程对应一个内核进程) 2.什么是进程和线程? 1.进程是操作系统一次执行,资源分配和调度的…...
Qt 入门 5 之其他窗口部件
Qt 入门 5 之其他窗口部件 本文介绍的窗口部件直接或间接继承自 QWidget 类详细介绍其他部件的功能与使用方法 1. QFrame 类 QFrame类是带有边框的部件的基类。它的子类包括最常用的标签部件QLabel另外还有 QLCDNumber、QSplitter,QStackedWidget,QToolBox 和 QAbstractScrol…...
Linux系统之----冯诺依曼结构
1.简要描述 冯诺依曼体系结构是现代计算机的基本设计思想,其核心理念是将计算机的硬件和软件统一为一个整体,通过存储程序的方式实现计算。冯诺依曼体系结构的核心思想是通过存储程序实现自动计算,其五大部件协同工作,奠定了现代…...
C++11新特性
目录 引入 C11新特性 统一的初始化列表 一切皆可{}初始化 std::initializer_list 统一的声明 auto decltype nullptr 范围for STL新增容器 STL新增容器接口 左值引用和右值引用 左值和右值 左值引用和右值引用 右值引用的优势(移动语义) 右值引用的使用场景 …...
492Q 型气缸盖双端面铣削组合铣床总体设计
一、引言 492Q 型气缸盖是发动机的重要组成部分,其双端面的加工精度对发动机的性能和可靠性有着重要影响。设计一款适用于 492Q 型气缸盖双端面铣削的组合铣床,能够提高加工效率和质量,满足发动机生产的需求。 二、总体设计要求 加工精度&…...
《软件设计师》复习笔记(4.2)——关系代数、函数依赖、范式
目录 一、关系代数 基本运算 笛卡尔积() 投影(π) 选择(σ) 自然连接(⋈) 真题示例: 二、函数依赖 基本概念 Armstrong公理系统 键与约束 三、范式ÿ…...
IO流(二)
一、字符流 使用字节流可以读取文件中的字节数据。但是如果文件中有中文使用字节流来读取,就有可能读到半个汉字的情况,这样会导致乱码。虽然使用读取全部字节的方法不会出现乱码,但是如果文件过大又不太合适。 所以Java专门为我们提供了另…...