基于MSAM-YOLOv5的内河航道船舶识别方法

news2024/9/24 6:01:18

摘    要

针对内河航道上无人船识别目标时受背景复杂性和分布多样性影响而存在漏检的问题,提出了一种基于YOLOv5(you only look once)的算法。首先,提出了一种注意力模块MSAM(multiscale attention module,多尺度注意力模块),MSAM模块对带有大量空间信息的浅层特征图和带有丰富语义信息的深层特征图进行注意力融合,使得融合后的特征图具有更强的特征;其次,研究了MSAM模块的不同位置的影响;最后,优化了锚框参数,使得锚框形状更加符合内河船舶的形状。在船舶数据集上进行实验,结果表明:本文算法召回率提高了1.12%,mAP(mean average precision)三个指标分别提高了0.87%、5%、2.07%,FPS(fames per second,帧率)指标提高了3,漏检率降低、整体检测准确性提高、检测速度提升。

关键词:多尺度注意力模块;YOLOv5;船舶检测;内河;注意力模块位置;

近几年,无论在民用领域还是在军用领域,无人船的战略地位十分重要[1]。无人船是自主性非常高的设备,自主航行能力是无人船的核心能力之一。无人船要想实现自主航行首先要能够感知周围的环境[2],这就要求能够识别船舶。应用于内河无人船电子瞭望系统中的目标检测模型也应该有侧重地提升性能,检测模型辅助无人船最大限度地规避风险。无人船检测船舶时,漏检直接影响其后续的避障决策和航行规划等任务,所以目标检测模型更要先降低漏检率,提升整体检测性能。

目前对于船舶的检测主要有传统的检测方法和基于深度学习的检测方法。传统方法主要包括三个步骤:区域选择、特征提取和分类。使用人工设计的特征,如边缘、纹理、颜色等,都是浅层特征,对船舶的表征能力不强。有基于方向梯度直方图进行目标检测的[3],有利用不变尺度特征变换来完成船舶检测[4]。靠这些特征来检测目标的算法对于复杂环境没有很好的效果,且实时性低。

基于深度学习的方法在目标检测领域的通用数据集上取得了最好的效果。这类算法主要分为两类[5],一类是两阶段目标检测算法,一类是单阶段目标检测算法。两阶段目标检测算法主要有R-CNN[6]、Fast R-CNN[7]和Faster R-CNN[8],单阶段目标检测算法主要有SSD[9]、YOLO系列[10,11,12,13]。两阶段检测算法由于要先生成候选区域所以推理时间长,实时性差,基于回归的YOLO系列准确性好、实时性高。文献[14]改进YOLOv3算法实现了无人机的识别,文献[15]设计了双向特征融合结构提高小目标检测精度,文献[16]提出了多尺度目标检测算法。

本文在YOLOv5算法上进行了如下改进工作:

(1)针对内河航道船舶的尺度特点,优化了锚框参数。船舶的尺度较矮较宽,宽高比大,原始算法的锚框较高较窄,宽高比小。原锚框参数不适合船舶识别算法的边框回归,会减缓训练过程。

(2)针对内河无人船目标识别的漏检问题,本文提出了一种多尺度注意力模块—MSAM,将其取代原始算法通道维度直接拼接的操作,实现多层多尺度特征的融合。

(3)为进一步提高网络的特征融合能力,提出了注意力模块在三种不同位置的网络结构,对比分析了位置对模型检测性能的影响。

1 YOLOv5算法

YOLOv5模型参数少,占用内存空间小,这更加适合在船舶设备上部署。其检测精度高、速度快的特点适合内河航道无人船船舶识别的要求,本文以YOLOv5s模型为基础进行改进。YOLOv5的结构按功能分为Backbone(骨干网络)、Neck(特征融合网络)、Head(检测头)。Backbone网络用来提取各尺度的特征,Neck部分进行融合,Head部分进行预测输出。

YOLOv5基于锚框原理来检测目标。本文3组锚框共9个,3组锚框分配给Head的3个检测层,用来回归不同尺度船舶。图片输入经Backbone,Neck部分,在Head三个不同尺度的检测层上输出目标的位置信息和类别信息。每一个检测层输出形状为(na,fw,fh,(nc+5))的张量,其中na代表该层用于回归的锚框数量,fw、fh分别代表输出特征图的宽、高,nc+5代表类别和位置信息,nc为类别数量,5为预测框的中心点坐标、宽高尺寸和置信度。特征图的每一个位置都有na个锚框来回归目标。网络输出的位置信息是相对于预先设定的锚框的偏移量,需要通过锚框将预测输出解码成预测框。

2 算法改进

2.1 锚框参数优化

锚框参数不合理会导致训练时收敛慢,模型学习不到良好的参数,进而导致模型的推理精度和速度下降。原始锚框参数是利用COCO[17]数据集生成的,该数据集目标种类繁多,目标尺寸和宽高比变化范围大,船舶仅属于其中一类,这必然导致原始锚框不适用于内河航道船舶。内河船舶有较大的宽高比,应该使用宽高比较大的锚框来完成识别任务。

本文重新设定锚框参数,锚框的数量为9,分为三组。使用k-means算法对数据集的真实框聚类,找出最能反映数据集尺度的一组锚框。聚类出了9个不同尺度的锚框:[49,13],[99,23],[178,26],[146,46],[253,43],[299,65],[469,49],[277,91],[502,86]。前三个锚框分给小尺度特征图,中间三个锚框分给中尺度特征图,最后三个锚框分给大尺度特征图。YOLOv5对锚框的评价指标有三个:BPR(best possible recall,最佳召回率)、AAT(anchors above threshold,最优锚框率)、IOU(intersection over union,交并比),BPR和AAT描述的是真实框的宽高与锚框宽高的符合程度,IOU描述锚框与真实框大小的符合程度。三个值如表1所示,其中BPR提高了1.14%,AAT提高了48.88%,IOU提高了38.18%。可见,优化后锚框的宽高比更符合船舶数据集的形状,锚框与真实框的交并比也更高。对于本文使用的船舶数据集,分析了目标的宽高分布,如图1所示。可以看到优化的锚框宽高值更多的分布在数据集的宽高值中,而原始的锚框宽高与数据集的宽高差距较大,宽高及比值偏离了真实框宽高的分布。

表1 锚框参数优化前后指标对比 导出到EXCEL

锚框

BPR

AAT

IOU

优化前

98.78%

29.42%

35.53%

优化后

99.92%

78.30%

73.71%

 

2.2 MSAM模块

原始的YOLOv5网络对于两个网络层的融合采用的是简单的通道维度的拼接操作,直接对来自不同层次的特征图拼接会产生冗余特征,这些冗余特征对于目标检测是不利的。船舶的颜色、边缘和其他纹理特征会跟近岸建筑物有相似之处,增加了检测难度,这要求模型具有较高的特征提取能力,仅仅提取浅层特征不足以检测船舶目标。简单地对不同特征图通道维度拼接得到的模型仍有可以提高的地方,所以本文引入注意力机制,让模型更加关注感兴趣的区域,从而提高模型的检测能力,减小漏检率。

注意力机制能够指导神经网络更加专注于有目标的区域,提取更加具有代表性的特征。具有重大意义的注意力模块有SENet[18]、BAM[19]和CBAM[20],这些模块都不同程度地提高了模型性能。文献[21]可以融合两个尺度的特征,但没有注意力融合空间维度的特征。浅层网络具有丰富的细粒度信息,但缺少图像的全局特征;深层网络具有丰富的语义信息,但缺少表示目标位置的信息和细节信息。融合浅层的细粒度信息和深层的丰富语义信息能够提高模型的特征提取和融合能力,提高模型的检测准确性。本文提出了MSAM模块来增强模型的特征提取能力,提高检测性能。MSAM结构融合了两种尺度的特征图的特征,MSAM模块结构如图2所示。图中右半部分虚线框中是CBAM模块的结构,MaxPool是最大池化操作,AvgPool是平均池化操作,SharedMLP是共享多层感知机,Sigmoid是Sigmoid函数,Conv是二维卷积,Cat是拼接操作。⊕⊕表示元素相加,⊗⊗表示元素相乘。初始特征融合使用两个特征图相加,输入是Fl和Fh其中,Fl是浅层特征图,Fh是深层特征图。特征图相加之后进入CBAM,从通道和空间两个维度使用注意力机制,进行特征提纯。计算如式(1)。

Fa=Ca(Fl⊕Fh)�a=�a(�l⊕�h)(1)

其中,Ca(··)表示CBAM模块的计算。Fa是CBAM模块的输出,之后进入经过Sigmoid函数把特征映射到(0,1)之间,输入的特征图被赋予不同的权值,以实现特征的有效融合,MSAM输出计算如式(2),式中,σ�(··)为Sigmoid函数,[;]为Cat拼接操作,F是经过MSAM融合的输出特征图。

F=[Fl⊗σ(Fa);Fh⊗(1−σ(Fa))]�=[�l⊗�(�a);�h⊗(1−�(�a))](2)

2.3 MSAM-YOLOv5 网络结构

YOLOv5的Neck部分有自顶向下和自底向上两个路径来融合特征,拼接操作就在不同层的融合处。本文使用MSAM模块替换原处的拼接操作,得到MSAM-YOLOv5网络。拼接一共有四处,最优结果是替换原始网络的16、19、22三处,MSAM-YOLOv5网络结构如图3(a)所示,模块前的序号代表模块索引,各模块的结构如图3(b)所示,其中SiLU是激活函数,BN代表批归一化操作,Add是相加操作,Up表示上采样操作,C3_x的x表示该组件内Bottleneck的个数,Detect表示检测层。

3 实验验证及结果分析

3.1 数据集与评价指标

本文选用SeaShips数据集[22],该数据集有不同背景、不同光照、不同角度、不同天气、不同时间点的图片,图片上的船舶有不同程度的重叠,图片复杂,内容丰富。包括6中常见的船舶类型:矿砂船(ore carrier)、散装货船(bulk cargo carrier)、普通货船(general cargo ship)、集装箱船(container ship)、渔船(fishing boat)、客船(passenger ship),所有图片是RGB三通道,相同的1920×1080尺寸。这个数据集覆盖了所有的图像变化可能,本文随机选取1000张图像构成训练集,125张图像构成测试集。


 

为了精确评估模型的性能,本文选取了几个YOLO算法常用的评估指标。评估准确性本文用P(precision,精确率),R(recall,召回率),AP(average precision),mAP,评估实时性用FPS。P反映模型正确分类的能力,其值是真正例的检测个数与检测为正例的个数之比。R反映模型全面检测目标的能力,其值为真正例的个数与真实值为正例的个数之比。P高说明模型的误检率低,R高说明模型的漏检率低。AP值综合反映了模型的准确性,AP值越高模型的识别能力越好。AP值是P-R曲线的积分,根据IOU阈值的不同确定三个逐渐严格的AP指标:AP0.5,AP0.75,AP0.5:0.95,分别表示IOU阈值为0.5、0.75的AP值及0.5至0.95以0.05为间隔的AP平均值。AP反映某个类别的检测精度,mAP反映所有类别的检测精度,其值等于AP值的平均值。mAP对应于AP,也有mAP0.5,mAP0.75,mAP0.5:0.95之分。

本文实验都是在NVIDIA Jetson AGX Xavier(16GB)的设备上进行的,使用PyTorch,CUDA10.2.89,cuDNN8.0.0,操作系统为Ubuntu 18.04.5 LTS。实验迭代次数为300,模型输入尺寸为640×640,批大小为16,如无特殊说明其余参数使用默认值。数据集中图片的尺寸是1920×1080,模型的输入是640×640,需要变换尺寸。在训练阶段,首先对1920×1080的图片等比例缩放到640×360,缩放因子为640与宽高中最大值的比值。然后使用Mosaic增强技术,与另外三张图像拼合,不足的部分填充114,然后将其缩放到640×640。在测试阶段,首先对1920×1080的图片等比例缩放到640×360,缩放因子为640与宽高中最大值的比值。然后填充114,得到640×640的尺寸。

3.2 锚框参数优化和MSAM模块的消融实验

为了验证两种因素的有效性,设计了消融实验,实验共有三组,分别是:原始YOLOv5,锚框参数使用原始值,没有引入MSAM模块,命名为v5s;在YOLOv5的16、19、22处替换为MSAM模块的网络,命名为v5s-M3;在第二组的基础上使用优化的锚框参数,命名为ac-M3(此即本文提出的MSAM-YOLOv5模型)。

首先,对比v5s-M3和ac-M3两组实验,观察锚框优化对训练过程的影响。总体损失值包含三部分:边框损失、类别损失以及置信度损失。使用原始锚框与使用重新设定的锚框的四种损失值的曲线如图4所示。ac-M3模型的边框损失更小,类别损失下降更快,但是置信度损失值比v5s-M3要大一点。优化后总体损失比优化前稍小,说明锚框优化对训练有些积极作用。


 

然后从3.1提出的指标评估模型,实验结果如表2所示。对比v5s和v5s-M3组实验可以看出,引入MSAM模块,模型的准确率P提高了0.83%,召回率R提高了0.8%,其余四个指标的变化分别为,提高了0.55%,降低了0.08%,降低了0.29%,提高了3。MSAM模块可以提高模型的检测精度,提高召回率,降低漏检率,同时提高了检测速度。对比v5s-M3和ac-M3,除P值下降了1.43%,其他指标分别提高了0.32%、0.36%、5.08%、2.36%,说明优化锚框提高了模型的召回率和整体检测精度。对比v5s和ac-M3,P值下降了0.6%,召回率R提高了1.12%,三个mAP指标分别提高了0.87%、5%、2.07%,FPS提高了3。说明引入MSAM和优化锚框提高了召回率,降低了漏检率,整体精度mAP提高说明了模型的整体检测能力提高了,FPS提高同时说明提高了检测的速度。 

表2 消融实验 导出到EXCEL

方法

P

R

mAP0.5

mAP0.75

mAP0.5:0.95

FPS

v5s

95.80%

97.14%

98.17%

85.72%

75.20%

41

v5s-M3

96.63%

97.94%

98.72%

85.64%

74.91%

44

ac-M3(本文)

95.20%

98.26%

99.04%

90.72%

77.27%

44

为了进一步探究模型的性能,模型对每个类别的检测结果细致地反映模型的检测性能,表3展示了模型对6类船舶的检测结果。ac-M3对散装货船检测结果较好,AP0.5、AP0.75、AP0.5:0.95三个指标相比于原始YOLOv5都提高了,对于客船而言,三个指标相比于原始模型和只加入MSAM模块的模型都提高了,其中AP0.75提高最明显,比前两个提高了15.73%、15.78,对于渔船而言,ac-M3的三个指标也都提高了,对于普通货船类船舶,ac-M3的检测结果也很好,三个指标较其他两个模型均有提高,对于矿砂船类船舶,ac-M3的AP指标比其他两个模型都有提高,但对于集装箱船类船舶,三个模型的AP0.5值相同,其他两个指标值,ac-M3比其他两个模型较低。整体而言,ac-M3的三个AP指标在散装货船、渔船、矿砂船、客船、普通货船表现很好,相比于v5s均提高了,模型对这五种船舶的检测结果要比原始YOLOv5模型要好。而对于集装箱船船舶检测结果不如其他类别好。

表3 各模型对各类别船舶的检测结果 导出到EXCEL

方法

指标

矿砂船

散装货船

普通货船

集装箱船

渔船

客船

v5s

AP0.5

95.76%

96.05%

99.50%

99.50%

98.71%

99.50%

v5s

AP0.75

92.87%

88.21%

88.06%

88.47%

72.93%

83.77%

v5s

AP0.5:0.95

70.40%

77.21%

79.94%

77.63%

68.11%

77.93%

v5s-M3

AP0.5

96.61%

98.43%

99.50%

99.50%

98.79%

99.50%

v5s-M3

AP0.75

81.37%

91.10%

89.25%

87.08%

81.30%

83.72%

v5s-M3

AP0.5:0.95

68.27%

75.43%

80.11%

75.36%

69.30%

81.00%

ac-M3(本文)

AP0.5

97.79%

99.07%

99.50%

99.50%

98.90%

99.50%

ac-M3(本文)

AP0.75

93.03%

90.42%

96.50%

79.67%

85.17%

99.50%

ac-M3(本文)

AP0.5:0.95

75.68%

80.39%

81.07%

74.21%

70.76%

81.50%

3.3 不同注意力模块及MSAM位置的影响

下面实验均使用优化的锚框参数,探究不同注意力模块的影响,设计两组实验:一组是3.2节的ac-M3实验组,另一组是加入了CBAM注意力机制模块的网络,命名为ac-C3,CBAM的引入位置与ac-M3同,在原始拼接操作后加CBAM模块。为了研究MSAM位置对模型的影响,设计三组实验:第一组实验命名为ac-M4,其Neck部分的四个位置均替换为MSAM;第二组实验命名为ac-M3,其Neck部分替换16、19和22三个位置;第三组实验命名为ac-M1,其Neck部分仅替换12位置。实验结果如表4所示。

表4 不同注意力模块的实验结果对比 导出到EXCEL

方法

mAP0.5

mAP0.75

mAP0.5:0.95

FPS

ac-C3

99.20%

85.53%

75.57%

45

ac-M1

98.35%

88.53%

76.93%

44

ac-M3(本文)

99.04%

90.72%

77.27%

44

ac-M4

98.59%

89.20%

75.86%

43

IOU阈值越高,mAP值越高,那么模型的检测结果越好。从表4可以看出,ac-C3与ac-M3模型实时性几乎相同,引入CBAM的模型mAP0.5仅比ac-M3高0.16%,但其他指标分别低5.19%、1.7%。这两组实验证明了MSAM具有更好的特征提取能力同时不降低检测速度。三种注意力模块的添加位置都对模型的性能有不同程度的积极影响,说明注意力模块的增加可以提高模型的特征提取能力。三种不同位置的引入方式,以ac-M3实验提升最高,在模型的准确性和实时性方面都是最优的。

3.4 模型的整体性能分析

本部分把MSAM-YOLOv5与YOLOv3对比分析。设计实验对比本文提出的MSAM-YOLOv5(ac-M3实验组)与YOLOv3算法的检测性能,实验结果如表5所示。可见YOLOv3在实时性上就与v5s和本文模型相差很大,无法满足无人船对检测速度的要求,精度指标mAP三个值都不如本文模型,这也验证了MSAM模块引入提高了模型的检测精度和速度。

表5 MSAM-YOLOv5与其他检测算法的对比 导出到EXCEL

方法

mAP0.5

mAP0.75

mAP0.5:0.95

FPS

v5s

98.17%

85.72%

75.20%

41

YOLOv3

98.45%

83.44%

72.52%

15

ac-M3(本文)

99.04%

90.72%

77.27%

44

图5对比了改进前后的效果,左列为v5s(原始YOLOv5)的检测结果,右列为ac-M3(本文的MSAM-YOLOv5)的检测结果,图像中矩形框为检测出的目标位置,边框右下角数值表示置信度,两个模型的类别检测是一样的,图中未标出。

 

第一行列出了两种算法对于小目标的检测结果,MSAM-YOLOv5的类别置信度更高,检测更准确。第二行列出了对于大目标的检测结果,置信度MSAM-YOLOv5最高。第三行列出了有薄雾情况下的多目标重叠的检测结果,YOLOv5检测的目标多于真实目标个数,存在误检,船舶重叠处仍检测成了目标,MSAM-YOLOv5能够准确地检测出目标,没有误检和漏检,置信度也都比原始算法高。从检测结果可以看出MSAM-YOLOv5的检测更准确,能够在复杂条件下高质量完成船舶检测的任务。

4 结论

本文针对内河航道船舶识别中背景复杂、分布多样、检测困难而导致的无人船电子瞭望系统漏检的问题提出了MSAM-YOLOv5算法,在YOLOv5的基础上引入了MSAM注意力模块,并优化了锚框参数。设计实验研究了锚框对训练过程的影响,验证了MSAM模块的有效性,并进一步分析了MSAM模块的引入位置对模型检测性能的影响。经实验验证,本文所提的MSAM多尺度注意力模块可以融合浅层的细粒度信息和深层的语义信息,提高模型的特征融合能力。MSAM-YOLOv5能够实现多种场景的船舶检测任务,在检测的准确性和实时性方面达到了一个很好的平衡,模型的召回率高,船舶的查全性比较好,整体准确度高,实时性好,有利于无人船的安全航行。今后的改进之处要进一步减少复杂背景的干扰,提高各种类别的检测能力,同时要提高模型检测的精确率。

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

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

相关文章

【新型密集采样网络:遥感超分】

Remote Sensing Image Super-Resolution Using Novel Dense-Sampling Networks (基于新型密集采样网络的遥感图像超分辨率) 超分辨率技术在提高遥感数据的空间分辨率、克服星载成像系统的物理限制等方面发挥着重要作用。基于卷积神经网络(C…

可视化技术第一节课

主要内容通过echarts实现在网页上显示图表实现不同类型图表的转换实际操作&#xff08;1&#xff09;安装echarts如果想要安装echarts可以参考&#xff1a;安装步骤当然我们可以直接在我们的代码里面添加连接直接引用<script src"http://cdn.bootcss.com/echarts/4.8.0…

buu [BJDCTF2020]rsa_output 1 SameMod 1

[BJDCTF2020]rsa_output 1&#xff1a; 题目描述&#xff1a; {210583393373542878475341075446136053050154410905089240941988166912191033995268001128024163830889952539088574602667269256158268953033778016148293640346244751958599979431463055883159391307774504851…

2.27日报

情报上传接口添加字段&#xff1a;问题分配 调试手机号登录接口 解决困惑已久的bug&#xff1a;解析不到token; 问题描述&#xff1a; 在局域网下&#xff0c;前端页面请求时在请求头里携带token信息&#xff0c;后台获取不到header里的token参数&#xff0c;但是使用postma…

阶段八:服务框架高级(第六章:ElasticSearch3)

阶段八&#xff1a;服务框架高级&#xff08;第六章&#xff1a;ElasticSearch3&#xff09;Day-第六章&#xff1a;ElasticSearch分布式搜索引擎30.学习目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法&#xff08;桶聚合&#xff09;1.2.2.聚合结果排序1.2…

软件测试面试题 —— 整理与解析(2)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;&#x1f30e;【Austin_zhai】&#x1f30f; &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xf…

python学生信息管理系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python学生信息 免费获取完整源码源文件配置教程说明等 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&#xff0c;有两种方…

SpringBoot2入门 第一个HelloWorld(参考尚硅谷SpringBoot2零基础入门教程)

文章目录0 官方文档1 系统要求2 maven设置3 HelloWorld3.0 需求3.1 创建Maven工程3.2 引入依赖3.3 创建主程序3.4 编写业务3.5 测试3.6 简化配置3.7 简化部署0 官方文档 https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/html/index.html 1 系统要求 想要运…

RFS自动化测试工具安装与使用总结

一&#xff0c;调试 1&#xff0c;在调试时&#xff0c;总时提示“无法打开浏览器” 解决办法&#xff1a; 1&#xff0c;把浏览器的代理关闭 2&#xff0c;把浏览器的显示比例调到100% 3&#xff0c;在IE设置的安全选项中&#xff0c;把启用保护模式开启 4&#xff0c;去除进…

layui框架学习(12:进度条)

进度条是应用系统中的常见元素&#xff0c;无论是上传文件、下载文件、加载内容时都会显示进度条&#xff0c;Layui支持设置线条形进度条的样式&#xff0c;同时支持通过element模块动态操作进度条。   进度条样式分为两级结构&#xff0c;顶层一般为div元素&#xff0c;其cl…

【Opencv项目实战】背景替换:动态背景移除与替换(cvzone)

文章目录一、项目思路二、环境布置2.1、cvzone安装2.2、MediaPipe安装2.3、常见问题2.4、注意事项三、算法详解3.1、segmentor.removeBG()&#xff1a;去除背景&#xff08;抠出图像中的人&#xff09;3.2、cvzone.stackImages()&#xff1a;堆叠图像3.3、fpsReader.update()&a…

Hot Chocolate 构建 GraphQL .Net Core 服务

Hot Chocolate 是 .NET 平台下的一个开源组件库, 您可以使用它创建 GraphQL 服务, 它消除了构建成熟的 GraphQL 服务的复杂性, Hot Chocolate 可以连接任何服务或数据源&#xff0c;并创建一个有凝聚力的服务&#xff0c;为您的消费者提供统一的 API。 我会在 .NET 应用中使用…

mysql一两种索引方式hash和btree

1. Hash索引&#xff1a; Hash 索引结构的特殊性&#xff0c;其检索效率非常高&#xff0c;索引的检索可以一次定位&#xff0c;不像B-Tree 索引需要从根节点到枝节点&#xff0c;最后才能访问到页节点这样多次的IO访问&#xff0c;所以 Hash 索引的查询效率要远高于 B-Tree 索…

FFmpeg 编译和集成

背景FFmpeg 是一款知名的开源音视频处理软件&#xff0c;它提供了丰富而友好的接口支持开发者进行二次开发。FFmpeg 读作 “ef ef em peg” &#xff0c;其中的 “FF” 指的是 “Fast Forward”&#xff0c;“mpeg” 则是 “Moving Picture Experts Group” &#xff08;动态图…

隧道代理的工作原理是什么,为何爬虫使用起来更高效?

在网络爬虫领域&#xff0c;使用HTTP代理是非常普遍的一种技术手段。而隧道代理则是HTTP代理中的一种&#xff0c;它是指将请求通过隧道传输到代理服务器上&#xff0c;并由代理服务器向目标服务器发送请求&#xff0c;从而达到隐藏真实IP的目的。那么&#xff0c;隧道HTTP代理…

告别空指针让代码变优雅,Optional使用图文例子源码解读

一、前言 我们在开发中最常见的异常就是NullPointerException&#xff0c;防不胜防啊&#xff0c;相信大家肯定被坑过&#xff01; 这种基本出现在获取数据库信息中、三方接口&#xff0c;获取的对象为空&#xff0c;再去get出现&#xff01; 解决方案当然简单&#xff0c;只…

华为OD机试模拟题 用 C++ 实现 - 最优资源分配(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明最优资源分配题目输入输出描述备注示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注

2023 Java 分布式 面试 大纲

前段时间 &#xff0c;公司部门的HR找到我&#xff0c;说来了几份简历 &#xff0c;都是三年所有的开发 让我面一下&#xff0c; HR那边 一面核对了基本的信息 二面技术&#xff0c;是由我来接手&#xff0c;然后问了 一些分布式的问题 &#xff0c;大部分都是在围绕着SpringCl…

这回稳了!电力巡检低功耗摄像头全新来袭

最近的狂飙成为大家的话题&#xff0c;互联网的发展让很多信息都很透明&#xff0c;这个也是我比较喜欢和各位技术大咖一起分享一些当下比较前沿的解决方案 春回大地&#xff0c;疫情远去&#xff0c;我们也没有理由逃避不去努力&#xff0c;在互相网的各种平台去获取各种自己需…

安全配置检查的必要性?以及检查流程

随着行业信息化建设的不断深入&#xff0c;生产、业务支撑系统的网络结构越来越复杂&#xff0c;由此带来的各种应用和服务器的数量及种类也日益增多&#xff0c;一旦发生维护人员错误操作&#xff0c;或者采用一成不变的初始系统设置&#xff0c;就可能会带来安全隐患&#xf…