在Pythorch中实现了效率网。
efficientnet-pytorch的Python项目详细描述
Pythorch的效率
更新(2019年7月31日)
使用pip install--upgrade efficientnet pytorch升级pip包
B6和B7车型现已上市。此外,所有的预训练模型都已更新为使用自动增强预处理,这将转化为更好的整体性能。用法与以前相同:
fromefficientnet_pytorchimportEfficientNetmodel=EfficientNet.from_pretrained('efficientnet-b7')
更新(2019年6月29日)
- 示例:导出到onnx
- 示例:提取功能
- 另外:修复了cuda/cpu错误(\32)
现在,将一个预先训练好的模型加载到一个新的转移学习类中也变得非常简单:
model=EfficientNet.from_pretrained('efficientnet-b1',num_classes=23)
更新(2019年6月23日)
B4和B5车型现已上市。它们的用法与其他型号相同:
fromefficientnet_pytorchimportEfficientNetmodel=EfficientNet.from_pretrained('efficientnet-b4')
概述
此存储库包含一个Op Pythorch操作,用于重新实现efficientNet,以及预先培训的模型和示例。
这个实现的目标是简单、高度可扩展,并且易于集成到您自己的项目中。此实现是一项正在进行的工作--当前正在实现新功能。
现在,您可以轻松地:
- 负荷预训练效率网模型
- 使用EfficientNet模型进行分类或特征提取
- 在ImageNet或您自己的图像上评估网络模型的效率
即将推出的功能:在接下来的几天内,您将能够:
- 使用简单的命令在ImageNet上从头开始训练新模型
- 在自己的数据集上快速优化效率集
- 用于生产的出口效率网络模型
目录
- 关于效率网
- 关于EfficientNet Pythorch
- 安装
- 用法
- 贡献 < > >
在高精度领域,我们的EfficientNet-B7在ImageNet上以66M参数和37B触发器实现了最新的84.4%的Top-1/97.1%的Top-5精度,比以前最好的GPIPE小8.4倍,CPU推断速度快6.1倍。
在中等精度的情况下,我们的效率net-b1比具有类似imagenet精度的resnet-152要小7.6倍,cpu推断速度快5.7倍。
与广泛使用的resnet-50相比,我们的efficientnet-b4在类似的flops约束下,将resnet-50的76.3%提高到82.6%(6.3%),提高了to p-1的精度。
关于效率网
如果您是efficientnets的新手,这里有一个直接来自官方tensorflow实现的解释:
efficientnets是一个图像分类模型家族,它可以达到最先进的精度,但比以前的模型小一个数量级,速度快一个数量级。我们开发了基于automl和复合缩放的高效网络。特别是,我们首先使用automl mobile framework开发一个移动大小的基线网络,名为efficientnet-b0;然后,我们使用复合标度法将该基线标度放大,以获得从et-b1到b7的效率。
<表>效率网络在ImageNet上实现最先进的精度,效率提高一个数量级:
关于EfficientNet Pythorch
EfficientNet Pythorch是EfficientNet的重新实现。它与最初的tensorflow实现相一致,因此很容易从tensorflow检查点加载权重。同时,我们的目标是使pytorch实现尽可能简单、灵活和可扩展。
如果您有任何功能请求或问题,请随意将它们作为github问题处理!
安装
通过PIP安装:
pip install efficientnet_pytorch
或从源安装:
git clone https://github.com/lukemelas/EfficientNet-PyTorch
cd EfficientNet-Pytorch
pip install -e .
用法
加载预处理模型
加载效率集:
fromefficientnet_pytorchimportEfficientNetmodel=EfficientNet.from_name('efficientnet-b0')
加载预训练效率集:
fromefficientnet_pytorchimportEfficientNetmodel=EfficientNet.from_pretrained('efficientnet-b0')
请注意,在当前时间,预训练模型仅针对n=0,1,2,3,4,5
发布,因此。from廑pretrained
仅支持'efficientnet-b{n}'
对于n=0,1,2,3,4,5
。
有关这些型号的详细信息如下:
<表><广告>效率net-b0
效率net-b1
效率net-b2
效率net-b3
效率net-b4
效率网-b5
效率net-b6
效率net-b7
示例:分类
下面是一个简单、完整的例子。它也可以在示例/simple
中作为jupyter笔记本找到,也可以作为colab笔记本找到
img.jpg
文件和一个labels\u map.txt
文件(imagenet类名)。它们都包含在示例/simple
importjsonfromPILimportImageimporttorchfromtorchvisionimporttransformsfromefficientnet_pytorchimportEfficientNetmodel=EfficientNet.from_pretrained('efficientnet-b0')# Preprocess imagetfms=transforms.Compose([transforms.Resize(224),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]),])img=tfms(Image.open('img.jpg')).unsqueeze(0)print(img.shape)# torch.Size([1, 3, 224, 224])# Load ImageNet class nameslabels_map=json.load(open('labels_map.txt'))labels_map=[labels_map[str(i)]foriinrange(1000)]# Classifymodel.eval()withtorch.no_grad():outputs=model(img)# Print predictionsprint('-----')foridxintorch.topk(outputs,k=5).indices.squeeze(0).tolist():prob=torch.softmax(outputs,dim=1)[0,idx].item()print('{label:<75} ({p:.2f}%)'.format(label=labels_map[idx],p=prob*100))
示例:特征提取
您可以使用模型轻松提取功能。提取功能
:
fromefficientnet_pytorchimportEfficientNetmodel=EfficientNet.from_pretrained('efficientnet-b0')# ... image preprocessing as in the classification example ...print(img.shape)# torch.Size([1, 3, 224, 224])features=model.extract_features(img)print(features.shape)# torch.Size([1, 1280, 7, 7])
示例:导出到onnx
导出到onnx以部署到生产环境现在很简单:
fromefficientnet_pytorchimportEfficientNetmodel=EfficientNet.from_pretrained('efficientnet-b7')0
图像网络
有关在ImageNet上评估的详细信息,请参见examples/ImageNet
。
贡献
如果您发现一个bug,创建一个github问题,或者提交一个pull请求。同样,如果您有问题,只需将其作为github问题发布即可。
我期待着看到社区对这些模型做些什么!