Vision Transformer在timm中的实现与优化

news2026/4/1 4:48:23
Vision Transformer在timm中的实现与优化【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models本文深入探讨了timm库中Vision Transformer的多种架构变体、注意力机制优化技术和性能调优策略。重点介绍了并行注意力架构、融合注意力计算、查询-键归一化技术、动态图像尺寸支持等核心优化方法以及绝对、相对、旋转位置编码等不同位置编码策略的实现细节。文章还详细分析了各种注意力变体的计算复杂度、内存使用和适用场景为开发者提供了全面的ViT模型优化和部署指南。ViT架构变体与注意力机制优化在timm库中Vision Transformer的实现不仅包含了标准的ViT架构还集成了多种先进的变体和注意力机制优化技术。这些优化使得ViT模型在计算效率、内存使用和性能表现方面都得到了显著提升。并行注意力架构timm实现了基于《Scaling Vision Transformers to 22 Billion Parameters》论文的并行ViT块将MLP和注意力计算并行化class ParallelScalingBlock(nn.Module): Parallel ViT block (MLP Attention in parallel) def __init__(self, dim, num_heads, mlp_ratio4., qkv_biasFalse, qk_normFalse, proj_drop0., attn_drop0., init_valuesNone, drop_path0., act_layernn.GELU, norm_layernn.LayerNorm, mlp_layerNone): super().__init__() # 合并MLP fc1和qkv投影 self.in_norm norm_layer(dim) mlp_hidden_dim int(mlp_ratio * dim) in_proj_out_dim mlp_hidden_dim 3 * dim self.in_proj nn.Linear(dim, in_proj_out_dim, biasqkv_bias) self.in_split [mlp_hidden_dim] [dim] * 3 # 注意力机制配置 self.q_norm norm_layer(dim // num_heads) if qk_norm else nn.Identity() self.k_norm norm_layer(dim // num_heads) if qk_norm else nn.Identity() self.attn_drop nn.Dropout(attn_drop) self.attn_out_proj nn.Linear(dim, dim) # MLP配置 self.mlp_act act_layer() self.mlp_out_proj nn.Linear(mlp_hidden_dim, dim) self.ls LayerScale(dim, init_valuesinit_values) if init_values else nn.Identity() self.drop_path DropPath(drop_path) if drop_path 0. else nn.Identity()这种并行架构通过合并投影计算减少了内存访问次数显著提升了训练和推理效率。融合注意力计算优化timm集成了PyTorch的融合注意力计算功能通过环境变量TIMM_FUSED_ATTN控制class Attention(nn.Module): fused_attn: Final[bool] def __init__(self, dim, num_heads8, qkv_biasFalse, qk_normFalse, attn_drop0., proj_drop0., norm_layernn.LayerNorm): super().__init__() self.fused_attn use_fused_attn() # 检查是否启用融合注意力 def forward(self, x): if self.fused_attn: # 使用PyTorch原生融合注意力 x F.scaled_dot_product_attention( q, k, v, dropout_pself.attn_drop.p if self.training else 0., ) else: # 传统注意力计算 attn (q k.transpose(-2, -1)) * self.scale attn attn.softmax(dim-1) attn self.attn_drop(attn) x attn v融合注意力计算通过减少中间张量的创建和内存拷贝在支持CUDA的设备上可以获得显著的性能提升。查询-键归一化技术timm实现了查询-键归一化QK-Norm技术这是近年来注意力机制的重要优化class Attention(nn.Module): def __init__(self, dim, num_heads8, qkv_biasFalse, qk_normFalse, ...): super().__init__() self.q_norm norm_layer(self.head_dim) if qk_norm else nn.Identity() self.k_norm norm_layer(self.head_dim) if qk_norm else nn.Identity() def forward(self, x): q, k, v self.qkv(x).split([self.dim, self.dim, self.dim], dim-1) q self.q_norm(q.view(B, N, self.num_heads, self.head_dim)) k self.k_norm(k.view(B, N, self.num_heads, self.head_dim))QK-Norm通过对查询和键向量进行层归一化改善了训练稳定性特别是在大规模模型和长序列处理中表现优异。动态图像尺寸支持timm的ViT实现支持动态图像尺寸处理无需重新训练即可适应不同分辨率的输入class VisionTransformer(nn.Module): def __init__(self, img_size224, patch_size16, dynamic_img_sizeFalse, dynamic_img_padFalse, **kwargs): super().__init__() self.dynamic_img_size dynamic_img_size self.dynamic_img_pad dynamic_img_pad def forward_features(self, x): if self.dynamic_img_size: # 动态调整位置编码 pos_embed self._resize_pos_embed( self.pos_embed, (x.shape[2] // self.patch_size, x.shape[3] // self.patch_size) )这种动态支持使得同一个预训练模型可以处理多种分辨率的输入极大提升了模型的实用性。多种注意力变体对比下表展示了timm中支持的不同注意力机制变体及其特性注意力变体计算复杂度内存使用训练稳定性适用场景标准注意力O(N²)高中等通用场景融合注意力O(N²)中高CUDA设备并行注意力O(N²)中高大规模模型线性注意力O(N)低中等长序列处理局部注意力O(N√N)低高高分辨率图像层缩放与残差连接优化timm实现了LayerScale技术这是现代ViT架构中的重要优化class LayerScale(nn.Module): def __init__(self, dim, init_values1e-5, inplaceFalse): super().__init__() self.gamma nn.Parameter(init_values * torch.ones(dim)) def forward(self, x): return x.mul_(self.gamma) if self.inplace else x * self.gamma class Block(nn.Module): def __init__(self, dim, num_heads, init_valuesNone, ...): super().__init__() self.ls1 LayerScale(dim, init_valuesinit_values) if init_values else nn.Identity() self.ls2 LayerScale(dim, init_valuesinit_values) if init_values else nn.Identity()LayerScale通过可学习的缩放参数增强了残差连接的表达能力特别是在深度网络中效果显著。位置编码变体timm支持多种位置编码方案包括绝对位置编码标准的可学习位置嵌入相对位置编码基于相对距离的位置偏置旋转位置编码RoPE通过旋转矩阵编码位置信息无位置编码完全依赖注意力机制学习位置关系# RoPE位置编码示例 if self.use_rope: # 应用旋转位置编码 q apply_rotary_pos_emb(q, self.rope_freqs) k apply_rotary_pos_emb(k, self.rope_freqs)注意力头配置优化timm允许灵活配置注意力头的数量和维度class VisionTransformer(nn.Module): def __init__(self, num_heads12, qkv_biasTrue, qk_scaleNone, attn_drop_rate0., ...): # 支持不同的头配置 assert dim % num_heads 0, dim必须能被num_heads整除 self.head_dim dim // num_heads这种灵活性使得用户可以根据具体任务和硬件条件优化模型配置。性能优化技术汇总下表总结了timm中ViT注意力机制的主要优化技术优化技术实现方式性能提升内存节省融合注意力F.scaled_dot_product_attention20-30%15-25%并行计算MLP和注意力并行10-20%10-15%QK归一化查询键向量归一化训练稳定性无影响动态尺寸运行时位置编码调整灵活性无影响LayerScale可学习残差缩放收敛速度轻微增加这些优化技术的组合使得timm中的ViT实现不仅在精度上达到state-of-the-art水平在计算效率和实用性方面也表现出色。通过灵活的配置选项研究人员和开发者可以根据具体需求选择最适合的注意力机制变体。位置编码策略绝对、相对、旋转位置编码在Vision Transformer中位置编码是至关重要的组件它帮助模型理解图像中不同patch之间的空间关系。timm库提供了多种先进的位置编码策略包括绝对位置编码、相对位置编码和旋转位置编码每种策略都有其独特的优势和适用场景。绝对位置编码 (Absolute Position Embedding)绝对位置编码是最基础的位置编码方式为每个空间位置分配一个固定的嵌入向量。在timm中绝对位置编码通过可学习的参数矩阵实现class VisionTransformer(nn.Module): def __init__(self, img_size224, patch_size16, in_chans3, num_classes1000, embed_dim768, depth12, num_heads12, mlp_ratio4., qkv_biasTrue, representation_sizeNone, distilledFalse, drop_rate0., attn_drop_rate0., drop_path_rate0., embed_layerPatchEmbed, norm_layerNone, act_layerNone, weight_init, class_tokenTrue, global_pooltoken): super().__init__() # 绝对位置编码初始化 num_patches self.patch_embed.num_patches self.pos_embed nn.Parameter(torch.zeros(1, num_patches self.num_prefix_tokens, embed_dim)) # 位置编码的插值支持 self.register_buffer(pos_embed_orig_size, torch.tensor([img_size // patch_size] * 2))绝对位置编码的优势在于简单直接但对于不同分辨率的输入需要进行插值处理。timm提供了专门的插值函数def resample_abs_pos_embed( posemb: torch.Tensor, new_size: List[int], old_size: Optional[List[int]] None, num_prefix_tokens: int 1, interpolation: str bicubic, antialias: bool True ): # 实现双三次插值来调整位置编码尺寸 if old_size is None: hw int(math.sqrt(num_pos_tokens - num_prefix_tokens)) old_size hw, hw posemb posemb.float() posemb posemb.reshape(1, old_size[0], old_size[1], -1).permute(0, 3, 1, 2) posemb F.interpolate(posemb, sizenew_size, modeinterpolation, antialiasantialias) posemb posemb.permute(0, 2, 3, 1).reshape(1, -1, embed_dim) return posemb相对位置编码 (Relative Position Embedding)相对位置编码关注的是token之间的相对距离关系而不是绝对位置。timm实现了基于窗口的相对位置偏置class RelPosBias(nn.Module): 相对位置偏置模块 def __init__(self, window_size, num_heads, prefix_tokens0): super().__init__() self.window_size window_size self.window_area window_size[0] * window_size[1] # 生成相对位置索引 self.register_buffer( relative_position_index, gen_relative_position_index(self.window_size, class_tokenprefix_tokens 0).view(-1), persistentFalse, ) # 可学习的相对位置偏置表 num_relative_distance (2 * window_size[0] - 1) * (2 * window_size[1] - 1) 3 * prefix_tokens self.relative_position_bias_table nn.Parameter(torch.zeros(num_relative_distance, num_heads)) def get_bias(self) - torch.Tensor: relative_position_bias self.relative_position_bias_table[self.relative_position_index] return relative_position_bias.view(self.bias_shape).permute(2, 0, 1).unsqueeze(0)相对位置编码的核心优势在于其平移不变性能够更好地处理不同分辨率的输入无需插值操作。旋转位置编码 (Rotary Position Embedding, RoPE)旋转位置编码是近年来最先进的位置编码方法通过旋转变换将位置信息编码到查询和键向量中def apply_rot_embed(x: torch.Tensor, sin_emb, cos_emb): 应用旋转位置编码到输入张量 if sin_emb.ndim 3: return x * cos_emb.unsqueeze(1).expand_as(x) rot(x) * sin_emb.unsqueeze(1).expand_as(x) return x * cos_emb rot(x) * sin_emb def rot(x): 旋转操作将复数形式的向量进行旋转 return torch.stack([-x[..., 1::2], x[..., ::2]], -1).reshape(x.shape)旋转位置编码的构建过程def build_rotary_pos_embed( feat_shape: List[int], dim: int 64, max_res: int 224, temperature: float 10000., linear_bands: bool False, in_pixels: bool True ): 构建旋转位置编码的正弦和余弦分量 sin_emb, cos_emb build_fourier_pos_embed( feat_shape, num_bandsdim // 4, max_resmax_res, temperaturetemperature, linear_bandslinear_bands, in_pixelsin_pixels ) # 调整形状以适应旋转操作 num_spatial_dim 1 for x in feat_shape: num_spatial_dim * x sin_emb sin_emb.reshape(num_spatial_dim, -1).repeat_interleave(2, -1) cos_emb cos_emb.reshape(num_spatial_dim, -1).repeat_interleave(2, -1) return sin_emb, cos_emb三种位置编码策略对比编码类型核心思想优势适用场景绝对位置编码为每个位置分配固定向量实现简单计算高效固定分辨率任务相对位置编码编码位置间相对关系平移不变性支持多分辨率需要尺度不变性的任务旋转位置编码通过旋转变换编码位置外推能力强理论优雅长序列和可变分辨率任务实际应用示例在timm中使用不同位置编码的Vision Transformer变体import timm # 使用绝对位置编码的标准ViT model_abs timm.create_model(vit_base_patch16_224, pretrainedTrue) # 使用相对位置编码的ViT model_rel timm.create_model(vit_relpos_base_patch16_224, pretrainedTrue) # 使用旋转位置编码的ViT如果可用 # model_rope timm.create_model(vit_rope_base_patch16_224, pretrainedTrue)性能优化建议内存优化相对位置编码通常比绝对位置编码更节省内存特别是在处理高分辨率图像时计算效率旋转位置编码在推理时几乎没有额外计算开销泛化能力相对和旋转位置编码在测试时分辨率与训练时不同的情况下表现更好位置编码策略的选择应该基于具体任务需求、计算资源约束和预期的输入分辨率变化。timm库提供了灵活的配置选项使得开发者可以轻松地在不同位置编码策略之间进行切换和实验。动态图像尺寸支持与特征提取在计算机视觉任务中处理不同尺寸的输入图像是一个常见需求。传统的Vision Transformer模型通常要求固定尺寸的输入这在实际应用中存在诸多限制。timm库通过引入动态图像尺寸支持机制为Vision Transformer模型提供了灵活的图像处理能力。动态图像尺寸支持机制timm库通过PatchEmbed模块的dynamic_img_pad参数实现了动态图像尺寸支持。当启用该功能时模型可以处理任意尺寸的输入图像系统会自动进行适当的填充以确保图像尺寸能够被patch大小整除。class PatchEmbed(nn.Module): def __init__( self, img_size: Optional[int] 224, patch_size: int 16, in_chans: int 3, embed_dim: int 768, norm_layer: Optional[Callable] None, flatten: bool True, output_fmt: Optional[str] None, bias: bool True, strict_img_size: bool True, dynamic_img_pad: bool False, # 动态填充开关 ): # ... 初始化代码 self.dynamic_img_pad dynamic_img_pad def forward(self, x): B, C, H, W x.shape if self.dynamic_img_pad: # 动态计算填充量 pad_h (self.patch_size[0] - H % self.patch_size[0]) % self.patch_size[0] pad_w (self.patch_size[1] - W % self.patch_size[1]) % self.patch_size[1] x F.pad(x, (0, pad_w, 0, pad_h)) x self.proj(x) # ... 后续处理特征提取流程timm库提供了灵活的特征提取机制支持从不同层级获取特征图。通过features_only参数和out_indices参数用户可以精确控制需要提取的特征层级。# 创建支持特征提取的ViT模型 model timm.create_model( vit_base_patch16_224, pretrainedTrue, features_onlyTrue, # 启用特征提取模式 out_indices(2, 4, 6) # 指定提取的层级索引 ) # 处理动态尺寸输入 input_tensor torch.randn(1, 3, 384, 512) # 非标准尺寸 features model(input_tensor) for i, feat in enumerate(features): print(fLayer {i}: {feat.shape})多尺度特征融合timm库支持从Vision Transformer的不同层级提取特征便于实现多尺度特征融合。这种能力对于目标检测、语义分割等需要多尺度信息的任务尤为重要。位置编码的动态调整对于动态尺寸的输入timm库提供了智能的位置编码调整机制。系统会根据实际的图像尺寸动态调整位置编码确保空间信息的准确性。def resample_abs_pos_embed( posemb: torch.Tensor, new_size: List[int], old_size: Optional[List[int]] None, num_prefix_tokens: int 1, interpolation: str bicubic, antialias: bool True, verbose: bool False, ): 重新采样绝对位置编码以适应新的特征图尺寸 参数: posemb: 原始位置编码张量 new_size: 目标特征图尺寸 [height, width] old_size: 原始特征图尺寸 [height, width] num_prefix_tokens: 前缀token数量如class token interpolation: 插值方法 antialias: 是否使用抗锯齿 # 实现细节...实际应用示例以下是一个完整的动态尺寸图像处理示例展示了如何利用timm库处理不同尺寸的输入图像并提取多尺度特征import torch import timm import torch.nn.functional as F # 创建支持动态尺寸的ViT模型 model timm.create_model( vit_base_patch16_224, pretrainedTrue, img_size384, # 训练时的基准尺寸 dynamic_img_sizeTrue, dynamic_img_padTrue, features_onlyTrue, out_indices(3, 6, 9) # 提取中间层的特征 ) # 处理不同尺寸的输入图像 image_sizes [(256, 256), (384, 512), (480, 640)] for height, width in image_sizes: # 生成模拟输入 input_tensor torch.randn(1, 3, height, width) # 前向传播获取多尺度特征 features model(input_tensor) print(f\n输入尺寸: {height}x{width}) for i, feat in enumerate(features): print(f特征层 {i}: {feat.shape})性能优化考虑使用动态图像尺寸支持时需要注意以下性能优化策略优化策略说明适用场景批量相同尺寸处理将相同尺寸的图像组成批次推理优化预计算位置编码对常见尺寸预计算位置编码内存优化梯度检查点减少内存使用训练优化混合精度使用FP16/BP16速度优化兼容性说明timm库的动态尺寸支持与以下特性完全兼容预训练权重可以在不重新训练的情况下使用现有预训练模型模型导出支持ONNX、TorchScript等格式导出分布式训练完全支持多GPU训练和推理量化加速与INT8/FP16量化兼容通过这种动态图像尺寸支持机制timm库为Vision Transformer模型提供了前所未有的灵活性使其能够更好地适应实际应用中的多样化输入需求。ViT模型性能调优与部署技巧Vision Transformer (ViT) 作为计算机视觉领域的革命性架构在timm库中得到了全面而深入的实现。在实际应用中如何充分发挥ViT模型的性能潜力并实现高效部署是每个开发者都需要掌握的关键技能。本文将深入探讨timm中ViT模型的性能调优策略和部署优化技巧。融合注意力机制优化timm库中的ViT实现采用了先进的融合注意力机制通过F.scaled_dot_product_attention来显著提升计算效率。这种优化在支持CUDA的GPU上能够获得显著的性能提升。import torch import timm from timm.layers import use_fused_attn # 检查是否支持融合注意力 print(fFused attention supported: {use_fused_attn()}) # 创建支持融合注意力的ViT模型 model timm.create_model(vit_base_patch16_224, pretrainedTrue) # 启用融合注意力默认已启用 model timm.create_model(vit_base_patch16_224, pretrainedTrue, fused_attnTrue)融合注意力机制的工作原理如下动态图像尺寸支持timm中的ViT模型支持动态图像尺寸处理这对于处理不同分辨率的输入图像非常有用特别是在部署场景中。# 启用动态图像尺寸支持 model timm.create_model(vit_base_patch16_224, pretrainedTrue, dynamic_img_sizeTrue, dynamic_img_padTrue) # 处理不同尺寸的图像 input_256 torch.randn(1, 3, 256, 256) input_384 torch.randn(1, 3, 384, 384) # 自动调整位置编码和补丁嵌入 output_256 model(input_256) output_384 model(input_384) print(fOutput shape for 256x256: {output_256.shape}) print(fOutput shape for 384x384: {output_384.shape})动态尺寸处理的工作流程特征提取优化timm提供了强大的特征提取功能支持从ViT模型中提取中间层特征这对于迁移学习和特征工程非常有用。# 启用特征提取模式 model timm.create_model(vit_base_patch16_224, pretrainedTrue, features_onlyTrue, out_indices(4, 8, 12)) # 提取第4、8、12层的特征 # 获取中间层特征 input_tensor torch.randn(1, 3, 224, 224) features model(input_tensor) for i, feat in enumerate(features): print(fFeature {i} shape: {feat.shape}) # 使用forward_intermediates API final_feat, intermediates model.forward_intermediates(input_tensor) print(fFinal feature shape: {final_feat.shape}) for i, intermediate in enumerate(intermediates): print(fIntermediate {i} shape: {intermediate.shape})混合精度训练与推理混合精度训练可以显著减少内存使用并加速训练过程timm对此提供了完善的支持。import torch.cuda.amp as amp # 混合精度训练配置 model timm.create_model(vit_base_patch16_224, pretrainedTrue) model model.cuda() optimizer torch.optim.AdamW(model.parameters(), lr1e-4) scaler amp.GradScaler() # 训练循环 for inputs, targets in dataloader: inputs, targets inputs.cuda(), targets.cuda() with amp.autocast(): outputs model(inputs) loss criterion(outputs, targets) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() # 混合精度推理 with torch.no_grad(), amp.autocast(): outputs model(inputs)模型量化与优化timm支持多种模型量化技术可以显著减少模型大小并提升推理速度。# 动态量化 quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 ) # 训练后静态量化 model.eval() model.qconfig torch.quantization.get_default_qconfig(fbgemm) torch.quantization.prepare(model, inplaceTrue) # 校准步骤... torch.quantization.convert(model, inplaceTrue) # 使用量化模型进行推理 with torch.no_grad(): quantized_output quantized_model(inputs)部署优化策略在实际部署中需要考虑多种优化策略来提升ViT模型的性能。批处理优化# 优化批处理大小 optimal_batch_size find_optimal_batch_size(model, input_shape(3, 224, 224)) print(fOptimal batch size: {optimal_batch_size}) # 使用TensorRT加速 import tensorrt as trt # TensorRT转换和优化代码...内存优化表优化技术内存减少速度提升精度损失混合精度训练30-50%1.5-3x1%动态量化4x2-4x1-2%静态量化4x3-4x2-3%层融合轻微10-20%无性能监控与调试timm提供了丰富的性能监控工具帮助开发者分析和优化模型性能。from torch.utils.benchmark import Timer import time # 性能基准测试 def benchmark_model(model, input_size, num_runs100): model.eval() input_tensor torch.randn(input_size).cuda() # Warmup for _ in range(10): _ model(input_tensor) # Benchmark start_time time.time() for _ in range(num_runs): _ model(input_tensor) end_time time.time() return (end_time - start_time) / num_runs # 测试不同配置的性能 configs [ (vit_base_patch16_224, (1, 3, 224, 224)), (vit_large_patch16_224, (1, 3, 224, 224)), (vit_base_patch16_384, (1, 3, 384, 384)) ] for model_name, input_size in configs: model timm.create_model(model_name, pretrainedTrue).cuda() avg_time benchmark_model(model, input_size) print(f{model_name}: {avg_time*1000:.2f} ms per inference)高级优化技巧梯度检查点技术# 启用梯度检查点以减少内存使用 model timm.create_model(vit_large_patch16_224, pretrainedTrue, use_checkpointTrue) # 自定义检查点配置 from timm.models._manipulate import checkpoint_seq class CheckpointViT(nn.Module): def __init__(self, vit_model): super().__init__() self.vit vit_model def forward(self, x): # 只在特定层使用检查点 return checkpoint_seq(self.vit.blocks[:8], x) \ self.vit.blocks[8:](x)自定义注意力优化# 实现稀疏注意力机制 class SparseAttention(nn.Module): def __init__(self, dim, num_heads, sparse_ratio0.5): super().__init__() self.dim dim self.num_heads num_heads self.sparse_ratio sparse_ratio def forward(self, x): B, N, C x.shape # 实现稀疏注意力逻辑 # ... return x # 替换标准注意力层 model.blocks[0].attn SparseAttention(dim768, num_heads12)通过上述优化技巧和部署策略可以显著提升ViT模型在实际应用中的性能表现。timm库提供的丰富功能和灵活配置使得开发者能够根据具体需求选择最适合的优化方案在保持模型精度的同时最大化性能收益。总结本文全面介绍了timm库中Vision Transformer的实现与优化技术涵盖了从基础架构到高级优化的各个方面。通过并行注意力计算、融合注意力机制、QK归一化等技术创新timm中的ViT模型在计算效率、内存使用和性能表现方面都得到了显著提升。动态图像尺寸支持和多种位置编码策略为模型提供了更好的实用性和灵活性。文章还提供了详细的性能调优建议和部署技巧包括混合精度训练、模型量化、批处理优化等实用方法帮助开发者在实际应用中充分发挥ViT模型的潜力在保持精度的同时最大化性能收益。【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…