EfficientNet_B1.ft_in1k 项目介绍
项目背景
EfficientNet_B1.ft_in1k 是一个图像分类模型,属于EfficientNet系列。这一模型是通过在大规模图像数据集ImageNet-1k上的微调,将原本在TensorFlow中使用的"SAME"填充权重转换为可在PyTorch中使用的版本。此模型旨在提供高效且准确的图像分类功能,适用于各种图像识别任务。
模型特点
- 模型类型: 图像分类/特征骨干网络
- 参数统计:
- 参数量(百万):7.8M
- GMACs(每秒十亿次乘法累加运算):0.6
- 活动(百万):9.4M
- 图像尺寸:训练时为224 x 224,测试时为256 x 256
- 研究论文:
数据集
EfficientNet_B1.ft_in1k 模型使用ImageNet-1k数据集进行训练和验证。这个数据集包含了大量的标记图像,广泛应用于图像分类的研究和开发中。
模型使用方法
图像分类
通过以下Python代码,可加载并运行EfficientNet_B1模型进行图像分类:
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('efficientnet_b1.ft_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(
'efficientnet_b1.ft_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(
'efficientnet_b1.ft_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))
output = model.forward_features(transforms(img).unsqueeze(0))
output = model.forward_head(output, pre_logits=True)
模型比较
EfficientNet_B1是当前主流图像分类模型之一,用户可以在timm的模型结果页面中探索其与其他模型的数据和运行时性能比较。
引用
若希望进一步研究,请参考以下文献:
@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{tan2019efficientnet,
title={Efficientnet: Rethinking model scaling for convolutional neural networks},
author={Tan, Mingxing and Le, Quoc},
booktitle={International conference on machine learning},
pages={6105--6114},
year={2019},
organization={PMLR}
}
总之,EfficientNet_B1.ft_in1k是一个功能强大的模型,能够在保证高效性的同时,实现出色的图像分类性能。适用于各种需要图像识别和特征提取的场合。