当前位置: 首页 > news >正文

计算机视觉目标检测-1

文章目录

  • 摘要
  • Abstract
  • 1.目标检测任务描述
    • 1.1 目标检测分类算法
    • 1.2 目标定位的简单实现思路
      • 1.2.1 回归位置
  • 2.R-CNN
    • 2.1 目标检测-Overfeat模型
      • 2.1.1 滑动窗口
    • 2.2 目标检测-RCNN模型
      • 2.2.1 非极大抑制(NMS)
    • 2.3 目标检测评价指标
  • 3.SPPNet
    • 3.1 spatial pyramid pooling
  • 4.总结
  • 5.参考文献

摘要

目标检测是计算机视觉领域的重要任务,旨在精确识别图像中的物体及其位置。传统方法如滑动窗口和Overfeat通过暴力穷举实现目标检测,但计算资源需求较高且准确率有限。RCNN创新性地引入候选区域方法,通过Selective Search生成候选区域,并结合CNN特征提取、SVM分类和边界框回归,实现更高的检测精度。然而,RCNN存在多阶段训练复杂、计算效率低等问题。SPPNet对RCNN进行了改进,提出空间金字塔池化(SPP)层,减少了特征冗余并共享CNN计算结果,大幅提升了训练速度。尽管SPPNet提高了效率,但其分阶段训练的缺陷仍限制了实用性。本周学习了目标检测算法的发展过程,包括目标定位、候选区域生成、分类及评价指标,分析了RCNN和SPPNet的核心技术及其优势与不足。

Abstract

Object detection is an important task in the field of computer vision, which aims to accurately identify objects and their positions in images. Traditional methods such as sliding window and Overfeat achieve object detection through brute force exhaustion, but the computational resources are high and the accuracy is limited. RCNN innovatively introduces candidate region method, generates candidate region by Selective Search, and combines CNN feature extraction, SVM classification and boundary box regression to achieve higher detection accuracy. However, RCNN has the problems of complex multi-stage training and low computational efficiency. SPPNet improves RCNN by proposing a space pyramid pool (SPP) layer, which reduces feature redundancy and shares CNN calculation results, greatly improving the training speed. Although SPPNet improves efficiency, its phased training limitations limit its usefulness. This week, we learned the development process of target detection algorithm, including target location, candidate region generation, classification and evaluation index, and analyzed the core technologies of RCNN and SPPNet and their advantages and disadvantages.

1.目标检测任务描述

1.1 目标检测分类算法

两步走的目标检测
1. 先找出一些候选区域
2. 对区域进行调整、分类
端到端的目标检测
1. 采用一个网络一步到位
2. 输入图片,输出又哪些物体,物体在什么位置
物体位置:
1. x,y,w,h[bounding box]:(x,y)为物体的中心位置,以及中心点距离物体两边的长宽;
2. xmin、ymin、xmax、ymax :物体位置的左上角、右下角坐标

1.2 目标定位的简单实现思路

在分类直接输出各个类别的概率,如果在加上定位,可以考虑在网络的最后输出加上位置信息。

1.2.1 回归位置

增加一个全连接层,FC1、FC2
FC1:作为类别的输出
FC2:作为这个物体位置数值的输出
在这里插入图片描述
右上角的全连接层是对物体进行分类(衡量整个网路的损失可以使用交叉熵损失函数进行训练);右下角为位置输出(与真实标签进行对比,衡量网络可以使用均方误差损失)

2.R-CNN

对于多个目标的情况,不能使用固定个数输出物体的位置。

2.1 目标检测-Overfeat模型

2.1.1 滑动窗口

首先定义k个大小窗口,每个窗口滑动提取m个,总共提取k*m张图片,通常会直接将图片变形转换为固定大小的图片,变形图像块被输入cnn分类器中,提取特征后,使用一些分类器识别类别和该边界框的另一个线性回归器。
在这里插入图片描述
Overfeat总结:这种方法类似一种暴力穷举的方式,会消耗大量的计算资源,窗口大小的设置可能会造成不准确。但是提供了一种解决目标检测问题的思路。

2.2 目标检测-RCNN模型

不使用暴力方法,使用候选区域方法,创建目标检测的区域,为图像领域实现物体检测模型提供了思路。
RCNN在物体检测中的步骤:

  1. 使用SelectiveSearch在一张图片上提取2000个候选区域(长宽不固定)
  2. 对2000个候选区域做候选区变换,输入cnn网络中,得到特征向量[2000,4096]
  3. 经过20个类被的SVM分类器,对2000个候选区域做判断,得到[2000,20]得分矩阵
  4. 对2000个候选区域做非极大值抑制,剩下一些得分高,结果好的框
  5. 修正候选框,对bbox做回归微调

下面是R-CNN选用SVM进行二分类。假设检测20个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样就能的出2000*20的得分矩阵
在这里插入图片描述
ss方法代码实现:

def selective_search(im_orig, scale=1.0, sigma=0.8, min_size=50):"""选择性搜索生成候选区域:param im_orig: 输入3通道图像:param scale: 分割参数, 数值越小, 分割越精细:param sigma: 分割图像前对图像进行高斯平滑的参数:param min_size: 分割的最小单元, 一般设置10-100间:return: img-带有区域标签的图像(r, g, b, region), regions-字典{”rect“:(left, top, width, height), "labels":[...]}"""assert im_orig.shape[2] == 3, "3ch image is expected"# 加载图像获取最小分割区域# 区域标签存储在每个像素的第四个通道 [r, g, b, region]img = _generate_segments(im_orig, scale, sigma, min_size)if img is None:return None, {}imsize = img.shape[0] * img.shape[1]R = _extract_regions(img)# 获取相邻区域对neighbours = _extract_neighbours(R)# 计算初始相似度S = {}for (ai, ar), (bi, br) in neighbours:S[(ai, bi)] = _calc_sim(ar, br, imsize)# 进行层次搜索, 直到没有新的相似度可以计算while S != {}:# 获取两最大相似度区域的下标(i, j)i, j = sorted(list(S.items()), key=lambda a: a[1])[-1][0]# 将最大相似度区域合并为一个新的区域rtt = max(R.keys()) + 1.0R[t] = _merge_regions(R[i], R[j])# 标记相似度集合中与(i, j)相关的区域, 并将其移除key_to_delete = []for k, v in S.items():if (i in k) or (j in k):key_to_delete.append(k)# 移除相关区域for k in key_to_delete:del S[k]# 计算与新区域rt与相邻区域的相似度并添加到集合S中for k in filter(lambda a: a != (i, j), key_to_delete):n = k[1] if k[0] in (i, j) else k[0]S[(t, n)] = _calc_sim(R[t], R[n], imsize)regions = []for k, r in R.items():regions.append({'rect': (r['min_x'], r['min_y'], r['max_x'] - r['min_x'], r['max_y'] - r['min_y']),'size': r['size'],'labels': r['labels']})return img, regions

ss方法生成的推荐区域示例:
在这里插入图片描述

2.2.1 非极大抑制(NMS)

对于2000个候选框,对于上面提到的20个物体值保留一个最优的框,同时抑制哪些冗余的候选框。RCNN预测2000个候选框,得到k个(假设有k个ground truth)比较准确的候选框。
迭代过程:
对于2000个候选区域得分进行概率筛选,小于0.5的全部丢弃。
对于剩余的框,假设图片真实物体个数为2(n),筛选之后候选框为5(p),计算n中每个物体位置与所有p的交并比IoU,得到p中每个候选框对应IoU最高的一个。如下图,A,C候选框对应左边车辆,B,D,E对应右边车辆。
在这里插入图片描述
NMS实现:

import numpy as np
import torchdef nms_cpu(dets, thresh):#dets(detections)就是矩形目标框(候选),大概有一两万个,thresh=0.7阈值dets = dets.numpy()x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]#取出矩形左上角和右下角的坐标scores = dets[:, 4]#第五个维度存放每个矩形的分值areas = (x2 - x1 + 1) * (y2 - y1 + 1)#每个矩形的面积order = scores.argsort()[::-1]#降序排列,分值高的在前面。#argsort,排序得到的是下标,并没有把原数据排序keep = []#保存需要留下来的目标框的下标while order.size > 0:i = order.item(0)#取x第一个下标keep.append(i)#第一个下标总归会保留下来xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])w = np.maximum(0.0, xx2 - xx1 + 1)h = np.maximum(0.0, yy2 - yy1 + 1)inter = w * hovr = inter / (areas[i] + areas[order[1:]] - inter)#计算第一个候选框与后面所有候选框的IOUinds = np.where(ovr <= thresh)[0]#小于阈值的order的下标-1;两个注意点:第一,order的下标,不是dets的下标,第二,比order的下标少1#把大于阈值的候选框过滤出去,小于或等于阈值的留下来#inds 是下标order的下标,即order存的是dets的下标#np.where返回的是一个tuple,因此需要加[0]取出第一个元素,该元素就是一个下标数组#比如order=[0,10,12,33,965,7000,900],len(order)=7#比如inds=[1,2,5],因为len(order[1:])=6,所以inds的值最多是5,order的下标最多是6order = order[inds + 1]#把下标少1加回来,并取出下一轮的order值#inds+1=[2,3,6]#因为计算IOU时,x1[order[1:]],即不计算自己与自己的IOU,#所以下标与order对应的下标刚好少1,即len(inds)<=len(order)-1,因此需要inds+1才刚好从order中取出下标#此时order=[12,33,900],进入下一个循环return torch.IntTensor(keep)

为了使候选框更加准确,需要去修正原来的位置,R-CNN提供了一个方法,建立bbox regressor,回归用于修正筛选后的候选区域,使其回归ground-truth,默认认为这两个框之间为线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了。
在这里插入图片描述
上述也就是去训练学习参数的过程。

2.3 目标检测评价指标

  1. IoU(交并比):两个区域的重叠程度overlap,候选区域和标定区域的IoU值
    通常类别正确且IoU>0.5,IoU越接近1则表示候选框越精确。
    在这里插入图片描述
  2. 平均精确率
    对于IoU只是知道重叠程度并不知道分类的性能情况。引入平均精确率,多个分类任务的AP的平均值
    对于每个类别计算AP(AUC)的值
    1.对于猫类别:候选框预测是猫类别的概率做一个排序(大于0.7表示为正样本否则表示为负样本),得到候选框排序列表
    2.对于猫当中候选框排序列表进行计算AUC值
    3.最终得到k(20)个类别,20个AP相加

总结:表现在VOC2007数据集上的平均精度map达到66%。
缺点:
1.训练阶段多:步骤繁琐(微调网络+训练SVM+训练边框回归器)
2.训练耗时:占用磁盘空间大(VOC数据集的检测结果,由于SVM的存在)
3.处理速度慢:使用GPU,VGG模型处理一张图片需要47s
4.图片形状变化:候选区域经过crop/warp进行固定大小,无法保证图片不变形

3.SPPNet

相对于RCNN主要存在两点改进的地方,提出了SPP层。

  1. 图片输入到网络先得到一个feature map
  2. 原图中通过选择搜索得到的候选区域直接映射feature map中对应位置
  3. 映射过来额候选区域的特征经过SPP层,输出固定大小的特征向量。

3.1 spatial pyramid pooling

通过spp层将特征图转换成固定大小的特征向量
示例:
假设原图输入时224*224,对于conv出来后的输出为13 * 13 * 256,其中某个映射的候选区域假设为:12 * 10 * 256

  1. spp层将每一个候选区域分为1 * 1,2 * 2 ,4 * 4 三张子图,对每个子图的每个区域做max pooling,得出特征在连接到一起(16+4+1) * 256=5376,接着给全连接层做进一步处理
  2. Spatial bins(空间盒个数):21

在这里插入图片描述
总结

  1. 优点:SPPNet在R-CNN的基础上提出了改进,通过候选区域和feature map的映射,配合SPP层的使用,从而达到了CNN层的共享计算,减少了运算时间,后面的Fast R-CNN受SPPNet的启发
  2. 缺点:训练仍然很慢,效率低,特征需要写入磁盘(SVM的存在)
    分阶段训练网络:选取候选区域,训练CNN,训练SVM,训练bbox回归器,SPPNet反向传播效率低

4.总结

目标检测算法从早期的暴力穷举逐步发展到基于深度学习的高效框架,如RCNN和SPPNet。RCNN通过候选区域和CNN结合,大幅提高了检测精度,但其多阶段训练过程复杂,耗时且占用大量磁盘空间。SPPNet的出现利用SPP层实现CNN层共享,显著提升了训练效率,启发了后续的Fast R-CNN等方法。然而,SPPNet仍需多阶段训练,效率提升有限。

5.参考文献

[1] R. Girshick, J. Donahue, T. Darrell, and J. Malik, “Rich feature hierarchies for accurate object detection and semantic segmentation,” 2014 IEEE Conference on Computer Vision and Pattern Recognition, Columbus, OH, USA, 2014, pp. 580-587, doi: 10.1109/CVPR.2014.81
[2] K. He, X. Zhang, S. Ren, and J. Sun, “Spatial pyramid pooling in deep convolutional networks for visual recognition,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 37, no. 9, pp. 1904-1916, Sep. 2015, doi: 10.1109/TPAMI.2015.2389824

相关文章:

计算机视觉目标检测-1

文章目录 摘要Abstract1.目标检测任务描述1.1 目标检测分类算法1.2 目标定位的简单实现思路1.2.1 回归位置 2.R-CNN2.1 目标检测-Overfeat模型2.1.1 滑动窗口 2.2 目标检测-RCNN模型2.2.1 非极大抑制&#xff08;NMS&#xff09; 2.3 目标检测评价指标 3.SPPNet3.1 spatial pyr…...

2024最新鸿蒙开发面试题合集(一)-HarmonyOS NEXT Release(API 12 Release)

1. HarmonyOS应用打包后的文件扩展名是? 打包后的文件扩展名为.hap&#xff08;HarmonyOS Ability Package&#xff09;&#xff0c;这是HarmonyOS应用的标准包格式 2. 页面和自定义组件生命周期有哪些? 页面和自定义组件生命周期说明 有Entry装饰器的component组件的生命…...

HarmonyOS NEXT 实战之元服务:静态案例效果--航空出行

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …...

详解 Python 中的json.loads和json.dumps方法:中英双语

中文版 详解 Python 中的 json.loads 和 json.dumps 方法 在 Python 的标准库中&#xff0c;json 模块用于处理 JSON 数据格式。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛用于前后端交互以及数据存储。json.loads …...

成方金融科技后端部分笔试题 - 解析

单选题 1.以下关于JAVA自动类型转换&#xff0c;描述错误的是哪一项?(B) A.byte->short B.char->short C.char->int D.float->double 2.请选择运行以下代码后&#xff0c;系统显示的内容什么?(B) public class Test {static {int x1;}static int x,y;publ…...

互联网视频云平台EasyDSS无人机推流直播技术如何助力野生动植物保护工作?

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;无人机技术已经广泛应用于各个领域&#xff0c;为我们的生活带来了诸多便利。而在动植物保护工作中&#xff0c;无人机的应用更是为这一领域注入了新的活力。EasyDSS&#xff0c;作为一款集视频处理、分发、存储于一体的综…...

Vue3 中使用axios

1.安装axios、js-cookie、pinia axios命令行&#xff1a; npm install axios js-cookie命令行&#xff1a; npm install js-cookie store命令行&#xff1a; npm install pinia 2.配置文件 (1)缓存文件配置 src/plugins/auth.js const sessionCache {set (key, valu…...

【JAVA高级篇教学】第五篇:OpenFeign 微服务调用注意事项

在微服务架构中&#xff0c;OpenFeign 是一种常用的 HTTP 客户端工具&#xff0c;用于实现服务之间的调用。它提供了声明式的接口调用方式&#xff0c;大幅简化了开发工作。然而&#xff0c;在实际使用中&#xff0c;需要注意一些细节&#xff0c;尤其是在处理 GET、POST 请求和…...

Llama 3 简介(一)

目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练&#xff08;Over-training&#xff09; 3. 计算训练预算 4. 如何逐步估算和确定最优模型&#xff1f; 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…...

路由器做WPAD、VPN、透明代理中之间一个

本文章将采用家中TP-Link路由器 路由器进行配置DNS DNS理解知识本文DNS描述参考&#xff1a;网络安全基础知识&中间件简单介绍_计算机网络中间件-CSDN博客 TP LINK未知的错误&#xff0c;错误编号&#xff1a;-22025 TP-LINK 认证界面地址&#xff1a;https://realnam…...

Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总

问题1&#xff1a;打包的过程中不断提示 &#xff1a;codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决&#xff1a;打开钥匙串&#xff0c;点击证书---显示简介---信任----改为始终信任 &#xff08;记住 &#xff1a;不能只修改钥匙的显示简介的…...

【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹

代码 [MenuItem("Assets/Open Explorer/PersistentDataPath")]public static void OpenPersistentDataPath(){Application.OpenURL(Application.persistentDataPath);}[MenuItem("Assets/Open Explorer/DataPath")]public static void OpenDataPath(){Appl…...

shardingsphere分库分表项目实践1-让shardingsphere运行起来

学习新技术最快的方式就是&#xff1a; 1. 先找一个比较完善的demo跑起来 2. 弄清楚用法&#xff1a;配置、原理、使用场景 3. 移植到自己项目上&#xff0c;按照自己需求进行修改优化。 找demo项目的方法&#xff1a;优先去官方git库找&#xff0c;如果没有或者过于简单那么…...

Java预加载

预加载&#xff08;Preload&#xff09;是一种在程序运行之前预先加载所需资源或对象的优化技术&#xff0c;旨在提高程序的性能和响应速度。以下是对预加载的详细解释&#xff1a; 一、预加载的定义 预加载是指在程序实际运行之前&#xff0c;将预计会频繁使用的资源&#x…...

Vue3之状态管理Vuex

Vuex作为Vue.js的官方状态管理库&#xff0c;在大型或复杂的前端项目中扮演着至关重要的角色。本文将从Vuex的原理、特点、应用场景等多个方面进行深入解析&#xff0c;并通过代码示例展示如何在Vuex中实现特定功能。 一、Vuex原理 Vuex是一个专为Vue.js应用程序开发的状态管…...

优化 invite_codes 表的 SQL 创建语句

-- auto-generated definition create table invite_codes (id int auto_incrementprimary key,invite_code varchar(6) not null comment 邀请码&#xff0c;6位整数&#xff0c;确保在有效期内…...

ctfhub disable_functions关卡

1.CTFHub Bypass disable_function —— LD_PRELOAD 2.CTFHub Bypass disable_function —— ShellShock 3.CTFHub Bypass disable_function —— Apache Mod CGI 4.CTFHub Bypass disable_function —— 攻击PHP-FPM 5.CTFHub Bypass disable_function —— GC UAF 6.CTFHub B…...

Pikachu 漏洞练习平台 XXE漏洞学习记录

懒得自己搭建的可以直接FOFA找别人的靶场玩 FOFA "Pikachu 漏洞练习平台" 开始 随便输入个包含命名实体&#xff08;内部实体&#xff09;的xml数据&#xff08;以下代码中xxe是命名实体的实体名称&#xff09;&#xff1a; <?xml version"1.0"?>…...

机器学习基础 衡量模型性能指标

目录 1 前言 ​编辑1.1 错误率(Error rate)&精度(Accuracy)&误差(Error)&#xff1a; 1.2 过拟合(overfitting): 训练误差小&#xff0c;测试误差大 1.3 欠拟合(underfitting)&#xff1a;训练误差大&#xff0c;测试误差大 1.4 MSE: 1.5 RMSE: 1.6 MAE: 1.7 R-S…...

C#—内建接口: IEnumerable与IEnumerator接口详解

IEnumerable接口 在C#中&#xff0c;IEnumerable 是一个泛型接口&#xff0c;它表示一个可以通过 IEnumerator 迭代器进行迭代枚举的集合。这个接口是非常基础且重要的&#xff0c;因为它允许开发者以一致的方式遍历任何实现了该接口的集合&#xff0c;无论是数组、列表、自定…...

java日志框架:slf4j、jul(java.util.logging)、 log4j、 logback

SLF4J--抽象接口 SLF4J (Simple Logging Facade for Java) 是一个为各种 Java 日志框架提供简单统一接口的库。它的主要目的是将应用程序代码与具体的日志实现解耦&#xff0c;使得在不修改应用程序代码的情况下&#xff0c;可以轻松地切换不同的日志框架。 jul-to-slft4j.ja…...

SpringBoot 事务

事务是一组操作的集合, 是一个不可分割的操作.会把所有的操作作为一个整体, 一起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败. 为什么需要事务? 我们在进行程序开发时, 也会有事务的需求. 比如转账操作: 第一步&#xff1a;A 账户 -100 元. …...

airflow docker 安装

mkdir -p /root/airflow cd /root/airflow && mkdir -p ./dags ./logs ./plugins ./configcd /root/airflow/ wget https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml nano docker-compose.yamlAIRFLOW__CORE__LOAD_EXAMPLES: false #初始化…...

如何用gpt来分析链接里面的内容(比如分析论文链接)和分析包含多个文件中的一块代码

如何用gpt来分析链接里面的内容&#xff0c;方法如下 这里使用gpt4里面有一个网路的功能 点击搜索框下面这个地球的形状即可启动搜索网页模式 然后即可提出问题在搜索框里&#xff1a;发现正确识别和分析了链接里面的内容 链接如下&#xff1a;https://arxiv.org/pdf/2009.1…...

linux 常用 Linux 命令指南

常用 Linux 命令指南 以下是一些常用的 Linux 命令,分类并附带简单说明,适合日常操作和快速参考。 1. 文件与目录操作 ls: 列出当前目录下的文件和子目录ls -l # 显示详细信息 ls -a # 显示隐藏文件cd: 切换目录cd /path/to/directorypwd: 显示当前工作目录pwdmkdir: 创…...

《战神:诸神黄昏》游戏运行时提示找不到emp.dll怎么办?emp.dll丢失如何修复?

《战神&#xff1a;诸神黄昏》游戏运行时提示找不到emp.dll怎么办&#xff1f;emp.dll丢失的修复方法 在畅游《战神&#xff1a;诸神黄昏》这款史诗级游戏的过程中&#xff0c;如果突然遭遇“找不到emp.dll”的错误提示&#xff0c;无疑会打断你的冒险之旅。作为一名深耕软件开…...

PHP中替换某个包或某个类

在使用composer组件时&#xff0c;有时候需要对包进行一些自定义修改&#xff0c;有一些教程中写需要修改composer.json&#xff0c;然后发布到Packagist&#xff0c;但如果只是适应自己需求所作的小修改&#xff0c;其实并没有必要发布到Packagist&#xff0c;而这样做也是Pac…...

亚信安全春节14天双倍假期通告

亚信安全14天双倍假期来袭 “网安福利王”再次实至名归 2024年 8773小时&#xff0c;31582680秒 亚信安全一直驰骋于云网安世界 奋战在“安全 数智化”的壮阔征途上 如今&#xff0c;新春的脚步渐近 长达14天的春节长假 能让我们暂且放下忙碌的工作 去除班味&#xff0c…...

kubernetes存储架构之PV controller源码解读

​ kubernetes存储之PV controller源码解读 摘要 本文介绍kubernetes存储架构的基础&#xff0c;并重点对PV controller的源码进行了学习 引入 从一个业务场景出发&#xff0c;假如你所在的公司&#xff0c;有个物理机&#xff0c;上面部署了web服务器&#xff0c;随着业务…...

Kubernates

kubernates是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应用部署&#xff0c;规划&#xff0c;更新&#xff0c;维护的一种机制。 架构…...

1.使用 Couchbase 数仓和 Temporal(一个分布式任务调度和编排框架)实现每 5 分钟的增量任务

在使用 Couchbase 数仓和 Temporal&#xff08;一个分布式任务调度和编排框架&#xff09;实现每 5 分钟的增量任务时&#xff0c;可以按照以下步骤实现&#xff0c;同时需要注意关键点。 实现方案 1. 数据层设计&#xff08;Couchbase 增量存储与标记&#xff09; 在 Couchb…...

设计模式的主要分类是什么?请简要介绍每个分类的特点。

大家好&#xff0c;我是锋哥。今天分享关于【设计模式的主要分类是什么&#xff1f;请简要介绍每个分类的特点。】面试题。希望对大家有帮助&#xff1b; 设计模式的主要分类是什么&#xff1f;请简要介绍每个分类的特点。 1000道 互联网大厂Java工程师 精选面试题-Java资源分…...

Webpack学习笔记(5)

1.拆分开发环境和生产环境配置 很多配置在开发环境和生产环境存在不一致的情况&#xff0c;比如开发环境没有必要设置缓存&#xff0c;生产环境需要设置公共路径等等。 2.公共路径 使用publicPath配置项&#xff0c;可以通过它指定应用程序中所有资源的基础路径。 webpack.…...

Unity 6 中的新增功能

Unity 6 是 Unity 的最新版本。 一、编辑器和工作流程 Unity 6 中引入的更改 在 Linux 上实现了将文件和资源从 Unity 拖放到外部应用程序的功能。将 Asset Manager for Unity 包添加到 Package Manager > Services > Content Management 部分中。此包允许用户轻松浏览…...

【前端 Uniapp】使用Vant打造Uniapp项目(避坑版)

一、基本介绍 Uniapp 是基于 Vue.js 的开发框架&#xff0c;通过一套代码可以同时发布到多个平台的应用框架。而 Vant 是针对移动端 Vue.js 的组件库。通过这样的组合&#xff0c;我们可以快速构建出一个跨平台的移动应用。Vant 已经支持多种小程序和 H5 平台&#xff0c;也对…...

JVM 详解

一. JVM 内存区域的划分 1. 程序计数器 程序计数器是JVM中一块比较小的空间, 它保存下一条要执行的指令的地址. [注]: 与CPU的程序计数器不同, 这里的下一条指令不是二进制的机器语言, 而是Java字节码. 2. 栈 保存方法中的局部变量, 方法的形参, 方法之间的调用关系. 栈又…...

代码加入SFTP JAVA ---(小白篇3)

在 Java 中&#xff0c;您可以使用 JSch&#xff08;Java Secure Channel&#xff09;库 来连接和操作 SFTP 服务器。以下是一个完整的示例代码&#xff0c;展示如何使用 Java 接入 SFTP 服务器并上传文件。 1.服务器上加入SFTP------(小白篇 1) 2.加入SFTP 用户------(小白篇…...

机器人C++开源库The Robotics Library (RL)使用手册(一)

强大的、完整的C机器人开源库 1、是否可以免费商用&#xff1f;2、支持什么平台&#xff1f;3、下载地址4、开始&#xff01; 1、是否可以免费商用&#xff1f; Robotics Library&#xff08;RL&#xff09;是一个独立的C库&#xff0c;用于机器人运动学、运动规划和控制。它涵…...

Linux高级--2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

HTML 画布:创意与技术的融合

HTML 画布:创意与技术的融合 HTML 画布(<canvas>)元素是现代网页设计中的一个强大工具,它为开发者提供了一个空白画布,可以在上面通过JavaScript绘制图形、图像和动画。这种技术不仅为网页增添了视觉吸引力,还极大地丰富了用户的交互体验。本文将深入探讨HTML画布…...

python EEGPT报错:Cannot cast ufunc ‘clip‘ output from dtype(‘float64‘)

今天在运行EEGPT的时候遇见了下面的问题&#xff0c;首先是nme报错&#xff0c;然后引起了numpy的报错&#xff1a; numpy.core._exceptions._UFuncOutputCastingError: Cannot cast ufunc clip output from dtype(float64)在网上找了好久的教程&#xff0c;但是没有找到。猜测…...

揭秘区块链隐私黑科技:零知识证明如何改变未来

文章目录 1. 引言&#xff1a;什么是零知识证明&#xff1f;2. 零知识证明的核心概念与三大属性2.1 完备性&#xff08;Completeness&#xff09;2.2 可靠性&#xff08;Soundness&#xff09;2.3 零知识性&#xff08;Zero-Knowledge&#xff09; 3. 零知识证明的工作原理4. 零…...

mysql之MHA

MHA 1.概述 MHA&#xff08;Master High Availability&#xff09;是一种用于MySQL数据库的高可用性解决方案&#xff0c;旨在实现自动故障切换和最小化数据丢失。它由MHA Manager和MHA Node组成&#xff0c;适用于一主多从的架构。 是建立在主从复制基础之上的故障切换的软件…...

《XML》教案 第2章 使第4章 呈现XML文档

《XML》教案 第2章 使第4章 呈现XML文档 主讲人&#xff1a; 回顾上一章: [10分钟] 2 课程知识点讲解&#xff1a; 2 通过级联样式表转换XML文档&#xff1a;[15分钟] 3 通过可扩展样式表语言转换XML文档 &#xff1a;[5分钟] 4 嵌套 for 循环 &#xff1a;[20分钟] 5 本章总结…...

Centos7离线安装Docker脚本

1、文件结构 docker_install/ ├── docker-27.4.1.tgz ├── docker-compose-linux-x86_64 └── docker_install.sh 2、下载docker安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-27.4.1.tgz 3、下载docker-compose wget https://githu…...

Linux -- 互斥的底层实现

lock 和 unlock 的汇编伪代码如下&#xff1a; lock:movb $0,%alxchgb %al,mutexif(al 寄存器的内容>0)return 0;else挂起等待&#xff1b;goto lock;unlock:movb $1,mutex唤醒等待 mutex 的线程&#xff1b;return 0; 我们来理解以下上面的代码。 首先线程 1 申请锁&…...

hhdb客户端介绍(57)

技术选型 选择 MySQL 数据库的原因 开源免费&#xff1a; MySQL 作为一款开源数据库&#xff0c;不仅免费提供给用户&#xff0c;还具备强大的功能和灵活性&#xff0c;有效降低了企业的软件许可成本。 卓越的性能&#xff1a; 在处理大规模数据集和高并发访问时&#xff0c;…...

elasticsearch 杂记

8.17快速安装与使用 系统&#xff1a;ubuntu 24 下载地址&#xff1a; https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-linux-x86_64.tar.gz 解压后进入目录&#xff1a;cd ./elasticsearch-8.17.0 运行&#xff1a;./bin/elasticsearch 创…...

大功率LED基础学习笔记

大功率 LED 基础学习笔记 一、 LED发光原理 &#xff08;1&#xff09;传统白炽灯发光原理 大家从小听说爱迪生发明&#xff08;改良&#xff09;电灯&#xff0c;其白炽灯工作原理为&#xff1a;灯丝通电加热到白炽状态&#xff0c;利用热辐射发出可见光的电光源。由于发光…...

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…...