在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日)

此更新添加了轻松的模型导出(\20)和功能提取(\38)。

现在,将一个预先训练好的模型加载到一个新的转移学习类中也变得非常简单:

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上从头开始训练新模型
  • 在自己的数据集上快速优化效率集
  • 用于生产的出口效率网络模型

目录

  1. 关于效率网
  2. 关于EfficientNet Pythorch
  3. 安装
  4. 用法
  5. 贡献
  6. < > >

    关于效率网

    如果您是efficientnets的新手,这里有一个直接来自官方tensorflow实现的解释:

    efficientnets是一个图像分类模型家族,它可以达到最先进的精度,但比以前的模型小一个数量级,速度快一个数量级。我们开发了基于automl和复合缩放的高效网络。特别是,我们首先使用automl mobile framework开发一个移动大小的基线网络,名为efficientnet-b0;然后,我们使用复合标度法将该基线标度放大,以获得从et-b1到b7的效率。

    <表><表>

    效率网络在ImageNet上实现最先进的精度,效率提高一个数量级:

    • 在高精度领域,我们的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的精度。

    关于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

    有关这些型号的详细信息如下:

    <表><广告>名称参数顶部-1 acc.预训练?< /Th >< /广告><正文>效率net-b0530万 76.3--效率net-b1780万 78.8--效率net-b2920万 79.8--效率net-b312米 81.1--效率net-b419m82.6--效率网-b530米83.3--效率net-b643m84.0-效率net-b766m84.4-

    示例:分类

    下面是一个简单、完整的例子。它也可以在示例/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

    这里是一个colab示例。

    图像网络

    有关在ImageNet上评估的详细信息,请参见examples/ImageNet

    贡献

    如果您发现一个bug,创建一个github问题,或者提交一个pull请求。同样,如果您有问题,只需将其作为github问题发布即可。

    我期待着看到社区对这些模型做些什么!

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java什么会导致程序在它似乎拥有的监视器上被阻止?   java Android studio设置视图的背景色   java我可以保存一个文本文件而不给用户修改它的能力吗?   pdfbox PDFBOX2。0:java堆堆栈错误   java是维护和操作AllowList的有效方法   JAVAsql。SQLException:找不到适合jdbc的驱动程序:mysql://localhost:3306/asd性爱   如何使用java。lang.NullPointerException:void 安卓。支持v7。应用程序。ActionBar。setElevation(float)“”在空对象引用上'   java调试空指针异常   java正则表达式,以按令牌的特定匹配项拆分,同时忽略其他匹配项   java为JPanel设置边框上的笔划   并发@Schedule方法的java行为   如何在Java中使用泛型与语言运算符和泛型类扩展数   java Rhino Javascript如何为异常堆栈跟踪标记字符串源   运行可执行jar时发生java错误,无法找到或加载主类