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

前言

目标检测就是做到给模型输入一张图片或者视频,模型可以迅速判断出视频和图片里面感兴趣的目标所有的位置和它 的类别,而当前最热门的目标检测的模型也就是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.pswp.cn/news/906314.shtml

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

相关文章

服务器操作系统时间同步失败的原因及修复

服务器操作系统时间同步失败可能导致日志记录不准确、安全证书失效等问题。以下是常见原因及对应的修复方法: ### 一、时间同步失败的常见原因 1. **网络连接问题** - NTP服务器无法访问(防火墙阻止、网络中断) - DNS解析失败或网…

Cribl 中function 使用过滤的特殊case:Parser + rename

Cribl 利用function 对parser 进行特殊过滤处理: Parser Function – Fields Filter Expression​ When you use the Stream Parser Functions Reserialize option, there is a special option that becomes available, called the Fields Filter Expression. This is basica…

inverse-design-of-grating-coupler-3d

一、设计和优化3D光栅耦合器 1.1 代码讲解 通过预定义的环形间距参数(distances数组),在FDTD中生成椭圆光栅结构,并通过用户交互确认几何正确性后,可进一步执行参数扫描优化。 # os:用于操作系统相关功能(如文件路径操作) import os import sys# lumapi:Lumerical 的…

TuyaOpen横空出世!涂鸦智能如何用开源框架重构AIoT开发范式?

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引子:AIoT开发的“不可能三角”被打破 当AI与物理世界深度融合的浪潮席卷全球,开发者们却始终面临一个“不可能三角”——开发效率、技术深度与商业化落地难以兼得。 …

智慧赋能光伏运维——无人机巡检+地面监控双链路覆盖,打造光伏电站管理新标杆

一、引言:光伏电站运维的挑战与机遇 在全球能源转型浪潮下,光伏电站作为清洁能源的重要载体,其高效运维管理成为行业核心命题。然而,传统光伏电站运维存在覆盖范围广、设备分散、人工巡检效率低、故障响应慢等痛点。为破解这一难…

前端无感登录刷新

前端实现无感登录 在现代的前端开发中,用户体验是非常重要的一环。无感登录(也叫自动登录)就是其中一个提升用户体验的关键功能。它的目标是让用户在登录后,即使关闭浏览器或长时间不操作,也能在下次访问时自动登录&a…

JAVASE查漏补缺

这段时间学习了很多知识,好多还有疑问不清楚的地方。今天有空总结一下。 javame,javase,javaee 一、Java ME(Micro Edition,微型版) Java ME是一种适用于移动设备和嵌入式系统的小型Java平台,具有高度可移植性和跨平…

【设计模式】基于 Java 语言实现工厂模式

目录 一、简单工厂模式 1.1 简单工厂模式的介绍 二、工厂方法模式 2.1 工厂方法模式的介绍 2.2 工厂方法模式的基本实现 2.3 工厂方法模式的应用场景 三、抽象工厂 3.1 抽象工厂的概念 3.2 抽象工厂的基本结构 3.3 抽象工厂的基本实现 3.4 抽象工厂的应用场景 四、…

OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 createConvolution函数是OpenCV CUDA 模块中用于创建卷积操作对象的工厂方法。它返回一个指向 cv::cuda::Convolution 接口的智能指针&#xff0…

IDEA:程序编译报错:java: Compilation failed: internal java compiler error

目录 简介异常信息排查原因解决 简介 代码无法编译、无法打包 异常信息 java: Compilation failed: internal java compiler error排查 1、代码近期没有改动过,原先是可以正常编译的 2、查看程序JDK,是JDK1.8没错,与原先JDK一致 3、出现…

windows 10 做服务器 其他电脑无法访问,怎么回事?

一般我们会先打开win10自己的防火墙策略,但是容易忽略 电脑之间 路由器上的防火墙,此时也需要查看一下,可以尝试先关闭路由器防火墙,如果可以了,再 设置路由器上的防火墙规则。 将路由器的上网设置 改成 路由模式 &a…

【人工智能-agent】--Dify+Mysql+Echarts搭建了一个能“听懂”人话的数据可视化助手!

Echarts官网:https://echarts.apache.org/zh/index.html ECharts 是一个由百度团队开发的、基于 JavaScript 的开源可视化图表库,它提供了丰富的图表类型和强大的交互功能,能够帮助开发者轻松创建专业级的数据可视化应用。 核心特点 丰富的图…

Android设备 显示充电速度流程

整体逻辑:设备充电速度的判断 系统通过读取充电器的最大电流(Current)与最大电压(Voltage),计算最大充电功率(Wattage),以此判断当前是慢充、普通充还是快充&#xff1a…

十一、Hive JOIN 连接查询

作者:IvanCodes 日期:2025年5月16日 专栏:Hive教程 在数据分析的江湖中,数据往往分散在不同的“门派”(表)之中。要洞察数据间的深层联系,就需要JOIN这把利器,将相关联的数据串联起来…

Excel在每行下面插入数量不等的空行

1、在B列输入要添加的空行数量(如果加7行,则写6,也可以插入数量不等的空行) 2、在C1单元格输入1 3、在C2输入公式:SUM($B$1:B1)1,下拉填充 4、在C9单元格输入1 5、选中C9单元格-->选择菜单栏“开始”…

iOS热更新技术要点与风险分析

iOS的热更新技术允许开发者在无需重新提交App Store审核的情况下,动态修复Bug或更新功能,但需注意苹果的审核政策限制。以下是iOS热更新的主要技术方案及要点: 一、主流热更新技术方案 JavaScript动态化框架 React Native & Weex 通过Jav…

服务器多用户共享Conda环境操作指南——Ubuntu24.02

1. 使用阿里云镜像下载 Anaconda 最新版本 wget https://mirrors.aliyun.com/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh bug解决方案 若出现:使用wget在清华镜像站下载Anaconda报错ERROR 403: Forbidden. 解决方案:wget --user-agent“M…

基于YOLO算法的目标检测系统实现指南

YOLO(You Only Look Once)作为计算机视觉领域最具影响力的实时目标检测算法之一,其最新版本YOLOv8在速度与精度之间达到了新的平衡。本文将从技术实现角度,详细介绍如何使用YOLO算法构建高效的目标检测系统。 一、算法原理与技术架构 1.1 YOLO核心思想…

C++ asio网络编程(6)利用C11模拟伪闭包实现连接的安全回收

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、智能指针管理Session二、用智能指针来实现Server的函数1.start_accept()1.引用计数注意点2.std::bind 与异步回调函数的执行顺序分析 2.handle_accept1.异步…

AI与产品架构设计(2):Agent系统的应用架构与落地实

什么是AI Agent?其在架构中的独特定位 AI Agent(人工智能代理)是一种模拟人类智能行为的自主系统,通常以大型语言模型(LLM)作为核心引擎。简单来说,Agent能够像人一样感知环境信息、规划行动方…