detection_segmentation
目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)
文章目录
- 目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)
- 一. 计算机视觉(AI VISION)
- 1. 图像分类
- 2. 目标检测与定位
- 3. 语义分割和实例分割
- 目标检测算法可以分为两大类:
- R-CNN
- 生成候选区域(Region Proposal)
- 对每个区域进行CNN特征提取
- 使用SVM分类器,判断是否属于该类
- 使用回归器修正候选框位置
- SPPNET
- Fast R-CNN
- R-CNN缺点:
- SPPNet缺点:
- 从上图我们可以知道Fast R-CNN相较于R-CNN和SPPNet的优点:
- Fast R-CNN的架构:
- 端到端 (END TO END)
- 在介绍FASTER R-CNN之前,我们首先介绍一个概念端到端(end to end).
- Faster R-CNN
- RPN网络
- RPN网络的工作流程就是
- anchor
- Loss Funtion
- 总结
在本篇开始之前我推荐一个很好的图片The Modern History of Object Recognition — Infographic
强力推荐大家看一下,这里因为csdn原因无法将图片贴上来。
本篇文章将介绍目标检测和实例分割的经典网络模型
(从R-CNN,SPPNet,Fast R-CNN,Faster R-CNN)
!让我们来一起探索这些伟大的模型是如何一步步改进完善的!
一. 计算机视觉(AI VISION)
在介绍目标检测和实例分割之前我们先介绍一下计算机视觉的任务分类以及最新的神经网络模型(来源讯飞星火AI):
-
1. 图像分类
图像分类是指将图像分到预定义类别中的任务。例如,给定一张图片,算法需要判断这张图片中是否包含某种物体,如猫或狗。这个我们就太熟悉了在之前的文章中以及介绍过了经典网络模型和精读了它们的论文。
- ConvNeXt和CrossViT是当前在图像分类任务上表现突出的最新模型。ConvNeXt通过改进卷积网络结构来优化性能,而CrossViT结合了CNN和Transformer的优势,提高了分类准确性
-
2. 目标检测与定位
目标检测不仅要识别图像中的物体,还要精确地标定其位置,通常通过边界框来实现。传统的目标检测方法依赖于滑动窗口和手工设计的特征,但这种方法在计算量和准确性上存在限制。随着深度学习的发展,基于CNN的方法显著改善了检测效果。
- Yolov7和Swin Transformer是两种最新的目标检测模型。Yolov7通过新的网络结构和增强算法提升了检测速度和精度,而Swin Transformer利用分层建模能力处理不同尺寸的对象。
-
3. 语义分割和实例分割
语义分割任务将图像中的每个像素分类到特定类别,这适用于场景理解等应用。实例分割则更进一步,需要区分同一类别的不同个体。
- SETR和Mask2Former是最新的分割模型。SETR利用Transformer的全局信息来提升分割精度,而Mask2Former则在同一个Transformer框架内同时解决目标检测和实例分割任务。
下面我们将用一张图充分的理解分类(Image classification),检测(Object localization),语义分割(Semantic segmentation)和实例分割(Instance Segmentation)之间的区别
从图中我们可以看到分类,检测,分割的区别很明显不明显的是语义分割和实例分割。
-
图像分类(classification):
- 就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)和猫(cat)四种,图像分类要求给定一个图片输出图片里含有哪些分类,比如上图的例子是含有person、sheep和dog三种。
-
目标检测(object detection):
- 有什么,在哪里。比分类多了一个定位,需要确定目标的位置用矩形框将目标框出。
-
语义分割(semantic segmentation):
- 就是需要区分到图中每一点像素点,而不仅仅是矩形框框住了。但是同一物体的不同实例不需要单独分割出来。对下图左,标注为人,羊,狗,草地。而不需要羊1,羊2,羊3,羊4,羊5等。
-
实例分割(instance segmentation):
- 实例分割其实就是目标检测和语义分割的结合。相对目标检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割需要标注出图上同一物体的不同个体(羊1,羊2,羊3…)
-
全景分割(Panoramic segmentation):
- 全景分割是语义分割和实例分割的结合。跟实例分割不同的是:实例分割只对图像中的object进行检测,并对检测到的object进行分割,而全景分割是对图中的所有物体包括背景都要进行检测和分割。
目标检测算法可以分为两大类:
- 一类是基于Region Proposal(区域推荐)的R-CNN系算法(R-CNN,FAST R-CNN,Faster R-CNN等),这些算法需要two-stage,即需要先算法产生目标候选框,也就是目标位置,然后对候选框做分类与回归。
- 另一类是Yolo,SSD这类one-stage算法,仅仅使用一个卷积神经网络CNN直接预测不同目标的类别与位置。
接下来我们开始本篇重点基于Region Proposal(区域推荐)的R-CNN系算法。两阶段(two-stage)
R-CNN
论文地址Rich feature hierarchies for accurate object detection and semantic segmentation
-
生成候选区域(Region Proposal)
通过SS(Selective Search)算法生成2000个候选框,之后对候选框进行归一化,缩放到固定大小(227*227).这里我们简单介绍一下选择性搜索算法(Selective Search)
输入图像通过类似聚类的方法找到初始的(颜色,纹理,大小,形状相似度比较一致的)分割区域,然后对区域进行加权合并得到不同层次的2000个候选框!
-
对每个区域进行CNN特征提取
-
使用SVM分类器,判断是否属于该类
- 使用非极大值抑制剔除重叠建议框:
- 非极大值抑制: 定义IoU指数,即 ( A ∩ B ) / ( A ∪ B ) (A \cap B) / (A \cup B) (A∩B)/(A∪B),如下图所示,A是向日葵类对应的所有候选框中概率最大的区域,B是另一个区域,计算AB的IoU,其结果大于阈值,那么就认为AB属于同一类(即都是向日葵),所以应该保留A,删除B,这就是非极大值抑制。:
- 使用非极大值抑制剔除重叠建议框:
黄色框表示候选区域 Region Proposal,绿色窗口表示实际区域Ground Truth(人工标注的),红色窗口表示 Region Proposal 进行回归后的预测区域,这里就跟机器学习中的回归预测房价类似。
缺点:
- (1) R-CNN将所有输入图片缩放至(227*227)大小会影响原图的比例,导致模型检测精度下降。尺寸归一化导致物体变形,纵横比特征丢失。
- (2) 步骤繁琐,需要对每一张候选区域提取特征。
提出问题:
- (1) 能否改进从而可以使喂入全连接层的图片大小不固定?
- (2) 能否只提取一次特征,然后找到候选区域对应的特征图?
SPPNET
论文地址Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
从上图我们可以知道
R-CNN:image–>裁剪,变换(crop/warp)–>卷积–>全连接层–>输出结果。
SPPNET:image–>卷积–>空间金字塔池化(spatial pyramid pooling)–>全连接层–>结果。
改进了最主要的两个点:
- 直接将整幅图片喂入CNN,然后在特征图上找到大约2000个候选区域。
- 使用空间金字塔池化。
下面我们将介绍这两点:
作者发现,卷积后对应的位置并不会发生改变,每个卷积层会匹配响应的区域。如上图所示(a)图为输入的照片,(b)为第5层卷积层之后提取的特征图,©为测试集中能使该特征图激活最大的一些图片:
车轮在原图中的位置在特征图上也会出现在响应的位置
。
这样在目标检测使可以根据特征图画出该物体的位置,也就可以画出具体的框了。
上图就是SPPNET最核心的部分:空间金字塔池化层。
分别将特征图划分1×1、2×2、4×4大小的子块(显然,在不同的划分模式下子块大小是不一致的,输入特征图尺寸不一致时子块大小也不一样),然后对每个子块进行最大池化,即将不同大小的子块都转化为一个值,将池化之后的结果进行拼接即可得到一个大小固定为21维的输出。如此一来,无论输入特征图的尺寸发生如何变化,Spatial Pyramid Pooling均可将其转化为固定大小的尺寸进行输出。
特点:
空间金字塔池化的池化核的步长和大小是动态变化的过程,上边提到的1 * 1,2 * 2,4 * 4都是输出的大小,例如(对于44的输出,输入1313的图像, s i z e = 13 / 4 向上取整 = 4 , s t r i d e = 13 / 4 向下取整 = 3 size = 13/4 向上取整=4,stride = 13/4 向下取整=3 size=13/4向上取整=4,stride=13/4向下取整=3)。
总结:
- 空间金字塔池化(spatial pyramid pooling layer),解决了R-CNN输入图片大小固定的问题
- 只提取一次特征,直接在特征图上找到候选区域,避免了裁剪,变形,提高了检测精度。
- 使用共享卷积运算(所有候选框共享这一次卷积的feature map),大大提高了计算效率。
缺点:
- 无法通过反向传播来进行微调,离端到端的的检测还差很多
- 分类和回归是分开进行的,需要分别训练
提出问题:
- 能否把SVM和边界框去掉,由CNN直接得到类别和边框可不可以?
Fast R-CNN
论文地址Fast R-CNN
在介绍Fast R-CNN之前,我们先介绍以下RCNN和SPPNet的缺点,如下图所示:
R-CNN缺点:
- 训练是一个多阶段的(training is a multi-stage pipeline)
R-CNN首先需要通过CNN网络提取特征,再通过SVM网络对提取到的特征进行分类,最后需要通过bounding-box回归修正预选框。
- 训练消耗大量的空间和时间(training is expensive in space and time)
SVM需要每一张图片上的每一个候选框区域的特征,所以CNN提取到的特征需要存储到磁盘中,所以将耗费大量的空间去存储,大量的时间去提取特征。
- 目标检测速度非常慢(object detection is slow)
因为R-CNN每一张照片都要生成2000个候选框,这就导致在测试阶段使用VGG16处理一张图片将消耗47秒。
所以SPPNet使用共享计算来解决R-CNN对一张图片生成2000候选框再喂入网络造成计算效率低下的问题。
SPPNet缺点:
- 同R-CNN一样,同R-CNN一样是多阶段的训练
- 无法更新金字塔池化之前的卷积层,这就限制了非常深网络的准确性。
是由于 SPP做fine-tuning时输入是多个不同的图片,这样对于每一个图片都要重新产出新的feature map,效率很低,而Fast-RCNN对其进行了改进。
从上图我们可以知道Fast R-CNN相较于R-CNN和SPPNet的优点:
- 有更高的检测精度
- 训练是单阶段,使用多任务损失函数
把不同模型整合为一个网络:损失函数使用多任务损失函数 multi-task loss,将边框回归bounding box regression 直接加入CNN网络中训练。
- 训练可以更新所有层的网络参数
用反向传播训练所有网络权重是Fast R-CNN的重要能力。首先,让我们阐明为什么SPPnet无法更新低于空间金字塔池化层的权重。
根本原因是当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播是非常低效的,这正是训练R-CNN和SPPnet网络的方法。低效的部分是因为每个RoI可能具有非常大的感受野,通常跨越整个输入图像。由于正向传播必须处理整个感受野,训练输入很大(通常是整个图像)。
我们提出了一种更有效的训练方法,利用训练期间的特征共享。在Fast RCNN网络训练中,随机梯度下降(SGD)的小批量是被分层采样的,首先采样N个图像,然后从每个图像采样R/N个 RoI。关键的是,来自同一图像的RoI在向前和向后传播中共享计算和内存。减小N,就减少了小批量的计算。例如,当N=2和R=128时,得到的训练方案比从128幅不同的图采样一个RoI(即R-CNN和SPPnet的策略)快64倍。
这个策略的一个令人担心的问题是它可能导致训练收敛变慢,因为来自相同图像的RoI是相关的。这个问题似乎在实际情况下并不存在,当N=2和R=128时,我们使用比R-CNN更少的SGD迭代就获得了良好的结果。
上面是论文中的翻译,个人理解:采用类似于批标准化,不再是1张1张的喂入图片而是将N张图片喂入网络中,然后从每个图像采样R/N个,利用权重共享来加快训练。个人感觉这个微调思路很费看看Faster R-CNN论文。
- 特征缓存不需要磁盘存储
- 使用简化的空间金字塔池化,ROI池化
什么是ROI池化就是简化的空间金字塔池化,空间金字塔池化是固定池化输出为1 * 1,2 * 2,4 * 4(在CNN中说到过,不同大小的子块感受野不同)的聚合,而ROI就是固定池化输出为一个大小例如(7 * 7).
这种固定大小的映射可能导致信息的损失或扭曲,特别是对于较小或较大的目标区域
。
Fast R-CNN的架构:
Fast R-CNN流程是:
输入一张图片–> 通过CNN提取特征图 --> 通过ROI projection(依旧采用SS提取2000个候选框)得到候选区域 --> 通过ROI Pooling将候选区域映射到固定大小的特征图 --> 通过全连接层 --> 在最后并行两个全连接层用于进行softmax分类和bounding-box回归。
端到端 (END TO END)
在介绍FASTER R-CNN之前,我们首先介绍一个概念端到端(end to end).
什么是端到端呢?
在目标检测领域,端到端指的是
能否直接从输入的图像数据获得最终的检测结果
,而不需要人为的特征选择或其他手动设计的功能
。这类模型的训练和推理过程更加直接和高效。
例如: 相对于深度学习,传统机器学习的流程往往由多个独立的模块组成,比如在一个典型的自然语言处理(Natural Language Processing)问题中,包括分词、词性标注、句法分析、语义分析等多个独立步骤,每个步骤是一个独立的任务,其结果的好坏会影响到下一步骤,从而影响整个训练的结果,这是非端到端的。
首先我们关注的是在目标检测领域满足那点的为端到端:
- 能否
直接(不需要人为的特征选择或其他手动设计的功能)
从输入的图像数据获得最终的检测结果。
接下来我们就分析R-CNN,SPPENT,FAST R-CNN:
R-CNN:
它通过选择性搜索算法生成区域建议,然后对每个区域建议独立提取CNN特征,最后利用SVM分类器进行分类和回归器精修边界框。显然,R-CNN是一个多阶段的处理流程
,需要人为的特征选择和多个分离的步骤才能得到结果,因此它不是端到端的。SPPNET:
针对R-CNN重复计算卷积图的问题进行了改进,引入了空间金字塔池化层,允许不同大小的区域建议在特征图上直接映射并池化为固定尺寸的输出,从而一次性完成特征提取。尽管SPPNet减少了重复计算,但依然保留了R-CNN的多阶段
特点,即先提取特征后进行分类和回归
,所以也不是端到端系统。FAST R-CNN:
在R-CNN和SPPNet的基础上进行了进一步优化,提出了RoI池化层,并将分类和回归合并为一个多任务目标,使得整个网络可以联合训练。虽然Fast R-CNN实现了多任务学习,但它仍然依赖于外部的区域建议生成方法如选择性搜索算法,因此整体流程并非完全端到端。
FASTER R-CNN:
引入了区域建议网络(RPN),使得区域建议的生成可以直接在网络内部完成,从而实现了端到端的检测流程。
Faster R-CNN
论文地址Faster R-CNN: Towards Real-Time Object
Detection with Region Proposal Networks
在前面我们已经讲过了,Fast R-CNN在最后并行两个全连接层用于进行softmax分类和bounding-box回归,较大的提升了计算效率但是FAST R-CNN依旧依赖于SS提取候选框(依赖于CPU)并不能像CNN一样使用GPU这种高效的计算,这就导致处理一张图片需要2秒钟。于是FASTER R-CNN提出RPN网络用于提取候选框,将一部分也用GPU运行。这就可以实时检测图片!增加实用性。
从上图我们可以看到FASTER R-CNN的流程图
- 输入一张图片–> 通过CNN提取特征图 --> 通过RPN网络对特征图提取候选框 --> 通过ROI Pooling将候选区域映射到固定大小的特征图 --> 通过全连接层 --> 在最后并行两个全连接层用于进行softmax分类和bounding-box回归。
我们可以看到FASTER R-CNN跟FAST R-CNN的区别就是用RPN网络替换掉了SS直接在特征图上提取候选框。 接下来我们详细介绍一下RPN网络!
RPN网络
RPN网络的工作流程就是
通过(3 * 3)小网络扫描特征图,产生256维的一个低维特征,然后分别喂入分类层(cls layer)和回归层(reg layer)这里解释以下图中为什么是4kcoordinate,2kscores这里4:中心点加上宽和奥就能确定一个矩形框的位置,但是预测出的候选框跟实际框会有差距,这时候就需要判断框中是否含有目标值所以为2kscores。k:anchor。
anchor
当你利用特征图并不是凭空产生候选框的并且凭空产生的候选框也不准确所以会事先定义参考框,最后输出的是每个参考框的偏移量。
我们在特征图中找一个点,就可以在原图中找到对应的一个像素点,以该像素点为中心,画出9个不同大小和长宽比的框,称为anchor 。如下图所示,这些anchor里面可能包含目标,也可能没有目标。因为我们在一张图中想找的的目标的大小和长宽比并不是固定的,所以这里用9个不同大小和长宽比的anchor来进行预测。
本文使用的Anchor的大小和比例是事先预定好的。大小为 ( 12 8 2 , 25 6 2 , 51 2 2 ) (128^2,256^2,512^2) (1282,2562,5122),比例是 ( 1 : 2 , 1 : 1 , 2 : 1 ) ( 这里的指定策略:矮胖的用于检测车,马之类的,瘦高的可以表示人,之类的等等 ) (1:2,1:1,2:1) (这里的指定策略:矮胖的用于检测车,马之类的,瘦高的可以表示人,之类的等等) (1:2,1:1,2:1)(这里的指定策略:矮胖的用于检测车,马之类的,瘦高的可以表示人,之类的等等)。
在之后的YOLO和SSD中是自适应的候选框,提升了检测精度和泛化能力。
Loss Funtion
预测值和实际值的偏差,对于每一个anchor,RPN网络输出的2 4就是预测值那么作者是如何定义anchor的真实值的呢??
将正标签分配给两种anchor:
- 具有最大IOU重叠的anchor
- 具有大于0.7的IOU重叠的anchor
这样就可以保证至少有一个anchor被分配为正标签,
而负标签分配给具有IOU重叠小于0.3的anchor。
总结
参考同济子豪兄
Faster R-CNN最全讲解
CV之DL之FastR-CNN:Fast R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
相关文章:

detection_segmentation
目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION) 文章目录 目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)一. 计算机视觉(AI VISION)1. 图像分类2. 目标检测与定位3. 语义分割和实例分割目标检测算法可以分为两大类: R-CNN生成…...

0基础学python-13:古希腊掌管时间的模块——datetime和time
目录 前言 datetime模块 一、datetime 类 1.创建 datetime 对象 2.获取日期时间的各个部分 3.格式化日期时间为字符串 4.解析字符串为 datetime 对象 二、timedelta 类 1.创建 timedelta 对象 datetime注意事项 time模块 1.获取当前时间戳 2.获取当前时间的结构化表…...

棒球特长生升学具有其独特的优势和劣势·棒球6号位
棒球特长生升学具有其独特的优势和劣势,以下是对这两方面的详细分析: 获得更好的教育资源: 棒球特长生有机会通过棒球特长招生计划进入更好的学校。这些学校往往拥有更优质的教育资源,包括师资力量、教学设施、课程设置等&#…...

搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示
Xsens DOT可穿戴传感器介绍及示例应用演示 搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示...

数据分析案例-2024 年热门动漫数据集可视化分析
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

C#小结:未能找到类型或命名空间名“xxx”(是否缺少 using 指令或程序集引用?)
方案一:移除类库这些失效的引用,下载对应版本的dll(如有则不需要重复下载),重新添加引用 方案二:类库右键属性-调整目标框架版本(一般是降低版本) 方案三:调整类库编译顺…...

STM32智能无人机控制系统教程
目录 引言环境准备智能无人机控制系统基础代码实现:实现智能无人机控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:无人机管理与优化问题解决方案与优化收尾与总结 1. 引言 智能无人机控…...

从 QWebEnginePage 打印文档
QWebEnginePage 是 Qt WebEngine 模块中的一个类,它提供了用于处理网页内容的接口。如果你想要打印 QWebEnginePage 中的内容,你可以使用 QPrinter 和 QPrintDialog 类来实现。 项目配置了 Qt WebEngine 模块,并且在你的.pro文件中包含了相应…...

初识Docker及管理Docker
Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术:Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器(阿里系)搜索镜像获取镜像查看镜像信息…...

【学术会议征稿】2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)
2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024) 2024 3rd International Conference on Informatics,Networking and Computing (ICINC 2024) 2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)将于2024年10月25-27日于中国郑州召…...

在golang中Sprintf和Printf 的区别
最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…...

策略模式原理与C++实现
定义 定义一些列算法,把他们一个个封装起来,并且使他们可以相互替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展、子类化)。 C实现 在不考虑策略模式的情况…...

打包一个自己的Vivado IP核
写在前面 模块复用是逻辑设计人员必须掌握的一个基本功,通过将成熟模块打包成IP核,可实现重复利用,避免重复造轮子,大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核,再分别调用…...

《昇思25天学习打卡营第05天|qingyun201003》
日期 心得 通过本节课的学习,学习到了通过网络获取数据集,处理数据集模型。数据模型层数据变换,模型参数解析和其对应代码中的API进行解析。 昇思MindSpore 基础入门学习 网络构建 (AI 代码解析) 网络构建 神经网络模型是由神经网络层和T…...

【Leetcode】二十一、前缀树 + 词典中最长的单词
文章目录 1、背景2、前缀树Trie3、leetcode208:实现Trie4、leetcode720:词典中最长的单词 1、背景 如上,以浏览器搜索时的自动匹配为例: 如果把所有搜索关键字放一个数组里,则:插入、搜索一个词条时&#x…...

秋招Java后端开发冲刺——Mybatis使用总结
一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目,它封装了 JDBC,使开发者只需要关注 SQL 语句本身,而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO(Plain …...

怎么压缩视频文件?简单的压缩视频方法分享
视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高,文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件,使其既能保持清晰,又能轻松分享?今天,给大家分享五种实用的视频压缩方法,快来…...

【Oracle】Oracle语法之递归查询
目录 递归查询使用场景备注 语法相关属性解释 案例基本使用升级版-带上递归查询的属性 总结: 递归查询 Oracle的递归查询是指在一个查询语句中使用自引用的方式进行循环迭代查询。它可以用于处理具有层次结构的数据,如组织架构、产品类别等。递归查询通…...

【教程】Vue2中使用svg矢量图
1.npm导包 npm i svg-sprite-loader --save2.创建目录放入svg文件,创建SvgIcon.js 3.SvgIcon.js const req require.context(./svg, false, /\.svg$/) const requireAll requireContext > requireContext.keys().map(requireContext) requireAll(req)4.vue.c…...

简约唯美的404HTML源码
源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…...

PDF 转图片并插入到 EXCEL 再转PDF
pom.xml 引用 <dependency><groupId>com.aspose</groupId><artifactId>aspose-cells</artifactId><version>21.11</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>as…...

jmeter之变量随机参数化以及解决多线程不会随机变化
参考链接: https://www.cnblogs.com/Testing1105/p/12743475.html jmeter 使用random函数多线程运行时数据不会随机变化?_jmeter 线程组循环执行时 变量不变-CSDN博客 1、如下图所示,需要对请求参数 autor 和phone进行随机参数化 2、目前有…...

24/7/12总结
axios Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 get请求: <script>function…...

sentinel网关限流配置及使用
sentinel控制台源码:https://download.csdn.net/download/yixin605691235/89543923 sentinel控制台jar包:https://download.csdn.net/download/yixin605691235/89543931 不同环境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、网关限…...

# 如何解决 App Store 审核中的 4.3(a) 问题:Guideline 4.3(a) - Design - Spam
如何解决 App Store 审核中的 4.3(a) 问题:Guideline 4.3(a) - Design - Spam 4.3(a) 审核问题是指:你的应用与其他开发者提交的应用在二进制文件、元数据和/或概念上存在相似之处,仅有微小差别。这通常会导致你的应用被视为垃圾应用而被拒绝…...

最长上升子序列(LIS)
最长上升子序列(最长递增子序列,LIS) 给定长度为 n n n的序列 v v v,求此序列中严格递增(上升)的子序列长度最大值(子序列可由原序列中不连续的元素构成) 朴素DP( O ( n 2 ) O(n^2) O(n2)) 闫氏DP分析法 状态表示: 集合 d p dp dp:所有满足…...

自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection
文章目录 1. 摘要概述2. 背景介绍3. 方法3.1 俯视图投影3.2 网络结构3.2.1 投影变换层3.2.2 投影变换层3.2.3 道路投影预测分支 3.3 车道预测头3.4 训练和真实值关联 4. 实验4.1 合成 3D 车道数据集4.2 真实世界 3D 车道数据集4.3 评估结果4.4 评估图像仅车道检测 5. 总结和讨论…...

手工创建 postgres kamailio 数据库
测试环境如下: postgres server 16: ip 地址为 192.168.31.100,用户 postgres 的密码为 ****** kamailio v5.7.5: ip 地址为 192.168.31.101 1.1. 创建 kamailio 用户和 kamailio 数据库 ssh 登陆 kamailio (192.168.31.101)&a…...

装饰设计模式
装饰设计模式应用在IO流上面可以得到体现 装饰模式指的是在不改变原类, 不使用继承的基础上,动态地扩展一个对象的功能。 原来的inputstream已经可以读取数据了,但是是一个字节一个字节的读取的,为了优化这个我们采用了buffered,…...

Linux 线程初步解析
1.线程概念 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列。在linux中,由于线程和进程都具有id,都需要调度等等相似性,因此都可以用PCB来描述和控制,线程含有PCB&am…...