[目标检测] YOLO系列算法讲解

news2025/5/19 1:13:55

前言

目标检测就是做到给模型输入一张图片或者视频,模型可以迅速判断出视频和图片里面感兴趣的目标所有的位置和它 的类别,而当前最热门的目标检测的模型也就是YOLO系列了。

YOLO系列的模型的提出,是为了解决当时目标检测的模型帧率太低而提出来的模型,英文全称是

You only look once。

深度学习目标检测算法分类:

(1)two-stage 两个阶段的检测,模型举例 Faster-RCNN Mask-Rcnn系列

   (2) one-stage 一个阶段的检测:YOLO系列

这两个主要区别可以简单理解为,两个阶段有一个选择预选框和物体分类的一个过程,而单阶段的将检测问题转换为一个回归问题

下边来详细讲解YOLO系列的各个阶段的模型。

一、YOLOv1

1、模型背景

YOLOV1,是以Joseph Redmon为首的大佬们于2015年提出的一种新的目标检测算法。它与之前的目标检测算法如R-CNN等不同之处在于,R-CNN等目标检测算法是两阶段算法, 步骤为先在图片上生成候选框,然后利用分类器对这些候选框进行逐一的判断;而YOLOv1是一阶段算法,是端到端的算法,它把目标检测问题看作回归问题,将图片输入单一的神经网络,然后就输出得到了图片的物体边界框(boundingbox)以及分类概率等信息。

总结:YOLOv1直接从输入的图像,仅仅经过一个神经网络,直接得到一些bounding box(位置坐标)以及每个bounding box对所有类别的一个概率情况,因为整个的检测过程仅仅有一个网络,所以可以直接进行端到端的优化,而无需像Faster R-CNN的分阶段的优化。

end-to-end(端到端):指的是一个过程,输入原始数据,输出最后结果。之前的网络Fast RCNN等这种网络分为两个阶段,一个是预选框的生成和目标分类与边界框回归,具体内容大家可以自行理解。

YOLO的核心思想就是把目标检测转变为一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。

2、网络结构

YOLOv1的网络结构简单清晰,是一个最传统的one-stage的卷积神经网络。

网络输入:448*448*3的三通道图片

中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征。

全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。

网络输出:7*7*30的预测结果。

3、网络细节

YOLOv1采用的是”分而治之“的策略,将一张图片平均分成7*7个网格,每个网格分别负责预测中心点落在该网格内的坐标,回忆一下,在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度很高,但是需要额外训练一个RPN网络,这无疑增加了训练的负担。在YOLOv1中,通过划分得到7*7个网络,(原图划分),这49个网格就相当于是目标的感兴趣区域。通过这种方式,我们就不需要再额外设计一个RPN网络,这正是YOLOv1作为单阶段网络的简单快捷之处。

补充说明过程:

1、将一副图像分成S*S个网格(grid cell),如果某个目标的中心落在这个网格中,那么这个网络就负责预测这个object。(原本中是7个)

2、每个网格要预测B个bounding box,每个bounding box要预测(x,y,w,h)和confidence共五个值。文中B为2。

其中:x和y是这些边界框的中心坐标相对于网格单元格的坐标。也就是说,x和y是边界框中心点相对于网格单元左上角的偏移量。坐标是以网格单元格的宽度和高度为单位的相对值。因此这两个值表示的是边界框中心的精确位置。

w和h,这些是边界框的宽度和高度的相对值,通常是相对于整张图片的宽度和高度,它们表示边界框的大小,也就是边界框的高度和宽度的预测值,这些值通常是对整张图片的归一化的比例值。

confidence(置信度):描述的是边界框的置信度(边界框包含物体的概率)。换句话说,它衡量了边界框中确实有物体的可信度。

3、每个网格还需要预测一个类别信息,记为C个类。文中为20,

4、总的来说,S*S个网格,每个网格预测2个bbx,还要预测20个类,那么网络最后输出的就是一个7*7*30.

在模型最后是生成了98个边界框,生成完边界框后,通过NMS(非极大值预测)来筛选出最优的边界框。

4、预测阶段

在模型训练完成后,向搭载玩参数的模型输入图片,然后得到最后结果的一个过程。

将网络当成一个黑箱子,输入的是一个448*448*3的RGB图像,最后输出的一个7*7*30的向量。

整体的网络结构很简单,都是卷积、池化、全连接层,一目了然。

而最后输出的向量,包含了类别、框、置信度等结果,而我们只需要解释这个向量就得到最后的结果了。

下面对最后输出的向量,进行一个分析,当我们输入一张图片的时候,最后会生成7*7*30的向量,如何去理解呢,可以将这个向量看做成7*7个1*30的向量,也就是49个1*30的向量,这里的每个1*30的向量,对应于前面的一个grid cell,将向量拆分为两个预测框的坐标以及预测框包含物体的置信度,和20个类别的条件概率。其中每个gridcell只会预测一个物体,也因此暴露出YOLOv1在小目标上检测的缺陷。然后预测中又引入了NMS向量对上述的98个框进行筛选,最后才可以得出我们的结果。

5、训练阶段

这个阶段,我首先主要是解释一下几个问题,

,首先是YOLOv1是端到端的一个网络,也就是输入的是原图,输出的是一个向量,而训练的过程包括两个过程,一个是前向传播,另一个就是反向传播,通过不断迭代,使梯度下降,进而使损失函数最小化,这个过程。训练的流程大致为,输入batchsize张图片,得出batchsize*7*7*30的一个张量,将该张量与标签(batchsize*7*7*30的向量)计算出损失为多少,然后根据这个损失对网络的参数进行梯度计算,不断迭代,不断优化参数,这样的一个过程。我觉得这样理解好理解的多。

这个代码大致流程可以分为以下部分

1、超参数初始化

2、数据初始化,构造数据迭代器,因为原本一张图片对应的标签并不是7*7*30的一个向量,因此要对数据进行预处理,把每一个图片的标签变成7*7*30的一个格式。

3、网络初始化,我这里给的代码使ResNet50的网络,这个网络也叫做backbone大家以后会经常看到的,网络结构差不多,然后输入是bs*448*448*3,输出就是bs*7*7*30的这样一个结构

4、上述都可以看成初始化过程,然后就开始训练,也就是前向传播,反向传播,参数优化这样迭代的一个过程,最后保存参数。

6、损失函数

可以大致看成四个部分,

第一部分表示负责检测物体的bounding box中心点定位误差,要和ground truth尽可能拟合,x xx带上标的是标注值,不带上标的是预测值。

第二表示表示负责检测物体的bounding box的宽高定位误差,加根号是为了使得对小框的误差更敏感。

第三部分:

第四部分是负责检测物体的grid的分类误差。

7、总结

模型优点:YOLO检测速度非常快,标准版本的YOLO可以每秒处理45张图像,YOLO的极速版本可以每秒处理150帧图像,这就意味着该模型可以实时处理视频,在当时,准确率比它高的,速度没他快,速度比他快的,精度没他高。

迁移能力强,能运用到其他新的领域。

局限:

1、YOLO对相互靠近的物体,以及很小的群体检测效果不好,因为只预测了98个框。假如一张图片有200个目标的话,根本检测不完。

2、由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上。有待提高。

3、对一些不常见的角度的目标泛化性能差。

二、YOLOv2

1、模型背景

2017年,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2 和 YOLO9000。重点解决YOLOv1召回率和定位精度方面的不足。

YOLOv2 是一个先进的目标检测算法,比其它的检测器检测速度更快。除此之外,该网络可以适应多种尺寸的图片输入,并且能在检测精度和速度之间进行很好的权衡。

相比于YOLOv1是利用全连接层直接预测Bounding Box的坐标,YOLOv2借鉴了Faster R-CNN的思想,引入Anchor机制。利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板,大大提高了算法的召回率。同时结合图像细粒度特征(特征融合),将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

YOLO9000 使用 WorldTree 来混合来自不同资源的训练数据,并使用联合优化技术同时在ImageNet和COCO数据集上进行训练,能够实时地检测超过9000种物体。由于 YOLO9000 的主要检测网络还是YOLOv2,所以这部分以讲解应用更为广泛的YOLOv2为主。

2、网络结构

YOLOv2 采用 Darknet-19 作为特征提取网络,DarkNet-19,后边的19指的是用了19个卷积层的意思。其整体结构如下:

说明:

1、DarkNet-19与VGG网络相似,使用了很多3*3的卷积核;并且每一次池化后,下一层的卷积核的通道数 = 池化输出的通道*2

2、每一次卷积后,都增加了BN(批量标准化)进行预处理。

3、采用了降维的思想,把1*1的卷积置于3*3之间,用来压缩特征。

4、在网络最后的输出增加了一个global average pooling层,这个层就是把一个二维的特征图缩减成一个数的一个操作。

5、网络整体上采用了19个卷积层、5个池化层。

上述流程中有很多细节之处,我简单总结一下。

1、在YOLOv1当中有全连接层,所以在YOLOv1当中是引入了Dropout正则化,用来防止过拟合,而在YOLOv2中去掉了全连接层,引入了BN层,在每一个卷积层后都加入了BN,也就是网络的每一层都做了归一化,收敛起来相对简单,引入BN层后提升了2%的MAP,目前BN层可以说是网络模型必备的处理方法。

2、引入了1*1和全局最大值池化对网络的参数量有很大减少,减少了计算量,提升了检测速度。

3、网络细节

1、引入了anchor机制

这个机制在Faster R-CNN中引入的,在YOLOV1是直接做的回归计算出bbx(bounding box)坐标值,并且是从全连接层变化来的,这会丢失较多的的空间信息,导致定位精度不高,并且在前期训练时很困难,很难收敛。

而YOLOv2中借鉴了Faster R-CNN中的anchor思想,使得网络在训练时更容易收敛。这里引入的机制,相对于FasterR-cnn中的anchor机制做了一些改进,在rcnn中是初始化设定好的anchor,而在YOLO中是通过K-means聚类的方法来选择出的合适训练数据集的anchor,K-means聚类在后续进行介绍。通过提前筛选得到的具有代表性先验框Anchors,使得网络在训练时更容易收敛。

在Faster R-CNN算法中,是通过预测boundingbox与ground truth的位置偏移值tx和ty,间接得到的boundingbox的位置,其公式如下:

这个公式是无拘束的,预测边界框很容易向任何方向偏移。因此,每个位置预测的边界框可以落在图片的任何位置,这会导致模型很不稳定。

因此YOLOv2在上述方法做了提高,预测边界框中心点相对于该网格左上角坐标(Cx,Cy)的相对偏移量,同时为了将bounding box的中心点坐标约束在当前网格中,使用sigmoid函数将tx和ty归一化处理,让这个值约束在0-1,

下图为anchor box 与 bounding box转换的示意图,其中蓝色是要预测的bounding box,黑色虚线框是Anchor box。

YOLOv2在最后一个卷积层输出了13*13的feature map,意味着一张图片被分成了13*13个网格,每个网格有5个anchor box来预测5个bounding box,每个bounding box预测得到五个值:tx、ty、tw、th和to,通过这五个值简介预测得到的bounding box的位置的计算公式为:

YOLOv1有一个缺陷是,一张图片被分成了7*7的网络,一个网格只能预测一个类,当一个网格中出现了多个类时,就无法检测出所有的类,针对这个问题,YOLOv2做出了相对应的改进:

1、首先将YOLOv1网络的FC层和最后一个Pooling层去掉,使得最后的卷积层的输出可以有更高的分辨率特征。

2、然后缩减网络,用416×416大小的输入代替原来的448×448,使得网络输出的特征图有奇数大小的宽和高,进而使得每个特征图在划分单元格的时候只有一个中心单元格(Center Cell)。YOLOv2通过5个Pooling层进行下采样,得到的输出是13×13的像素特征。
3、借鉴Faster R-CNN,YOLOv2通过引入Anchor Boxes,预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。
4、采用Faster R-CNN中的方式,每个Cell可预测出9个Anchor Box,共13×13×9=1521个(YOLOv2确定Anchor Boxes的方法见是维度聚类,每个Cell选择5个Anchor Box)。比YOLOv1预测的98个bounding box 要多很多,因此在定位精度方面有较好的改善。

2、K-means聚类方法选择Anchors

Faster R-CNN 中 Anchor Box 的大小和比例是按经验设定的,不具有很好的代表性。若一开始就选择了更好的、更有代表性的先验框Anchor Boxes,那么网络就更容易学到准确的预测位置了!

YOLOv2 使用 K-means 聚类方法得到 Anchor Box 的大小,选择具有代表性的尺寸的Anchor Box进行一开始的初始化。传统的K-means聚类方法使用标准的欧氏距离作为距离度量,这意味着大的box会比小的box产生更多的错误。因此这里使用其他的距离度量公式。聚类的目的是使 Anchor boxes 和临近的 ground truth boxes有更大的IOU值,因此自定义的距离度量公式为 :

到聚类中心的距离越小越好,但IOU值是越大越好,所以使用 1 - IOU;这样就保证距离越小,IOU值越大。具体实现方法如下:

 如下图所示,是论文中的聚类效果,其中紫色和灰色也是分别表示两个不同的数据集,可以看出其基本形状是类似的。

从下表可以看出,YOLOv2采用5种 Anchor 比 Faster R-CNN 采用9种 Anchor 得到的平均 IOU 还略高,并且当 YOLOv2 采用9种时,平均 IOU 有显著提高。说明 K-means 方法的生成的Anchor boxes 更具有代表性。为了权衡精确度和速度的开销,最终选择K=5。

3、特征融合 Fine-Grained Features

细粒度特征,就是不同层之间的特征融合,和残差里面的概念很像,就是把浅层特征和深层特征融合在一起。YOLOv2通过添加了一个Passthrough Layer,把浅层特征和深层特征在不同的通道上进行融合,具体操作是:先获取浅层的26*26的特征图,再将最后输出的13*13的特征图进行拼接,再输入检测器进行检测,以此来提高对小目标的检测能力。

Passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个2×2的局部区域,然后将其转化为channel维度,对于26×26×512的特征图,经Passthrough层处理之后就变成了13×13×2048的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072的特征图,然后在此特征图基础上卷积做预测。示意图如下:

4、总结

在VOC2007数据集上进行测试,YOLOv2在速度为67fps时,精度可以达到76.8的mAP;在速度为40fps时,精度可以达到78.6的mAP,可以在速度和精度之间进行平衡。

三、YOLOv3

1、模型背景

2018年,作者Redmon又在YOLOv2的基础上做了一些改进,特征提取部分(backbone)网络结构darknet53代替了原来的darknet19,利用特征金字塔网络实现了多尺度预测,分类方法使用逻辑回归代替了softmax,在兼顾实时性的同时保证了目标检测的准确性。

从YOLOv1到YOLOv3,每一代性能的提升都与backbone(骨干网络)的改进密切相关。在YOLOv3中,作者不仅提供了darknet-53,还提供了轻量级的tiny-darknet。如果你想要检测精度与速度兼具,可以选择darknet-53作为backbone;如果希望达到更快的检测速度,精度方面可以妥协,那么tiny-darknet是最好的选择。总之,YOLOv3的灵活性使得在实际工程中得到很多人的青睐。

2、网络结构

相比于YOLOv2的骨干网络,YOLOv3进行了较大的改进。借助残差网络的思想,YOLOv3将原来的darknet-19改进成了darknet-53,论文中给出的整体结构如下。

DarkNet-53主要是由1*1和3*3的卷积核组成。每个卷积层之后包含一个批量归一化层和一个Leaky Relu,加入这两个部分的目的是防止过拟合。卷积层、批量归一化层以及Leaky Relu共同组成DarkNet-53中的基本卷积单元DBL。因为在DarkNet-53中包含53个这样的DBL,所以称为Darknet-53.

为了更加清晰了解DarkNet-53的网络结构,可以看下面这张图:

网络结构其实看的话,不是算很复杂。下面对主要的几个单元进行解释。

1、DBL:一个卷积层、一个BN层和一个Leaky ReLU组成的基本卷积单元。

这个是组成网络的基本组成单元,其中的话,中间层经过一个DBL后,特征图的大小不会发生变化

2、res unit:输入通过两个DBL后,再与原输入进行add;这是一种常规的残差单元。残差单元的目的是为了让网络可以提取到更深层次的特征,同时避免出现梯度消失或者爆炸。

通过一个残差块后,特征图的尺寸并没有发生变化,不管是特征图的长宽,还是特征图的通道数,都没有发生变化。

3、resn:其中的n表示的是n个res unit;所以resn = Zero Padding +DBL+n*res unit

4、concat:将darknet-53的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的add操作是不一样的,拼接会扩充张量的维度,而add直接相加不会导致张量维度的改变。

Y1、Y2、Y3:分别表示YOLOv3三种尺度的输出。

与darkNet-19对比可知,darkNet-53主要做了如下改进。

1、没有采用最大池化层,而是采用步长为2的卷积层进行下采样。

2、为了防止过拟合,每个卷积层后加入了一个BN层和一个Leaky ReLU。

3、引入了残差网络的思想,目的是为了让网络可以提取到更深层的特征,同时为了防止出现梯度的消失和爆炸。

4、将网络的中间层和后面某一层的上采样进行张量拼接,达到多尺度特征融合的目的。

3、改进之处

YOLOv3最大的改进之处还在于网络结构的改进,由于上面已经讲过了。因此下面主要对其他改进方面进行介绍。

1、多尺度预测

为了能给预测多尺度的目标,YOLOv3选了三种不同shape的Anchors,同时每种Anchors具有三种不同的尺度,一共9种不同大小的Anchors。在COCO数据集上选择的9种Anchors的尺寸如下图红色框所示:

借鉴特征金字塔网的思想,YOLOv3设计了三种不同尺度的网络输出Y1、Y2、Y3、目的是为了预测不同尺度的坐标,由于每一个尺度网格都负责预测3个边界框,且COCO数据集有80个类。所以网络输出的张量应该是:N*N*(3*(5+1+80)).由下采样次数不同,得到的N不同,最终,Y1、Y2、Y3的shape分别为:[13, 13, 255]、[26, 26, 255]、[52, 52, 255]。可见参见原文:

先写到这里,后续有时间再写。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

.NET NativeAOT 指南

目录 1. 引言 2. 什么是 .NET NativeAOT? 2.1 NativeAOT 的定义 2.2 NativeAOT 与传统 JIT 的对比 2.3 NativeAOT 的适用场景 3. NativeAOT 的核心优势 3.1 性能提升 3.2 简化部署 3.3 更小的应用体积 3.4 知识产权保护 4. NativeAOT 的基本用法 4.1 环境…

uniapp-商城-57-后台 新增商品(弹窗属性数据添加父级)

后台增加商品,需要添加相关的数据信息,这里还要添加属性,前面已经对相关的界面布局继续了编写。这里还要对页面添加的数据,置入到云数据库,继续永久保存,便于后期的使用。这里主要是讲属性数据 父级信息的添…

摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程

摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…

Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)

一、URP渲染管线 渲染管线是一系列渲染操作的集合,Unity提供了内置渲染管线(Built-In)和可编程渲染管线(SRP)两类渲染管线。内置渲染管线是Unity的默认渲染管线,其自定义选项有限。而可编程渲染管线可以通…

mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题

因为你安装的软件在Intel 或arm芯片的mac上没有签名导致。 首先打开任何来源操作 在系统设置中配置,如下图: 2. 然后打开终端,输入: sudo spctl --master-disable然后输入电脑锁屏密码 打开了任何来源,还遇到已损坏…

Echart地图数据源获取

DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…

GNSS数据自动化下载系统的设计与实现

摘要 本文详细介绍了三种不同设计的GNSS数据自动化下载系统&#xff0c;分别针对IGS观测数据、GRACE-FO Level-1B数据以及通过代理服务器获取数据的需求场景。系统采用Python实现&#xff0c;具备断点续传、完整性校验、异常处理和进度显示等核心功能。实验结果表明&#xff0…

Unity3D仿星露谷物语开发43之农作物生长

1、目标 把防风草种子种在地里&#xff0c;并展示植物种子&#xff0c;防风草种子将随着时间变化而生长成植株。 2、创建Crop.cs脚本 在Assets -> Scripts下创建新的目录命名为Crop&#xff0c;在其下创建新的脚本命名为Crop.cs。 代码如下&#xff1a; using System.C…

从0到1上手Kafka:开启分布式消息处理之旅

目录 一、Kafka 是什么 二、Kafka 的基础概念 2.1 核心术语解读 2.2 工作模式剖析 三、Kafka 的应用场景 四、Kafka 与其他消息队列的比较 五、Kafka 的安装与配置 5.1 环境准备 5.2 安装步骤 5.3 常见问题及解决 六、Kafka 的基本操作 6.1 命令行工具使用 6.1.1 …

Python爬虫如何应对网站的反爬加密策略?

在当今的互联网环境中&#xff0c;网络爬虫已经成为数据采集的重要工具之一。然而&#xff0c;随着网站安全意识的不断提高&#xff0c;反爬虫技术也越来越复杂&#xff0c;尤其是数据加密策略的广泛应用&#xff0c;给爬虫开发者带来了巨大的挑战。本文将详细介绍Python爬虫如…

第一次经历项目上线

这几天没写csdn&#xff0c;因为忙着项目上线的问题&#xff0c;我这阶段改了非常多的前端bug哈哈哈哈&#xff0c;说几个比较好的bug思想&#xff01; 这个页面算是我遇到的比较大的bug&#xff0c;因为我一开始的逻辑都写好了&#xff0c;询价就是在点击快递公司弹出弹框的时…

Conda配置完全指南——Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南

本文同步发布在个人博客&#xff1a; Conda配置完全指南Conda 是一个开源的跨平台包管理与环境管理工具&#xff0c;广泛应用于数据科学、机器学习及 Python 开发领域。它不仅能帮助用户快速安装、更新和卸载第三方库&#xff0c;还能创建相互隔离的虚拟环境&#xff0c;解决不…

Quasar组件 Carousel走马灯

通过对比两个q-carousel组件来&#xff0c;了解该组件的属性 官方文档请参阅&#xff1a;Carousel 预览 源代码 <template><div class"q-pa-md"><div class"q-gutter-md"><q-carouselv-model"slide"transition-prev&quo…

风控域——风控决策引擎系统设计

摘要 本文详细介绍了风控决策引擎系统的设计与应用。决策引擎系统是一种智能化工具&#xff0c;可自动化、数据驱动地辅助或替代人工决策&#xff0c;广泛应用于金融、医疗、营销、风控等领域。文章阐述了决策引擎的核心功能&#xff0c;包括自动化决策、动态规则管理、实时处…

CAPL Class: TcpSocket (此类用于实现 TCP 网络通信 )

目录 Class: TcpSocketacceptopenclosebindconnectgetLastSocketErrorgetLastSocketErrorAsStringlistenreceivesendsetSocketOptionshutdown函数调用的基本流程服务器端的基本流程客户端的基本流程Class: TcpSocket学习笔记。来自CANoe帮助文档。 Class: TcpSocket accept /…

数据分析 —— 数据预处理

一、什么是数据预处理 数据预处理&#xff08;Data Preprocessing&#xff09;是数据分析和机器学习中至关重要的步骤&#xff0c;旨在将原始数据转换为更高质量、更适合分析或建模的形式。由于真实世界的数据通常存在不完整、不一致、噪声或冗余等问题&#xff0c;预处理可以…

软件架构风格系列(4):事件驱动架构

文章目录 前言一、从“用户下单”场景看懂事件驱动核心概念&#xff08;一&#xff09;什么是事件驱动架构&#xff1f;&#xff08;二&#xff09;核心优势&#xff1a;解耦与异步的双重魔法 二、架构设计图&#xff1a;三要素构建事件流转闭环三、Java实战&#xff1a;从简单…

arduino平台读取鼠标光电传感器

鼠标坏掉了&#xff0c;大抵是修不好了。&#xff08;全剧终—&#xff09; 但是爱动手的小明不会浪费这个鼠标&#xff0c;确认外观没有明显烧毁痕迹后&#xff0c;尝试从电路板上利用光电传感器进行位移的测量&#xff0c;光电传感器&#xff08;型号&#xff1a;FCT3065&am…

【Linux网络】网络层

网络层 在复杂的网络环境中确定一个合适的路径 IP 协议 IPV4 点分十进制[0,255].[0,255].[0,255].[0,255]IPV6 IP地址目标网格目标主机 基本概念 主机:配有IP地址,但是不进行路由控制的设备;路由器:即配有IP地址,又能进行路由控制;节点:主机和路由器的统称。 两个问题 路…

大模型学习:Deepseek+dify零成本部署本地运行实用教程(超级详细!建议收藏)

文章目录 大模型学习&#xff1a;Deepseekdify零成本部署本地运行实用教程&#xff08;超级详细&#xff01;建议收藏&#xff09;一、Dify是什么二、Dify的安装部署1. 官网体验2. 本地部署2.1 linux环境下的Docker安装2.2 Windows环境下安装部署DockerDeskTop2.3启用虚拟机平台…