• Timm一些知识点


    摘要

    timm(Torch Image Models)是一个在PyTorch上构建的图像模型库,它提供了一系列预训练的深度学习模型,使得研究人员和开发者可以方便地进行图像分类、目标检测等任务。
    在这里插入图片描述

    使用timm库创建模型时,如何确定模型的名字

    使用timm.list_models方法,找到timm支持的模型

    import timm
    
    if __name__ == '__main__':
        all_pretrained_models_available = timm.list_models(pretrained=True)
        print(all_pretrained_models_available)
        for i in all_pretrained_models_available:
            print(i)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果:
    很多,这里只列出一部分啊!

    resnet152
    resnet152d
    resnet200d
    resnetblur50
    resnetrs50
    resnetrs101
    resnetrs152
    resnetrs200
    resnetrs270
    resnetrs350
    resnetrs420
    resnetv2_50
    resnetv2_50x1_bit_distilled
    resnetv2_50x1_bitm
    resnetv2_50x1_bitm_in21k
    resnetv2_50x3_bitm
    resnetv2_50x3_bitm_in21k
    resnetv2_101
    resnetv2_101x1_bitm
    resnetv2_101x1_bitm_in21k
    resnetv2_101x3_bitm
    resnetv2_101x3_bitm_in21k
    resnetv2_152x2_bit_teacher
    resnetv2_152x2_bit_teacher_384
    resnetv2_152x2_bitm
    resnetv2_152x2_bitm_in21k
    resnetv2_152x4_bitm
    resnetv2_152x4_bitm_in21k
    resnext26ts
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    创建模型

    执行代码

    self.model = timm.create_model(
                'resnetv2_50', pretrained, num_classes=12, global_pool="avg"
            )
    
    • 1
    • 2
    • 3

    加载预训练权重

    timm模型加载预训练权重,均改为从huggingface自动下载。由于众所周知的原因,我们不能下载。我们可以选择加载其他版本的预训练权重。代码:

    model_path = '/Users/admin/Downloads/pytorch_model.bin'  # 替换为你的pytorch_model.bin文件路径
    
    # 加载模型权重
    state_dict = torch.load(model_path, map_location=torch.device('cpu'))
    
    # 创建模型实例并加载权重
    model = timm.create_model("eva_giant_patch14_336.clip_ft_in1k", pretrained=False)
    model.load_state_dict(state_dict)
    
    # 修改输出类别数
    model.reset_classifier(num_classes)  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    特征提取

    使用timm库进行特征提取是一个常见的任务,尤其是在处理图像数据时。timm(Torch Image Models)是一个基于PyTorch的库,它包含了一系列预训练的深度学习模型,这些模型可以很方便地用于特征提取、迁移学习等任务。

    以下是一个使用timm进行特征提取的基本示例:

    首先,确保你已经安装了timm库:

    pip install timm
    
    • 1

    然后,你可以使用以下Python代码进行特征提取:

    import torch
    from timm import create_model, list_models
    from torchvision import transforms
    from PIL import Image
    
    # 选择一个预训练模型
    model_name = 'resnet50'
    pretrained_model = create_model(model_name, pretrained=True)
    
    # 切换到评估模式,关闭dropout和batch normalization层
    pretrained_model.eval()
    
    # 定义预处理变换
    transform = transforms.Compose([
        transforms.Resize(224),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
    ])
    
    # 加载图像
    image_path = 'path_to_your_image.jpg'
    image = Image.open(image_path).convert('RGB')
    
    # 应用预处理变换
    image_tensor = transform(image).unsqueeze(0)  # 添加batch维度
    
    # 如果有GPU,将图像和数据模型转移到GPU
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    image_tensor = image_tensor.to(device)
    pretrained_model = pretrained_model.to(device)
    
    # 提取特征
    with torch.no_grad():  # 不需要计算梯度,节省内存和计算资源
        features = pretrained_model.forward_features(image_tensor)  # 获取特征
    
    # 将特征转移到CPU(如果需要)并展平
    features = features.cpu().numpy().flatten()
    
    print(features)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这个例子中,我们首先创建了一个预训练的ResNet-50模型。然后,我们将模型设置为评估模式,并定义了一个预处理变换,该变换将图像缩放到256x256,中心裁剪到224x224,转换为张量,并应用归一化。

    接下来,我们加载了一张图像,并应用预处理变换。然后,我们检查是否有可用的GPU,并将图像张量和模型转移到相应的设备上。

    最后,我们使用forward_features方法(这是timm库特有的,用于直接获取模型的卷积层输出,而不包括全连接层)来提取图像的特征。提取的特征被转移到CPU上,并展平为一个一维数组。

    注意:不同的模型可能有不同的方法来获取特征。例如,一些模型可能没有forward_features方法,而是需要你手动选择特定的层来获取特征。在这种情况下,你需要查阅该模型的文档或源代码来了解如何正确提取特征。

  • 相关阅读:
    【K8S】通过 CoreDNS + ETCD + ExternalDNS 打通内网环境 Ingress 的域名访问
    扩展翡蜀定理问题
    【蓝牙协议栈】【BR/EDR】【MAP】蓝牙短信访问协议
    2023-计算机保研经历
    MindSpore优秀论文5:[AAAI] CycleCol:基于循环卷积神经网络对真实单色-彩色摄像系统着色
    webpack打包之sourceMap
    神经平面分布图怎么看,面部神经网络 分布图
    Windows用户真实最后登录报表
    Linux中三种引号(单引号、双引号、反引号)的区别
    DHCP动态获取IP地址流程
  • 原文地址:https://blog.csdn.net/m0_47867638/article/details/136707733