【num_groups、 groups、init_filters以及归一化的选择】
目录
- 省流总结:
- 一、num_groups与 groups的关系
- 1. num_groups在代码中的作用
- (1) 定义
- (2) num_groups的值的不同影响
- 1. 每组的通道数量:
- 2. 计算效率:
- 3. 对模型表现的影响:
- 4. 对分割任务的影响:
- 5. 训练稳定性:
- 总结:
- (3) 解决方法
- (4) 调整通道对分割的影响
- 1. 调整通道数以适应GN的要求
- 2. 通道数调整的影响
- 3. 医学图像分割中的通道数调整
- 4. 如何权衡通道数调整与分割任务的效果
- 5. 结论
- (5) 调整init_filters=8的值来不调整通道数以适应GN
- 总结
- 2. groups在代码中的作用
- 3. num_groups 与 groups 的关系
- 4. 总结
- 二、Group Normalization(GN)和 Batch Normalization(BN)
- 1. 归一化的方式:
- 2. 依赖性和适用场景:
- 3. 对分割任务的影响:
- 4. 对模型性能的影响:
- 总结:
- 对分割的具体影响:
省流总结:
- 组归一化时,较大的 num_groups(例如 8)允许模型在归一化时能够更细致地处理各个通道之间的关系,从而提高模型的表达能力。但是分组归一化要求通道数必须能被 num_groups 整除。
- 在 PyTorch 中,nn.Conv2d 的 groups 参数决定了卷积操作中通道的分组方式。如果设置为 1,表示标准的卷积(没有分组);如果设置为大于 1,表示分组卷积。 groups = in_channels 表示进行深度可分卷积,其中每个输入通道单独与一个卷积核进行卷积。
init_filters
决定了网络中各层的初始通道数,如果你希望通道数更加灵活或需要更多的计算能力,可以适当增大 init_filters 的值,同时保证它是 num_groups 的倍数。- Batch Normalization 对于大batch size任务和深度网络(如分类任务)有很好的表现,能够加速训练并提高模型泛化能力。
- Group Normalization 更适合小batch size的任务,尤其是图像分割中,当处理如3D医学图像或非常大的输入图像时,GN可以避免BN的问题(如在小batch时的不稳定性)。
一、num_groups与 groups的关系
num_groups
用于指定 组归一化(Group Normalization, GN)的参数,它在网络中的作用是对输入特征进行分组,在每组内计算均值和标准差,从而进行归一化处理。具体来说,num_groups
控制每组包含多少个通道。
1. num_groups在代码中的作用
(1) 定义
num_groups
在get_norm_layer
函数中被传递,用于指定进行 组归一化 时的分组数。组归一化通过将输入的通道数划分为多个小组,计算每个组的均值和标准差进行归一化。这对于卷积神经网络(CNN)中处理图像特征尤其有效。- 在代码中,
num_groups
被设置为 8,意味着在进行组归一化时,会将输入的通道数划分为 8 组。如果你的网络有 64 个通道,那么每组将包含 64/8 = 8 个通道。 - 分组归一化要求通道数必须能被 num_groups 整除。
- Group Normalization (GROUP):在很多深度学习任务中,Group Normalization(组归一化)特别适合小批量的训练,或者处理一些特殊任务,比如医学影像。它的工作原理是将通道分成 num_groups 组,对每一组内的通道进行归一化。它不依赖于批量大小,因此比 Batch Normalization 更加灵活。
(2) num_groups的值的不同影响
在 Group Normalization(GN)中,num_groups
控制了每个组内的通道数量,具体来说,num_groups
决定了如何将通道划分为多个小组,以便进行归一化。选择不同的 num_groups
会对训练过程和最终的性能产生一些影响。我们可以从以下几个方面来分析 num_groups=4
和 num_groups=8
的区别:
1. 每组的通道数量:
num_groups=4
:每组的通道数为C // 4
(其中C
是总的通道数)。num_groups=8
:每组的通道数为C // 8
。
因此,选择较大的 num_groups
(如 8)意味着每组会有更少的通道,这可能会导致更细粒度的归一化。在一些情况下,这可以提高稳定性和精度,因为每组包含的通道较少,有利于更精确地计算每组的均值和方差。
2. 计算效率:
num_groups=4
:每组的通道数较多,这样每个组的统计量(均值、方差)计算时会使用更多的通道。理论上,较少的组数意味着计算时的操作数量较少,可能提高计算效率。num_groups=8
:每组的通道数较少,计算过程中可能会有更多的组,但每个组的计算会相对简单。这种方式可能会增加计算量,因为要处理更多的组,尤其是在网络很深或者通道数很大的情况下。
3. 对模型表现的影响:
num_groups=4
:每个组内的通道数较多,可能会导致归一化时每组的统计量更加受单个通道影响。较大的组有可能带来信息的聚合效果,但也可能会使得归一化过程不够精细。num_groups=8
:每个组内的通道数较少,可能会让归一化更加精细,尤其是在高维度(例如卷积层有大量通道)的情况下。这种精细的归一化可能有助于提高网络的泛化能力和准确性,但也可能会导致训练过程中的计算更为复杂。
4. 对分割任务的影响:
- 对于医学图像分割任务,尤其是在复杂的场景下(例如肝脏、癌症等区域的分割),可能需要更精细的归一化来帮助模型学习到更有用的特征。在这种情况下,选择较大的
num_groups
(例如 8)可能会有一定的优势,因为它允许模型在归一化时能够更细致地处理各个通道之间的关系,从而提高模型的表达能力。 - 如果选择较小的
num_groups
(例如 4),则模型可能在归一化时考虑的通道数量较多,这会使得每个组的表示能力较强,但可能会导致模型的训练过程变得不够细致。
5. 训练稳定性:
num_groups=4
:较大的组数可能导致训练时的方差较大,因为每组内的通道数量更多,可能影响训练过程中的稳定性。num_groups=8
:较小的组数可以提高训练的稳定性,因为每组内的通道数量较少,方差较小,归一化过程更加精细。
总结:
num_groups=4
:适合在需要较少计算量的情况下使用,同时可能带来较大的组信息聚合。可能在一些简单的任务或训练资源有限的情况下更有优势。num_groups=8
:适合对精细的归一化要求较高的任务,尤其是在复杂的任务中(例如医学图像分割)。它允许更精细的控制通道之间的关系,有可能提高训练的稳定性和精度,但计算量相对较大。
对于医学图像分割任务,通常情况下,num_groups=8
可能会有更好的效果,尤其是在处理复杂图像时,因为它可以提供更加精细的归一化。不过,最终的选择仍然依赖于实验的结果和任务的复杂性。你可以在不同的设置下进行实验,找到最适合你数据集和模型的 num_groups
参数。
(3) 解决方法
如果通道数不能被 num_groups 整除,解决方法:
- 如果不强制使用分组归一化,可以选择使用其他归一化方式,如批归一化(batch normalization)。
self.norm2 = get_norm_layer(name="batch", spatial_dims=spatial_dims, channels=in_channels // 4)
- 动态计算 num_groups: 根据通道数动态计算一个合适的 num_groups 值,确保 num_channels 能够被 num_groups 整除。
- 强制 num_channels 可以被 num_groups 整除: 确保在每次使用 Group Normalization 时,通道数可以被 num_groups 整除。你可以调整 in_channels 或使用其他的方式来保证这一点。通过 (in_channels // 4) // num_groups * num_groups 来调整 in_channels,确保 num_channels 能被 num_groups 整除。
(4) 调整通道对分割的影响
通过调整通道数来确保 Group Normalization (GN) 的使用符合要求,确实可能对医学图像分割任务产生一定影响,具体影响取决于你如何调整通道数以及任务的具体需求。我们可以从以下几个方面来分析:
1. 调整通道数以适应GN的要求
- Group Normalization 的一个重要特点是,它要求输入通道数能够被分组数(group number)整除。也就是说,在某些情况下,必须调整通道数,使得通道数与分组数的比例是整数。
- 例如,如果你选择使用4个组(
num_groups=4
),那么输入通道数需要是4的倍数。如果原本的通道数是32,GN将其分为8组,每组包含4个通道。如果通道数不是4的倍数,GN会报错。
2. 通道数调整的影响
-
通道数与网络表达能力的关系:调整通道数会影响网络的表达能力,尤其是在深度学习模型中,通道数决定了特征图的维度,也与模型的容量和表示能力相关。通过调整通道数来适应GN的要求,可能会间接影响模型的学习能力和最终性能。
- 如果你减少了通道数(例如从64减少到32),可能会减弱模型的表示能力,导致模型无法捕捉到更细粒度的特征,从而影响分割性能。
- 如果你增加了通道数(例如从64增加到128),可能会增加模型的表示能力,但也可能导致训练时间增加,计算资源消耗加重,并且可能引发过拟合(尤其是在数据量有限的情况下)。
-
计算开销与内存使用:调整通道数也会直接影响内存使用和计算开销。增加通道数会增加内存消耗和计算量,尤其是在处理高分辨率的医学图像时,这可能会导致显存溢出或更长的训练时间。相反,减少通道数虽然能够减少计算负担,但可能会限制网络对复杂特征的学习。
3. 医学图像分割中的通道数调整
-
医学图像的复杂性:医学图像(尤其是3D医学影像)通常具有较高的空间复杂度,包含大量的细节。分割模型需要足够的通道数来捕捉这些细节特征。为了使 Group Normalization 正常工作而调整通道数,可能会影响模型的效果,尤其是在肝脏、肿瘤等小区域的分割任务中。过少的通道数可能导致特征丢失,影响小目标(如肿瘤)的分割精度。
-
影响模型性能:在医学图像分割中,通常需要网络具备足够的特征提取能力以应对各种不同的病变区域。通过调整通道数来满足GN的要求可能会限制这一能力,尤其是在目标区域复杂、细节较多的情况下。
4. 如何权衡通道数调整与分割任务的效果
- 模型容量:在医学图像分割任务中,增加通道数有助于提高模型的表达能力,从而提升分割性能。然而,过多的通道数可能导致过拟合,尤其是在样本量较少的情况下。需要在适当增加通道数和避免过拟合之间找到平衡。
- 实践中的策略:你可以尝试在保证 Group Normalization 正常工作的前提下,逐步调整通道数。可以通过交叉验证等方法评估不同通道数配置下模型的性能,来选择最优的通道数。
5. 结论
- 调整通道数以适应GN 会影响医学图像分割的效果,尤其是在细节分割任务中。调整通道数可能会对分割精度、训练稳定性以及计算开销产生一定的影响。
- 你可以通过实验探索不同的通道数设置,以确保 Group Normalization 的使用不会限制模型的表达能力,同时避免由于通道数不当引起的训练不稳定或性能下降。
- 最佳策略是根据实际任务需求,逐步调整通道数,并结合模型的训练效果进行优化,而不仅仅是为了满足GN的要求。
简而言之,调整通道数是实现 Group Normalization 所需的技术手段之一,但需要综合考虑对分割任务的影响,确保在提高稳定性的同时,不影响分割效果。
(5) 调整init_filters=8的值来不调整通道数以适应GN
net = ResUNet(spatial_dims=3, init_filters=8, in_channels=1, out_channels=3)
通过调整 init_filters
的值来确保 Group Normalization (GN) 的使用不影响通道数的设置。init_filters
决定了网络中各层的初始通道数,而 Group Normalization 的要求是通道数能够被分组数(num_groups
)整除。因此,调整 init_filters
的值可以有效地确保通道数符合 GN 的要求,而不需要直接更改每个层的具体通道数。
-
调整
init_filters
以适应 GN:- Group Normalization 要求输入通道数可以整除
num_groups
,所以如果你的网络初始通道数(init_filters
)设置为 8,而num_groups
是 4,那么每个组会有 2 个通道(因为 8 ÷ 4 = 2)。如果想要 GN 工作正常,可以调整init_filters
使得它符合这一要求。
- Group Normalization 要求输入通道数可以整除
-
如何选择
init_filters
的值:- 如果你选择了
num_groups=4
,那么init_filters
的值应该是 4 的倍数。例如,init_filters=8
、16
、32
等都可以。如果你希望通道数更加灵活或需要更多的计算能力,可以适当增大init_filters
的值,同时保证它是num_groups
的倍数。 - 举个例子,如果
num_groups=4
,你可以设置init_filters
为 8、16、32 等。如果num_groups=8
,你可以选择 8、16、24、32 等作为init_filters
的值。
- 如果你选择了
-
避免调整每层通道数:
- 如果你仅通过调整
init_filters
来确保通道数符合 GN 的要求,而不修改网络其他层的结构,那么就可以在不改变网络架构的基础上,确保 Group Normalization 能够正常工作。 - 这种方法避免了直接修改每个层的通道数,而是通过改变初始的
init_filters
来影响后续层的通道数,简化了调整过程。
- 如果你仅通过调整
- 示例:
假设你当前的网络 init_filters=8
,并且你使用了 num_groups=4
:
init_filters = 8
num_groups = 4
这时,init_filters
是 8,满足了 GN 的要求,因为 8 可以被 4 整除。如果你想增加网络的表示能力,可以将 init_filters
改为 16 或 32:
init_filters = 16 # 16 可以被 4 整除,适合 num_groups=4
或者:
init_filters = 32 # 32 可以被 4 整除,适合 num_groups=4
总结
- 通过调整
init_filters
的值来确保它与num_groups
兼容,可以使网络满足 Group Normalization 的要求,而无需修改网络中每个层的通道数。 - 这种方法可以让你避免直接调整每个层的通道数,同时保持网络架构的整体一致性,只是调整
init_filters
即可。 - 关键是确保
init_filters
是num_groups
的倍数,这样才能避免 GN 报错,并保持训练的稳定性和效果。
2. groups在代码中的作用
- 在深度学习中的卷积层,groups 通常指代卷积操作中如何分配输入和输出通道的参数,尤其是在使用分组卷积(Group Convolution)时。
- groups:这是分组卷积的一个超参数,表示将输入通道分成多少组。在分组卷积中,输入通道被分成若干组,每一组单独卷积,卷积的权重在组内共享,而组之间是独立的。groups 的值决定了每组输入通道的数量。
- 例如,在 PyTorch 中,nn.Conv2d 的 groups 参数决定了卷积操作中通道的分组方式。如果设置为 1,表示标准的卷积(没有分组);如果设置为大于 1,表示分组卷积。
例子:
import torch
import torch.nn as nn# num_groups 和 groups 的示例
conv = nn.Conv2d(in_channels=16, out_channels=16, kernel_size=3, groups=4)
在这个例子中,groups=4 表示输入的 16 个通道被分成 4 组,每组 4 个通道进行卷积操作。
3. num_groups 与 groups 的关系
num_groups
通常在与组归一化相关的代码中出现,表示要分成的组数。这个概念与groups
在卷积操作中的使用是不同的。- 在卷积操作中,
groups
参数通常用于 分组卷积,它指定了输入通道和输出通道如何分组进行卷积。通过分组卷积,可以减少计算量并提升效率。例如,groups=in_channels
表示进行 深度可分卷积(depthwise convolution),其中每个输入通道单独与一个卷积核进行卷积。 - 因此,
num_groups
和groups
都与分组有关,但它们的作用和使用场景不同。num_groups
主要在归一化过程中定义分组,而groups
主要在卷积过程中定义分组。
4. 总结
num_groups
用于定义组归一化时的组数,通常根据特征图的通道数进行设置,较大的num_groups
有助于提高归一化的准确性。groups
在卷积操作中用于指定如何将输入通道和输出通道进行分组,常见的应用如深度可分卷积。
二、Group Normalization(GN)和 Batch Normalization(BN)
Group Normalization(GN)和 Batch Normalization(BN)是两种常用的归一化方法,它们有不同的计算方式和适用场景。以下是它们的主要区别以及对图像分割任务的影响:
1. 归一化的方式:
-
Batch Normalization (BN):
- 在BN中,归一化是基于批次(batch)中的所有样本计算的,即每个通道的均值和方差是对整个batch中的样本进行计算的。
- 计算公式:对于每个通道 c c c 在每个样本 x i x_i xi 中:
x ^ i = x i − μ c σ c \hat{x}_i = \frac{x_i - \mu_c}{\sigma_c} x^i=σcxi−μc
其中, μ c \mu_c μc 和 σ c \sigma_c σc 分别是通道 c c c 在当前batch中的均值和标准差。 - BN对于batch的大小非常敏感,因此在训练时依赖于batch大小。小批量(batch size)可能导致不稳定的均值和方差估计。
-
Group Normalization (GN):
- 在GN中,归一化是基于组(group)中的通道计算的,而不是整个批次。具体来说,GN将通道分成若干组,然后对每组内部的通道进行归一化处理。
- 计算公式:对于每组内的通道 g g g:
x ^ i = x i − μ g σ g \hat{x}_i = \frac{x_i - \mu_g}{\sigma_g} x^i=σgxi−μg
其中, μ g \mu_g μg 和 σ g \sigma_g σg 是组 g g g 内所有通道的均值和标准差。 - GN不依赖于batch size,因此可以在较小的batch size甚至单个样本的情况下工作。
2. 依赖性和适用场景:
-
Batch Normalization:
- 依赖于较大的batch size来计算准确的均值和方差,因此在使用小batch size(如1或2)时可能表现不佳。
- BN在训练时能有效减少内部协变量偏移(internal covariate shift),有助于加速收敛。
- 在图像分类、目标检测等任务中,当batch size足够大时,BN通常表现较好。
-
Group Normalization:
- GN不依赖于batch size,适用于小batch size的情况。它更适合于计算资源有限的任务,或者当batch size无法调大时(如医疗影像分割中的单个样本处理)。
- GN对于大batch size和小batch size都能稳定工作,因此在某些特定任务中(如图像分割)具有优势。
3. 对分割任务的影响:
-
Batch Normalization 在图像分割中的表现可能会受到batch size限制,尤其是在医学影像分割等任务中,通常batch size较小(例如每次只处理一张3D图像),这可能导致BN的均值和方差估计不准确,从而影响模型的稳定性和训练效果。
-
Group Normalization 适用于小batch size的场景,在医学影像分割中,尤其是3D图像分割时,GN表现得更加稳定,因为它不依赖于大批量的图像。GN可以更好地处理小batch size情况下的特征分布,避免了BN在小batch时的不稳定性。
4. 对模型性能的影响:
- 在Batch Normalization中,由于其依赖大batch size,它有时能够带来更快的收敛和更好的泛化能力,尤其是在训练时能够借助整个batch的统计信息。
- 在Group Normalization中,性能的提升取决于任务和数据集的特性。对于小batch size或内存限制较大的任务,GN可能会提高稳定性,但并不一定能够提供BN的加速效果,因为它无法利用batch间的统计信息。
总结:
- Batch Normalization 对于大batch size任务和深度网络(如分类任务)有很好的表现,能够加速训练并提高模型泛化能力。
- Group Normalization 更适合小batch size的任务,尤其是图像分割中,当处理如3D医学图像或非常大的输入图像时,GN可以避免BN的问题(如在小batch时的不稳定性)。
对分割的具体影响:
- 对于医学图像分割,尤其是3D图像的分割,Group Normalization 更有优势,因为它能够处理小batch size,并且能够稳定地处理不同的图像尺寸和通道数,而不依赖于较大的batch size。
- 如果你的模型训练时使用的是较小的batch size(比如每次处理一张图像),建议使用 Group Normalization。如果你的模型支持较大的batch size,则可以使用 Batch Normalization,它可能能提供更好的训练稳定性和收敛速度。
相关文章:
【num_groups、 groups、init_filters以及归一化的选择】
目录 省流总结:一、num_groups与 groups的关系1. num_groups在代码中的作用(1) 定义(2) num_groups的值的不同影响1. 每组的通道数量:2. 计算效率:3. 对模型表现的影响:4. 对分割任务的影响:5. 训练稳定性:…...
Java设计模式——职责链模式:解锁高效灵活的请求处理之道
嘿,各位 Java 编程大神和爱好者们!今天咱们要一同深入探索一种超厉害的设计模式——职责链模式。它就像一条神奇的“处理链”,能让请求在多个对象之间有条不紊地传递,直到找到最合适的“处理者”。准备好跟我一起揭开它神秘的面纱…...
ubuntu20配置mysql注意事项
目录 一、mysql安装 二、初始化配置密码 三、配置文件的位置 四、常用的mysql命令 五、踩坑以及解决方法 一、mysql安装 1.更新apt源 sudo apt update 2.安装mysql服务 sudo apt-get install mysql-server 3.初始化配置 sudo mysql_secure_installation 4.配置项 VALI…...
JDBC 设置 PostgreSQL 查询中 any(?) 的参数
这段时间都纠缠于 Java 如何操作 PostgreSQL 数据库上,千方百计的为求得更好的性能。为此我们用上了 Batch, 或用 id any(?) 这种更 PostgreSQL 化的数组参数操作。其实它还有更多数组方面的花样可以玩,毕竟 PostgreSQL 数据库有一种广纳百川的胸怀&am…...
论文笔记(五十七)Diffusion Model Predictive Control
Diffusion Model Predictive Control 文章概括摘要1. Introduction2. Related work3. 方法3.1 模型预测控制3.2. 模型学习3.3. 规划(Planning)3.4. 适应 4. 实验(Experiments)4.1. 对于固定奖励,D-MPC 可与其他离线 RL…...
【在Linux世界中追寻伟大的One Piece】多线程(三)
目录 1 -> Linux线程同步 1.1 -> 条件变量 1.2 -> 同步概念与竞态条件 1.3 -> 条件变量函数 1.4 -> 为什么pthread_cond_wait需要互斥量 1.5 -> 条件变量使用规范 2 -> 生产者消费者模型 2.1 -> 为什么要使用生产者消费者模型 2.2 -> 生产…...
eBay 基于 Celeborn RESTful API 进行自动化工具集成实践
作者:王斐,ebay Hadoop 团队软件工程师,Apache Kyuubi PMC member,Apache Celeborn Committer。 简介:Apache Celeborn 是一个统一的大数据中间服务,致力于提高不同MapReduce引擎的效率和弹性。为了Spark …...
Vue 前端 el-input 如何实现输入框内容始终添加在尾部%
要在 el-input 输入框的尾部添加 %,你可以通过两种方式来实现: 使用 suffix 插槽:这是最直接和最常用的方法。使用 append 插槽:如果你需要在输入框内或者右侧显示其他内容。 方法 1:使用 suffix 插槽 el-input 提供…...
如何通过轻易云实现泛微OA与金蝶云星空的数据无缝对接
FD003-非生产性付款申请 泛微>金蝶付款单-422 数据集成案例分享 在企业信息化系统中,数据的高效流转和准确对接是确保业务流程顺畅运行的关键。本文将重点探讨如何通过轻易云数据集成平台,实现泛微OA-Http与金蝶云星空之间的数据无缝对接,…...
【docker】docker的起源与容器的由来、docker容器的隔离机制
Docker 的起源与容器的由来 1. 虚拟机的局限:容器的需求萌芽 在 Docker 出现之前,开发和部署软件主要依赖虚拟机(VMs): 虚拟机通过模拟硬件运行操作系统,每个应用程序可以运行在自己的独立环境中。虽然虚…...
mysql 事务之LBCC与MVCC
一、事务 数据库事务(Database Transaction)是数据库管理系统(DBMS)中执行的一系列操作,这些操作被当作一个逻辑单元进行处理,以保证数据的一致性和完整性。 ACID,事务四个关键特性 1、原子性…...
记一次 .NET某hdp智能柜系统 卡死分析
一:背景 1. 讲故事 停了一个月时间没有更新博客了,主要是这段时间有些许事情导致心神不宁,我这个人也比较浮躁所以无法潜心修炼,事情如下: 被狗咬了 也不知道是不是出门没看黄历,在小区门口店里买烟&am…...
大模型专栏--Spring Ai Alibaba介绍和功能演示
Spring AI Alibaba 介绍和功能演示 背景 Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。…...
【GPT】为什么人需要睡觉?
睡觉对人类来说是至关重要的生理和心理需求。以下是一些为什么人需要睡觉的主要原因,以及睡眠对身体和大脑的影响: 1. 恢复与修复 身体修复:在睡眠期间,身体进行细胞修复和再生。例如,生长激素在深度睡眠中分泌&#…...
【Linux】磁盘 | 文件系统 | inode
🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 模电好难啊ÿ…...
A051-基于Spring Boot的网络海鲜市场系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
谷歌浏览器Chrome打开百度很慢,其他网页正常的解决办法,试了很多,找到了适合的
最近不知怎么的,Chrome突然间打开百度很慢,甚至打不开。不光我一个人遇到这问题,我同事也遇到这个问题。开发中难免遇到问题,需要百度,现在是百度不了。 作为一名开发人员,习惯了使用Chrome进行开发&#…...
《企业级低代码开发平台技术要求》核心要点解析
一、引言 在数字化转型的浪潮中,企业级低代码开发平台成为推动企业创新与发展的关键力量。深圳市标准化协会发布的《企业级低代码开发平台技术要求》(T/SZAS 77—2024)为该领域提供了重要的规范与指引。深入剖析其核心要点,对于理…...
AI一键生成3D动画:腾讯最新方案,为小程序带来革命性变化
随着3D技术的快速发展,将静态的3D模型转化为能够生动展现各种动作的角色已经成为许多创作者和开发者梦寐以求的能力。然而,在过去,这一过程往往需要大量的手动工作和技术积累。现在,腾讯推出了一项创新的技术——AI一键生成3D动画,它不仅极大地简化了流程,还显著提高了效…...
AD软件如何快速切换三维视图,由2D切换至3D,以及如何恢复
在Altium Designer软件中,切换三维视图以及恢复二维视图的操作相对简单。以下是具体的步骤: 切换三维视图 在PCB设计界面中,2D切换3D,快捷键按住数字键盘中的“3”即可切换; 快捷键ctrlf(或者vb快捷键也…...
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都…...
opencv 区域提取三种算法
opencv 区域提取三种算法 1.轮廓查找 findContours()函数,得到轮廓的点集集合 cv::vector<cv::vector<Point>> contours;threshold(roiMat,binImg,m_pPara.m_nMinGray,m_pPara.m_nMaxGray,THRESH_BINARY);//膨胀处理Mat dilaElement getStructuringE…...
C++初阶(十六)--STL--list的模拟实现
目录 结点类的实现 迭代器类的模拟实现 迭代器类的模板参数说明 构造函数 *运算符重载 ->运算符的重载 运算符的重载 --运算符重载 !运算符重载 运算符重载 list类的模拟实现 成员变量 默认成员函数 构造函数 拷贝构造函数 赋值运算符重载 迭代器相关函数 …...
树莓集团:以人工智能为核心,打造数字化生态运营新典范
在当今数字化浪潮席卷全球的背景下,各行各业都在积极探索数字化转型的路径。作为数字产业的领军者,树莓集团凭借其深厚的技术积累和创新理念,在人工智能、大数据、云计算等前沿技术领域不断突破,成功打造了一个以人工智能为核心的…...
基于深度学习的卷积神经网络十二生肖图像识别系统(PyQt5界面+数据集+训练代码)
本研究提出了一种基于深度学习的十二生肖图像识别系统,旨在利用卷积神经网络(CNN)进行图像分类,特别是十二生肖图像的自动识别。系统的核心采用了两种经典的深度学习模型:ResNet50和VGG16,进行图像的特征提…...
Torchtune在AMD GPU上的使用指南:利用多GPU能力进行LLM微调与扩展
Torchtune on AMD GPUs How-To Guide: Fine-tuning and Scaling LLMs with Multi-GPU Power — ROCm Blogs 这篇博客提供了一份详细的使用Torchtune在AMD GPU上微调和扩展大型语言模型(LLM)的指南。Torchtune 是一个PyTorch库,旨在让您轻松地…...
ESLint
代码规范 一套写代码的约定规则;比如赋值符号左右是否需要空格,一句话结束是否要加;.... 代码规范错误 如果你的代码不符合standard的要求,ESLint(脚手架里配的东西)会告诉你哪个文件第几行错了 解决代码…...
小程序-基于java+SpringBoot+Vue的微信小程序养老院系统设计与实现
项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:…...
如何具体实现商品详情的提取?
在电商领域,获取商品详情信息对于市场分析、价格比较、商品推荐等应用场景至关重要。本文将详细介绍如何使用Java编写爬虫程序,以合法合规的方式获取淘宝商品的详情信息,并提供详细的代码示例。 1. 环境准备 在开始编写爬虫之前,…...
antd table 自定义表头过滤表格内容
注意:该功能只能过滤可一次性返回全部数据的表格,通过接口分页查询的请自主按照需求改动哈~ 实现步骤: 1.在要过滤的列表表头增加过滤图标,点击图标显示浮窗 2.浮窗内显示整列可选选项,通过勾选单选或者全选、搜索框来…...
高效处理 iOS 应用中的大规模礼物数据:以直播项目为例(1-礼物池)
引言 在现代iOS应用开发中,处理大规模数据是一个常见的挑战。尤其实在直播项目中,礼物面板作为展示用户互动的重要部分,通常需要实时显示海量的礼物数据。这些数据不仅涉及到不同的区域、主播的动态差异,还需要保证高效的加载与渲…...
Maven - 优雅的管理多模块应用的统一版本号
文章目录 概述一、使用 versions-maven-plugin 插件1. 在主 pom.xml 中定义插件2. 修改版本号3. 回退修改4. 提交修改 二、使用占位符统一管理版本号1. 在主 pom.xml 中定义占位符2. 使用 flatten-maven-plugin 插件自动替换占位符3. 修改版本号4. 为什么这种方式更方便&#x…...
C++设计模式(观察者模式)
一、介绍 1.动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”,即一个对象的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵…...
【unity】WebSocket 与 EventSource 的区别
WebSocket 也是一种很好的选择,尤其是在需要进行 双向实时通信(例如聊天应用、实时数据流等)时。与 EventSource 不同,WebSocket 允许客户端和服务器之间建立一个持久的、全双工的通信通道。两者的区别和适用场景如下:…...
从ETL到DataOps:WhaleStudio替代Informatica,实现信创化升级
作者 | 白鲸开源 姜维 在数据集成和调度的领域,Informatica曾经是公认的权威工具。其强大的ETL功能、多年积累的市场经验,使其成为众多企业数据处理的核心工具。 然而,随着新一代大数据平台的迅速崛起,以及信创化改造的要求愈发严…...
第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放
文章目录 摘要1、简介2、相关工作3、复合模型缩放3.1、 问题公式化3.2、扩展维度3.3、复合比例 4、EfficientNet架构5、实验5.1、扩展MobileNets和ResNets5.2、EfficientNet的ImageNet结果5.3、EfficientNet的迁移学习结果 6、讨论7、结论 摘要 卷积神经网络(ConvNets)通常在固…...
[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求: 编译硬件需求:做多系统测试,磁盘500GB起步(固态)(机械会卡死),内存3…...
Web Worker 和 WebSocket的区别
Web Worker(消息传递机制) 定义:是为了在浏览器中提供多线程支持,允许 JavaScript 在后台线程运行,而不阻塞主线程。它非常适合执行耗时的计算任务或处理大量数据,避免主线程(通常是 UI 线程&a…...
vmware Ubuntu2004运行STAR-Searcher
github链接 安装ros noetic gazebo11 略 gazebo更新方法 sudo sh -c echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable lsb_release -cs main" > /etc/apt/sources.list.d/gazebo-stable.list wget https://packages.osrfoundation.org/gaz…...
04_JavaScript引入到文件
JavaScript引入到文件 嵌入到HTML文件中 <body> <script> var age 20 </script></body> 引入本地独立JS文件 <body> <script type"text/javascript" src"./itbaizhan.js"> </script></body> 引入网络来…...
计算机网络的功能
目录 信息交换 资源共享 分布式处理 可靠性增强 集中管理 信息交换 计算机网络最基本的功能之一是允许不同设备之间的数据通信。这包括电子邮件的发送和接收、即时消息的传递、文件传输等。通过网络,用户可以轻松地与全球各地的其他人进行沟通和协作。 信息交…...
38 基于单片机的宠物喂食(ESP8266、红外、电机)
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用L298N驱动连接P2.3和P2.4口进行电机驱动, 然后串口连接P3.0和P3.1模拟ESP8266, 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…...
Git仓库迁移到远程仓库(源码、分支、提交)
单个迁移仓库 一、迁移仓库 1.准备工作 > 手动在电脑创建一个临时文件夹,CMD进入该目录 > 远程仓库上创建一个同名的空仓库 2.CMD命令:拉取旧Git仓库(包含提交、分支、源码) $ git clone --bare http://git.domain.cn/…...
Go语言压缩文件处理
目录 Go 语言压缩文件处理1. 压缩文件:Zip函数2. 解压文件:UnZip 函数3. 小结 Go 语言压缩文件处理 在现代的应用开发中,处理压缩文件(如 .zip 格式)是常见的需求。Go 语言提供了内置的 archive/zip 包来处理 .zip 文…...
Libevent库-http通信不同请求方式的处理
做项目的时候用到了http通信,同事用libevent库写的,特此记录后端从前端拿到消息后的处理方式 void CHTTPTest::request(const std::any & data) {// data 是从前端拿到的数据void *obj std::any_cast<void *>(data); // std::any是C17新标准…...
Vue3 v-if与v-show的区别
v-if 与 v-show 我们都可以在开发中用于条件渲染,在面试时也是个常考的题目 实现原理 v-if:是真正的条件渲染,当v-if true时,元素会被创建、渲染,并插入到dom树中,这个过程会耗费系统的资源,当…...
同时在github和gitee配置密钥
同时在github和gitee配置密钥 1. 生成不同的 SSH 密钥 为每个平台生成单独的 SSH 密钥。 # 为 GitHub 生成密钥(默认文件路径为 ~/.ssh/github_id_rsa) ssh-keygen -t rsa -b 4096 -C "your_github_emailexample.com" -f ~/.ssh/github_id_…...
Scala—数组(不可变数组Array、可变数组ArrayBuffer)用法详解
Scala集合概述-链接 大家可以点击上方链接,先对Scala的集合有一个整体的概念🤣🤣🤣 在 Scala 中,数组是一种特殊的集合类型,可以是可变的也可以是不可变的。 1. 不可变数组 在 Scala 中,不可变…...
Failed to find SV in PRN block of SINEX file (Name svnav.dat)
gamit 精密星历生成失败 gamit svnav.dat没更新 下载svnav.dat.allgnss 重命名成 svnav.dat ,替换到tables,即可。...
H.265流媒体播放器EasyPlayer.js无插件H5播放器关于移动端(H5)切换网络的时候,播放器会触发什么事件
EasyPlayer.js无插件H5播放器作为一款功能全面的H5流媒体播放器,凭借其多种协议支持、多种解码方式、丰富的渲染元素和强大的应用功能,以及出色的跨平台兼容性,为用户提供了高度定制化的选项和优化的播放体验。无论是视频直播还是点播&#x…...