当前位置: 首页 > article >正文

Vision Transformer在timm中的实现与优化

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),仅供参考

相关文章:

Vision Transformer在timm中的实现与优化

Vision Transformer在timm中的实现与优化 【免费下载链接】pytorch-image-models The largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Visi…...

让ai替你思考架构:描述需求,快马智能生成带rabbitmq的微服务通知系统代码

最近在做一个微服务通知系统,用到了RabbitMQ这个强大的消息队列工具。说实话,消息队列的配置和绑定关系一开始让我有点头疼,好在发现了InsCode(快马)平台的AI辅助功能,整个过程变得轻松多了。下面分享下我的实现思路和经验。 系统…...

IDEA 好用的ai插件 Windsurf

文章目录 前言一、Windsurf 插件功能二、IDEA安装三、登录Windsurf四、Windsurf简单使用介绍 前言 在 IntelliJ IDEA 中,Windsurf 是一款专注于 AI 代码辅助的插件,能够提升开发效率。以下是关于该插件的关键信息和使用方法: 提示&#xff1…...

实战指南:基于快马平台与Touchgal,从零开发移动端手写绘图应用

今天想和大家分享一个实战项目:基于Touchgal开发移动端手写绘图应用。这个项目特别适合需要复杂手势交互的场景,比如绘图软件、地图导航等。下面我会详细介绍整个开发流程和关键实现点。 项目初始化与环境搭建 首先需要创建一个基础的HTML5项目结构。画…...

Python与OPC UA实战:高效读写PLC数据

1. 为什么选择Python操作OPC UA? 在工业自动化领域,PLC(可编程逻辑控制器)就像工厂的"大脑",而OPC UA则是让这个大脑与其他系统对话的"普通话"。作为Python开发者,我们经常需要从PLC读…...

VisDrone2019-MOT转COCO踩坑实录:为什么你的转换脚本总报错?附修复方案

VisDrone2019-MOT转COCO实战避坑指南:从报错解析到工业级解决方案 当你第一次尝试将VisDrone2019-MOT数据集转换为COCO格式时,可能会遇到各种令人抓狂的报错信息。这不是你的问题——这个转换过程确实存在许多隐藏的陷阱。本文将带你深入剖析五个最常见的…...

从HuggingFace下载到本地部署:手把手教你定制自己的BertTokenizer工作流

从HuggingFace下载到本地部署:手把手教你定制自己的BertTokenizer工作流 在自然语言处理项目中,一个高效且灵活的分词器往往是整个流程的基石。BertTokenizer作为HuggingFace生态中的核心组件,其预训练版本能够处理绝大多数英文和中文文本处理…...

别再手动转格式了!用Python的docx2pdf库5行代码搞定Word转PDF(Windows/Mac通用教程)

5行代码终结格式转换焦虑:Python自动化Word转PDF全攻略 每次市场部门催着要电子合同时,你是不是还在手忙脚乱地点击"另存为PDF"?当运营团队需要批量生成上百份产品手册时,是否还在忍受重复机械的格式转换操作&#xff1…...

从GCC-PHAT到深度学习:一种融合特征与神经网络的声源定位实践

1. 声源定位技术的前世今生 第一次接触声源定位是在2016年的一个智能音箱项目上,当时团队需要实现"唤醒词定向响应"功能。我们尝试了各种传统算法,最终在GCC-PHAT和SRP-PHAT之间反复调试的场景至今记忆犹新。这种让机器"听声辨位"的…...

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴+趋势分析+结论建议

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴趋势分析结论建议 1. 引言:当AI遇见科研数据分析 作为一名科研工作者,你是否经常遇到这样的场景:实验室刚跑出一组数据,你迫不及待想分析趋势,却发…...

3PEAK思瑞浦 TPT1051V-SO1R SOP8 CAN收发器

特性 符合IS011898标准支持CAN FD和最高达5 Mbps的数据速率典型环路延迟:110纳秒5V电源供应,3.0V~5.5VI0接口接收器共模输入电压:士30V总线故障保护:42VCAN网络最多支持110个节点结温范围从-40C到150C闩锁性能超过500mA总线引脚ESD保护:-8kV人体模型 -1.5kV充电设备…...

CRI-O系统配置终极指南:从systemd服务到内核参数调优

CRI-O系统配置终极指南:从systemd服务到内核参数调优 【免费下载链接】cri-o Open Container Initiative-based implementation of Kubernetes Container Runtime Interface 项目地址: https://gitcode.com/gh_mirrors/cr/cri-o CRI-O是Kubernetes容器运行时…...

SGMICRO圣邦微 SGM8740YC5G/TR SC70-5 比较器

特性 快速,45纳秒传播延迟(10毫伏过驱动)低功耗:在Vs3V时为155pA(典型值) 宽电源电压范围:2.7V至5.5V优化适用于3V和5V应用轨到轨输入电压范围低偏置电压:0.9mV(典型值)内部迟滞以实现干净开关 输出摆幅:在4mA输出电流下,从轨距内.200mV范围内 与CMOS/TT…...

YUI Compressor CSS压缩黑科技:从background-position到media query的全面优化指南

YUI Compressor CSS压缩黑科技:从background-position到media query的全面优化指南 【免费下载链接】yuicompressor YUI Compressor 项目地址: https://gitcode.com/gh_mirrors/yu/yuicompressor YUI Compressor是一款由Yahoo!开发的终极CSS和JavaScript压缩…...

SGMICRO圣邦微 SGM803B-JXN3G/TR SOT-23-3 监控和复位芯片

特性 适用于MAX803/MAX809/MAX810和ADM803/ADM809/ADM810的卓越升级版 高精度固定检测选项:3V、3.3V和5V 低供电电流:300nA(典型值)上电复位脉冲宽度:150毫秒(最小值) 复位输出选项: 开漏nRESET输出(SGM803B)推挽nRESET输出(SGM809B) . . 推挽复位输出(SGM810B)复位有效电压低至…...

终极指南:NanoVG渲染管线深度解析与抗锯齿技术实战

终极指南:NanoVG渲染管线深度解析与抗锯齿技术实战 【免费下载链接】nanovg Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations. 项目地址: https://gitcode.com/gh_mirrors/na/nanovg NanoVG是一款基于OpenGL的轻量级抗锯…...

【Python内存管理终极指南】:20年专家实测5大智能策略,90%开发者忽略的GC优化盲区揭晓

第一章:Python智能体内存管理策略对比评测报告全景概览本报告聚焦于当前主流Python智能体(Agent)框架在内存管理层面的设计差异与运行表现,涵盖LangChain、LlamaIndex、AutoGen及自研轻量Agent Runtime四大实现。评测维度包括对象…...

黑客为什么不攻击微信钱包?

黑客为什么不攻击微信钱包? 现在人人手机里都装着微信和支付宝,里面都或多或少存了些钱。怎么从来没听说谁的钱被技术牛逼黑客惦记走? 是黑客没攻击过?还是黑客不敢攻击?其实都不是。阿里巴巴首席风险官郑俊芳就说过&…...

webMAN-MOD终极指南:如何在PS3上安装这款强大的全能插件

webMAN-MOD终极指南:如何在PS3上安装这款强大的全能插件 【免费下载链接】webMAN-MOD Extended services for PS3 console (web server, ftp server, netiso, ntfs, ps3mapi, etc.) 项目地址: https://gitcode.com/gh_mirrors/we/webMAN-MOD 你是否还在为PS3…...

深入解析RevokeMsgPatcher:Windows平台防撤回补丁的技术实现与架构设计

深入解析RevokeMsgPatcher:Windows平台防撤回补丁的技术实现与架构设计 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: ht…...

别再到处找转换工具了!用Audacity把WAV无损转成MP3,保姆级图文教程

音频处理新手指南:Audacity无损转换WAV到MP3的完整方案 你是否曾经下载了一段高质量录音,却发现文件体积大得惊人,根本无法通过邮件发送?或者尝试上传播客内容时,平台总是提示"文件格式不支持"?这…...

gotop扩展功能详解:NVIDIA GPU监控与远程数据采集终极指南

gotop扩展功能详解:NVIDIA GPU监控与远程数据采集终极指南 【免费下载链接】gotop A terminal based graphical activity monitor inspired by gtop and vtop 项目地址: https://gitcode.com/gh_mirrors/got/gotop gotop是一款功能强大的终端图形化系统监控工…...

**元宇宙经济中的智能合约开发实战:用Solidity构建去中心化资产交易系统**在元宇宙经济蓬勃发展的今

元宇宙经济中的智能合约开发实战:用Solidity构建去中心化资产交易系统 在元宇宙经济蓬勃发展的今天,数字资产的流通与确权成为核心议题。无论是虚拟土地、NFT艺术品还是游戏道具,背后都离不开区块链技术的支持。而智能合约正是连接现实世界资…...

Qt QTabWidget标签页文字方向调校实战:当标签在左侧时,如何让文字乖乖水平显示?

Qt QTabWidget标签页文字方向调校实战:当标签在左侧时,如何让文字乖乖水平显示? 在桌面应用开发中,Qt框架的QTabWidget组件因其灵活性和易用性广受开发者青睐。但当我们尝试将标签页位置调整为左侧时,一个令人头疼的问…...

**发散创新:基于微应用架构的轻量级权限控制实战设计**在现代前端开

发散创新:基于微应用架构的轻量级权限控制实战设计 在现代前端开发中,**微应用(Micro Frontend)*8 已成为构建复杂单页应用(SPA)的标准方案之一。它允许团队独立开发、部署和维护各自的功能模块&#xff0c…...

Gated DeltaNet 线性注意力:揭秘大模型算力魔咒的破局之道!

文章深入探讨了线性注意力机制在大模型中的重要性,特别是Gated DeltaNet如何通过改变运算顺序,将Transformer的注意力计算复杂度从平方级降低到线性级,从而打破算力瓶颈。文中对比了阿里Qwen、Kimi Linear等模型的线性架构应用,以…...

基于博途1200PLC + HMI的交通灯控制系统仿真:打造灵活交通指挥中枢

基于博途1200PLCHMI交通灯/红绿灯控制系统仿真(时间可设置) 程序: 1、任务:PLC.人机界面控制交通灯 2、系统说明: 系统设有手动模式、自动模式、黄闪模式、红绿灯时间可设置、各灯可单独手动模式、故障模拟模式、数码管显示等模式运行 交通灯…...

基于博途1200PLC+HMI的六层三部电梯控制系统仿真程序

基于博途1200PLCHMI六层三部电梯控制系统仿真 程序: 1、任务:PLC.人机界面控制三部电梯集群运行 2、系统说明: 系统设有上呼、下呼、内呼、手动开关门、光幕、检修、故障、满载、等模拟模式控制, 系统共享厅外召唤信号&#xff0c…...

基于Comsol相控阵技术的实用钢纵波超声波成像模型:单层缺陷TFM成像与压力声学仿真

comsol 相控阵 超声成像 此模型为压力声学仿真超声波,实用钢纵波速度6000 密度7.8e-9 单层缺陷TFM成像相控阵超声检测这玩意儿在工业NDT圈子里算是老熟人了,今天咱们拿COMSOL搞个钢材料缺陷成像的骚操作。模型基础是压力声学模块,材料参数先给…...

Pixel Couplet Gen实战案例:某AI开发者大会现场扫码生成像素春联纪念品

Pixel Couplet Gen实战案例:某AI开发者大会现场扫码生成像素春联纪念品 1. 项目背景与创意来源 1.1 传统与创新的碰撞 在2024年某AI开发者大会现场,我们推出了一款名为"Pixel Couplet Gen"的互动装置。这款产品将中国传统春节文化与现代AI技…...