目标检测 | yolov2/yolo9000 原理和介绍

news2025/1/25 4:32:18

前言:目标检测 | yolov1 原理和介绍

简介

论文链接:https://arxiv.org/abs/1612.08242
时间:2016年
作者:Joseph Redmon
 作者首先在YOLOv1的基础上提出了改进的YOLOv2,然后提出了一种检测与分类联合训练方法,使用这种联合训练方法在COCO检测数据集和ImageNet分类数据集上训练出了YOLO9000模型,其可以检测超过9000多类物体。所以,这篇文章其实包含两个模型:YOLOv2和YOLO9000,不过后者是在前者基础上提出的,两者模型主体结构是一致的。YOLOv2相比YOLOv1做了很多方面的改进,这也使得YOLOv2的mAP有显著的提升,并且YOLOv2的速度依然很快,保持着自己作为one-stage方法的优势.

改进策略

 YOLOv1虽然检测速度很快,但是在检测精度上却不如R-CNN系检测方法,YOLOv1在物体定位方面(localization)不够准确,并且召回率(recall)较低。YOLOv2共提出了几种改进策略来提升YOLO模型的定位准确度和召回率,从而提高mAP,YOLOv2在改进中遵循一个原则:保持检测速度,这也是YOLO模型的一大优势。YOLOv2的改进策略如图所示,可以看出,大部分的改进方法都可以比较显著提升模型的mAP。
在这里插入图片描述

  • Batch Normalization
     Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用droput。使用Batch Normalization后,YOLOv2的mAP提升了 2.4 % 2.4\% 2.4%

解释:BN层是把神经元的输出减去均值除以标准差,变成以0为均值,标准差为1得分布。
强行把神经元输出集合在0附近原因是:一些激活函数比如sigmod激活函数或者双曲正切激活函数在0附近是非饱和区,如果输出太大或者太小,会陷入激活函数的饱和区,意味着梯度消失,会难以训练。经过BN之后,原本很分散的数据都集中到了0得附近,对于双曲正切函数来说在0附近有较大得梯度。经过BN层之后,双峰的图像数据在中间也有较好的体现,可以更好地保留原始数据。
CNN在训练过程中网络每层输入的分布一直在改变, 会使训练过程难度加大,对网络的每一层的输入(每个卷积层后)都做了归一化,这样网络就不需要每层都去学数据的分布,收敛会更快。

  • High Resolution Classifier 高分辨率分类器
     目前大部分的检测模型都会在先在ImageNet分类数据集上预训练模型的主体部分(CNN特征提取器),由于历史原因,ImageNet分类模型基本采用大小为 224 × 224 224 \times 224 224×224的图片作为输入,分辨率相对较低,不利于检测模型。所以YOLOv1在采用 224 × 224 224 \times 224 224×224 分类模型预训练后,将分辨率增加至 448 × 448 448\times 448 448×448,并使用这个高分辨率在检测数据集上finetune。但是直接切换分辨率,检测模型可能难以快速适应高分辨率。所以YOLOv2增加了在ImageNet数据集上使用 448 × 448 448\times 448 448×448输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约 4 % 4\% 4%

  • Convolutional With Anchor Boxes 带锚框的卷积
     在YOLOv1中,输入图片最终被划分为 7 × 7 7 \times 7 7×7 网格,每个单元格预测2个边界框。YOLOv1最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度和长宽比(scales and ratios)的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。YOLOv2借鉴了Faster R-CNN中RPN网络的先验框(anchor boxes,prior boxes,SSD也采用了先验框)策略。RPN对CNN特征提取器得到的特征图(feature map)进行卷积来预测每个位置的边界框以及置信度(是否含有物体),并且各个位置设置不同尺度和比例的先验框,所以RPN预测的是边界框相对于先验框的offsets值(其实是transform值,详细见Faster R_CNN论文),采用先验框使得模型更容易学习。所以YOLOv2移除了YOLOv1中的全连接层而采用了卷积和anchor boxes来预测边界框。为了使检测所用的特征图分辨率更高,移除其中的一个pool层。在检测模型中,YOLOv2不是采用 448 × 448 448 \times 448 448×448 图片作为输入,而是采用 416 × 416 416 \times 416 416×416 大小。因为YOLOv2模型下采样的总步长为 32 32 32 ,对于 416 × 416 416 \times 416 416×416 大小的图片,最终得到的特征图大小为 13 × 13 13\times 13 13×13,维度是奇数,这样特征图恰好只有一个中心位置。对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证最终的特征图有奇数个位置。对于YOLOv1,每个cell都预测 2 2 2个boxes,每个boxes包含 5 5 5个值: ( x , y , w , h , c ) (x,y,w,h,c) (x,y,w,h,c),前 4 4 4个值是边界框位置与大小,最后一个值是置信度(confidence scores,包含两部分:含有物体的概率以及预测框与ground truth的IOU)。但是每个cell只预测一套分类概率值(class predictions,其实是置信度下的条件概率值),供 2 2 2个boxes共享。YOLOv2使用了anchor boxes之后,每个位置的各个anchor box都单独预测一套分类概率值,这和SSD比较类似(但SSD没有预测置信度,而是把background作为一个类别来处理)。
     使用anchor boxes之后,YOLOv2的mAP有稍微下降(这里下降的原因,我猜想是YOLOv2虽然使用了anchor boxes,但是依然采用YOLOv1的训练方法)。YOLOv1只能预测 98 98 98个边界框( 7 × 7 × 2 7 \times 7 \times 2 7×7×2),而YOLOv2使用anchor boxes之后可以预测上千个边界框( 13 × 13 13 \times 13 13×13anchors_num )。所以使用anchor boxes之后,YOLOv2的召回率大大提升,由原来的 81 % 81\% 81%升至 88 % 88\% 88%

  • Dimension Clusters 维度集群
     在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析。因为设置先验框的主要目的是为了使得预测框与ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:
    d (  box  ,  centroid  ) = 1 − IOU ⁡ (  box  ,  centroid  ) d(\text { box }, \text { centroid })=1-\operatorname{IOU}(\text { box }, \text { centroid }) d( box , centroid )=1IOU( box , centroid )

  • New Network: Darknet-19
     YOLOv2采用了一个新的基础模型(特征提取器),称为Darknet-19,包括 19 19 19个卷积层和 5 5 5个maxpooling层。Darknet-19与VGG16模型设计原则是一致的,主要采用 3 × 3 3 \times 3 3×3 卷积,采用 2 × 2 2 \times 2 2×2 的maxpooling层之后,特征图维度降低2倍,而同时将特征图的channles增加两倍。与NIN(Network in Network)类似,Darknet-19最终采用global avgpooling做预测,并且在 3 × 3 3 \times 3 3×3 卷积之间使用 1 × 1 1 \times 1 1×1 卷积来压缩特征图channles以降低模型计算量和参数。Darknet-19每个卷积层后面同样使用了batch norm层以加快收敛速度,降低模型过拟合。在ImageNet分类数据集上,Darknet-19的top-1准确度为 72.9 % 72.9\% 72.9%,top-5准确度为 91.2 % 91.2\% 91.2%,但是模型参数相对小一些。使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约 33 % 33\% 33%
    darknet-19模型结构

  • Direct location prediction 直接位置预测
     YOLOv2边界框的解码过程修改。约束了边界框的位置预测值使得模型更容易稳定训练,结合聚类分析得到先验框与这种预测方法,YOLOv2的mAP值提升了约 5 % 5\% 5%
    预测边界框中心点相对于对应cell左上角位置的相对偏移值。将网格归一化为 1 × 1 1 \times 1 1×1,坐标控制在每个网格内,同时配合sigmod函数将预测值转换到 0 ∼ 1 0\sim1 01之间的办法,做到每一个Anchor只负责检测周围正负一个单位以内的目标box。

 YOLOv2借鉴RPN网络使用anchor boxes来预测边界框相对先验框的offsets。边界框的实际中心位置 ( x , y ) (x, y) (x,y) ,需要根据预测的坐标偏移值 ( t x , t y ) (t_\text x,t_\text y) (tx,ty) ,先验框的尺度 ( w a , h a ) (w_\text a,h_\text a) (wa,ha) 以及中心坐标 ( x a , y a ) (x_\text a,y_\text a) (xa,ya) (特征图每个位置的中心点)来计算:
x = ( t x ∗ w a ) − x a x=(t_\text x * w_\text a) - x_\text a x=(txwa)xa
y = ( t y ∗ h a ) − y a y=(t_\text y * h_\text a) - y_\text a y=(tyha)ya
 但是上面的公式是无约束的,预测的边界框很容易向任何方向偏移,如当 t x = 1 t_\text x=1 tx=1 时边界框将向右偏移先验框的一个宽度大小,而当 t x = − 1 t_\text x=-1 tx=1 时边界框将向左偏移先验框的一个宽度大小,因此每个位置预测的边界框可以落在图片任何位置,这导致模型的不稳定性,在训练时需要很长时间来预测出正确的offsets。所以,YOLOv2弃用了这种预测方式,而是沿用YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在 ( 0 , 1 ) (0,1) (0,1)范围内(每个cell的尺度看做 1 1 1)。总结来看,根据边界框预测的4个offsets t x , t y , t w , t h t_\text x,t_\text y,t_\text w,t_\text h tx,ty,tw,th ,可以按如下公式计算出边界框实际位置和大小:
b x = σ ( t x ) + c x b_\text x = \sigma(t_\text x) + c_\text x bx=σ(tx)+cx
b y = σ ( t y ) + c y b_\text y = \sigma(t_\text y) + c_\text y by=σ(ty)+cy
b w = p w e t w / W b_\text w = p_\text w e^{tw} / W bw=pwetw/W
b h = p h e t h / H b_\text h = p_\text h e^{th} / H bh=pheth/H
 如果再将上面的4个值分别乘以图片的宽度和长度(像素点值)就可以得到边界框的最终位置和大小了。这就是YOLOv2边界框的整个解码过程。约束了边界框的位置预测值使得模型更容易稳定训练,结合聚类分析得到先验框与这种预测方法,YOLOv2的mAP值提升了约 5 % 5\% 5%
具有维度先验和位置的边界框

  • Fine-Grained Features 细粒度特征

 YOLOv2的输入图片大小为 416 × 416 416 \times 416 416×416 ,经过5次maxpooling之后得到 13 × 13 13 \times 13 13×13 大小的特征图,并以此特征图采用卷积做预测。
大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。YOLOv2提出了一种passthrough层来利用更精细的特征图。YOLOv2所利用的Fine-Grained Features是 26 × 26 26\times26 26×26 大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为 26 × 26 × 512 26 \times 26 \times 512 26×26×512 的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个 2 × 2 2 \times 2 2×2 的局部区域,然后将其转化为channel维度,对于 26 × 26 × 512 26 \times 26 \times512 26×26×512 的特征图,经passthrough层处理之后就变成了 13 × 13 × 2048 13 \times 13 \times 2048 13×13×2048 的新特征图(特征图大小降低 4 4 4倍,而channles增加 4 4 4倍,图为一个实例),这样就可以与后面的 13 × 13 × 1024 13 \times 13 \times 1024 13×13×1024 特征图连接在一起形成 13 × 13 × 3072 13 \times 13 \times 3072 13×13×3072 大小的特征图,然后在此特征图基础上卷积做预测。在YOLO的C源码中,passthrough层称为reorg layer。在TensorFlow中,可以使用tf.extract_image_patches或者tf.space_to_depth来实现passthrough层:

out = tf.extract_image_patches(in, [1, stride, stride, 1], [1, stride, stride, 1], [1,1,1,1], padding="VALID")
// or use tf.space_to_depth
out = tf.space_to_depth(in, 2)

passthrough层实例
 另外,作者在后期的实现中借鉴了ResNet网络,不是直接对高分辨特征图处理,而是增加了一个中间卷积层,先采用 64 64 64 1 × 1 1\times1 1×1 卷积核进行卷积,然后再进行passthrough处理,这样 26 × 26 × 512 26\times26\times512 26×26×512 的特征图得到 13 × 13 × 256 13\times13\times256 13×13×256 的特征图。这算是实现上的一个小细节。使用Fine-Grained Features之后YOLOv2的性能有 1 % 1\% 1%的提升。

  • Multi-Scale Training 多尺度训练

 由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于 416 × 416 416\times416 416×416 大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为 32 32 32,输入图片大小选择一系列为 32 32 32倍数的值: { 320 , 352 , . . . , 608 } \{320,352,...,608\} {320,352,...,608},输入图片最小为 320 × 320 320\times320 320×320 ,此时对应的特征图大小为 10 × 10 10\times10 10×10 (不是奇数了,确实有点尴尬),而输入图片最大为 608 × 608 608\times608 608×608 ,对应的特征图大小为 19 × 19 19\times19 19×19 。在训练过程,每隔 10 10 10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
多尺度训练
 采用Multi-Scale Training策略,YOLOv2可以适应不同大小的图片,并且预测出很好的结果。在测试时,YOLOv2可以采用不同大小的图片作为输入,在VOC 2007数据集上的效果如下图所示。可以看到采用较小分辨率时,YOLOv2的mAP值略低,但是速度更快,而采用高分辨输入时,mAP值更高,但是速度略有下降,对于 544 × 544 544\times544 544×544 ,mAP高达 78.6 % 78.6\% 78.6%。注意,这只是测试时输入图片大小不同,而实际上用的是同一个模型(采用Multi-Scale Training训练)。
yolov2早voc数据集上的性能对比
 总结来看,虽然YOLOv2做了很多改进,但是大部分都是借鉴其它论文的一些技巧,如Faster R-CNN的anchor boxes,YOLOv2采用anchor boxes和卷积做预测,这基本上与SSD模型(单尺度特征图的SSD)非常类似了,而且SSD也是借鉴了Faster R-CNN的RPN网络。从某种意义上来说,YOLOv2和SSD这两个one-stage模型与RPN网络本质上无异,只不过RPN不做类别的预测,只是简单地区分物体与背景。在two-stage方法中,RPN起到的作用是给出region proposals,其实就是作出粗糙的检测,所以另外增加了一个stage,即采用R-CNN网络来进一步提升检测的准确度(包括给出类别预测)。而对于one-stage方法,它们想要一步到位,直接采用“RPN”网络作出精确的预测,要因此要在网络设计上做很多的tricks。YOLOv2的一大创新是采用Multi-Scale Training策略,这样同一个模型其实就可以适应多种大小的图片了。

训练

YOLOv2的训练主要包括三个阶段。

  • 第一阶段就是先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为 224 × 224 224 \times 224 224×224 ,共训练 160 160 160个epochs。
  • 第二阶段将网络的输入调整为 448 × 448 448 \times 448 448×448 ,继续在ImageNet数据集上finetune分类模型,训练 10 10 10个epochs,此时分类模型的top-1准确度为 76.5 % 76.5\% 76.5%,而top-5准确度为 93.3 % 93.3\% 93.3%
  • 第三个阶段就是修改Darknet-19分类模型为检测模型,并在检测数据集上继续finetune网络。网络修改包括(网路结构可视化):移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个 3 × 3 × 2014 3 \times 3 \times 2014 3×3×2014卷积层,同时增加了一个passthrough层,最后使用 1 × 1 1 \times1 1×1 卷积层输出预测结果,输出的channels数为: n u m _ a n c h o r s × ( 5 + n u m _ c l a s s e s ) { num\_anchors \times (5 + num\_classes) } num_anchors×(5+num_classes),和训练采用的数据集有关系。
     由于anchors数为5,对于VOC数据集输出的channels数就是 125 125 125,而对于COCO数据集则为 425 425 425。这里以VOC数据集为例,最终的预测矩阵为 T { T } T(shape为 ( b a t c h _ s i z e , 13 , 13 , 125 ) (batch\_size,13,13,125) (batch_size,13,13,125)),可以先将其reshape为 ( b a t c h _ s i z e , 13 , 13 , 5 , 25 ) (batch\_size,13,13,5,25) (batch_size,13,13,5,25) ,其中 T [ : , : , : , : , 0 : 4 ] T[ : , : , : , : , 0 : 4] T[:,:,:,:,0:4] 为边界框的位置和大小 ( t x , t y , t w , t h ) (t_\text x, t_\text y, t_\text w, t_\text h) (tx,ty,tw,th) T [ : , : , : , : , 4 ] T[:, :, :, :,4] T[:,:,:,:,4] 为边界框的置信度,而 T [ : , : , : , : , 5 : ] T[: , : , : , : , 5 : ] T[:,:,:,:,5:]为类别预测值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux网络编程】套接字Socket(UDP)

网络编程基础概念: ip地址和端口号 ip地址是网络协议地址(4字节32位,形式:xxx.xxx.xxx.xxx xxx在范围[0, 255]内),是IP协议提供的一种统一的地址格式,每台主机的ip地址不同,一个…

五个优秀的免费 Ollama WebUI 客户端推荐

认识 Ollama 本地模型框架,并简单了解它的优势和不足,以及推荐了 5 款开源免费的 Ollama WebUI 客户端,以提高使用体验。 什么是 Ollama? Ollama 是一款强大的本地运行大型语言模型(LLM)的框架&#xff0c…

一键操作!Win11用户将排除项添加到安全中心的方法

在Win11电脑操作中,Windows安全中心提供了添加排除项的功能,让用户可以自定义哪些文件、文件夹或进程免于Microsoft Defender的扫描,从而防止误报正常程序为安全威胁。但许多新手不知道具体如何操作才能成功添加排除项?那么就来看…

【PGCCC】pg_show_plans:显示所有正在运行的语句的查询计划

PostgreSQL 扩展可显示所有当前正在运行的 SQL 语句的查询计划。查询计划可以以多种格式显示,例如JSON或YAML。 此扩展在共享内存中创建哈希表。哈希表不可调整大小,因此一旦填满,就无法添加新计划。 安装 支持 PostgreSQL 版本 12 及更新…

学Python可少不了项目练手,这8个小项目有趣又实用,小白也能做出来_python练手项目,python教程

学习之路比较科学的学习方法是理解了之后把知识点进行运用,找一些开源的小项目做是最好的,站在岸上是学不会游泳的,光看健身视频是减不了肥的,不自己动手敲代码是学不会编程的。 我在找了8个比较有趣的小项目,技术水平…

DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!

在日常使用电脑的过程中,不少用户可能会遇到“DLL文件缺失”的错误提示,这类问题往往导致程序无法正常运行或系统出现不稳定现象。幸运的是,DirectX修复工具作为一款功能强大的系统维护软件,能够有效解决大多数DLL文件缺失问题&am…

下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次

下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次 第一个:强势管理 在企业管理中,领导必须展现足够的强势。 所谓强势的管理,并不仅仅指态度上的强硬,更重要的是在行动中坚持原则和规…

元气森林|每天拆解一个品牌营销方案

元气森林的品牌营销策略是一个多维度、全方位的策略体系,旨在通过创新、用户导向和多元化渠道来塑造和提升品牌形象,促进产品销售。 以下是道叔对元气森林品牌营销策略的详细拆解: 一、以用户为中心的营销理念 元气森林注重通过市场调研、…

Java | Leetcode Java题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp new int[n 1];int m primes.length;int[] pointers new int[m];int[] nums new int[m];Arrays.fill(nums, 1);for (int i 1; i < n; i) {int minN…

浅谈莫比乌斯反演(c++)

目录 前置知识一些约定数论分块狄利克雷卷积定义一些常见的狄利克雷卷积 莫比乌斯反演莫比乌斯函数的性质/莫比乌斯变换 例题讲解公约数的和题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规模与约定 思路 AC代码[HAOI2011] Problem b题目描述输入格…

Kimi+AiPPT的正确打开方式!文档一键转换PPT!限时免费!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 我之前…

C++ | Leetcode C++题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; class Solution { public:int nthSuperUglyNumber(int n, vector<int>& primes) {vector<long> dp(n 1);int m primes.size();vector<int> pointers(m, 0);vector<long> nums(m, 1);for (int i 1; i < n…

【glomap】glomap install tutorial

【glomap】glomap install tutorial 1. install step by office2. install step3. reason方法1&#xff1a;修改目标GPU架构方法2&#xff1a;更新CUDA工具包方法3&#xff1a;在CMake中手动设置CUDA编译选项 4 reference 1. install step by office mkdir build cd build cma…

视频驱动数字人形象,LivePortrait最新模型分享

LivePortrait是一个由快手可灵团队开发的高级人工智能肖像动画框架&#xff0c;其主要功能是使静态照片中的面部能够模仿动态视频中的表情变化&#xff0c;从而让照片看起来像是活生生的人在做表情。 LivePortrait采用了基于隐式关键点的方法&#xff0c;而不是传统的扩散方法…

报表系统之Cube.js

Cube.js 是一个开源的分析框架&#xff0c;专为构建数据应用和分析工具而设计。它的主要目的是简化和加速构建复杂的分析和数据可视化应用。以下是对 Cube.js 的详细介绍&#xff1a; 核心功能和特点 1. 多数据源支持 Cube.js 支持从多个数据源中提取数据&#xff0c;包括 SQ…

怎么给USER新增表空间文件

今天介绍一下docker部署的oralce19c&#xff0c;怎么增加表空间 docker exec -it orcl19c bash 管理员方式登录 sqlplus / as sysdba 增加表空间脚本 ALTER TABLESPACE USERS ADD DATAFILE /opt/oracle/oradata/newdatafile6.dbf SIZE 30720M AUTOEXTEND ON NEXT 10M MAXSIZE…

Linux内核:哈希表hlist_head和hlist_node

linux内核中哈希表使用链接法实现哈希表&#xff0c; 结构体有hlist_head和hlist_node&#xff0c;hlist指向hlist_node。 哈希表具体如下&#xff1a; 以哈希表删除为例&#xff1a; 为什么要使用二级指针&#xff1f;

基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 无刷直流电机&#xff08;BLDCM&#xff09;原理 4.2 六步换相逆变器 4.3 双PI控制器设计 5.完整工程文件 1.课题概述 基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真。双PI控制…

作为架构师的你,NoSQL如何选型

什么是 NoSQL&#xff1f; NoSQL数据库是一种非关系型数据库管理系统它和我们传统的关系型数据库&#xff08;如MySQL、Oracle&#xff09;不一样。传统数据库要求你在存储数据之前&#xff0c;先定义好数据的结构&#xff08;称为“schema”&#xff09;&#xff0c;而且数据…

一刷代码随想录(贪心5)

56. 合并区间 题意&#xff1a; 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals [[1,4],[4…