人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统
代码下载:
基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库
1.研究的背景
水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而,由于水下环境的复杂性和特殊性,水下目标检测面临着许多挑战,如光线衰减、水下散射、水下噪声等。因此,开发一种高效准确的水下场景目标检测系统对于提高水下任务的执行效果和水下资源的利用效率具有重要意义。
目前,基于深度学习的目标检测方法在陆地场景中取得了显著的成果,如YOLO (You Only Look Once)、Faster R-CNN (Region-based Convolutional Neural Networks)等。然而,这些方法在水下场景中的应用受到了一些限制。首先,由于水下环境的特殊性,水下图像的质量较差,包含大量的噪声和模糊。其次,水下目标的外观和形状与陆地目标存在较大差异,传统的目标检测算法往往难以准确地检测水下目标。因此,需要针对水下场景的特点进行改进和优化,以提高水下目标检测的准确性和鲁棒性。
全局注意力机制是一种有效的注意力机制,可以帮助模型在输入图像的不同区域上分配不同的注意力权重。在目标检测任务中,全局注意力机制可以帮助模型更好地关注目标区域,提高目标检测的准确性。因此,将全局注意力机制引入到水下场景目标检测系统中,可以有效地提高水下目标检测的性能。
本研究的主要目标是基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统。YOLOv7-AC是一种基于YOLOv3的改进版本,具有更高的检测精度和更快的检测速度。通过引入全局注意力机制,我们希望进一步提高YOLOv7-AC在水下场景中的目标检测性能。具体来说,我们将探索如何设计和训练一个全局注意力模块,以捕捉水下目标的关键特征,并将其集成到YOLOv7-AC中。我们还将研究如何优化网络结构和参数设置,以提高水下目标检测的准确性和鲁棒性。

2.研究的意义
提高水下目标检测的准确性:通过引入全局注意力机制,我们可以使模型更加关注水下目标区域,提高目标检测的准确性。这对于水下机器人、水下无人机等任务的执行效果具有重要意义。
提高水下目标检测的鲁棒性:水下环境的复杂性和特殊性使得水下目标检测面临着许多挑战。通过优化网络结构和参数设置,我们可以提高水下目标检测的鲁棒性,使其在不同的水下环境中都能够稳定地工作。
推动水下任务的发展:水下任务的发展需要高效准确的水下目标检测系统作为基础。本研究的成果可以为水下任务的执行提供有力支持,推动水下任务的发展和应用。
总之,基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统具有重要的研究背景和意义。通过引入全局注意力机制和优化网络结构,我们可以提高水下目标检测的准确性和鲁棒性,为水下任务的执行提供有力支持。这对于提高水下任务的执行效果和水下资源的利用效率具有重要意义。
3.图片演示



5.核心代码讲解
5.1 fit.py
class CBS(nn.Module):""" Convolution -> BatchNorm -> SiLU """def __init__(self, in_channels, out_channels, kernel_size, stride):super(CBS, self).__init__()self.layer = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding=kernel_size // 2),nn.BatchNorm2d(out_channels),nn.SiLU())def forward(self, x):return self.layer(x)class MP1(nn.Module):""" MP1 block """def __init__(self, in_channels):super(MP1, self).__init__()# Upper branchself.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)self.cbs_upper = CBS(in_channels, in_channels // 2, 1, 1)# Lower branchself.cbs_lower1 = CBS(in_channels, in_channels // 2, 1, 1)self.cbs_lower2 = CBS(in_channels // 2, in_channels // 2, 3, 2)def forward(self, x):# Upper branchx_upper = self.maxpool(x)x_upper = self.cbs_upper(x_upper)# Lower branchx_lower = self.cbs_lower1(x)x_lower = self.cbs_lower2(x_lower)# Concatenatereturn torch.cat([x_upper, x_lower], dim=1)class MP2(nn.Module):""" MP2 block, similar to MP1 but with different output channels """def __init__(self, in_channels):super(MP2, self).__init__()# Upper branchself.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)self.cbs_upper = CBS(in_channels, in_channels, 1, 1)# Lower branchself.cbs_lower1 = CBS(in_channels, in_channels, 1, 1)self.cbs_lower2 = CBS(in_channels, in_channels, 3, 2)def forward(self, x):# Upper branchx_upper = self.maxpool(x)x_upper = self.cbs_upper(x_upper)# Lower branchx_lower = self.cbs_lower1(x)x_lower = self.cbs_lower2(x_lower)# Concatenatereturn torch.cat([x_upper, x_lower], dim=1)......
封装的类为
CBS、MP1和MP2,它们分别表示卷积、批归一化和SiLU激活函数的组合、MP1块和MP2块。
CBS类包含一个序列模块,其中包含一个卷积层、一个批归一化层和一个SiLU激活函数。它的forward方法将输入x传递给这个序列模块,并返回输出。
MP1类表示MP1块,它包含一个上分支和一个下分支。上分支包括一个最大池化层和一个CBS模块,下分支包括两个CBS模块。它的forward方法将输入x分别传递给上分支和下分支,并将它们的输出在通道维度上进行拼接后返回。
MP2类表示MP2块,它与MP1块类似,但输出通道数不同。它的forward方法与MP1块的forward方法相同。
这些类封装了卷积、批归一化和激活函数的组合以及MP1和MP2块的功能,可以在模型中使用它们来构建更复杂的网络结构。
该工程中的fit.py文件定义了两个模块类CBS和MP1,以及一个类MP2。其中,CBS类是一个卷积、批归一化和SiLU激活函数的组合模块,用于构建卷积层。MP1类是一个MP1块,包含了上下两个分支,上分支是一个最大池化层和一个CBS模块,下分支是两个CBS模块。MP2类与MP1类类似,但输出通道数不同。这些模块类都继承自nn.Module类,并实现了forward方法来定义前向传播过程。整个文件的功能是定义了一些用于构建神经网络的模块。
5.2 GAM.py
class ChannelAttention(nn.Module):""" Channel Attention Submodule for GAM """def __init__(self, in_channels):super(ChannelAttention, self).__init__()self.mlp = nn.Sequential(nn.Linear(in_channels, in_channels // 2),nn.SiLU(),nn.Linear(in_channels // 2, in_channels),nn.Sigmoid())def forward(self, x):avg_pool = torch.mean(x, dim=[2, 3])return self.mlp(avg_pool).unsqueeze(2).unsqueeze(3) * xclass SpatialAttention(nn.Module):""" Spatial Attention Submodule for GAM """def __init__(self, in_channels, out_channels):super(SpatialAttention, self).__init__()self.conv = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1),nn.SiLU(),nn.Conv2d(out_channels, 1, kernel_size=3, stride=1, padding=1),nn.Sigmoid())def forward(self, x):return self.conv(x) * xclass GAM(nn.Module):""" Global Attention Module (GAM) """def __init__(self, in_channels):super(GAM, self).__init__()self.channel_attention = ChannelAttention(in_channels)self.spatial_attention = SpatialAttention(in_channels, in_channels // 2)def forward(self, x):x = self.channel_attention(x)x = self.spatial_attention(x)return x
这个程序文件是一个实现了全局注意力模块(GAM)的神经网络模型。它包含了三个子模块:通道注意力(ChannelAttention)、空间注意力(SpatialAttention)和全局注意力模块(GAM)。
通道注意力子模块(ChannelAttention)接收输入的通道数,并通过一个多层感知机(MLP)来计算通道注意力权重。MLP包含两个线性层和激活函数,最后输出一个sigmoid函数作为注意力权重。通道注意力子模块的前向传播过程中,首先对输入进行平均池化操作,然后通过MLP计算通道注意力权重,并将其与输入相乘得到输出。
空间注意力子模块(SpatialAttention)接收输入的通道数和输出的通道数,并通过两个卷积层来计算空间注意力权重。卷积层的核大小为3x3,步长为1,填充为1。卷积层的激活函数为SiLU(Sigmoid Linear Unit)。空间注意力子模块的前向传播过程中,首先通过两个卷积层计算空间注意力权重,然后将其与输入相乘得到输出。
全局注意力模块(GAM)接收输入的通道数,并包含了通道注意力子模块和空间注意力子模块。在前向传播过程中,首先通过通道注意力子模块计算通道注意力权重,然后通过空间注意力子模块计算空间注意力权重,最后将两者相乘得到输出。
总的来说,这个程序文件实现了一个全局注意力模块(GAM),用于增强神经网络模型的表示能力。
5.3 models\common.py
class CBS(nn.Module):""" Convolution -> BatchNorm -> SiLU """def __init__(self, in_channels, out_channels, kernel_size, stride):super(CBS, self).__init__()self.layer = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding=kernel_size // 2),nn.BatchNorm2d(out_channels),nn.SiLU())def forward(self, x):return self.layer(x)class MP1(nn.Module):""" MP1 block """def __init__(self, in_channels):super(MP1, self).__init__()# Upper branchself.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)self.cbs_upper = CBS(in_channels, in_channels // 2, 1, 1)# Lower branchself.cbs_lower1 = CBS(in_channels, in_channels // 2, 1, 1)self.cbs_lower2 = CBS(in_channels // 2, in_channels // 2, 3, 2)def forward(self, x):# Upper branchx_upper = self.maxpool(x)x_upper = self.cbs_upper(x_upper)# Lower branchx_lower = self.cbs_lower1(x)x_lower = self.cbs_lower2(x_lower)# Concatenatereturn torch.cat([x_upper, x_lower], dim=1)class MP2(nn.Module):""" MP2 block, similar to MP1 but with different output channels """def __init__(self, in_channels):super(MP2, self).__init__()# Upper branchself.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)self.cbs_upper = CBS(in_channels, in_channels, 1, 1)# Lower branchself.cbs_lower1 = CBS(in_channels, in_channels, 1, 1)self.cbs_lower2 = CBS(in_channels, in_channels, 3, 2)def forward(self, x):# Upper branchx_upper = self.maxpool(x)x_upper = self.cbs_upper(x_upper)# Lower branchx_lower = self.cbs_lower1(x)x_lower = self.cbs_lower2(x_lower)# Concatenatereturn torch.cat([x_upper, x_lower], dim=1)class ChannelAttention(nn.Module):""" Channel Attention Submodule for GAM """def __init__(self, in_channels):super(ChannelAttention, self).__init__()self.mlp = nn.Sequential(nn.Linear(in_channels, in_channels // 2),nn.SiLU(),nn.Linear(in_channels // 2, in_channels),nn.Sigmoid())def forward(self, x):avg_pool = torch.mean(x, dim=[2, 3])return self.mlp(avg_pool).unsqueeze(2).unsqueeze(3) * xclass SpatialAttention(nn.Module):""" Spatial Attention Submodule for GAM """def __init__(self, in_channels, out_channels):super(SpatialAttention, self).__init__()self.conv = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1),nn.SiLU(),nn.Conv2d(out_channels, 1, kernel_size=3, stride=1, padding=1),nn.Sigmoid())def forward(self, x):return self.conv(x) * xclass GAM(nn.Module):""" Global Attention Module (GAM) """def __init__(self, in_channels):super(GAM, self).__init__()self.channel_attention = ChannelAttention(in_channels)self.spatial_attention = SpatialAttention(in_channels, in_channels // 2)def forward(self, x):x = self.channel_attention(x)x = self.spatial_attention(x)return x......
这个程序文件是一个YOLOv7模型的实现,用于目标检测任务。文件中定义了一些常用的模块和函数,包括卷积、批归一化、激活函数等。其中还定义了一些特殊的模块,如MP1、MP2、GAM等,用于构建YOLOv7模型的不同部分。整个程序文件的结构比较清晰,代码逻辑也比较简单易懂。
6.系统整体结构
整体功能和构架概述:
该项目是一个基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统。它使用PyTorch框架实现了一个完整的目标检测系统,包括模型的构建、训练、推理和可视化等功能。
整个项目的构架可以分为以下几个部分:
模型相关:包括模型的定义和模型相关的辅助函数和类,如卷积、批归一化、激活函数等模块的定义,以及YOLOv7模型的各个部分的定义和组合。
工具相关:包括一些常用的工具函数和类,如数据加载器的创建、损失函数的计算、模型的保存和加载等。
训练相关:包括训练脚本和训练过程中需要的辅助函数和类,如训练函数的定义、模型的优化器的选择和配置、训练指标的计算等。
用户界面相关:包括一个基于PyQt5的GUI界面,用于选择图片或视频文件进行目标检测,并显示检测结果。
其他辅助文件:包括一些辅助功能的实现,如激活函数、数据增强、自动锚框生成、自动批处理大小等。
下面是每个文件的功能整理:
| 文件路径 | 功能概述 |
|---|---|
| fit.py | 定义了卷积、批归一化和激活函数的组合模块类 |
| GAM.py | 实现了全局注意力模块的神经网络模型 |
| torch_utils.py | 包含了一些常用的函数和类,如设备选择、时间同步、模型性能测量等 |
| train.py | 用于训练模型的脚本,包括训练函数和一些辅助函数和类 |
| ui.py | 基于PyQt5的GUI界面,用于选择文件和显示检测结果 |
| models\common.py | 定义了一些常用的模块和函数,用于构建YOLOv7模型 |
| models\experimental.py | 包含了一些实验性的模块和函数 |
| models\tf.py | 包含了一些与TensorFlow相关的模块和函数 |
| models\yolo.py | 定义了YOLO模型的相关类 |
| models_init_.py | 空文件 |
| tools\activations.py | 定义了一些激活函数 |
| tools\augmentations.py | 定义了一些数据增强函数 |
| tools\autoanchor.py | 定义了自动锚框生成的函数 |
| tools\autobatch.py | 定义了自动批处理大小的函数 |
| tools\callbacks.py | 定义了一些回调函数 |
| tools\datasets.py | 定义了数据加载器的创建函数 |
| tools\downloads.py | 定义了一些用于下载数据集和权重的函数 |
| tools\general.py | 定义了一些通用的辅助函数 |
| tools\loss.py | 定义了一些损失函数 |
| tools\metrics.py | 定义了一些评估指标的计算函数 |
| tools\plots.py | 定义了一些绘图函数 |
| tools\torch_utils.py | 定义了一些与PyTorch相关的辅助函数 |
| tools_init_.py | 空文件 |
| tools\aws\resume.py | 定义了一些用于AWS训练恢复的函数 |
| tools\aws_init_.py | 空文件 |
| tools\flask_rest_api\example_request.py | 定义了一些用于Flask REST API的示例请求函数 |
| tools\flask_rest_api\restapi.py | 定义了Flask REST API的相关类和函数 |
| tools\loggers_init_.py | 空文件 |
| tools\loggers\wandb\log_dataset.py | 定义了用于记录数据集的类 |
| tools\loggers\wandb\sweep.py | 定义了用于记录超参数搜索的类 |
| tools\loggers\wandb\wandb_utils.py | 定义了一些与WandB日志记录相关的辅助函数 |
| tools\loggers\wandb_init_.py | 空文件 |
| utils\activations.py | 定义了一些激活函数 |
| utils\augmentations.py | 定义了一些数据增强函数 |
| utils\autoanchor.py | 定义了自动锚框生成的函数 |
| utils\autobatch.py | 定义了自动批处理大小的函数 |
| utils\callbacks.py | 定义了一些回调函数 |
| utils\datasets.py | 定义了数据加载器的创建函数 |
| utils\downloads.py | 定义了一些用于下载数据集和权重的函数 |
| utils\general.py | 定义了一些通用的辅助函数 |
| utils\loss.py | 定义了一些损失函数 |
| utils\metrics.py | 定义了一些评估指标的计算函数 |
| utils\plots.py | 定义了一些绘图函数 |
| utils\torch_utils.py | 定义了一些与PyTorch相关的辅助函数 |
| utils_init_.py | 空文件 |
| utils\aws\resume.py | 定义了一些用于AWS训练恢复的函数 |
| utils\aws_init_.py | 空文件 |
| utils\flask_rest_api\example_request.py | 定义了一些用于Flask REST API的示例请求函数 |
| utils\flask_rest_api\restapi.py | 定义了Flask REST API的相关类和函数 |
| utils\loggers_init_.py | 空文件 |
| utils\loggers\wandb\log_dataset.py | 定义了用于记录数据集的类 |
| utils\loggers\wandb\sweep.py | 定义了用于记录超参数搜索的类 |
| utils\loggers\wandb\wandb_utils.py | 定义了一些与WandB日志记录相关的辅助函数 |
7.YOLOv7简介
YOLOv7 模型 [ 2 ],由 Chien-Yao Wang 和 Alexey Bochkovskiy 等人开发。到2022年,集成E-ELAN(扩展高效层聚合网络)[ 1 ]、基于级联模型的模型缩放[ 2 ]和模型重新参数化[ 3 ]等策略,以在检测效率和精度之间实现良好的平衡。如图所示,YOLOv7网络由四个不同的模块组成:输入模块、Backbone网络、Head网络和预测网络。
输入模块:YOLOv7模型的预处理阶段采用了镶嵌和混合数据增强技术,并利用YOLOv5建立的自适应锚框计算方法,保证输入的彩色图像统一缩放到640×640尺寸,从而满足骨干网络输入大小的要求。 骨干网络:YOLOv7网络由三个主要组件组成:CBS、E-ELAN和MP1。CBS模块由卷积、批量归一化和SiLU激活函数组成。E-ELAN模块保持了原有的ELAN设计架构,通过引导不同的特征组计算块学习更多样的特征来增强网络的学习能力,保留原有的梯度路径。MP1由CBS和MaxPool组成,分为上下分支。上分支使用 MaxPool 将图像的长度和宽度减半,并使用具有 128 个输出通道的 CBS 将图像通道减半。下分支通过具有 1 × 1 核和步长的 CBS 将图像通道减半,通过 3 × 3 核和 2 × 2 步长的 CBS 将图像长和宽减半,最后通过串联(Cat)操作。MaxPool提取小局部区域的最大值信息,而CBS提取小局部区域的所有值信息,从而提高网络的特征提取能力。 Head网络:YOLOv7的Head网络采用特征金字塔网络(FPN)架构,采用PANet设计。该网络包含多个卷积、批量归一化和 SiLU 激活 (CBS) 块,并引入了空间金字塔池化和卷积空间金字塔池化 (Sppcspc) 结构、扩展高效层聚合网络 (E-ELAN) 和 MaxPool -2(MP2)。Sppcspc 结构通过在空间金字塔池化 (SPP) 结构中结合卷积空间金字塔 (CSP) 结构,以及帮助优化和特征提取的大剩余边缘,改善了网络的感知场。ELAN-H层是基于E-ELAN的多个特征层的融合,进一步增强了特征提取。MP2 块具有与 MP1 块类似的结构,只是输出通道的数量略有修改。 预测网络:YOLOv7的预测网络采用Rep结构来调整头部网络输出的特征的图像通道数,然后应用1×1卷积来预测置信度、类别和锚框。Rep 结构受 RepVGG [ 44 ] 的启发,引入了特殊的残差设计来帮助训练过程。这种独特的残差结构在实际预测中可以简化为简单的卷积,从而在不牺牲其预测性能的情况下降低网络复杂性。
8.改进模块
GAM
注意力机制是一种通过为神经网络中输入的各个部分分配不同的权重来改进复杂上下文中特征提取的方法。这种方法使模型能够专注于相关信息并忽略不相关信息,从而提高性能。注意力机制的例子包括像素注意力、通道注意力和多阶注意力[ 5 ]。 GAM [ 9 ]可以通过减少信息分散和放大全局交互表示来提高深度神经网络的性能。 GAM 包含通道注意力子模块和空间注意力子模块。通道注意力子模块被设计为三维变换,使其能够保留输入的三维信息。接下来是两层的多层感知(MLP),用于放大通道空间中的维度间依赖性,从而使网络能够专注于图像中更有意义的前景区域。 空间注意力子模块包含两个卷积层,可以有效地整合空间信息,使网络能够专注于图像中上下文重要的区域。
ResNet-ACmix 模块
谷歌大脑研究团队将ResNet-ACmix模块引入YOLOv7的Backbone组件中,有效地保留了提取的特征信息的一致性。该模块基于ResNet[8]的瓶颈结构,其中3×3卷积被ACmix模块替代,能够自适应聚焦不同区域并捕获更多信息特征,如图所示。输入分为主输入和残余输入,这有助于防止信息丢失,同时减少参数数量和计算要求。ResNet-ACmix模块使网络能够获得更深的深度而不会遇到梯度消失,并且学习结果对网络权重的波动更加敏感。
AC-E-ELAN模块
AAAI对YOLOv7的E-ELAN组件提出的改进是基于先进的ELAN架构[ 4 ]。与传统ELAN网络不同,扩展E-ELAN采用扩展、洗牌和合并基数方法,能够在不破坏原始梯度流的情况下不断增强网络的学习能力,从而提高参数利用率和计算效率。YOLOv7中E-ELAN组件的特征提取模块通过合并RepVgg架构中的残差结构(即1×1卷积分支和跳跃连接分支)得到了进一步改进。这导致了AC-E-ELAN结构的发展,如图3所示,它集成了由3×3卷积块组成的ACmixBlock,ACmixBlock之间具有跳跃连接和1×1卷积结构。这种组合使网络能够受益于多分支模型训练期间获得的丰富特征以及从单路径模型获得的快速、内存高效的推理。

10.参考文献
- Zhou, X.; Ding, W.; Jin, W. Microwave-assisted extraction of lipids, carotenoids, and other compounds from marine resources. In Innovative and Emerging Technologies in the Bio-Marine Food Sector; Academic Press: Cambridge, MA, USA, 2022; pp. 375–394. [Google Scholar]
- Liu, Y.; Anderlini, E.; Wang, S.; Ma, S.; Ding, Z. Ocean explorations using autonomy: Technologies, strategies and applications. In Offshore Robotics; Springer: Singapore, 2022; Volume I, pp. 35–58. [Google Scholar]
- Ghafoor, H.; Noh, Y. An overview of next-generation underwater target detection and tracking: An integrated underwater architecture. IEEE Access 2019, 7, 98841–98853. [Google Scholar] [CrossRef]
- Liu, K.; Liang, Y. Enhancement of underwater optical images based on background light estimation and improved adaptive transmission fusion. Opt. Express 2021, 29, 28307. [Google Scholar] [CrossRef]
- Shi, J.; Zhuo, X.; Zhang, C.; Bian, Y.X.; Shen, H. Research on key technologies of underwater target detection. In Seventh Symposium on Novel Photoelectronic Detection Technology and Applications; SPIE: Kunming, China, 2021; Volume 11763, pp. 1128–1137. [Google Scholar]
- Zhang, W.; Sun, W. Research on small moving target detection algorithm based on complex scene. J. Phys. Conf. Ser. 2021, 1738, 012093. [Google Scholar] [CrossRef]
- Fu, H.; Song, G.; Wang, Y. Improved YOLOv4 marine target detection combined with CBAM. Symmetry 2021, 13, 623. [Google Scholar] [CrossRef]
- Samantaray, S.; Deotale, R.; Chowdhary, C.L. Lane detection using sliding window for intelligent ground vehicle challenge. In Innovative Data Communication Technologies and Application: Proceedings of ICIDCA 2020; Springer: Singapore, 2021; pp. 871–881. [Google Scholar]
- Bakheet, S.; Al-Hamadi, A. A framework for instantaneous driver drowsiness detection based on improved HOG features and naïve Bayesian classification. Brain Sci. 2021, 11, 240. [Google Scholar] [CrossRef]
- Bellavia, F. SIFT matching by context exposed. IEEE Trans. Pattern Anal. Mach. Intell. 2022, 45, 2445–2457. [Google Scholar] [CrossRef] [PubMed]
相关文章:
人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统
代码下载: 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而,由于水下环境的复杂性和特殊性,水下目标检测面临着许多挑…...
使用 C++23 从零实现 RISC-V 模拟器(1):最简CPU
👉🏻 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」:https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc 本节实现一个最简的 CPU ,最终能够解析 add 和 addi 两个指令。如果对计算机组成原理已经有所了…...
顺序表、链表(ArrayList、LinkedList)
目录 前言: 顺序表(ArrayList): 顺序表的原理: ArrayList源码: 的含义:编辑 ArrayList的相关方法:编辑 向上转型List: 练习题(杨辉三角&#x…...
第11讲投票创建后端实现
投票创建页面实现 文件选择上传组件 uni-file-picker 扩展组件 安装 https://ext.dcloud.net.cn/plugin?nameuni-file-picker 日期选择器uni-datetime-picker组件 安装 https://ext.dcloud.net.cn/plugin?nameuni-datetime-picker iconfont小图标 https://www.iconfont…...
SNMP 简单网络管理协议、网络管理
目录 1 网络管理 1.1 网络管理的五大功能 1.2 网络管理的一般模型 1.3 网络管理模型中的主要构件 1.4 被管对象 (Managed Object) 1.5 代理 (agent) 1.6 网络管理协议 1.6.1 简单网络管理协议 SNMP 1.6.2 SNMP 的指导思想 1.6.3 SNMP 的管理站和委托代理 1.6.4 SNMP…...
计算机设计大赛 深度学习YOLOv5车辆颜色识别检测 - python opencv
文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向࿰…...
OpenCV-36 多边形逼近与凸包
目录 一、多边形的逼近 二、凸包 一、多边形的逼近 findContours后的轮廓信息countours可能过于复杂不平滑,可以用approxPolyDP函数对该多边形曲线做适当近似,这就是轮廓的多边形逼近。 apporxPolyDP就是以多边形去逼近轮廓,采用的是Doug…...
transformer中的QKV是如何得到的?
多头自注意力机制:...
console.log导致内存泄露 打包时自动去掉console.log方法
webpack通过工具:terser 使用前需要先安装一下 vue.config.js const { defineConfig } require(vue/cli-servise); module.exports defineConfig({transpileDependencies:true,terser:{terserOptions:{compress:{drop_console:true,drop_debugger:true,},},},}…...
《合成孔径雷达成像算法与实现》FIgure6.20
% rho_r c/(2*Fr)而不是rho_r c/(2*Bw) % Hsrcf exp函数里忘记乘pi了 clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; …...
Spring Boot 笔记 015 创建接口_更新文章分类
1.1.1 实体类id增加NotNull注释,并做分组校验 1.1.1.1 定义分组 1.1.1.2 实体类中指定校验项属于哪个分组 如果说某个校验项没有指定分组,默认属于Default分组 分组之间可以继承, A extends B 那么A中拥有B中所有的校验项package com.geji.pojo;import com.faste…...
【Java基础题型】判断是否是回文数
需求:如果给你一个正数x。 如果x是一个回文整数,打印true,否则,返回false 解释: 回文数是指正序(从左到右)和从倒序(从右到左)都是一样的整数数字。 eg.121是回文数,123不是,2112是回文数&…...
Linux paste命令教程:并行合并文件的利器(附案例详解和注意事项)
Linux paste命令介绍 paste 是一个在 Unix 或 Linux 操作系统中非常有用的命令。它用于通过在标准输出中输出由每个指定文件的行组成的行,以制表符为分隔符,来水平(并行)合并文件。 Linux paste命令适用的Linux版本 paste 命令…...
用163邮箱或者outlook接收国科大邮箱的邮件
使用如图下路径,创建一个新的密码,用于在163大师邮箱或者outlook登录即可 如果不行,则需要手动配置邮箱服务器 参考网址:中国科学院邮件系统帮助中心...
VitePress-15- 配置- description 的作用详解
作用描述 1、descriptioin 是站点的描述, 会被解析为 html 页面的 <meta name"description" content "xxx"> 标签 。2、description 本身就是 <meta> 标签的一种,不会在页面上展示出来, 仅仅是作为页面的一…...
寒假学习记录17:包管理器(包管理工具)
概念 包(package) 包含元数据的库,这些元数据包括:名称,描述,git主页,许可证协议,作者,依赖..... 库(library,简称lib) 以一个或多个模…...
【AIGC】Stable Diffusion的常见错误
Stable Diffusion 在使用过程中可能会遇到各种各样的错误。以下是一些常见的错误以及可能的解决方案: 模型加载错误:可能出现模型文件损坏或缺失的情况。解决方案包括重新下载模型文件,确保文件完整并放置在正确的位置。 依赖项错误&#x…...
线段树解决-----P1161 开灯 P1047 [NOIP2005 普及组] 校门外的树 python解法
# [NOIP2005 普及组] 校门外的树 ## 题目描述 某校大门外长度为 l 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 l的位置;数轴上的每个整数点…...
学习总结16
# 【模板】最小生成树 ## 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 ## 输入格式 第一行包含两个整数 N,M,表示该图共有 N 个结点和 M 条无向边。 接下来 M 行每行包含三个整数 …...
问题:从完整的问题解决过程来看,( )是首要环节。A.理解问题 B.提出假设C.发现问题 D.检验假设 #学习方法#学习方法
问题:从完整的问题解决过程来看,( )是首要环节。A.理解问题 B.提出假设C.发现问题 D.检验假设 A.理解问题 B.提出假设 C.发现问题 参考答案如图所示...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
