基于YOLOv5的电力线和杆塔实时检测算法研究

2022-12-01 01:06叶树芬施振华苏成悦梁立黄海润关家华
计算机测量与控制 2022年11期
关键词:电力线特征提取卷积

叶树芬,施振华,苏成悦,梁立,黄海润,关家华

(1.广东工业大学 物理与光电工程学院,广州 510006; 2.广州杰超科技有限公司,广州 510006;3.广东电网有限责任公司佛山供电局,广东 佛山 528000)

0 引言

电力线路巡检是电网稳定安全运行的重要环节,人工操作的无人机巡检替代传统人工巡检可节约大量的时间和人力成本[1]。智能无人机自动巡检成为当前电力巡检的研究热点,导航是智能无人机巡检的关键[2]。由于导航精度不够,巡检无人机飞偏的概率较大[3],对电力线和杆塔准确且高效的识别是无人机沿电力线路实时巡检的基础[4]。

电力线识别的传统数字图像处理算法需要预先对目标特征进行数值化定义,通过某种固定特征进行匹配。Zhu等[5]通过Radon变换以及线段平行的约束条件识别电力线。骆顾平等[6]改进Ratio算子并结合轮廓特征和利用Hough变换的直线编组拟合算法识别出电力线。数字图像处理算法对与电力线形状相似的道路和房屋等有边缘特征的图像,以及多样性场景存在识别干扰,容易产生漏检和误检[7]。

检测电力线路的深度学习算法主要有电力杆塔识别的目标检测算法和电力线识别的语义分割算法。目标检测双阶段算法以R-CNN系列[8-10]为代表,该算法产生候选区域再分类和回归。单阶段算法直接预测目标的类别与位置,算法速度更快,常见有YOLO[11-14],SSD[15]等。孙乐杨等[16]增加YOLOv5模型特征层尺度以及通过切割高分辨图像后进行识别,提升遥感图像里小目标电力塔检测效果。杨知等[17]提出结合YOLOv2和VGG模型级联的目标检测算法来识别高分辨率遥感影像中的电力塔。有研究人员针对电力线的特征提出语义分割算法,但这类算法复杂度高[18-19]。深度学习算法泛化能力更强,但算力和内存空间是模型在嵌入式平台应用的瓶颈,复杂模型实时性较差,已知的算法还不能同时实现电力杆塔和电力线两类目标的检测任务。

本文在YOLOv5网络模型基础上,采用减少特征提取层Bottleneck数量和深度可分离卷积,以减少模型整体参数量和计算量;通过改进NMS算法,提升电力线和电力杆塔的检测精度;部署于嵌入式平台验证表明本算法能兼顾检测精度和速度,具有较好的实用性。

1 YOLOv5算法

YOLOv5包含5个版本的模型,它们的区别在于模型的深度和宽度不同,考虑在嵌入式平台上使用,本文选用模型体积较小,精确度适中的YOLOv5s作为基础模型,其由输入端、Backbone、Neck和Prediction四个部分组成。

1.1 输入端

输入端部分包含对图像的预处理和数据增强的方式,自适应锚框计算和自适应图片缩放。

自适应锚框计算是YOLOv5s网络在训练之前,会对锚框的长宽进行初始设定,训练过程中,网络会根据初始锚框大小输出预测框,和真实框比较计算出两者的差距,再反向更新迭代网络参数。YOLOv5s会在训练和参数迭代的过程中,根据不同的数据集,自适应计算出最佳的锚框值。

自适应图片缩放是YOLOv5s网络会自动采用相同比例将图片分辨率缩放到长宽均为32的倍数,不满足比例的一边进行填充,在保证不失真的情况下,减少计算量,加快目标检测速度。

1.2 Backbone

Backbone包含C3层和SPPF(spatial pyramid pooling-fast,快速空间金字塔池化模块)结构,用于图像的特征提取,其网络结构如图1所示。

图1 Backbone结构图

YOLOv5s新版中C3层是采用CSP(cross stagepartial connections,跨阶段局部网络)架构,包含三个标准卷积层以及多个Bottleneck模块,替换了原先设计应用于Backbone中的CSP1_X和Neck中的CSP2_X两种CSP结构,可以增强网络的学习能力,降低模型的尺寸,同时保持目标检测的精度。

SPPF模块采用多种尺寸的最大池化方式进行多尺度特征的融合,池化后的输出将作为下一池化的输入,速度比SPP(spatial pyramid pooling,空间金字塔池化模块)更快。

1.3 Neck

Neck部分包含FPN(feature pyramid networks,特征金字塔网络)和PAN(path aggregation network,路径聚合网络)的组合结构,其中FPN是通过对高低层特征进行融合,可以提高细长型电力线等小目标检测效果。PAN是自底向上方向的增强,使得深层的特征图可以获得浅层丰富的细节信息,提高大目标的检测效果。

1.4 Prediction

YOLOv5s用到的损失函数为定位损失(box_loss)、置信度损失(object_loss)和分类损失(class_loss)三部分的加权和。YOLOv5s的定位损失使用的是CIoU_loss[20],其计算过程公式如下:

(1)

其中:dc为预测框和真实框中心点间的距离,ds为预测框和真实框最小外接矩形的对角线距离,IoU为预测框和真实框的交并比,其计算公式如式(2)所示,α为平衡参数,ν用于衡量宽高比的倾斜角度,计算公式如式(3)和式(4)所示:

(2)

(3)

(4)

CIoU_Loss计算公式如下:

CIoU_Loss=1-CIoU

(5)

2 数据集制备与分析

为了验证本文提出的电力线和电力杆塔算法识别的效果,且现有公开的电网数据集较少,实验数据集采用自建的方式。

2.1 数据采集

通过无人机实地拍摄获取,拍摄地点在广东省佛山市南海区部分备用电力配网线路,再将这些视频数据进行取帧得到实验所需的图片。经过筛选整理后得到2 000张图片,并统一分辨率为1 280×720,方便后续模型的训练。数据集示例如图2所示,背景包含草地、公路、建筑和水塘等,每张图片都包含多个复杂背景下电力线目标以及多角度的电力线和电力杆塔目标,根据深度学习领域常用的8:1:1比例随机将图片分为训练集、验证集和测试集。

图2 数据集示例

2.2 标注

数据集使用在线标注工具对图片进行标注,标注的结果利用格式转换脚本转换为yolo_txt格式进行保存,每个标注txt文件存放一个图片的目标信息,文件的每一行存放一个目标的信息,包括标注标签的种类class,目标框的中点x坐标x_center,中点y坐标y_center,宽度width以及高度height。标注标签的种类包含电力杆塔tower和电力线line。

为了通过目标检测的方式对电力线进行识别,本文对电力线采用分段标注的方式,如图3所示,将图片中电力线逐一分段,每一小段打上一个电力线的标签,这种方式相比较于一个框标注一整条电力线,可以减少大量不必要的背景信息引入,同时分段小框还能用于在电力线走向的判别上,将连续的分段小框中心点连接起来,可以形成一条带方向的电力线。

图3 标注示意图

2.3 样本分析

自制电力线数据集过程中,电力线的长度和不同倾斜角度都会影响分段真实框的大小,采用人工分段不可避免存在真实框长宽不完全统一的情况,这种偏差会在一定程度上使得模型训练出来的目标框和真实框大小也会有存在偏差,并且一个分段电力线真实框尺寸本身也比较小。当且仅当目标框同样大小且位置高度重合,目标框和真实框的IoU才可能较高,而在其他大部分情况下,由于上述标注误差和电力线目标较小,目标框和真实框是较难高度重合,IoU偏小。对于常见长度和角度的电力线,在标注之前,提前固定真实框长度和宽度在一个区间内,尽可能减少引入较大的标注误差。

3 检测算法改进

本文主要从两个方面改进检测算法:(1)优化特征提取层网络结构,加快算法移植在嵌入式平台上的部署推理;(2)结合实际电力线识别的场景,改进NMS算法,提高识别效果。

3.1 轻量化特征提取网络

对特征提取网络轻量化的优化工作主要分为修改各C3层中Bottleneck数量比例和简化特征提取网络中参数量大的卷积结构两个部分,在不损失过多模型精度前提下,减少模型的参数量和计算复杂度。

3.1.1 修改Bottleneck数量比例

YOLOv5s特征提取网络的C3层主要是对残差特征进行学习的模块,比CSP结构更简单和更快,但是C3层采用多路分离卷积并且通道数较高,容易占用较多的缓存空间,降低算法运行速度,C3层的工作逻辑如下:

1)原始输入i进入一分支执行标准卷积模块,输出结果赋值给a;

2)将a传入由Bottleneck组成的模块,使用Bottleneck的数量在定义网络的时候确定,输出结果赋值给b;

3)原始输入i进入另一分支只执行标准卷积模块,输出结果赋值给c;

4)特征拼接b和c,输出结果为d;

5)对结果d执行标准卷积操作,最后返回输出。

其中Bottleneck结构如图4所示,通过1×1的标准卷积将输入特征图的通道数减小一半,再通过3×3的标准卷积将通道数扩大一倍,获得需要的特征并且通道数不发生改变,还有一个shortcut参数控制是否进行残差连接,在特征提取层默认为True,最后使用add操作进行特征融合。

图4 Bottleneck结构图

神经网络中模块的宽度、深度和数量是可以根据不同数据集需要进行定制化的设计,减少卷积的操作可以有效的减少网络的计算量,提升网络的目标检测速度。

ResNet网络中跨阶段计算分布的原始设计在很大程度上是经验值,借鉴ConvNeXt网络修改方法,将layer0到layer3层中block数量从ResNet-50的(3,4,6,3)改为(3,3,9,3)后降低计算复杂度,提高识别精度[21]。YOLOv5s的特征提取网络中包含4个C3层,分别位于第二到第五层下采样卷积层的下一层,本文将各C3层中Bottleneck数量从(3,6,9,3)改为(1,1,3,1),数量比例也是1:1:3:1,修改后特征提取网络中各个C3层的结构如图5所示。

图5 修改后各C3层结构

从图4和图5可以看出,减少各个C3层中Bottleneck模块的数量,可以减少Bottleneck中卷积和特征融合的参数量和计算量,精简网络结构,减少缓存的使用,提高模型的目标检测速度。

3.1.2 引入深度可分离卷积

在特征提取的过程中,随着网络深度的增加,特征图的通道数也在不断增加,使用传统卷积对深层特征图提取特征时,必然会有较大的参数量产生,导致算法计算运行速度较慢。本文采用深度可分离卷积[22]来替换YOLOv5s特征提取网络中最后一个卷积层结构,这个卷积的参数量是最大的,可以有效减少参数量和计算量,并且这样不会影响上层卷积的特征提取效果。

深度可分离卷积是将一个标准卷积分解成一个深度卷积(depthwise convolution)和一个点卷积(pointwise convolution),如图6所示,拆分了卷积中通道和空间相关性的联合映射,可以实现与传统卷积同样的效果且不会损失过多的识别精度。

图6 深度可分离卷积

假设输入特征图大小为W×H×C,标准卷积核大小为K×K×C,个数为N个,输出特征图大小为W×H×N,那么该标准卷积的参数量为卷积核大小与输入输出特征图通道数的乘积,计算过程如式(6)如示,计算量的计算过程如式(7)所示:

ParaSC=K×K×C×N

(6)

OSC=W×H×C×K×K×N

(7)

标准卷积核拆分之后得到深度卷积核大小为K×K×1,个数与上一层通道数相同为C个,是在二维平面上进行卷积,点卷积核大小为1×1×C,个数为N个,得到该深度可分离卷积的参数量为深度和点卷积核参数量的相加,计算过程如式(8)如示,同理计算量也为两者相加,如式(9)所示:

ParaDSC=K×K×C+C×N

(8)

ODSC=W×H×C×K×K+W×H×C×N

(9)

因此,该深度可分离卷积与标准卷积的参数量和计算量压缩比分别为:

(10)

(11)

可以看出,对于一个3×3大小的标准卷积,在输出通道数为4的情况下,经过深度可分离卷积的替换,参数量和计算量均可以减少到原来的36.1%,当输出通道数远远大于卷积核大小乘积,一个标准卷积的计算量压缩比可以大约为1/9。本文针对的卷积结构为输入特征图通道数为256个,输出特征图通道数为512个的卷积层,是特征提取网络中下采样的最后一层卷积,替换为深度可分离卷积后,参数量有较大下降,模型计算复杂度降低。

3.1.3 特征提取网络搭建

本文经过改进后YOLOv5s特征提取网络结构如表1所示,其中网络的深度超参数设置为0.33,宽度超参数设置为0.50。

表1 特征提取网络结构

从表1可见,本文算法特征提取网络包含5个卷积层,4个C3层和1个SPPF模块,第5层卷积层为深度可分离卷积,卷积核大小3×3,卷积的步长为2,最后经过特征提取后得到通道数为512的特征图,将输入到Neck和Prediction用于后续目标预测。

3.2 改进NMS算法

当一幅待测试的图像输入到训练好的目标检测网络,每个目标网格区域都会产生多个候选框,这些候选框之间会有重叠部分,NMS是一种非极大值抑制算法,用于将冗余的候选框去除,尽可能找到最佳的预测框,即一个目标对应一个预测框,原算法步骤如下:(1)将候选框集合根据置信度得分进行排序;(2)选择置信度最高的候选框添加到最终输出列表中,将其从候选框列表中删除;(3)计算所有候选框的面积,并计算置信度最高的候选框与其它候选框的IoU,删除IoU大于阈值的候选框;(4)重复上述过程,直至候选框列表为空。

置信度评分是通过候选框与对应待检测目标的概率以及候选框和真实框IoU乘积来表示该目标框预测的精度[23],其计算公式如式(12)所示:

confidence=Pr(Object)×IoU

(12)

其中:Pr(Object)表示YOLOv5s模型的候选框内存在目标的可能性,如果候选框内不存在目标,则Pr(Object)=0,IoU表示候选框位置的准确性。

由于手工标注误差的存在,IoU偏小,使得置信度整体偏小且不能很好体现位置信息。原NMS算法对电力线候选框筛选后得到的结果如图7所示。从图中可以看到,预测框没有完全覆盖整条电力线,出现了空缺漏检的情况。漏检的情况出现,可能会导致无人机因为失去实际电力线的定位信息而发生飞偏等意外事故。

图7 标准NMS算法检测效果

在实际的电力线识别当中,需要尽可能地将整条电力线路完整清晰的识别出来。原NMS算法采用置信度分数高低来对候选框进行优先筛选,但是分类置信度高的预测框不一定拥有与真实框最接近的位置,容易将定位更为准确的候选框抑制去掉[24]。本文根据电力线具有连续性这个特征,将原算法步骤(1)中根据置信度得分进行排序修改为根据候选框纵坐标y1作为排序标准,检测效果如图8所示,更能反映预测框位置信息。

图8 改进NMS算法检测效果

从图8中可以看出,修改后的预选框可以不重叠并且更加清晰紧密地将电力线识别出来,按照电力线的走向逐一排列,提高了目标检测效果。

4 实验及结果

实验中使用到的硬件配置如表2所示,软件操作系统为Ubuntu20.04,搭建环境有:CUDA版本为10.1,cuDNN版本为7.6.5,深度学习框架使用Pytorch1.10.2,图形处理工具使用OpenCV4,编程语言使用Python 3.8等。

表2 硬件配置表

4.1 数据增强

在电力线和电力杆塔检测模型训练阶段,使用包括Mosaic,Mixup[25],图片平移、缩放、翻转等数据增强方法,丰富数据集,提高模型的训练效果。

Mosaic数据增强能随机将4张电力线路图片进行缩放和裁剪,并且以不同的排布随机拼接成一副图片,如图9所示为一个批次大小(batch size)数量的图片经过Mosaic处理后的结果,在对原始图片拼接处理之后,还会以像素填充的形式将图片长和宽缩放到同一尺寸。经过这样的方式处理数据后,每次送进网络的图片,相当于包含了4张原始图片的数据信息,丰富了电力线路图片之间的关联信息,对于单GPU训练,可以减少batch size,提高训练精度。

图9 训练图片Mosaic处理

Mixup数据增强是利用线性插值的方法形成新的样本,本文增强系数为0.2,通过随机取出两张电力线路图片,将它们的特征向量和标签,对应地加权相加,得到新样本的特征向量和标签,新样本融合了两张原始图片的信息,同样可以增强模型的抗干扰能力。

4.2 训练参数及策略

在整个训练过程中,训练参数设置如下:最大训练迭代次数(epoch)为100,batch size为16,初始学习率为0.01,动量(momentum)为0.937,权重衰减(decay)为0.000 5,在一定程度上降低模型出现过拟合的可能。

训练策略用warmup来优化训练的效果[26],在模型刚开始训练时,模型的权重(weights)是随机初始化的,若选择预先设定好的学习率,可能会比较大,导致模型出现振荡的不稳定情况,而选择warmup预热学习率的方式,将前三个epoch设置为预热学习轮数,预热学习初始动量设置为0.8,学习率较小,模型可以降低训练的误差,慢慢趋于稳定,等模型相对稳定后再使用预先设置的学习率0.01进行训练,使得模型收敛速度变得更快,模型效果更佳。

本文在多次调整训练参数后得到如图10所示的损失下降曲线,其中横坐标表示训练epoch,纵坐标为损失值,从图中可以看到,YOLOv5s损失函数中三个方面的损失整体均趋于收敛,通过数据表明,模型达到较好的拟合效果,呈现稳定状态,可以用于接下来进行验证和测试。

图10 训练损失下降曲线

4.3 评价指标

在评估目标检测算法识别效果的时候,通常根据数据集特性,应用场景侧重等不同,合理选择使用一些特定的量化指标进行评判。

本文在电力线和电力杆塔检测任务当中,对算法的识别精确度,采用准确率(P,precision)和召回率(R,recall)来衡量不同算法的分类和检测性能,除此之外,针对无人机携带的嵌入式平台算力有限的算法效率优化,采用模型参数量,模型体积和每秒帧数(FPS,frames per second)作为改进算法的衡量指标。P和R的计算公式如下:

(13)

(14)

其中:TP表示算法检测为电力线和电力杆塔目标当中判断正确的数目,FP为判断错误的数目,FN表示算法没有检测出真实电力线和电力杆塔目标的数目。在判断目标框是TP还是FP时,首先是网络产生大量的预测框,通过NMS算法筛选出符合要求阈值的预测框,再分别计算真实框和这些预测框的IoU,此时如果存在符合IoU条件的预测框,那么IoU最大的预测框就确定为这个真实框的唯一正确判断结果,最后没有判断正确的预测框,均确定为错误判断结果。

从实际工程应用的角度来看,分段标注的目的在于能将分段的目标框用于无人机沿着线飞行的指引,而不是将分段的目标框和真实框一一对应起来,因此本文将上述的IoU条件设置为0.3,充分考虑到手工标注的误差存在和工程应用的需求,允许目标框位置上存在一定的偏差,更能反映不同目标检测算法的检测效果。

4.4 实验设计与结果分析

本节将从特征提取网络Bottleneck数量比例选取,不同目标检测算法对比和嵌入式平台部署三个方面设计实验并分析改进对实验结果的影响,其中对于算法测试过程中NMS算法用到的参数设置如下:IoU阈值为0.01,置信度阈值为0.25。

4.4.1 Bottleneck数量比例改进对比

在特征提取网络轻量化的改进中,本文针对各C3层中Bottleneck数量进行了修改。为了对比使用不同Bottleneck数量对算法的影响,在YOLOv5s原始特征提取网络上采用4种不同的数量比进行实验,得到对应的准确率、召回率和参数量指标,最终算法在测试集上结果如表3所示。

表3 不同Bottleneck比例效果对比

原始YOLOv5s特征提取网络中Bottleneck数量比为(3,6,9,3),从表3可以看出,其准确率为96.6%,召回率为88.9%,参数量为6.69 MB,不断减少各层Bottleneck数量,参数量不断下降,但是对准确率和召回率的影响并不明显,最后当数量比为(1,1,3,1)时,参数量为6.34 MB,减少了5.2%,准确率和召回率均有少量提升。从实验结果可以看到,Bottleneck数量比例改进是可行的,在识别精度有所提高的情况下能有效降低模型的参数量。

4.4.2 目标检测算法对比

为了验证本文算法的有效性,将本文算法与双阶段算法Faster R-CNN,单阶段算法SSD,轻量化的YOLOv4-tiny[27]和YOLOv5s进行对比,计算各个算法的准确率、召回率、模型体积和FPS指标,结果如表4所示。

表4 不同算法性能和参数对比

表4的数据均在自制电力线路数据集的训练集上进行训练,通过测试集得出的结果。从表中可以看出,YOLOv5s获得了96.6%的准确率,88.9%的召回率,两者均优于Faster R-CNN和YOLOv4-tiny,相比于SSD的召回率虽然低了8.8%,但是高了SSD的准确率37.8%,再看模型体积和FPS,YOLOv5s相比于其他算法具有绝对的优势,模型体积为14.0 MB,仅为SSD模型体积的15.4%,FPS为YOLOv4-tiny的两倍以上。

本文算法将YOLOv5s作为基础算法,在特征提取网络中引入深度可分离卷积并且减少Bottleneck数量,同时也改进了NMS算法,优化目标框的筛选机制,从表中可以看出本算法模型体积进一步压缩20.7%,有效降低了算法的参数量和计算量,在GTX1080Ti上FPS提高了17.7,虽然准确率有2.6%的下降,但是召回率有6.1%的提升,弥补了YOLOv5s在召回率上的不足,在实际电力线路检测当中,出于防止无人机巡检事故发生的角度,更加看重召回率。从对比实验可以看到,本文提出的算法在平衡识别精度和识别速度上更具有优势。

4.4.3 嵌入式平台实验

为了进一步验证本算法在实际场景中的实用性,将目标检测算法移植部署到嵌入式平台Jetson Nano上。

Jetson Nano是一款嵌入式系统主板,体积较小,适合搭载在无人机上。硬件系统其CPU为4核的Cortex-A57,GPU为基于MaxwellTM架构的128核集成CPU,有64位的4 GB LPDDR4内存,在算力方面具有472 GFLOPs,可以基本满足小型目标检测算法的实时推理过程;软件系统本文安装的是JetPack 4.4.1 SDK。

目标检测模型在训练阶段,更加注重识别精度的提升,但在模型部署阶段,部署端平台的性能会有较大的下降,因此在算法实际部署到嵌入式平台这个过程中,一般都需要加速优化算法的推理过程,包括降低计算精度、运算合并以及内存使用的优化等。本实验利用TensorRT加速推理,通过自制的测试集进行测试,同时还设置了与YOLOv5s的对比实验,对比部署后的算法模型体积和每一秒检测图片的数量,实验结果如表5所示,其中精度设置为半精度浮点型(FP16),输入图片大小为640×640。

表5 嵌入式平台算法性能对比

从表5可以看到,本文改进算法,模型体积为14.6 MB,下降了22.3%,这意味着嵌入式平台可以减少这部分模型的计算,能有更多算力完成其他功能。在识别速度上,FPS达到17.2,在原算法基础上增加了1.6,在运算资源有限的情况下基本满足实时检测的需求,测试效果如图11所示,电力线和电力杆塔能同时准确的识别出来。

图11 Jetson Nano测试效果图

为了进一步验证使用目标检测识别电力线来使无人机沿线路巡检的效果,本文将电力线目标框的中心点连接起来,如图12所示,给无人机的飞行提供电力线的方向,从而可以更好完成巡检的工作。

图12 测试验证图

实验结果表明,本文在模型结构上压缩计算量和参数量的方式,能有效优化算法在嵌入式平台上推理的速度,提高实时性。

5 结束语

针对电力线和电力杆塔检测任务,为了解决深度学习算法计算量大的问题,本文构建并标注了一个新的数据集,使用YOLOv5s作为基础目标检测算法,通过使用数量更少的Bottleneck完成对输入目标的特征提取,采用深度可分离卷积技术降低卷积计算的参数量,有效降低算法的计算复杂度,优化NMS算法,进一步提升了目标检测的召回率。通过多组对比实验表明,改进的YOLOv5s算法比原始算法在检测召回率度、模型体积和FPS指标均有一定的提升,能在嵌入式平台上同时完成电力线和电力杆塔的检测,具有较好的实时性。现有数据集所能覆盖的场景有限,接下来需要获取到更多原始电力线路样本数据,从而进一步验证算法的鲁棒性。

猜你喜欢
电力线特征提取卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种机载LiDAR点云电力线自动提取和重建方法
卷积神经网络的分析与设计
空间目标的ISAR成像及轮廓特征提取
基于Gazebo仿真环境的ORB特征提取与比对的研究
基于特征提取的绘本阅读机器人设计方案
背景复杂下航拍图像的电力线识别算法
从滤波器理解卷积
基于Daubechies(dbN)的飞行器音频特征提取
基于傅里叶域卷积表示的目标跟踪算法