计算机视觉目标检测——DETR(End-to-End Object Detection with Transformers)
计算机视觉目标检测——DETR(End-to-End Object Detection with Transformers)
文章目录
- 计算机视觉目标检测——DETR(End-to-End Object Detection with Transformers)
- 摘要
- Abstract
- 一、DETR算法
- 1. 摘要(Abstract)
- 2. 引言(Introduction)
- 3. 方法(The DETR model)
- 3.1 二分图匹配
- 3.2 损失函数
- 3.3 DETR的具体架构
- 4. 实验
- 总结
摘要
本周主要学习了DETR(End-to-End Object Detection with Transformers)目标检测算法及其相关内容。DETR通过引入Transformer,将目标检测任务视为集合预测问题,首次实现了端到端的目标检测,无需NMS后处理和anchor设计(相较于YOLO),显著简化了模型训练和部署流程。论文的核心贡献包括设计了基于二分图匹配的目标函数,确保输出的独特性,并通过Transformer的encoder-decoder架构实现了高效的目标检测。实验表明,DETR在COCO数据集上达到了与Faster R-CNN相当的性能,同时表现出良好的扩展性,能够适配全景分割等任务。尽管在小目标检测上存在不足,但相关改进工作已取得显著进展。
Abstract
The study focuses on DETR (End-to-End Object Detection with Transformers), a milestone framework in object detection. DETR reformulates object detection as a set prediction problem, achieving end-to-end detection without requiring NMS post-processing or anchor design(compared to YOLO), significantly simplifying model training and deployment. Its key contributions include a novel objective function based on bipartite matching, ensuring unique predictions, and leveraging the encoder-decoder architecture of Transformers for efficient object detection. Experiments demonstrate that DETR achieves comparable performance to Faster R-CNN on the COCO dataset, while exhibiting excellent scalability to tasks like panoptic segmentation. Although DETR faces challenges in detecting small objects, subsequent research has effectively addressed these issues.
一、DETR算法
DETR是目标检测领域的里程碑式工作,从论文标题“End-to-End Object Detection with Transformers”可知两个关键词:端到端和transformer。
从目标检测研究开始受到关注到DETR都很少有端到端的方法,大部分方法最后至少需要后处理操作(NMS, non-maximum suppression, 非极大值抑制)。无论是proposal based方法、anchor based方法、non-anchor based方法,最后都会生成很多预测框,如何去除这些冗余的框就是NMS要做的事情。而问题也随之出现:一是有了NMS,模型调参就会很复杂,二是即使训练好了一个模型,部署起来也非常困难(NMS不是所有硬件都支持)。
所以一个简单的、端到端模型一直是研究者梦寐以求的框架,DETR解决了以上的这些痛点。
DETR的优势在于:
- 不需要proposal、不需要anchor,直接利用transformer这种全局建模的能力,把目标检测看做是集合预测问题。
- 因为有了这种全局建模的能力,DETR不会有那么多冗余框,最后出什么结果就是什么结果,不需要NMS做后处理,让模型的训练和部署简单不少。
1. 摘要(Abstract)
DETR提出将目标检测任务直接视为集合预测的问题。目标检测本来任务就是给定一个图像,预测一堆框,每个框不仅要知道的其坐标,还要知道框里包含物体的类别,这些框就是一个集合,不同的图像对应的集合也是不同的,集合预测问题就是给定一个图片,我要预测这个集合。
摘要首先从大体的贡献上描述了贡献,即把目标检测做成一个端到端的框架,把之前特别依赖人的先验知识的部分删掉了(NMS部分、anchor),一旦把这两个部分拿掉之后,我们也不用费尽心思设计这种anchor,最后不会出现这么多框,不会用到NMS,也不会用到很多超参去调。
细节上的具体贡献分为:首先,DETR提出了新的目标函数,通过二分图匹配的方式,强制模型输出一组独一无二的预测(没有那么多冗余框,每个物体理想状态下就会生成一个框)。其次,就是引入了Transformer的encoder-decoder架构,这一部分中又包含了两个小贡献。一是decoder中加入额外的输入learned object query,其扮演以往框架中的anchor的角色,二是并行检测比串行检测更合适,并不是检测一个大物体前必须先检测一个小物体,或从左到右检测,我们希望越快越好。
DETR的能力表现:
- 简单性:想法上简单,不需要一个特殊的library,只要硬件支持Transformer或CNN,就一定支持DETR的实现。
- 性能:在coco数据集上,DETR和一个训练非常好的faster RCNN基线网络取得了差不多的效果,模型内存和速度也和faster RCNN差不多。
- 扩展性:DETR不仅是个模型也是个通用的框架,DETR在全景分割任务上效果很好,DETR能够非常简单拓展到其他任务上。
2. 引言(Introduction)
上述的摘要中提到DETR提出将目标检测任务直接视为集合预测的问题。而当时大多数好用的目标检测器,都是用间接的方式去处理集合预测问题,(1)比如proposal方式(如RCNN系列工作),(2)anchor方式(YOLO系列,focal loss)(3)non-anchor based方法(物体中心点center net,FCOS)。他们都没有直接做集合预测任务,而是设计一个替代(回归、分类)解决目标检测问题。所有这些方法性能受限于后处理操作(NMS),由于用了anchor和NMS导致检测器都非常复杂,难以优化和调参。
DETR框架的大致流程为:
- CNN提取特征。
- 特征拉直,送到encoder-decoder中,encoder的作用是进一步学习全局信息,为近下来的decoder,也就是最后出预测框做铺垫。
- decoder生成框的输出,当你有了图像特征之后,还会有一个object query(限定了你要出多少框),通过query和特征在decoder里进行自注意力操作,得到输出的框(文中是100,无论是什么图片都会预测100个框)。
- loss计算通过二分图匹配,计算100个预测的框和2个GT框的matching loss,决定100个预测框哪两个是独一无二对应到红黄色的GT框,匹配的框去算目标检测的loss。
上述的是DETR训练的步骤,而在DETR的推理过程中,步骤1、2、3一致,步骤4不需要,直接在最后的输出上用一个阈值卡一个输出的置信度,置信度比较大(>0.7的)保留,置信度小于0.7的当做背景物体。
DETR既有优势,但也存在缺陷:
- DETR对大物体预测很准,这主要归功于Transformer,能进行全局建模(原来使用anchor的话就会受限于anchor大小)。
- 缺陷是DETR对小物体的预测效果不好(后续关于DETR的多尺度、多特征改进工作,可以提高小物体的检测,改善了这些问题)。
3. 方法(The DETR model)
这部分主要包含两块内容:一是基于集合的目标函数怎么做,作者如何通过二分图匹配把预测的框和GT框连接在一起,算得目标函数。二是介绍DETR的具体模型架构。
3.1 二分图匹配
DETR在单次通过解码器时推断一个固定大小的有 N 个预测的集合,其中 N 被设置为显著大于图像中典型的物体数量,文中N为100。训练的主要困难之一是在 ground truth 方面对预测对象(类别、位置、大小)进行打分。我们的损失在预测对象和真实对象之间产生一个最佳的二分匹配,然后优化 object-specific ( bounding box ) 的损失。
用 y y y表示对象的ground truth集合, y ^ = { y ^ i } i = 1 N \hat y = \{ {\hat y_i}\} _{i = 1}^N y^={y^i}i=1N表示有 N N N个预测的集合。假设N远大于图像中物体的个数,我们考虑y也是一个大小为N的被 ( no object ) 填充的集合。为了在这两个集合之间找到一个二分匹配,我们用最低的代价搜索N个元素 σ ∈ ℘ N \sigma \in {\wp _N} σ∈℘N的一个置换:
σ ^ = arg min σ ∈ ℘ N ∑ i N L m a t c h ( y i , y ^ σ ( i ) ) \hat \sigma = \mathop {\arg \min }\limits_{\sigma \in {\wp _N}} \sum\limits_i^N {{L_{match}}({y_i},{{\hat y}_{\sigma (i)}})} σ^=σ∈℘Nargmini∑NLmatch(yi,y^σ(i))
-
L m a t c h ( y i , y ^ σ ( i ) ) {{L_{match}}({y_i},{{\hat y}_{\sigma (i)}})} Lmatch(yi,y^σ(i))是真值 y i {{y_i}} yi和具有索引 σ i {\sigma _i} σi的一个预测之间的一个成对匹配代价(a pair-wise matching cost)。这个最优分配是通过匈牙利算法计算的。匹配代价同时考虑了类预测以及预测框和真实框之间的相似性。
-
真实集合的每个元素 i i i都可以看成一个 y i = ( c i , b i ) {y_i} = ({c_i},{b_i}) yi=(ci,bi),其中 c i {c_i} ci是目标类标签(目标类标签特可能是 ϕ \phi ϕ)。 b i ∈ [ 0 , 1 ] 4 {b_i} \in {\left[ {0,1} \right]^4} bi∈[0,1]4是一个向量,它定义了真实框的中心坐标及其相对于图像的高度和宽度。
-
对于索引 σ i {\sigma _i} σi的预测,我们定义类 c i {c _i} ci的概率为 p ^ σ ( i ) ( c i ) {{\hat p}_{\sigma (i)}}({c_i}) p^σ(i)(ci),预测框为 b ^ σ ( i ) {{\hat b}_{\sigma (i)}} b^σ(i)。
利用上述的符号,可以将 L m a t c h ( y i , y ^ σ ( i ) ) {{L_{match}}({y_i},{{\hat y}_{\sigma (i)}})} Lmatch(yi,y^σ(i))定义为:
− 1 { c i ≠ ϕ } p ^ σ ( i ) ( c i ) + 1 { c i ≠ ϕ } L b o x ( b i , b ^ σ ( i ) ) - {1_{\{ {c_i} \ne \phi \} }}{{\hat p}_{\sigma (i)}}({c_i}) + {1_{\{ {c_i} \ne \phi \} }}{L_{box}}({b_i},{{\hat b}_{\sigma (i)}}) −1{ci=ϕ}p^σ(i)(ci)+1{ci=ϕ}Lbox(bi,b^σ(i))
这种寻找匹配的过程与用于匹配proposal或anchor的启发式分配规则起到了相同的作用。但主要的区别是,我们可以找到一对一的匹配,进行无重复的直接集合预测。
3.2 损失函数
第二步是计算损失函数,即计算上一步中匹配的所有配对的匈牙利损失。我们定义的损失类似于常见目标检测器的损失,即类别预测的负对数和box 损失的线性组合:
其中的 σ ^ {\hat \sigma } σ^是第一步中计算的最优分配。
匹配代价和匈牙利损失的第二部分是对边界框进行评分的 L b o x ( b i , b ^ σ ( i ) ) {L_{box}}({b_i},{{\hat b}_{\sigma (i)}}) Lbox(bi,b^σ(i)),与带初试猜测检测器如anchor不同,我们直接进行框预测。虽然这种方法简化了实施,但它对损失的相对规模造成了问题。最常用的L1 Loss对于小框和大框会有不同的尺度,即使它们的相对误差相似。为了缓解这一问题,使用的损失函数是L1 Loss和广义的IoU损失 L i o u ( ⋅ , ⋅ ) {L_{iou}}( \cdot , \cdot ) Liou(⋅,⋅)的线性组合, L b o x ( b i , b ^ σ ( i ) ) {L_{box}}({b_i},{{\hat b}_{\sigma (i)}}) Lbox(bi,b^σ(i))是尺度不变的损失函数。
因此 L b o x ( b i , b ^ σ ( i ) ) {L_{box}}({b_i},{{\hat b}_{\sigma (i)}}) Lbox(bi,b^σ(i)),被定义为:
而广义的IoU损失 L i o u ( ⋅ , ⋅ ) {L_{iou}}( \cdot , \cdot ) Liou(⋅,⋅)定义为:
3.3 DETR的具体架构
DETR的网络结构主要由三部分组成:CNN骨干网、Transformer编码器和解码器,以及输出层。
- CNN骨干网:负责从输入图像中提取特征图。DETR通常使用ResNet等深度卷积神经网络作为骨干网,通过一系列的卷积和池化操作,将输入图像转换为高维特征图。
- Transformer编码器:用于对CNN骨干网提取的特征图进行编码。编码器由多个Transformer block组成,每个block包含自注意力层和前馈神经网络层。通过多层自注意力机制,编码器能够捕获特征图中不同位置之间的全局上下文关系,生成一组特征向量。
- Transformer解码器:解码器是DETR实现集合预测的关键部分。它接受编码器的输出和一组可学习的目标查询(object queries),通过自注意力机制和编码器-解码器注意力机制,将目标查询解码为一系列目标的边界框坐标和类别标签。
- 预测头:两个简单的前馈网络( feed forward network,FFN )来进行最终的检测预测。分别用于预测边界框的标准化中心坐标、高度和宽度,以及类别标签。
其中的object queries有必要进行说明:
DETR直接定义了100个目标框的slot,在DETR这里就被称为object query。在训练时,这100个object query将会通过 transformer进行self attention操作,以及和输入图像进行cross attention操作。 通过这种方式,每个object query将会逐步进化成可以预测目标框及其类别的一个特征向量。最终通过两个FFN,即可回归出目标框的位置和类别。
该网络一次前向传播的过程为:
- 输入图像,经过标准 CNN 后,得到图像的特征矩阵。
- 把图像特征拉直,并进行位置编码补充。
- 在 Transformer Encoder 中学习图像的全局信息。
- 位置嵌入和 Encoder 的输出作为 Decoder 的输入,经过解码后传递给 FFN。
- 判断 FFN 预测图像中是否包含目标对象。
- 如果有,则输出预测框和类别;否则输出一个 “no object” 类。
下面是DETR的Pytorch简单实现,非常简洁且清晰地描述了上述的网络结构:
import torch2
from torch import nn3
from torchvision.models import resnet5045class DETR(nn.Module):def __init__(self, num_classes, hidden_dim, nheads,num_encoder_layers, num_decoder_layers):super().__init__()# We take only convolutional layers from ResNet-50 modelself.backbone = nn.Sequential(*list(resnet50(pretrained=True).children())[:-2])self.conv = nn.Conv2d(2048, hidden_dim, 1)self.transformer = nn.Transformer(hidden_dim, nheads,num_encoder_layers, num_decoder_layers)self.linear_class = nn.Linear(hidden_dim, num_classes + 1)self.linear_bbox = nn.Linear(hidden_dim, 4)self.query_pos = nn.Parameter(torch.rand(100, hidden_dim))self.row_embed = nn.Parameter(torch.rand(50, hidden_dim // 2))self.col_embed = nn.Parameter(torch.rand(50, hidden_dim // 2))def forward(self, inputs):x = self.backbone(inputs)h = self.conv(x)H, W = h.shape[-2:]pos = torch.cat([self.col_embed[:W].unsqueeze(0).repeat(H, 1, 1),self.row_embed[:H].unsqueeze(1).repeat(1, W, 1),], dim=-1).flatten(0, 1).unsqueeze(1)h = self.transformer(pos + h.flatten(2).permute(2, 0, 1),self.query_pos.unsqueeze(1))return self.linear_class(h), self.linear_bbox(h).sigmoid()detr = DETR(num_classes=91, hidden_dim=256, nheads=8, num_encoder_layers=6, num_decoder_layers=6)
detr.eval()
inputs = torch.randn(1, 3, 800, 1200)
logits, bboxes = detr(inputs)
4. 实验
使用AdamW训练DETR,将初始Transformer的学习率设置为 1 0 − 4 {10^{ - 4}} 10−4,主干的学习率设置为 1 0 − 5 {10^{ - 5}} 10−5,权重衰减设置为 1 0 − 4 {10^{ - 4}} 10−4。所有的Transformer权重都是初始化好的,而主干网是用ImageNet预训练的ResNet模型,它来自于具有冻结BN层的torchvision库。
文章用两个不同的主干报告结果:一个ResNet-50和一个ResNet-101。相应的模型分别称为DETR和DETR-R101。之后,文章提到还通过向主干的最后一个阶段添加一个展开,并从这个阶段的第一个卷积中移除一个跨步来提高特征分辨率。相应的模型分别称为 DETR-DC5 和 DETR-DC5-R101 (扩张的C5级)。
优缺点:这种修改将分辨率提高了两倍,从而提高了对小目标的性能,代价是编码器的自注意力增加了16倍,导致整体计算成本增加了 2 倍。下表给出了这些模型与Faster R-CNN的FLOPs的全面比较。
采用DETR - DC5模型进行预测。对于不同的对象,采用不同的颜色对注意力分数进行编码。解码器通常关注对象的四肢,如腿部和头部。通过颜色可以观察到,不同物体之间的边缘划分的很是明显,如下图,虽然大象的四肢和皮肤很相似,但是也难逃DETR的法眼,还有斑马的条纹很复杂,但是也没有对DETR造成困难。
总结
DETR模型通过将目标检测任务转化为集合预测问题,提出了一种端到端的检测方案,有效解决了传统方法中依赖NMS和anchor设计的不足。通过Transformer的全局建模能力,DETR简化了目标检测的框架设计,显著提升了大目标的检测精度,并在COCO数据集上表现出与Faster R-CNN相当的性能。尽管在小目标检测上存在一定局限性,但相关多尺度改进工作已取得显著成果。DETR不仅是一种目标检测模型,更是一个通用的框架,其创新性和可扩展性或许可以用到我之后的研究中,值得思考。
相关文章:
计算机视觉目标检测——DETR(End-to-End Object Detection with Transformers)
计算机视觉目标检测——DETR(End-to-End Object Detection with Transformers) 文章目录 计算机视觉目标检测——DETR(End-to-End Object Detection with Transformers)摘要Abstract一、DETR算法1. 摘要(Abstract)2. 引言(Introduction&#…...
资源型数字化平台该如何顺利运营?
一、引言 随着信息技术的迅猛发展,资源型数字化平台在各领域的重要性日益凸显。此类平台整合各类资源,以数字化手段提升资源利用效率与价值,但确保其顺利运营面临诸多挑战。 二、资源型数字化平台特点 资源型数字化平台具有资源整合性&…...
写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践
自OceanBase 4.3.3版本推出以来,向量检索的能力受到了很多客户的关注,也纷纷表达希望OB能拓展更多 多模数据库大模型 的AI应用实践。 在上篇文章 👉 OceanBase LLM,免费构建你的专属 AI 助手 ,我们介绍了如何去搭建一…...
Linux系统编程——系统内核中的信号
目录 一、前言 二、系统内核中的信号 三、sigset_t 四、信号集操作 1、sigpending(); 2、sigemptyset(); 3、sigfillset(sigset_t *set); 4、int sigaddset ()和sigdelset() 编辑 5、sigismember() 6、sigprocmask() 五、信号集操作代码演示 六、深入理解进程的信…...
Mapbox-GL 中 `token` 的使用
Mapbox-GL 是一个开源的 JavaScript 库,允许开发者在网页上渲染交互式地图。token 在 Mapbox 中主要是指 access token,它用于身份验证和授权,确保应用程序能够访问 Mapbox 的地图服务。 下面详细解析 Mapbox GL 中 token 的使用,…...
PostgreSQL标识符长度限制不能超过63字节
文章目录 问题:标识符太长会被截断分析相关源码可以尝试以下案例 问题:标识符太长会被截断 在创建表时,发现表名太长会自动被截断,导致查询表时报错了。 分析 参考:https://www.postgresql.org/docs/current/limits…...
【Token】校验、会话技术、登录请求、拦截器【期末实训】实战项目学生和班级管理系统\Day15-后端Web实战(登录认证)\讲义
登录认证 在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,所以我们今天的主题就是登录认证。 最终我们要实现…...
电机相关内容
文章目录 电枢电阻电动机电动势系数负载转矩直流电动机的角速度和速度关系 电枢电阻 电枢电阻的计算公式如下: 基于欧姆定律的公式: R a V a − V b I a R_a \frac{V_a - V_b}{I_a} RaIaVa−Vb 其中, ( V a ) (V_a) (Va…...
电商环境下的财务ERP系统架构
先介绍一下自己的工作经历,2002年开始进入ERP实施行业,专注于O记EBS系统,正好赶上中国经济和信息化高度发展的阶段,先后实施过很多大国企和民企的大型ERP项目,在实施过程中逐渐对ERP系统的架构、模块设计有更深入的认识…...
Gitlab 数据备份全攻略:命令、方法与注意事项
文章目录 1、备份命令2、备份目录名称说明3、手工备份配置文件3.1 备份配置文件3.2 备份ssh文件 4、备份注意事项4.1 停止puma和sicdekiq组件4.2 copy策略需要更多磁盘空间 5、数据备份方法5.1 docker命令备份5.2 kubectl命令备份5.3 参数说明5.4、选择性备份5.5、非tar备份5.6…...
基于单片机的视力保护及身姿矫正器设计(论文+源码)
1. 系统设计 在本次设计中,其系统整个框图如图2-1所示。其主要的核心控制模块由超声波模块,光敏电阻,按键模块,复位电路,红外模块,LCD显示等组成。其包括自动模式,手动模式。自动模式ÿ…...
设计模式之【观察者模式】
观察者模式: 应用于发布-订阅消息模型中,订阅者订阅一个主题后,当有新消息到达时,所有订阅者都会收到通知。 主要关注的是对象之间的通信。是一种对象之间的一对多关系,多个对象依赖于一个对象,当被依赖的…...
杂七杂八的网络安全知识
一、信息安全概述 1.信息与信息安全 信息与信息技术 信息奠基人:香农:信息是用来消除随机不确定性的东西 信息的定义:信息是有意义的数据,是一种要适当保护的资产。数据经过加工处理之后,就成为信息。而信息需要经…...
【落羽的落羽 C语言篇】数据存储简介
文章目录 一、整型提升1. 概念2. 规则 二、大小端字节序1. 概念2. 练习练习1练习2 三、浮点数在内存中的存储1. 规则2. 练习 一、整型提升 1. 概念 C语言中,整型算术运算至少是以“缺省整型类型”(int)的精度来进行的。为了达到这个精度&am…...
linux----文件访问(c语言)
linux文件访问相关函数 打开文件函数 - open 函数原型:int open(const char *pathname, int flags, mode_t mode);参数说明: pathname:这是要打开的文件的路径名,可以是绝对路径或者相对路径。例如,"/home/user/…...
垂起固定翼无人机大面积森林草原巡检技术详解
垂起固定翼无人机大面积森林草原巡检技术是一种高效、精准的监测手段,以下是对该技术的详细解析: 一、垂起固定翼无人机技术特点 垂起固定翼无人机结合了多旋翼和固定翼无人机的优点,具备垂直起降、飞行距离长、速度快、高度高等特点。这种无…...
汽车电子零部件(15):AVM全景影像系统
概述: 使用ADAS全景监控(AVM)精确停车和操纵。这项先进技术采用多个摄像头,提供车辆周围环境的鸟瞰图。 360度全景监控系统: 360 AVM系统可以帮助驾驶员360度查看车辆周围的情况,避免发生碰撞。360 AVM系统由一个电子控制单元(ECU)和四个摄像头组成。ECU将处理四个摄…...
G口带宽服务器与1G独享带宽服务器:深度剖析其差异
在数据洪流涌动的数字化时代,服务器作为数据处理的核心,其性能表现直接关系到业务的流畅度和用户体验的优劣。随着技术的飞速发展,G口带宽服务器与1G独享带宽服务器已成为众多企业的优选方案。然而,这两者之间究竟有何细微差别&am…...
鸿蒙项目云捐助第十一讲鸿蒙App应用的捐助成功自定义对话框组件实现
在生活中,用户做了一个好事后,很多场合都会收到一份感谢。在捐助的行业也是一样的,用户捐出了一片爱心,就会收获一份温情。这里的温情是通过自定义对话框实现的。 一、通过自定义对话框组件实现捐款成功的信息页 这里用户捐款成…...
Elasticsearch-分词器详解
什么是分词器 1、分词器介绍 对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。 常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart&…...
Android笔试面试题AI答之Android基础(3)
文章目录 1.谈一谈 Android 的安全机制一、系统架构层面的安全设计二、核心安全机制三、其他安全机制与措施 2.Android 的四大组件是哪四大?3.Android 的四大组件都需要在清单文件中注册吗?4.介绍几个常用的Linux命令一、文件和目录管理二、用户和权限管…...
酷黑金色配色 影片素材不过时 色彩丰富 电影主题html
本套大作业共计8个HTML页面,网页中包含:DIVCSS、下拉菜单栏、banner轮播图、图片放大效果、鼠标滑过效果、视频、小图标及按钮设计、登录注册页等,同时设计了logo;本作品花费大量时间去整理素材,大部分素材均使用Photo…...
《Go 语言变量》
《Go 语言变量》 介绍 Go 语言是一种静态类型、编译型的编程语言,由 Google 开发。它以其简洁的语法、高效的并发处理和强大的标准库而闻名。在 Go 语言中,变量是存储数据的基本单位,它们可以是各种数据类型,如整数、浮点数、布…...
Tool之Excalidraw:Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略
Tool之Excalidraw:Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略 目录 Excalidraw 简介 1、Excalidraw 的主要特点: Excalidraw 安装和使用方法 1、Excalidraw的安装 T1、使用 npm 安装: T2、使用 …...
Llama 3 模型系列解析(一)
目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练(Over-training) 3. 计算训练预算 4. 如何逐步估算和确定最优模型? 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…...
重拾设计模式--观察者模式
文章目录 观察者模式(Observer Pattern)概述观察者模式UML图作用:实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题(Subject):具体主题(Concrete Subject…...
3-Gin 渲染 --[Gin 框架入门精讲与实战案例]
在 Gin 框架中,渲染指的是将数据传递给模板,并生成 HTML 或其他格式的响应内容。Gin 支持多种类型的渲染,包括 String HTML、JSON、XML 等。 String 渲染 在 Gin 框架中,String 渲染方法允许你直接返回一个字符串作为 HTTP 响应…...
回溯---java---黑马
回溯 概念 程序在运行过程中分成了多个阶段 通过某些手段,将数据恢复到某一阶段,称之为回溯 手段包括:方法栈、自定义栈 使用基本数据类型n public class Backtracking{public static void main(String[] args) {rec(1);}public void r…...
【数据结构】排序(附测试源码)
【数据结构】排序(附测试源码) 本节是数据结构排序版(不完整版,没有C语言版的哈希表) 1.排序概念: 1.1所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增…...
【翻译】大型 Transformer 模型推理优化
翻译原文:Large Transformer Model Inference Optimization | LilLog 原文作者:Lilian Weng 目录 方法概述蒸馏 Distillation量化 Quantization Transformer 量化的挑战训练后量化 (PTQ) 混合精度量化 Mixed-precision quantization细粒度量化量化的二…...
RabbitMQ概述
目录 RabbitMQ概述 前言 MQ MQ的作用 为什么选择RabbitMQ RabbitMQ的介绍 RabbitMQ概述 前言 Rabbit, 兔⼦的意思 互联⽹⾏业很多公司, 都喜欢⽤动物命名产品, 或者作为公司的logo, 吉祥物. ⽐如: 腾讯的企鹅, 京东的狗, 美团的袋⿏, 携程的海豚,阿⾥就更多了, 蚂蚁, ⻜…...
《PCI密码卡技术规范》题目
单选1 在《PCI密码卡技术规范》中,下列哪项不属于PCI密码卡的功能()。 A.密码运算功能 B.密钥管理功能 C.物理随机数产生功能 D.随主计算机可信检测功能 正确答案:D. <font style="color:#DF2A3F;">解析:</font> 单选 2 在《PCI密码卡技术规…...
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用,今天我们用它来进行一次文本情感分析训练。 一、概念温习 支持向量机(SVM)是一种监督学习算法,广泛用于分类和回归问题。 它的核心思想是通过…...
ECharts柱状图-柱图42,附视频讲解与代码下载
引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…...
呼入机器人:24小时客户服务的未来趋势
呼入机器人:24小时客户服务的未来趋势 作者:开源大模型智能呼叫中心系统FreeAICC,Github:https://github.com/FreeIPCC/FreeAICC 在当今快节奏的商业环境中,客户服务已成为企业竞争的核心要素之一。随着人工智能技术…...
FFmpeg 安装教程(Windows 系统)
1. 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑,是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FFmpeg 安装包 打开 Dpwnload FFmp…...
左神算法基础巩固--1
文章目录 时间复杂度常数时间的操作时间复杂度的定义时间复杂度的作用剖析递归行为和递归行为时间复杂度的估算 排序选择排序冒泡排序插入排序归并排序小和问题问题描述解题思路 快速排序荷兰国旗问题问题描述 堆排序堆结构大根堆小根堆 桶排序 二分二分搜索 ^的运用不用额外空…...
基于鲲鹏服务器的打砖块小游戏部署
案例介绍 鲲鹏服务器是基于鲲鹏处理器的新一代数据中心服务器,适用于大数据、分布式存储、高性能计算和数据库等应用。鲲鹏服务器具有高性能、低功耗、灵活的扩展能力,适合大数据分析、软件定义存储、Web等应用场景。 本案例将指导开发者如何在鲲鹏服务…...
STM32F407寄存器点灯
背景描述: 最近用32开发遇到问题不得不看寄存器了,就回顾了一下寄存器手册的查看方式和寄存器的使用方法; 上一次这么细致的记录还是在刚学习STM32的时候,之前觉得看寄存器手册以及配置寄存器是有点难度的事情,现在回头…...
电子电气架构 --- 队列刷写场景及刷写上位机浅析
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
kubernates实战
使用k8s来部署tomcat 1、创建一个部署,并指定镜像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod状态 kubectl get pods # 获取default名称空间下的pods kubectl get pods --all-namespaces # 获取所有名称空间下的pods kubect…...
换工作,如何退出微软账户???(删除注册表数据)
1.Winr 进入 输入. 2.删除 注意路径. 3.删除 注意路径. 4.效果如下,清空成功...
vscode+编程AI配置、使用说明
文章目录 [toc]1、概述2、github copilot2.1 配置2.2 使用文档2.3 使用说明 3、文心快码(Baidu Comate)3.1 配置3.2 使用文档3.3 使用说明 4、豆包(MarsCode)4.1 配置4.2 使用文档4.3 使用说明 5、通义灵码(TONGYI Lin…...
60.基于SSM的个人网站的设计与实现(项目 + 论文)
项目介绍 本站是一个B/S模式系统,个人网站是在MySQL中建立数据表保存信息,运用SSMVue框架和Java语言编写。并按照软件设计开发流程进行设计实现充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SSM的网…...
myexcel的使用
参考: (1)api文档:https://www.bookstack.cn/read/MyExcel-2.x/624d8ce73162300b.md (2)源代码: https://github.com/liaochong/myexcel/issues 我: (1)m…...
CSDN外链失效3:
参考我之前的博客: 外链失效博客1:随想笔记1:CSDN写博客经常崩溃,遇到外链图片转存失败怎么办_csdn外链图片转存失败-CSDN博客 外链失效博客2:网络随想2:转语雀_md格式转语雀lake格式-CSDN博客 markdown…...
SSM 医院预约挂号系统:Vue 技术驱动下的设计与实现飞跃
3系统分析 3.1可行性分析 通过对本医院预约挂号系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院预约挂号系统采用SSM框架,JAVA作为开发语…...
如何在centos系统上挂载U盘
在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…...
lshw学习——简单介绍
文章目录 简介核心结构扫描设备原理scan_abiscan_burnerscan_cdromscan_cpufreqscan_cpuidscan_cpuinfoscan_device_treescan_diskscan_displayscan_dmiscan_fatscan_fbscan_graphicsscan_idescan_ideraidscan_inputscan_isapnpscan_lvmscan_memoryscan_mmcscan_mountsscan_net…...
UI自动化概念+Web自动化测试框架
1.UI自动化测试概念:我们先明确什么是UI UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试:Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 …...