目标检测入门指南:从原理到实践
目录
1. 数据准备与预处理
2. 模型架构设计
2.1 特征提取网络原理
2.2 区域提议网络(RPN)原理
2.3 特征金字塔网络(FPN)原理
2.4 边界框回归原理
2.5 非极大值抑制(NMS)原理
2.6 多尺度训练与测试原理
2.7 损失函数设计原理
3. 损失函数设计
4. 训练策略优化
5. 后处理技术
6. 评估与改进
7.总结
目标检测是计算机视觉中的一个基础任务,它不仅需要判断图像中是否存在特定目标,还要准确定位这些目标的位置。目标检测是计算机视觉中的一个重要任务,它需要同时解决"物体是什么"和"物体在哪里"这两个基本问题。
1. 数据准备与预处理
在开始目标检测任务之前,数据准备是最基础也是最关键的步骤。首先,我们需要收集大量包含目标物体的图像数据。这些图像应该涵盖不同的场景、光照条件、拍摄角度和目标尺寸,以确保模型能够学习到足够鲁棒的特征表示。
数据标注是这个阶段的重点工作。对于目标检测来说,我们需要标注每个目标物体的边界框(Bounding Box)坐标和类别信息。边界框通常用四个值表示:左上角的x、y坐标以及框的宽度和高度。这些标注信息通常保存为XML或JSON格式的文件。标注质量直接影响模型的性能,因此需要仔细审核标注结果。这些标注信息通常以特定格式存储,如PASCAL VOC或COCO数据集的格式。在准备数据时,我们还需要考虑数据的多样性,包括不同的光照条件、角度、尺度等变化,以确保模型的泛化能力。
在获得原始数据和标注后,我们需要进行数据预处理。这包括图像的归一化、resize到固定尺寸、数据增强等步骤。数据增强是提高模型泛化能力的重要手段,常用的增强方法包括随机水平翻转、随机裁剪、色彩抖动、亮度对比度调整等。这些预处理操作能够帮助模型应对实际场景中的各种变化。
数据增强可以使用一些库来实现,如 OpenCV、Albumentations 等。下面是一个使用 Albumentations 进行数据增强的示例代码:
import albumentations as A
from albumentations.pytorch import ToTensorV2
import cv2# 定义数据增强管道
transform = A.Compose([A.HorizontalFlip(p=0.5),A.RandomRotate90(p=0.5),A.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2, p=0.5),A.GaussianBlur(p=0.1),ToTensorV2()
])# 读取图像
image = cv2.imread('image.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 读取标注信息
bboxes = [[x1, y1, x2, y2]] # 假设有一个目标
labels = [0] # 类别标签# 应用数据增强
transformed = transform(image=image, bboxes=bboxes, class_labels=labels)
transformed_image = transformed['image']
transformed_bboxes = transformed['bboxes']
transformed_labels = transformed['class_labels']
2. 模型架构设计
目标检测模型的架构设计是整个流程中的核心环节。现代目标检测器通常采用深度卷积神经网络作为基础架构,主要分为特征提取网络(Backbone)和检测头(Detection Head)两大部分。现代目标检测算法主要分为两大类:两阶段检测器和单阶段检测器。两阶段检测器的代表是R-CNN系列,包括Fast R-CNN、Faster R-CNN等。这类算法首先通过区域提议网络(Region Proposal Network,RPN)生成可能包含目标的候选区域,然后对这些区域进行分类和边界框回归。而单阶段检测器如YOLO、SSD则直接在特征图上进行预测,省略了显式的区域提议步骤,因此速度更快,但在小目标检测等方面可能略逊于两阶段方法。
2.1 特征提取网络原理
特征提取是目标检测的基础环节,主要依赖于深度卷积神经网络。在这个过程中,网络通过层层卷积操作逐渐提取图像的特征表示。浅层网络主要提取边缘、纹理等低级特征,而深层网络则能够提取更为抽象的语义特征。特征提取网络负责从输入图像中提取多层次的特征表示。常用的backbone包括ResNet、VGG等经典网络。这些网络通过多层卷积操作,能够逐渐提取从低级的边缘纹理特征到高级的语义特征。Backbone通常采用在大规模分类数据集(如ImageNet)上预训练的模型,这样可以获得更好的特征提取能力。
以经典的ResNet为例,它通过残差连接解决了深度网络的梯度消失问题。残差块的核心思想是学习残差映射 F(x)=H(x)−x,而不是直接学习原始映射 H(x)。这使得网络能够随着深度增加而持续提升性能。残差连接的数学表达式为:
其中,F(x,Wi)表示残差映射,x为输入特征。
2.2 区域提议网络(RPN)原理
RPN是两阶段检测器中的关键组件,其目的是生成可能包含目标的候选区域。RPN的核心思想是在特征图上滑动窗口,在每个位置预测多个不同尺度和比例的候选框(称为锚框,Anchor)。
对于特征图上的每个位置,RPN会预测:
- 前景/背景二分类得分
- 边界框回归值(相对于锚框的偏移量)
RPN的损失函数包含两部分:
其中:
- Lcls 是分类损失(交叉熵损失)
- Lreg 是回归损失(smooth L1损失)
- pi 是预测的前景概率
- ti 是预测的边界框参数
2.3 特征金字塔网络(FPN)原理
FPN通过构建多尺度特征金字塔来处理不同尺度的目标。它包含自底向上的特征提取路径和自顶向下的特征融合路径。
在自顶向下的路径中,高层特征通过上采样后与横向连接的同尺度特征图进行融合。假设高层特征为 Fhigh,低层特征为 Flow,则融合过程可表示为:
其中,Up表示上采样操作,Conv表示1×1卷积用于调整通道数。
2.4 边界框回归原理
边界框回归旨在精确定位目标位置。给定锚框坐标 (xa,ya,wa,ha))和目标框坐标 (xg,yg,wg,hg),回归目标为:
这种参数化方式使得回归目标与尺度无关,有利于模型学习。
2.5 非极大值抑制(NMS)原理
NMS用于消除重复检测框。其基本流程如下:
- 按照置信度对所有检测框排序
- 选择置信度最高的检测框
- 计算该检测框与其他检测框的IoU
- 移除IoU大于阈值的检测框
- 重复步骤2-4,直到处理完所有检测框
Soft-NMS改进了传统NMS的硬阈值策略,使用软化函数降低重叠框的置信度:
其中si 是检测框的置信度,M是当前最高分数的框,Bi 是待处理的框。
2.6 多尺度训练与测试原理
多尺度训练通过改变输入图像的尺寸来增强模型的尺度不变性。假设基准尺寸为 (H0,W0),多尺度训练时的图像尺寸可表示为:
其中,s为随机采样的尺度因子。
在测试时,可以使用多个尺度进行预测并融合结果,这种策略通常能提升检测性能,尤其是对于尺度变化较大的场景。
2.7 损失函数设计原理
现代目标检测器通常采用多任务损失函数:
其中:
- Lcls 是分类损失,通常使用Focal Loss来处理类别不平衡问题:
- Lcenter 是中心点预测损失(在某些检测器中使用)
- Lreg是边界框回归损失,可以使用IoU Loss或GIoU Loss
这些不同的损失项共同指导模型学习分类、定位和其他相关任务。
检测头部分则负责实际的目标检测任务,即基于提取的特征预测目标的位置和类别。根据检测流程的不同,检测器可以分为两阶段和单阶段两大类。两阶段检测器(如Faster R-CNN)首先生成候选区域,然后对这些区域进行分类和位置精修。单阶段检测器(如YOLO、SSD)则直接在特征图上进行预测,省略了显式的候选区域生成步骤。
下面是一个使用 PyTorch 训练 YOLOv5 模型的示例代码:
import torch
from torch.utils.data import DataLoader
from models.yolov5 import Model
from datasets import LoadImagesAndLabels
from utils.loss import ComputeLoss# 定义模型
model = Model(cfg='models/yolov5s.yaml', nc=80) # 80个类别# 定义损失函数
criteria = ComputeLoss(model)# 定义优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4)# 定义学习率调度器
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max= epochs- warmup_epochs, eta_min=1e-5)# 加载数据
dataset = LoadImagesAndLabels(path='path/to/dataset', img_size=640)
dataloader = DataLoader(dataset, batch_size=16, shuffle=True, num_workers=4)# 训练
for epoch in range(epochs):model.train()for i, (imgs, targets) in enumerate(dataloader):imgs = imgs.to(device)targets = targets.to(device)# 前向传播pred = model(imgs)loss, loss_items = criteria(pred, targets)# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()# 调整学习率scheduler.step()
3. 损失函数设计
损失函数的设计对于模型的训练至关重要。目标检测的损失函数通常包含多个部分,需要同时优化分类任务和回归任务。分类损失用于评估模型对目标类别的预测准确性,通常使用交叉熵损失。回归损失则用于评估预测框与真实框之间的位置偏差,常用的有smooth L1损失和IoU损失。
在实际训练中,我们还需要处理样本不平衡的问题。背景区域通常远多于前景目标,这会导致模型倾向于预测背景。为了解决这个问题,我们可以采用Focal Loss等改进的损失函数,或者使用在线难例挖掘(OHEM)等采样策略。
4. 训练策略优化
在训练过程中,损失函数的设计至关重要。典型的目标检测损失函数包括分类损失和回归损失两部分。分类损失通常采用交叉熵损失,用于判断候选框是否包含目标以及具体的类别。回归损失则用于优化边界框的位置和大小,常用的有smooth L1 loss或IoU loss。此外,为了处理正负样本不平衡的问题,我们通常会采用难例挖掘(Hard Negative Mining)或Focal Loss等技术。
模型训练是一个需要精心设计的过程。需要选择合适的优化器,常用的有SGD和Adam。学习率的设置也很关键,通常采用逐步衰减或余弦退火等策略batch size的选择需要权衡计算资源和训练效果。
在训练过程中,我们通常采用多尺度训练策略。这意味着在训练时随机改变输入图像的尺寸,这样可以提升模型对不同尺度目标的检测能力。同时,使用适当的数据采样策略也很重要,可以帮助模型更好地学习难例样本。
5. 后处理技术
后处理是检测流程中的最后一个环节。非极大值抑制(Non-Maximum Suppression,NMS)是一个关键的后处理步骤,用于消除重复的检测框。传统的NMS基于检测框的置信度和重叠度进行筛选,而Soft-NMS等改进方法则通过软化抑制策略来提高检测性能。最常用的后处理方法是非极大值抑制(NMS),它用于消除重复的检测框。NMS的基本思想是保留置信度最高的检测框,同时抑制与之重叠度较高的其他检测框。
除了基础的NMS,还有一些改进方法,如Soft-NMS和Weighted-NMS等。这些方法通过改进重复框的抑制策略,能够在一定程度上提升检测性能,特别是在目标密集或遮挡严重的场景下。
6. 评估与改进
模型评估是检验检测器性能的重要环节。在评估模型性能时,我们主要关注mean Average Precision(mAP)这一衡量指标。它考虑了不同置信度阈值下的精确率和召回率,能够全面反映检测器的性能。此外,我们还需要关注模型的推理速度,这通常用每秒处理图像的数量(FPS)来衡量。主要的评估指标包括平均精确率(AP)和召回率(Recall)。我们通常使用不同IoU阈值下的mAP来综合评估模型性能。还需要考虑模型的推理速度,这通常用FPS(每秒处理图像数)来衡量。
模型部署和优化也是不可忽视的环节。这包括模型量化、剪枝等压缩技术,以及针对不同硬件平台的优化策略。在实际应用中,我们需要在检测精度和运行效率之间找到合适的平衡点。
7.总结
这就是目标检测的主要流程,每个环节都包含丰富的技术细节和持续的优化空间。随着深度学习的发展,新的网络结构和训练策略不断涌现,推动着目标检测技术的不断进步。需要注意的是,这些环节之间并非独立的,而是相互关联、相互影响的。在实际工作中,我们需要根据具体的应用场景和需求,对各个环节进行合理的取舍和调整。
相关文章:
目标检测入门指南:从原理到实践
目录 1. 数据准备与预处理 2. 模型架构设计 2.1 特征提取网络原理 2.2 区域提议网络(RPN)原理 2.3 特征金字塔网络(FPN)原理 2.4 边界框回归原理 2.5 非极大值抑制(NMS)原理 2.6 多尺度训练与测试原理 2.7 损失函数设计原理 3. 损失函数设计 4. 训练策略优化 5. 后…...
连接github和ai的桥梁:GitIngest
Git ingest GitIngest - 将任何 Github 仓库转变为适合 LLM 的友好型提示文本 (https://github.com/cyclotruc/gitingest) 输入 Github 地址或者名称,GitIngest 就会提供该仓库的总结、目录结构、仓库内容的文本内容 你可以复制这些文本与 AI 大模型更好地对话...
百度贴吧的ip属地什么意思?怎么看ip属地
在数字化时代,IP地址不仅是网络设备的唯一标识符,更承载着用户的网络身份与位置信息。百度贴吧作为广受欢迎的社交平台,也遵循相关规定,在用户个人主页等位置展示账号IP属地信息。那么,百度贴吧的IP属地究竟意味着什么…...
5.系统学习-PyTorch与多层感知机
PyTorch与多层感知机 前言PyTroch 简介张量(Tensor)张量创建张量的类型数据类型和 dtype 对应表张量的维度变换:张量的常用操作矩阵或张量计算 Dataset and DataLoaderPyTorch下逻辑回归与反向传播数据表格 DNN(全连结网络&#x…...
wpf 基于Behavior库 的行为模块
Microsoft.Xaml.Behaviors 是一个用于WPF(Windows Presentation Foundation)的行为库,它的主要作用是允许开发者在不修改控件源代码的情况下,为控件添加自定义的行为和交互逻辑。行为库的核心思想是通过定义可重用的行为组件&…...
【一文解析】新能源汽车VCU电控开发——能量回收模块
一、概述 VCU(Vehicle Control Unit,整车控制器)能量回收功能是新能源汽车(如纯电动汽车和混合动力汽车)中非常重要的一个环节。它主要是在车辆减速或制动过程中,将车辆的部分动能转化为电能,并…...
鸿蒙TCPSocket通信模拟智能家居模拟案例
效果图 一、智能家居热潮下的鸿蒙契机 在当下科技飞速发展的时代,智能家居已如浪潮般席卷而来,深刻地改变着我们的生活方式。从能依据环境光线自动调节亮度的智能灯具,到可远程操控、精准控温的智能空调,再到实时监测健康数据的智…...
【Spring Boot 实现 PDF 导出】
Spring Boot 实现 PDF 导出 在Spring Boot应用程序中实现PDF导出功能,可以选择多种库和技术栈。每种方法都有其优缺点,适用于不同的场景。以下是四种常见的方式:iText、Apache PDFBox、JasperReports 和 Thymeleaf Flying Saucer。我将详细…...
【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。 这里我们可以加入JavaScript的使…...
leetcode hot 100 前k个高平元素
347. 前 K 个高频元素 已解答 中等 相关标签 相关企业 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 class Solution(object):def topKFrequent(self, nums, k):""":type nums: Lis…...
数据结构漫游记:静态双向链表
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
Object.defineProperty() 完整指南
Object.defineProperty() 完整指南 1. 基本概念 Object.defineProperty() 方法允许精确地添加或修改对象的属性。默认情况下,使用此方法添加的属性是不可修改的。 1.1 基本语法 Object.defineProperty(obj, prop, descriptor)参数说明: obj: 要定义…...
1Panel自建RustDesk服务器方案实现Windows远程macOS
文章目录 缘起RustDesk 基本信息实现原理中继服务器的配置建议 中继服务器自建指南准备服务器安装1Panel安装和配置 RustDesk 中继服务防火墙配置和安全组配置查看key下载&安装&配置客户端设置永久密码测试连接 macOS安装客户端提示finder写入失败hbbs和hbbr说明**hbbs…...
nginx学习之路-windows系统安装nginx
文章目录 1. 下载2. 启动3. 验证参考文档 1. 下载 官方下载地址:https://nginx.org/en/download.html 可以下载windows版本,如nginx-1.26.2.zip。解压后,加入系统变量。 2. 启动 可以使用命令行启动(windows系统自带的cmd可能…...
Paimon_01_241020
1. 概述 1.1. 核心特点 统一批处理和流处理(流和批同一套代码)数据湖能力多种引擎平权变更日志生成丰富的表类型(主键表、append-only,有序的流式读取来代替消息队列)模式演化(schema变更) 1…...
人工智能:变革时代的核心驱动力
求各位观众老爷看一看 先声明一下,该内容由于篇幅过长,可能会有一些地方存在一些小问题请大家谅解 观众老爷们,点个免费的赞和关注呗,您们的支持就是我最大的动力~ 人工智能:变革时代的核心驱动力 一、引言 在当今…...
【机器学习】工业 4.0 下机器学习如何驱动智能制造升级
我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 随着科技的飞速发展,工业 4.0 浪潮正席卷全球制造业,而机器学习作为这一变革中的关键技术,正以前…...
数据分析-Excel
数据类型和函数初步 Excel中有文本类型和数值类型–但是无法用肉眼分辨出来isnumber来区分是否是数值类型text和value函数可以完成数值类型以及文本类型的转换单元格第一位输入’方式明确输入的是文本sum函数必须是数值类型 文本连接-and-or-not-if-mod-max函数 字符串的连接…...
Kubernetes第二天
1.pod运行一个容器 1.创建目录 mkdir -p /manifests/pod 2.编写pod资源清单文件 vim 01-myweb.yaml 说明: apiVersion:指的是Api的版本 metadata:资源的元数据 spec:用户期望的资源的运行状态 status:资源实际的运行状态 由于拉取远…...
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持&#x…...
Kerberos用户认证-数据安全-简单了解-230403
hadoop安全模式官方文档:https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html kerberos是什么 kerberos是计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。 概念&#…...
大中厂面试经验分享:如何使用消息队列(MQ)解决系统问题
在大中型互联网公司中,消息队列(MQ)作为一种关键的分布式系统组件,广泛应用于解决系统中的高并发、异步处理、解耦等问题。 在面试中,尤其是针对后端工程师或系统架构师的职位,面试官常常会通过询问消息队列…...
c#String和StringBuilder
目录 一,String 1,string的特点: 2,string常用方法 (1)Length (2)Substring() (3)ToUpper() (4)ToLower() (5&…...
【人工智能机器学习基础篇】——深入详解强化学习之常用算法Q-Learning与策略梯度,掌握智能体与环境的交互机制
深入详解强化学习之常用算法:Q-Learning与策略梯度 强化学习(Reinforcement Learning, RL)作为机器学习的一个重要分支,近年来在多个领域取得了显著成果。从棋类游戏的人机对战到自主驾驶汽车,强化学习技术展示了其强大…...
jQuery学习笔记2
jQuery 属性操作 <body><a href"http://www.itcast.cn" title"都挺好">都挺好</a><input type"checkbox" name"" id"" checked /><div index"1" data-index"2">我是div&…...
发现API安全风险,F5随时随地保障应用和API安全
分析数据显示,目前超过90%的基于Web的网络攻击都以API端点为目标,试图利用更新且较少为人所知的漏洞,而这些漏洞通常是由安全团队未主动监控的API所暴露。现代企业需要一种动态防御策略,在风险升级成代价高昂、令人警惕且往往无法…...
移动端如何实现上拉加载
一、理解上拉加载的原理 上拉加载是一种在移动端很常见的交互方式,其原理是当用户在页面上向上滑动(即滚动条接近底部)时,触发一个加载更多数据的操作。这通常涉及到对滚动事件的监听以及判断滚动位置是否达到了触发加载的阈值。…...
the request was rejected because no multipart boundary was found
文章目录 1. 需求描述2. 报错信息3. 探索过程 1. 使用postman 排除后端错误2. 搜索网上的解决方法3. 解决方法 1. 需求描述 想要在前端上传一个PDF 发票,经过后端解析PDF之后,将想要的值自动回填到对应的输入框中 2. 报错信息 org.apache.tomcat.u…...
Android 自定义shell命令
模拟触摸、按键等操作,直接在命令行输入对应命令即可。命令行如何识别并操作此命令,执行操作的是shell程序,还是java程序?是不是可以添加自定义的命令? 以下在Android13的代码中分析input命令 Android系统中使用了一…...
HTML5滑块(Slider)
HTML5 的滑块(Slider)控件允许用户通过拖动滑块来选择数值。以下是如何实现一个简单的滑块组件的详细说明。 HTML5 滑块组件 1. 基本结构 使用 <input type"range"> 元素可以创建一个滑块。下面是基本实现的代码示例: <…...
《SwiftUI 实现点击按钮播放 MP3 音频》
功能介绍 点击按钮时,应用会播放名为 yinpin.mp3 的音频文件。使用 AVAudioPlayer 来加载和播放音频。 关键点: 按钮触发:点击按钮会调用 playAudio() 播放音频。音频加载:通过 Bundle.main.url(forResource:) 加载音频文件。播…...
表单元素(标签)有哪些?
HTML 中的表单元素(标签)用于收集用户输入的数据,常见的有以下几种: 文本输入框 <input type"text">:用于单行文本输入,如用户名、密码等。可以通过设置maxlength属性限制输入字符数&…...
大型ERP系统GL(总账管理)模块需求分析
主要介绍了GL系统的需求分析,包括系统概述、功能描述、帐薄管理、报表管理、期末处理、财务报表以及凭证的快速输入方式、可用性设计、保存、自动审核和打印等方面的内容。系统概述部分介绍了系统的功能结构和模块流程图。 功能描述部分详细描述了系统的基础资料和业…...
SQL常用语句(基础)大全
SQL语句的类型 1.DDL 1.库2.表 2.DML 1.插入数据 insert inot2.删除数据 delete / truncate3.修改数据 update set 3.DQL 1.无条件查询2.查询 什么开始 到什么结束3.指定条件查询 1.单个条件 ro in2.多个条件 and4.查询不为NULL值 is not null ,为NULL值 is null5.模糊查询 li…...
关于HarmonyOS Next中卡片的使用方法
关于Harmony OS中卡片的使用方法 在Harmony OS中,静态卡片是一种非常有用的组件,用于提供应用内功能组件的交互和信息展示。本文将详细介绍如何在Harmony OS中使用静态卡片以及相关的API接口。 1. 概述 静态卡片是Harmony OS中的一种交互组件…...
Retrofit和rxjava 实现窜行请求,并行请求,循环多次请求,递归请求,错误重试
在使用 Retrofit 和 RxJava 时,可以通过多种方式实现多次请求,比如串行请求、并行请求、依赖请求等。以下是一些常见的实现方式: 1. 串行请求(依赖关系) 一个请求的结果作为另一个请求的输入,可以用 flat…...
C# OpenCV机器视觉:目标跟踪
在一个阳光明媚的下午,阿强正在实验室里忙碌,突然他的同事小杨走了进来,脸上挂着一丝困惑。 “阿强,我的目标跟踪项目出了问题!我想跟踪一个移动的物体,但总是跟丢!”小杨一边说,一…...
LeetCode 191 位1的个数
计算正整数二进制表示中汉明重量的两种实现方式对比 在编程的世界里,我们常常会遇到一些有趣又实用的小问题,今天就来和大家分享一下如何计算一个正整数二进制表示中设置位(也就是 1 的个数,专业术语叫汉明重量)的问题…...
【软件测试面试】银行项目测试面试题+答案(二)
前言 面试题:贷款有哪几种形式? 贷款是指金融机构或其他信贷机构向借款人提供资金,并按照约定的条件和期限收取一定利息的行为。根据贷款的不同形式,贷款可以分为以下几种: 按照还款方式分:分期付款贷款、到期一次…...
分布式消息队列RocketMQ
一、RocketMQ概述 1.1 MQ 概述 MQ,Message Queue,是一种提供消息队列服务的中间件,也成为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据 1.2 MQ 用途 MQ的用途总结起来可分为以下三点 限流削峰…...
Temporary failure resolving ‘security.ubuntu.com‘
apt-get update 的时候出现: Temporary failure resolving security.ubuntu.com Temporary failure resolving archive.ubuntu.com具体信息: > ERROR [devel 3/17] RUN bash ./install_base.sh 3.12.3 && rm install_base.sh …...
0基础跟德姆(dom)一起学AI 自然语言处理10-LSTM模型
1 LSTM介绍 LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析: 遗忘门输入门细胞状态输出门…...
设计模式 创建型 建造者模式(Builder Pattern)与 常见技术框架应用 解析
单例模式(Singleton Pattern),又称生成器模式,是一种对象构建模式。它主要用于构建复杂对象,通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建出具有不同表示的对象。该模式的核心思想是将…...
cJson—json和XML比较
cJson—json和XML比较 前言1. 数据结构与表达能力2. 效率(性能)3. 存储占用与传输效率4. 开发难易程度5. 跨平台支持与兼容性6. 灵活性与扩展性7. 错误处理与验证**总结:JSON 与 XML 的优缺点对比选择建议 前言 在嵌入式设备开发中ÿ…...
【项目】智能BI洞察引擎 测试报告
目录 一、项目背景BI介绍问题分析项目背景 二、项目功能三、功能测试1、登录测试测试用例测试结果 2、注册测试测试用例测试结果出现的bug 3、上传文件测试测试用例测试结果 4、AI生成图表测试测试用例测试结果 5、分析数据页面测试(异步)测试用例测试结…...
基于SpringBoot的野生动物保护发展平台的设计与实现(源码+SQL+LW+部署讲解)
文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…...
QEMU网络配置简介
本文简单介绍下qemu虚拟机网络的几种配置方式。 通过QEMU的支持,常见的可以实现以下4种网络形式: 基于网桥(bridge)的虚拟网络。基于NAT(Network Addresss Translation)的虚拟网络。QEMU内置的用户模式网…...
wps透视数据表
1、操作 首先选中你要的行字段表格 -> 插入 -> 透视数据表 -> 拖动行值(部门)到下方,拖动值(包裹数量、运费)到下方 2、删除 选中整个透视数据表 -> delete 如图:...
Modbus知识详解
Modbus知识详解 ## 1.什么是Modbus?**顾名思义**,它是一个Bus(总线),即总线协议。比如串口协议、IIC协议、SPI都是通信协议。你接触到这种协议,相信你所处的行业是工业电子方面或者你的产品用于工业。好了,…...
c++字节对齐
字节对齐(Byte Alignment)是指计算机存储器中数据存放的位置必须满足特定的地址要求,以提高内存访问效率。在许多计算机系统中,处理器在读取内存中的数据时,需要按照特定的边界进行访问,这种边界通常是2的幂…...