基于YOLOX的输电线路异物检测算法研究及软件设计_有系统有文献,整体认知蛮好的

  • 我国自改革开放以来,大力发展工业和经济,对电能同样有着巨大的需求,所需求的电能不仅需要保证其数量,还要保障其质量,因此对整个电力系统安全稳定的运行也提出了更高的要求,电力系统发生故障要实时检测并及时排除,避免造成严重的安全事故和经济损失.

  • 我国输电线路巡检基本以人工巡检方式为主,但传统的人工巡检方式效率低,限制多,还往往会消耗大量的人力物力,后来引入直升机沿线巡检的方法,但该方法飞行作业十分危险且培训及维护费用极其昂贵,无法在很大程度上缓解人工巡检带来的问题。

  • 最近几年,GPU 计算能力不断提升,越来越多研究者选择将机器视觉技术与深度学习算法相结合进行目标检测算法技术的研究及应用,因此机器视觉技术的应用场景也越来越丰富。比如人脸识别、自动驾驶、医学图像分析,甚至在各种工业机器人中也搭载了目标检测算法,电气领域也不例外,在变电站和输电线路巡检的工作中,也有不少得益于目标检测算法。

  • YOLOX 是由旷视科技的研究人员在 2021 年提出的最新的深度学习目标检测算法。该算法进行了如下改进措施:在输入端加入了 Mosaic 数据增强的基础上,加入了 Mixup 数据增强效果;在 Backbone 和 Neck 结构层,将激活函数换成了 SiLU 函数;在网络结构的输出端,将检测头改为 Decoupled Head、采用anchor free、multi positives、SimOTA 的方式,提升网络模型的计算精度。所研究的输电线路异物检测问题,在对上述模型进行一定的比较分析之后,选择了最新的单阶段深度学习目标检测框架 YOLOX 作为异物目标信息的检测算法。

  • 为了缓解传统人工巡检带来的压力,直升机巡检的方式应运而生,其时间可以追溯到 20 世纪 50 年代,国外开始引入直升机巡检的方式对输电线路进行巡检,到了 20 世纪 90 年代,直升机巡检的方式已在西方各发达国家中广泛使用。由于直升机巡检本身也存在许多弊端,后来各国陆续开展巡线机器人以及无人机的研究。

  • 无人机巡检的技术,起始于 20 世纪末。1995 年,英国威尔士大学和 EA电力咨询公司联合研发了一种小型旋翼无人机,在输电线路巡检工作中具有一定的可行性。美国电科院则设计了相关的无人机平台,通过其搭载的摄像机在输电线路巡检中完成了识别大尺寸设备的试验

  • 在输电线路智能巡检技术方面,国外的起步要比国内早,且硬件方面的研究工作也比国内要领先。我国虽然还有许多不足之处,但在该领域具备长足的潜力,以后的输电线路巡检也定会朝更加智能、更加实用的方向发展。

  • 输电线路异物分布范围广,种类多,在杆塔上可能存在鸟巢、风筝、绳索等杂物,在架空线上也可能搭挂风筝、气球、塑料薄膜等杂物,因此检测存在一定的难度。在异物检测算法方面,电力研究者也进行了许多相关研究。

  • 文献[Detection of Bird Nests on Power Line Patrol Using Single Shot Detector]利用 SSD 对输电线路鸟巢进行识别,将检测结果裁剪为子图像,再结合 HSV 颜色空间模型过滤掉不包含鸟巢的子图像,使识别准确率增加到98.23%,大幅提升了检测精度。文献[Detection of bird species related to transmission line faults basedon lightweight convolutional neural network]提出一种使用 YOLO 轻量化网络YOLOv4-tiny 网络模型的输电线路鸟类检测算法,结合分段训练、数据增强等策略,将文献中构建的 20 中鸟类图像数据集检测精度提升到 92.04%,为预防鸟害造 成 的 电 网 停 电 提 供 了 依 据 。 文 献 [RCNN-based foreign object detection for securing power transmission lines (RCNN4SPTL)] 提 出 了 一 种 新 的 深 度 学 习 网 络RCNN4SPTL,用于输电线路上的固定异物检测,其使用了 RPN 生成候选框匹配异物的尺寸,同时使用了端到端的训练方式提高性能,相比原始的 Faster RCNN检测速度和识别精度均有所提升。文献[Foreign object detection of transmission lines based on Faster R-CNN]采用了 Fast-RCNN 网络模型,对传输线内的风筝、气球等异物进行检测,相比传统的目标检测方法,其克服了人工特征提取的不稳定性,还提升了传输线中异物检测准确性。文献[一种新的输电线路异物检测网络结构——TLFOD Net]设计了 TLFODNet 输电线路异物检测网络,并且使用了端对端的训练方式提高网络性能,在识别速度和精度方面均取得了突破。文献[Neural detection of foreign objects for transmission lines in power systems]在传输线异物检测领域应用了YOLOv3 网络,并融入迁移学习和数据增强的方法用来缓解数据集容量太小的问题,验证了使用迁移学习策略和数据增强方法的有效性。文献[Study on the method of transmission line foreign body detection based on deep learning]使用了 SSD 进行异物检测算法研究,与 DPM、Faster R-CNN 进行了对比评估,较高的 mAP 和FPS 也反映了其进行异物检测任务的准确性和实时性。文献[Feature GANs: a model for data enhancement and sample balance of foreign object detection in high voltage transmission lines]提出一种基于对抗神经网络 GANs 的数据增强方法,改善了输电线路异物检测中样本不足或不平衡的情况,显著提高了几种经典 CNN 模型的分类性能。文献[Deep Learning-Based Bird’s Nest Detection on Transmission Lines Using UAV Imagery]提出一种增加感兴趣区域挖掘的区域卷积神经网络(RCNN)对鸟巢进行自动检测,解决了分类阶段类别不平衡问题,其平均精度值(mAP)与 F1 分数均高于 RCNN 和级联RCNN。基于YOLOX的输电线路异物检测算法研究及软件设计 - 中国知网 (cnki.net)

  • 图像分为模拟图像和数字图像两类:模拟图像是人们眼睛所感受认识到的,其值域是连续的;而数字图像是计算机等电子设备所认识到的事物,其值域是离散不连续、有限的。

  • 图像的噪声是指图像中各种阻碍人们获取图像信息的因素。在图像的收集和传输过程中,由于各种噪声的不确定影响会导致图像品质的降低,会对后续目标检测模型训练过程中图像特征信息的提取造成严重的影响。CCD 相机拍摄的数字图像中的噪声的主要种类有暗电流噪声、读出噪声、模式噪声、光子噪声、热噪声以及量化噪声。暗电流噪声是指在入射光照缺乏的条件下,通道中输出的反向电流,会形成背景的白噪声;读出噪声是指读出电路里面的电子器件带有的固定噪声和电路设计带来的噪声;模式噪声是指数字图像的形成过程中,相机传感器对于光子强度和数量的捕捉,会受到感光元件性能的影响,有一定的损失,就会形成图像的噪声;光子噪声是指在一定的光照条件下,达到传感器的光子数量也是随机的,不确定的光子数量也会造成图像形成过程的噪声;热噪声是在电子元件和传输介质工作的时候发热形成的,任何的放大电路都会存在热噪声,形成图像噪声;量化噪声是图像在模数电话量化转化的过程中,由于采样过程中的信息损失和近似误差形成的一种噪声。影像的通讯信号如果在使用过程中受到了严重的干扰,则在图像中经常出现椒盐噪声,在图像中随机位置出现白点或黑点,具体表现为也就是在亮的区域内存在黑色像素,抑或是在暗的图像区域内存在白色像素。

  • 图像的噪声一般具有以下特点:噪声在图像中的分布具有随机性,无论是噪声的分布还是噪声大小都是不规则的;噪声具有叠加性,在图像的串联传输系统中,同类噪声可以进行功率的相加,噪声效果得以加强,更加严重的降低图像的质量;图像和噪声之间还具有相关性,摄像机的信号会对噪声的大小有影响,比如图像中的黑暗区域的噪声大,图像中明亮区域的噪声会偏小,还有数字图像中的量化噪声还与图像的相位有关,当图像里的内容较为平坦时,量化噪声呈现伪轮廓,但如果图像中存在有随机噪声,会因为颤噪效应使得图像中的量化噪声变得不明显。

  • 图像的特征提取会受到噪声的影响,限制了后面图像处理算法的效果,因此图像的去噪已经成为图像预处理过程中不可少的一步。图像的去噪也可以称为图像的平滑处理,主要是对图像采用各种滤波算法以减少噪声,常用的方法有均值滤波、高斯滤波、中值滤波和双边滤波等

  • 均值滤波为典型的线性滤波算法,主要方法为邻域平均法,即通过模板求像素邻域的均值代替原像素值。在进行均值滤波时,需要先给出一个滤波卷积核模板,对当前待处理的像素点(x,y),选择由该点和其周围的若干像素组成一个模板,求该模板中所有像素值的均值,然后把该均值赋予给像素点(x,y),作为处理后在该点上的像素值。均值滤波的抑制噪声效果好,但在去噪过程中不能很好保护图像的细节,会造成图像模糊

  • 高斯滤波是一种线性平滑滤波,对图像中的高斯噪声有一个很好的去除作用,在图像的去噪过程里得到了广泛的使用。高斯滤波就是对整幅图像的像素点进行加权平均的过程。高斯滤波后的图像中每一个像素点的值,都是用本身和邻域内其它像素的加权平均值替代原像素值,用于噪声的平滑消除

  • 中值滤波是一种典型的非线性滤波技术,采用邻域内像素的中值代替原像素值来去除噪声。其需要通过基本排序统计理论对所求像素点以及其领域内的像素值进行排序处理,然后选取排序后的中值代替当前的像素值,让周围的像素值接近真实值,从而消除孤立的噪声点。中值滤波由于不依赖领域内那些与典型值差别很大的值,所以椒盐噪声和斑点噪声的去除有显著效果,且能保护信号边缘不被模糊,但需要进行像素排序,计算量大。

  • 双边滤波是一种非线性的滤波方法,考虑到空间信息和灰度的相似性,结合图像的空间邻近度和像素相似度进行一定处理,以达到去噪音的目的。双边滤波器可以很好的做到边缘保护,对图像中的高频细节有很好的保护效果,但是也导致了双边滤波器不能够将图像中的高频噪音干净的滤掉,只能对低频的噪音有一个很好的去除效果

  • 图像去噪处理通过滤波降低嗓声点干扰,实现图像平滑,但滤波会对特征信息削弱从而造成图像细节丢失。在实际进行图像处理时,应当综合考虑嗓声消除与细节保留这两方面因素,选择合适的图像去嗓方法。均值滤波不能很好的保存图像的细节,在去噪的同时也对图像的细节部分也造成了一定程度的破坏,会造成边缘模糊;高斯滤波在有利于去除高斯噪声,能较柔和的保留边界,但依然较难完全去除椒盐噪声;中值滤波在去除嗓声的效果较好,能够在去除图像噪声的同时,对图像的边缘特性进行保存,但由于需要进行排序操作,花费的时间是均值滤波的五倍以上;双边滤波方式能够有效的去除图像中的低频噪音,对做到图像的较好边缘保存效果,但是对高频噪音不能很好的去除。因此根据具体情况选择合适的滤波方法对后续的工作会有很大的帮助。

  • 由于卷积操作属于线性变换,得到的输出也是线性的,如果不加入激活函数,那么不论有多少个设计网络层,输入与输出都是线性的,与没有隐藏层的效果是一样的,因此还需要引入激活层对其进行非线性处理。常用的激活函数有 Sigmoid、Tanh、Relu,Softplus 和 Dropout 函数等。各激活函数的对比如下表示。

    • 在这里插入图片描述
  • 在卷积神经网络网络层次比较浅时,通常会使用激活函数 Sigmoid 函数和Tanh 双曲正切函数。但是大部分数值在经过 Sigmoid 函数和 Tanh 函数之后,由于两者的导数都比较小,多个值很小的导数相乘,导致得到的运算结果很小,当卷积神经网络结构越来越深,梯度后向传播到前层网络的时候,就无法引起参数的扰动,也就是说没有将 loss 的信息传递到前层网络,便会导致网络结构无法进行学习,从而形成梯度消失现象

  • 为了规避了饱和激活函数 Sigmoid 函数和 Tanh 函数的梯度消失问题,研究人员提出了 Relu 激活函数。Relu 函数的梯度只有两个值 0 和 1,输入大于 0 时,梯度为 1;输入小于 0 时,梯度为 0。Relu 函数的梯度连乘不会收敛到 0,只有两个值 0 和 1。当值为 1 时,会继续前向传播;若值为 0,则会从此处停止前向传播,从而解决了 Sigmoid 函数和 Tanh 函数的梯度消失问题。同时相对于 sigmoid函数,由于 Relu 函数的梯度只有 0 和 1,并且函数的负值部分被截断为 0,避免了无用信息的干扰,进一步提高了网络结构的计算速度.

  • Relu 函数虽然能够提高网络计算的速度,但会面临着神经元死亡的问题。对于输入数据总是负值的情况,在反向传播的过程中,由于 Relu 函数的倒数在输入为负值时候总是为 0,对应的权重和偏置参数就无法得到更新,神经元就无法得到学习。针对神经元死亡的情况,提出了 LeakyRelu 激活函数,在输入小于 0时,给激活函数赋予一个很小的梯度值,使得在反向传播时(不会像Relu 函数一样梯度为 0),这样就避免了神经元得不到学习的情况

  • 相对于 LeakyRelu 激活函数,Mish 激活函数是一个非单调函数,在保持小的负值的同时,能够稳定网络的梯度流,让更多的神经元得到更新。Mish 函数还是一个光滑函数,具有很好的泛化能力以及结果的优化能力,可以让结果的质量得到进一步的提升

  • 激活函数的选择也是卷积神经网络搭建的一个重要工作,Tanh 函数适用于输入数据特征相差比较明显的情况,因为在循环过程中特征会被其不断放大并显现出来。反之,则可选用 Sigmoid 函数,同时 Sigmoid 函数也相当适用于二分类问题。另外,当激活函数选用 Sigmoid 和 Tanh 时,输入需规范化,否则激活后的值全部都进入平坦区,导致隐层的输出会全部趋同,甚至丧失原有的特征表达。而 Relu 相比二者优势明显,其计算量较少,且未必要对输入规范化,但其只能应用于隐藏层。目前大部分的卷积神经网络都采用 Relu 作为激活函数。

  • 池化层进行下采样,压缩了图像数据和参数,可以减少训练参数的数量,可以有效加快网络运行速度。同时,其还可以有效保留图像的信息并减少噪声传递。池化层输入即为卷积层输出的原数据与卷积核进行卷积操作后的特征图像。常见的池化方式有两种,一是最大池化,选取指定区域内的最大特征数字来代表整个区域,注重图像的纹理信息;一是均值池化,选取指定区域内所有特征数字的均值来代表整个区域,注重图像的背景信息

  • 在经过多个卷积层和池化层的处理以后,将得到的特征向量传输到全连接层中,全连接层中每个神经元都与前一层所有的神经元全部连接。比如经过多层卷积池化以后得到的特征图的大小 5*5*256,则在全连接层中,会将这些神经元整合成一维向量,也就是 6000 个神经元结构,全连接层再与分类器连接完成图像的分类任务。并且为了防止卷积神经网络过拟合现象的产生,可以加入 Dropout随机失活,让模型更具有鲁棒性,提高模型的泛化能力

  • 将进入输出层的一维特征向量,经过 Softmax 函数完成图像的分类操作。同时需采用不同的目标函数评估模型对数据的拟合程度,常用的损失函数有均方、交叉熵和指数损失函数等。几种常用的损失函数比较如下:

    • 均方误差(Mean Squared Error):均方误差是指参数估计值与参数真值之差平方的期望值;MSE 可以评价数据的变化程度,MSE 的值越小,说明预测模型描述实验数据具有更好的精确度。

    • M S E = 1 N ∑ i = 1 N ( y ( i ) − f ( x ( i ) ) ) 2 MSE=\frac1N\sum^N_{i=1}(y^{(i)}-f(x^{(i)}))^2 MSE=N1i=1N(y(i)f(x(i)))2

    • 均方根误差:均方根误差是均方误差的算术平方根,能够直观观测预测值与实际值的离散程度。通常用来作为回归算法的性能指标。

    • R M S E = 1 N ∑ i = 1 N ( y ( i ) − f ( x ( i ) ) ) 2 RMSE=\sqrt{\frac1N\sum_{i=1}^N(y^{(i)}-f(x^{(i)}))^2} RMSE=N1i=1N(y(i)f(x(i)))2

    • 平均绝对误差(Mean Absolute Error):平均绝对误差是绝对误差的平均值,平均绝对误差能更好地反映预测值误差的实际情况。通常用来作为回归算法的性能指标。

    • M S E = 1 N ∑ i = 1 N ∣ y ( i ) − f ( x ( i ) ) ∣ MSE=\frac1N\sum^N_{i=1}|y^{(i)}-f(x^{(i)})| MSE=N1i=1Ny(i)f(x(i))

    • 交叉熵代价函数(Cross Entry):交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。

    • H ( p , q ) = − ∑ i = 1 N p ( x ( i ) ) l o g q ( x ( − i ) ) H(p,q)=-\sum_{i=1}^Np(x^{(i)})logq(x^{(-i)}) H(p,q)=i=1Np(x(i))logq(x(i))

    • 其中 p(x)是指真实分布的概率,q(x)是模型通过数据计算出来的概率估计。比如对于二分类模型的交叉熵代价函数:

    • L ( w , b ) = − 1 N ∑ i = 1 N ( y ( i ) l o g f ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − f ( x ( i ) ) ) L(w,b)=-\frac1N\sum^N_{i=1}(y^{(i)}logf(x^{(i)})+(1-y^{(i)})log(1-f(x^{(i)})) L(w,b)=N1i=1N(y(i)logf(x(i))+(1y(i))log(1f(x(i)))

    • 其中 f(x)可以是 sigmoid 函数,或深度学习中的其它激活函数。而 y(i)∈0,1,通常用做分类问题的代价函数。

  • Torch7 的发展趋势在 2017 年得到了改变,来自 Facebook FAIR 和其他多家实验室的研究人员决定要重新改造 Torch7,在保留 Torch7 简洁方便的程序编写风格和强大的后端运算能力的同时,使用 Python 语言代替了原来使用的 Lua 语言,借助 python 语言完善的开源基础设施,让 Torch7 深度学习框架的重造得以实现,一个全新的 PyTorch 可微分编程深度学习框架出现在人们眼前。

    • PyTorch 的语言简洁,代码层次清晰,模块划分合理。PyTorch 的设计使得开发者可以从张量、变量和神经网络三个层次进行修改。PyTorch 主要分为基础矩阵运算部分,实现自动微分的计算图和神经网络的计算层和单元,这种更直观的设计,使得 PyTorch 的源代码十分易读,并且源代码的量只有 TensorFlow 的十分之一左右。

    • PyTorch 具有简单的数据处理方式,快捷的模型保存与加载,方便的分布式计算方式。PyTorch 支持常见计算机领域内的数据增广方法,torchvision 模块更是包含了许多数据增广操作;模型的保存与加载可以直接通过 save,load-state-dict 方法进行操作,并且 torchvision 模块还包含了很多常见的 CNN 模块以及其预训练权重那个,为神经网络的迁移学习提供了助力;分布式计算方式则无需考虑多个计算图之间交互问题,直接利用 torch.nn.DataParallel 实现单机多卡运算。

    • PyTorch 深度学习框架的安装简单,性能更优。PyTorch 的安装十分简单,可以通过 Anaconda 的包管理系统直接安装,并且可以继续安装 PyTorch 所需要的一些必要组件;针对于同样的算法,使用 PyTorch 实现更有可能快过其他的深度学习框架,PyTorch 框架的易用性和可读性的优点更加的突出。

  • 使用 LabelImg 标注工具对上节获取的异物检测数据集进行标注,将标签名称分别命名为 nest、balloon、kite 以及 trash,并存储为 VOC2007 标准数据集。标注界面与存储内容分别如下图所示,其中 VOC 数据集中 JPEGImages 文件夹下存储“.jpg”格式的异物数据集图片,Annotations 文件夹下存储通过LabelImg 标注生成的“.xml”格式的标签文件,标签文件内容包含了异物的标签名称及标注框坐标等信息,ImageSets 存储后续划分数据集的相关设置文件,在训练前进行划分

    • 在这里插入图片描述
  • 颜色变换通过调节 RGB 图像三通道的像素值大小实现,主要采用亮度调节的方式进行亮度方面的数据增强,调节亮度只需在三个通道对其像素值按照一定规律增减即可改变图像的亮度。RGB 图像的亮度为:

    • L = 0.299 R + 0.587 G + 0.114 B L=0.299R+0.587G+0.114B L=0.299R+0.587G+0.114B

    • 对图像进行加噪和加雾可以分别对图像采集过程中的噪声和恶劣天气下的环境进行模拟,其中图像加噪声主要加高斯噪声。

  • 实际应用中还会用到图像混叠的方式进行数据增强,通过拼接、混叠等方式将若干张图片合成为一张新的图片。常用的图像混叠类的数据增强方式有 CutMix、Mosaic 和 Mixup 等。CutMix 是将两张图片进行裁剪后拼接而成的图片,设𝑥𝑖与𝑦𝑖分别为训练样本 i 及其标签值,𝑥𝑗与𝑦𝑗分别为训练样本 j 及其标签值,𝑥̃和𝑦̃为经过 CutMix 生成的新样本和及对应的标签值.

    • x ^ = M ⊙ x i + ( 1 − M ) x j y ^ = λ y i + ( 1 − λ ) y j \hat x=M\odot x_i+(1-M)x_j\\ \hat y=\lambda y_i+(1-\lambda)y_j x^=Mxi+(1M)xjy^=λyi+(1λ)yj

    • M 为裁剪部分及填充部分的二进制掩码,是一个元素为 0、1 的矩阵;☉为逐像素相乘的运算;λ服从 Beta 分布:λ~Beta(α, α),当α = 1时,为(0, 1)的均匀分布。CutMix 通过二进制掩码矩阵 M 对两张图片进行互补裁剪,再将两者拼接到一起,扩大了数据集容量,可以在有限的图片中获得更多的异物信息,对后续模型训练的分类效率有一定的提升作用

  • Mosaic 数据增强方法与 CutMix 类似,但是 Mosaic 使用了四张图片进行拼接生成新的训练图片。丰富了异物检测时的背景,并且在后续 BN 计算时会计算四张图片的数据。Mosaic 数据增强方法的实现思路可以分为如下三步:

    • 随机读取 JPEGImages 文件夹中四张图片;

    • 将读取到的四张图片进行简单的空间、颜色变换,并将四者按左上、左下、右上、右下的位置进行摆放;

    • 进行四张图片的组合和其目标框的对应组合,并保留有效的目标框。

    • 在这里插入图片描述

  • Mixup 是一种基于混叠的数据增强方式,是将两张图片进行混合生成的。设𝑥𝑖与𝑦𝑖分别为训练样本i 及其标签值,𝑥𝑗与𝑦𝑗分别为训练样本j 及其标签值,𝑥̃和𝑦̃为经过Mixup 生成的新样本和及对应的标签值:

    • x ^ = λ x i + ( 1 − λ ) x j y ^ = λ y i + ( 1 − λ ) y j \hat x=\lambda x_i+(1-\lambda)x_j\\ \hat y=\lambda y_i+(1-\lambda)y_j x^=λxi+(1λ)xjy^=λyi+(1λ)yj

    • 与 CutMix 数据增强公式不同的是,Mixup 没有二进制掩码矩阵,λ服从 Beta分布:λ~Beta(α, α),当α = 1时,为(0, 1)的均匀分布。Mixup 对异物识别的背景也起到了丰富的作用,对模型训练效果有一定的提升

    • 在这里插入图片描述

  • 传统的目标检测算法如 SIFT、HOG 等以特征提取、目标识别及目标定位的依次顺序对图像进行目标检测,其特征工具往往都为人工设计,这样的检测方法十分复杂且耗时,且难以满足实时性要求,检测效果也不大理想。

  • R-CNN 目标检测算法主要分为以下 4 步进行:

    • 候选区域生成。利用不同尺寸的窗口对输入图像进行滑动检索,并通过 selective search 方法生成共 1000 至 2000 个候选区域(region proposal);

    • 特征提取。对不同大小的候选区域进行缩放,统一为 227*227 的尺寸后输入到 CNN 进行特征提取;

    • 类别判定。通过将提取到的特征输入到每一类的分类器中,判别其是否属于某一类别,分类器多选用 SVM、Adaboost 等。

    • 位置校正。利用回归器校正候选框的位置,对分类器已完成分类的候选区域进行边框回归,利用 Bounding Box 回归值校正原来的候选区域,生成更加准确的预测窗口目标。

  • 其中,第一步中提取到的候选框数据较大,还要进行后续几步的特征提取与分类器分类,计算量巨大,一张图甚至需要四十几秒的时间完成检测,检测速度堪忧

  • 为了改进这一问题,2015 年时 R-CNN 原作者采纳了 SPPNet 的思想,对原R-CNN 进行改进,于是更快更准的 Fast-R-CNN 诞生了,相比于原 R-CNN 算法,其主要有以下三种改进:

    • 卷积计算直接针对整张图像,而非对每个候选区域进行计算,避免了重叠候选区域的重复计算过程,大大提升了在特征提取过程中的计算速度

    • 采用感兴趣区域池化层(ROI pooling layer)进行特征的尺寸变换,便于对之后全连接层的输入,此处借鉴了 SPPNet 的空间金字塔结构;

    • 损失函数采用了多任务损失函数(multi-task loss),去掉了基础网络VGG16 后边的结构,使用 Softmax 函数代替 SVM 分类器,可以将多分类任务同时进行,在速度和精度上可以获得比 SVM 更好的效果。而且将边框回归也直接加入到 CNN 网络中进行训练

  • 深度学习网络模型训练将消耗大量的时间,如果从零开始训练,将会大大延长训练时间。模型的特征提取能力在随机化参数的情况下极差,严重情况下甚至无法使网络正常收敛。因此需要使用迁移学习的方法进行模型优化,迁移学习(Transfer Learning)是指将一个任务的网络结构和权值迁移到另一个任务中,使其可以在该任务中产生较好的效果。适合这种样本不足的情况,将通用特征的学习从已训练好的网络模型中迁移到输电线路异物检测网络中,既可以节省训练时间,又可以得到较好的识别效果。

  • 除此之外,为了缓解硬件对训练的限制,对训练样本进行分批处理,批(batch)是每次进行迭代模型要处理的图片数量。batch 的大小在一定程度上会对网络的梯度下降速度有影响,选用较大的 batch 将会提升网络的梯度下降速度,然而由于硬件限制,batch 的值不能无限制地大,太大的 batch 将会使显存爆满,中断训练过程

  • 学习率(learning rate)是训练期间权重更新的量,是网络训练中使用的可配置超参数,取值范围为 0.0 至 1.0.过大的学习率在网络模型训练的前期加速学习,使得模型容易接近局部或全局最优解,但后期可能会导致损失函数的值一直振荡,难以达到真实的最优解。而学习率太小,会导致网络损失的收敛速度下降,甚至可能不会收敛,陷入次优解的范围。因此在训练前期设置学习率为 0.001,后期采用学习率余弦退火(cosine annealing)衰减的方法对学习率进行适度下降。学习率余弦退火衰减是指通过余弦函数的形式对学习率进行调整,先缓慢下降,然后加速下降,再缓慢下降,学习率的更新机制如下式所示:

    • 在这里插入图片描述

    • 其中,learning_rate 表示初始学习率,global_step 表示用于衰减计算的全局步数,decay_steps 表示衰减步数,α表示最小学习率。

  • 优化器(Optimizer)是在深度学习网络反向传播过程中使损失函数不断逼近全局最小的一种权值参数更新算法。作为最原始的优化器随机梯度下降法(SGD,Stochastic Gradient Descent),其计算量太大,且较容易收敛到局部最小值,因此可以选用收敛能力更强且计算效率更高的 Adam 梯度下降法。其权重更新方式如公式所示:

    • θ t + 1 = θ t − η v ^ t + ϕ m ^ t m ^ t = m t 1 − β 1 t v ^ t = v t 1 − β 2 t \theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{\hat v_t+\phi}}\hat m_t\\ \hat m_t=\frac{m_t}{1-\beta^t_1}\\ \hat v_t=\frac{v_t}{1-\beta^t_2} θt+1=θtv^t+ϕ ηm^tm^t=1β1tmtv^t=1β2tvt

    • 其中,𝜃𝑡、𝜃𝑡+1表示 t、t+1 时刻的梯度,η表示学习率,𝑚̂𝑡,𝑣̂𝑡分别表示梯度的一阶、二阶矩估计修正值,𝛽1、𝛽2分别表示一阶、二阶矩的指数衰减率,𝑚𝑡、𝑣𝑡分别表示梯度的一阶、二阶矩,其中,𝑔𝑡表示 t 时刻的梯度值。其公式如下:

    • m t = β 1 m t − 1 + ( 1 − β 1 ) g t v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 m_t=\beta_1m_{t-1}+(1-\beta_1)g_t\\ v_t=\beta_2v_{t-1}+(1-\beta_2)g^2_t mt=β1mt1+(1β1)gtvt=β2vt1+(1β2)gt2

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

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

相关文章

Kafka—工作流程、如何保证消息可靠性

什么是kafka? 分布式事件流平台。希望不仅仅是存储数据,还能够数据存储、数据分析、数据集成等功能。消息队列(把数据从一方发给另一方),消息生产好了但是消费方不一定准备好了(读写不一致)&am…

Vscode详细安装教程

Vscode官网下载 官网地址:Download Visual Studio Code - Mac, Linux, Windows 通过链接可以直接跳转到下面的页面当中,支持的版本有Windows、Linux、Mac,可以选择适配自己电脑的版本,一般来说应该是Windows x64的。不要直接点W…

MySQL高级篇——MySQL架构篇1(Linux下MySQL8的安装与使用)

目录 0 安装前0.1 Linux系统及工具的准备0.2 查看是否安装过MySQL0.3 MySQL的卸载 1 MySQL8的Linux版安装1.1 MySQL的4大版本1.2 下载MySQL指定版本1.3 CentOS7下检查MySQL依赖1.4 CentOS7下MySQL安装过程 2 MySQL登录2.1 首次登录2.2 修改密码2.3 设置远程登录 3 MySQL 8 的密…

【C语言】写一个程序,输入数量不确定的【0,9】范围内的整数,统计每一种数字出现的次数,输入-1表示结束

题目 写一个程序&#xff0c;输入数量不确定的【0,9】范围内的整数&#xff0c;统计每一种数字出现的次数&#xff0c;输入-1表示结束 代码 #include<stdio.h> int main() {int x;int i;int a[10];for(i0; i<10; i){//初始化数组 a[i] 0;}scanf("%d",&am…

Vim在Mac电脑中的下载与安装方法:MacVim

本文介绍在Mac系统电脑中&#xff0c;下载、安装文本编辑器Vim软件&#xff08;MacVim软件&#xff09;的具体方法。 在Mac系统电脑中&#xff0c;原本就带有一个非图形界面的Vim&#xff1b;只要我们在终端中&#xff0c;输入如下的代码&#xff0c;就可以查看系统自带的非图形…

深度学习入门-3-计算机视觉-卷积神经网络

一、计算机视觉 1.概述 计算机视觉作为一门让机器学会如何去“看”的学科&#xff0c;具体的说&#xff0c;就是让机器去识别摄像机拍摄的图片或视频中的物体&#xff0c;检测出物体所在的位置&#xff0c;并对目标物体进行跟踪&#xff0c;从而理解并描述出图片或视频里的场…

ThinkPHPV5.1.25中使用file_exists等函数没有触发phar://的反序列化的destruct魔术方法执行的问题

上图file_exists方法会触发phar://伪协议对phar文件的反序列化对象的操作。 在thinkphp框架中目标对象的wakeup魔术方法是会执行的&#xff0c;但是destruct魔术方法不一定会。 因为像我碰到的问题就是我的项目主目录下的/runtime目录没有Web服务器用户的写入权限会导致日志写…

博客系统之单元测试

对博客系统进行单元测试 1、测试查找已存在的用户 测试名称 selectByUsernameTest01 测试源码 //查找用户&#xff0c;存在 Test public void selectByUsernameTest01 () { UserDao userDao new UserDao(); String ret1 userDao.selectByUsername("张三").toStr…

【学习日记】【FreeRTOS】任务调度时如何考虑任务优先级——任务的自动切换

写在前面 本文开始为 RTOS 加入考虑任务优先级的自动调度算法&#xff0c;代码大部分参考野火。 本文主要是一篇学习笔记&#xff0c;加入了笔者自己对野火代码的梳理和理解。 一、基本思路 首先我们要知道&#xff0c;在 RTOS 中&#xff0c;优先级越高、越需要被先执行的的…

解析大规模开发:提升企业级开发效率与质量,加速创新

在数字化转型的大环境下&#xff0c;越来越多的企业依赖软件来驱动业务和创新。然而&#xff0c;随着开发规模日益庞大&#xff0c;如何更好地提升研发效能&#xff0c;从而塑造更强大的竞争力&#xff0c;已然成为众多企业亟待解决的共同难题。 作为国内领先的DevSecOps提供商…

运放和三极管构成的恒流源电路

这是一个由运放和三极管构成的恒流源电路&#xff0c;RL为负载电阻&#xff0c;R1为采样电阻。 流过三极管集电极的电流 下面分析下这个电路的工作原理。首先我们可以看到这个运放引入了负反馈&#xff0c;所以它工作在线性区的&#xff0c;就有VINVPVN。 所以流过采样电阻R1的…

C#程序变量统一管理例子 - 开源研究系列文章

今天讲讲关于C#应用程序中使用到的变量的统一管理的代码例子。 我们知道&#xff0c;在C#里使用变量&#xff0c;除了private私有变量外&#xff0c;程序中使用到的公共变量就需要进行统一的存放和管理。这里笔者使用到的公共变量管理库划分为&#xff1a;1)窗体&#xff1b;2)…

OpenCV-Python中的图像处理-GrabCut算法交互式前景提取

OpenCV-Python中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode…) img…

基于Java+SpringBoot制作一个智能用电小程序

在当今快节奏的生活中,高效利用能源变得越来越重要。制作一个智能用电小程序,旨在帮助您更智能地管理家庭电器的用电,从而提升能源利用效率,助您掌握用电情况,降低能耗成本,实现绿色低碳生活。 目录 一、小程序1.1 项目创建1.2 首页轮播图快捷导航iconfont图标引入

GSM/CDMA/VoLTE/VoIP通话

1.GSM(Global System for Mobile Communications) 本质是一种多址技术&#xff0c;将多个通话放入一段无线电频道的方法。特点是通过“时间划分”&#xff0c;称为时分多址。 2.CDMA(Code Division Multiple Access) 一种多址技术&#xff0c;将多个通话放入一段无线电频道的…

AIGC绘画:kaggle部署stable diffusion项目绘画

文章目录 kaggle介绍项目部署edit my copy链接显示 结果展示 kaggle介绍 Kaggle成立于2010年&#xff0c;是一个进行数据发掘和预测竞赛的在线平台。从公司的角度来讲&#xff0c;可以提供一些数据&#xff0c;进而提出一个实际需要解决的问题&#xff1b;从参赛者的角度来讲&…

async/await 编程理解

博客主要是参考 Asynchronous Programming in Rust &#xff0c;会结合简单的例子&#xff0c;对 async 和 await 做比较系统的理解&#xff0c;如何使用 async 和 await 是本节的重点。 async 和 await 主要用来写异步代码&#xff0c;async 声明的代码块实现了 Future 特性&a…

批量爬虫采集完成任务

批量爬虫采集是现代数据获取的重要手段&#xff0c;然而如何高效完成这项任务却是让许多程序员头疼的问题。本文将分享一些实际操作价值高的方法&#xff0c;帮助你提高批量爬虫采集的效率和专业度。 目标明确&#xff0c;任务合理划分&#xff1a; 在开始批量爬虫采集前&…

Linux:安全技术与防火墙

目录 一、安全技术 1.安全技术 2.防火墙的分类 3.防水墙 4.netfilter/iptables关系 二、防火墙 1、iptables四表五链 2、黑白名单 3.iptables命令 3.1查看filter表所有链 iptables -L ​编辑3.2用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.3 清空所有链…

SpringCloud Ribbon中的7种负载均衡策略

SpringCloud Ribbon中的7种负载均衡策略 Ribbon 介绍负载均衡设置7种负载均衡策略1.轮询策略2.权重策略3.随机策略4.最小连接数策略5.重试策略6.可用性敏感策略7.区域敏感策略 总结 负载均衡通器常有两种实现手段&#xff0c;一种是服务端负载均衡器&#xff0c;另一种是客户端…