efficientnetv2_rw_m.agc_in1k项目介绍
项目背景
efficientnetv2_rw_m.agc_in1k是一个用于图像分类的模型,该模型基于EfficientNet-V2架构,是对其的一种特定变体。模型主要在ImageNet-1k数据集上进行训练,使用了timm
库的特定训练配方。EfficientNet-V2的设计目标是创建更小、更快的模型,同时提高训练速度。
模型细节
- 模型类型:图像分类/特征骨干网络
- 模型统计数据:
- 参数数量(百万):53.2
- Giga Multiply-Accumulate operations (GMACs):12.7
- 激活数(百万):47.1
- 图片大小:训练时为320x320,测试时为416x416
- 相关论文:
- 数据集:ImageNet-1k
- 模型原始链接:GitHub
模型使用
图像分类
使用timm
库可以轻松加载和使用预测模型。以下是加载预训练模型进行图像分类的基本步骤:
from urllib.request import urlopen
from PIL import Image
import timm
img = Image.open(urlopen(
'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
))
model = timm.create_model('efficientnetv2_rw_m.agc_in1k', pretrained=True)
model = model.eval()
# 获取特定的模型变换(归一化、调整尺寸等)
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)
output = model(transforms(img).unsqueeze(0)) # 将单张图片转换为大批量处理中
top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1) * 100, k=5)
特征图提取
可以提取模型的特征图以便进一步处理:
from urllib.request import urlopen
from PIL import Image
import timm
img = Image.open(urlopen(
'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
))
model = timm.create_model(
'efficientnetv2_rw_m.agc_in1k',
pretrained=True,
features_only=True,
)
model = model.eval()
# 获取模型特定的变换
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)
output = model(transforms(img).unsqueeze(0)) # 单张图片转换为大批量处理中
for o in output:
print(o.shape)
图像嵌入
也可以生成图像嵌入,用于特征表示:
from urllib.request import urlopen
from PIL import Image
import timm
img = Image.open(urlopen(
'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
))
model = timm.create_model(
'efficientnetv2_rw_m.agc_in1k',
pretrained=True,
num_classes=0, # 去掉分类器的nn.Linear
)
model = model.eval()
# 获取模型特定的变换
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)
output = model(transforms(img).unsqueeze(0)) # 输出是一种(批量大小, 特征数)形状的张量
# 或等效地(无需设置num_classes=0)
output = model.forward_features(transforms(img).unsqueeze(0))
# 输出是未池化的,形状为 (1, 2152, 10, 10) 的张量
output = model.forward_head(output, pre_logits=True)
# 输出是一种(1, 特征数)形状的张量
模型比较
通过timm
库,可以浏览该模型的不同数据集和运行时指标,详细信息可参考模型结果页面:timm model results。
引用
在使用或参考此项目和模型时,可以引用以下相关文献:
@inproceedings{tan2021efficientnetv2,
title={Efficientnetv2: Smaller models and faster training},
author={Tan, Mingxing and Le, Quoc},
booktitle={International conference on machine learning},
pages={10096--10106},
year={2021},
organization={PMLR}
}
@misc{rw2019timm,
author = {Ross Wightman},
title = {PyTorch Image Models},
year = {2019},
publisher = {GitHub},
journal = {GitHub repository},
doi = {10.5281/zenodo.4414861},
howpublished = {\url{https://github.com/huggingface/pytorch-image-models}}
}
@inproceedings{wightman2021resnet,
title={ResNet strikes back: An improved training procedure in timm},
author={Wightman, Ross and Touvron, Hugo and Jegou, Herve},
booktitle={NeurIPS 2021 Workshop on ImageNet: Past, Present, and Future}
}