(非官方)pytorch图片模型

timm的Python项目详细描述


pytorch图像模型等

简介

对于每一个涉及图像+卷积神经网络的个人或自由职业项目,我都建立在不断发展的代码和模型集合之上。这个repo包含一个(有点)清理和配对的代码迭代。希望对其他人有用。

这里有许多其他人的工作。我已尽力确保所有源材料都已确认:

型号

我已经包括了一些我最喜欢的模型,但这不是一个详尽的收集。在这方面你不能比卡登的收藏品做得更好。大多数模型都有来自各自来源或原始作者的预训练权重。

  • resnet/resnext(来自torchvision我自己带mods)
  • Densenet(来自torchvision的
    • 登森内121、登森内169、登森内201、登森内161
  • 挤压和激励resnet/resnext(来自cadene和一些预先训练的体重增加)
    • senet-154、se-resnet-18、se-resnet-34、se-resnet-50、se-resnet-101、se-resnet-152、se-resnext-26(32x4d)、se-resnext50(32x4d)、se-resnext101(32x4d)
  • inception-resnet-v2和inception-v4(从cadene
  • 异常(来自cadene
  • PNASNET&NASNET-A(来自cadene
  • DPN(来自me,由Cadene主持)
    • DPN-68、DPN-68B、DPN-92、DPN-98、DPN-131、DPN-107
  • 通用效率网(来自我的单机版genmobilenet)-一个通用模型,它实现了许多有效的模型,这些模型利用了类似的深度可分离和反向可分离的块。
    • 效率网(b0-b7)(https://arxiv.org/abs/1905.11946" rel="nofollow">https://arxiv.org/abs/1905.11946)——已验证,与tf权重一致
    • mixnet(https://arxiv.org/abs/1907.09595" rel="nofollow">https://arxiv.org/abs/1907.09595)——已验证,与tf权重兼容
    • mnasnet b1、a1(挤压激励)和小型(https://arxiv.org/abs/1807.11626
    • MobileNet-v1(https://arxiv.org/abs/1704.04861" rel="nofollow">https://arxiv.org/abs/1704.04861)
    • MobileNet-V2(https://arxiv.org/abs/1801.04381
    • Mobilenet-V3(https://arxiv.org/abs/1905.02244)——预培训模型良好,仍然没有官方IMPL验证
    • chamnet(https://arxiv.org/abs/1812.08934" rel="nofollow">https://arxiv.org/abs/1812.08934)——很难找到特定的拱门细节,目前是有根据的猜测
    • FBNET-C(https://arxiv.org/abs/1812.03443" rel="nofollow">https://arxiv.org/abs/1812.03443)--todo a/b变体
    • 单路径NAS(https://arxiv.org/abs/1904.02877" rel="nofollow">https://arxiv.org/abs/1904.02877)——Pixel1变体

使用--modelarg为训练、验证和推理脚本指定模型。匹配所有小写字母 为您想要的型号创建fn。

功能

我经常在我的项目中使用的一些(不太常见的)特性也包括在内。它们的许多附加功能是我维护自己的模型集的原因,而不是通过p i p使用其他模型:

  • 所有模型都有一个通用的默认配置接口和
    • 访问/更改分类器-获取分类器重置分类器
    • 仅对功能进行转发-转发功能
    • 这样就很容易编写与任何模型都兼容的网络包装器
  • 所有型号都有一个一致的预训练重量装载机,如有必要,它可以适应最后的线性,如果需要,可以从3到1通道输入
  • train脚本在几种进程/gpu模式下工作:
    • NVIDIA DDP,每个进程有一个GPU,多个进程具有顶点(AMP混合精度可选)
    • Pythorch DistributedDataParallel w/multi-GPU,单进程(启用时禁用AMP,因为它会崩溃)
    • Pythorch w/单GPU单进程(AMP可选)
  • 一种动态全局池实现,允许在模型创建时从平均池、最大池、平均+最大或concat([平均,最大])中进行选择。默认情况下,所有全局池都是自适应平均值,并与预训练权重兼容。
  • 一个"测试时间池"包装器,可以包装任何包含的模型,并且通常在输入图像大于训练大小时提供改进的推理性能。当我移植时,这个想法改编自最初的dpn实现(https://github.com/cypw/dpns
  • 提供竞争结果的培训计划和技术(余弦lr、随机擦除、标签平滑等)
  • 混搭(如https://arxiv.org/abs/1710.09412)-目前正在实施/测试
  • 将输出转储到csv的推理脚本作为示例提供

结果

一个csv文件包含所有包含模型的imagenet-1k验证结果摘要(具有预先设定的权重和默认配置),该文件位于此处

< h3>自学重量

我已经利用这个存储库中的训练脚本来训练一些缺少权重的模型,以达到良好的性能水平。这些数字都是224x224训练和验证图像大小,通常为87.5%的验证裁剪。

<表><广告>型号 prec@1(错误)prec@5(错误)参数 图像缩放 图像大小 < /广告><正文>效率网B279.760(20.240)94.714(5.286)911万双三次resnext50d_32x4d79.674(20.326)94.868(5.132)2510万双三次混合网络 78.976(21.02494.184(5.816)733万双三次效率网b178.692(21.308)94.086(5.914)779万双三次< 240 >< > >resnext50_32x4d78.512(21.488)94.042(5.958) 25m 双三次resnet5078.470(21.530)94.266(5.734)256万双三次混合网络 77.256(22.744)93.418(6.582)5.01米双三次seresnext26_32x4d77.104(22.896)93.316(6.684)1680万双三次效率 76.912(23.088)93.210(6.790)529万双三次resnet26d76.68(23.32)93.166(6.834)<千位/秒>双三次混合网络75.988(24.012)92.794(7.206)413米双三次MobileNetv3_10075.634(24.366)92.708(7.292)550万双三次mnasnet_a175.448(24.552)92.604(7.396)389万双三次resnet2675.292(24.708)92.57(7.43) 16m 双三次FBnetc_10075.124(24.876)92.386(7.614)560万双线性resnet3475.110(24.890)92.284(7.716) 22m 双线性Seresnet3474.808(25.192)92.124(7.876) 22m 双线性mnasnet_b174.658(25.342)92.114(7.886)438米双三次SPNAsnet_10074.084(25.916)91.818(8.182)442米双线性seresnet1871.742(28.258)90.334(9.666)1180万双三次

端口重量

<表><广告>型号 prec@1(错误)prec@5(错误)参数 图像缩放 图像大小 来源< /广告><正文>tf_efficientnet_b7*tfp84.480(15.520)96.870(3.130)66.35双三次谷歌tf_efficientnet_b784.420(15.580)96.906(3.094)66.35双三次谷歌tf_efficientnet_b6*tfp84.140(15.860)96.852(3.148)43.04双三次谷歌tf_efficientnet_b684.110(15.890)96.886(3.114)43.04双三次谷歌tf嫒efficientnet嫒u b5*tfp83.694(16.306)96.696(3.304)30.39双三次< 456 >< > >谷歌tf_efficientnet_b583.688(16.312)96.714(3.286)30.39双三次谷歌tf_efficientnet_b483.022(16.978)96.300(3.700)19.34双三次谷歌tf嫒efficientnet嫒u b4*tfp82.948(17.052)96.308(3.692)19.34双三次谷歌tf_efficientnet_b3*tfp81.576(18.424)95.662(4.338)12.23双三次谷歌tf_efficientnet_b381.636(18.364)95.718(4.282)12.23双三次谷歌胶子Senet15481.224(18.776)95.356(4.644)115.09双三次胶子resnet152 v1s81.012(18.988)95.416(4.584)60.32双三次胶子序列next101μ32x4d80.902(19.098)95.294(4.706)48.96双三次胶子序列next101μ64x4d80.890(19.110)95.304(4.696)88.23双三次胶子重新连接101 u64x4d80.602(19.398)94.994(5.006)83.46双三次胶子resnet152 v1d80.470(19.530)95.206(4.794)60.21双三次胶子resnet101 v1d80.424(19.576)95.020(4.980)44.57双三次胶子resnext101μ32x4d80.334(19.666)94.926(5.074)44.18双三次胶子resnet101 v1s80.300(19.700)95.150(4.850)44.67双三次tf_efficientnet_b2*tfp80.188(19.812)94.974(5.026)9.11双三次谷歌tf_efficientnet_b280.086(19.914)94.908(5.092)9.11双三次谷歌胶子resnet152 v1c79.916(20.084)94.842(5.158)60.21双三次胶子xNext50 x32x4d79.912(20.088)94.818(5.182)27.56双三次胶子resnet152 v1b79.692(20.308)94.738(5.262)60.19双三次胶子resnet101 v1c79.544(20.456) 94.586(5.414)44.57双三次胶子重新连接50μ32x4d79.356(20.644)94.424(5.576)25.03双三次胶子resnet101 v1b79.304(20.696)94.524(5.476)44.55双三次tf_efficientnet_b1*tfp79.172(20.828)94.450(5.550)7.79双三次< 240 >< > >谷歌胶子resnet50μv1d79.074(20.926)94.476(5.524)25.58双三次tf_mixnet_l*tfp78.846(21.154)94.212(5.788)7.33双线性谷歌tf_efficientnet_b178.826(21.174)94.198(5.802)7.79双三次< 240 >< > >谷歌胶子初始v378.804(21.196)94.380(5.620)27.16米双三次mxnet胶子tf_mixnet_l78.770(21.230)94.004(5.996)7.33双三次谷歌胶子resnet50 v1s78.712(21.288)94.242(5.758)25.68双三次胶子resnet50 v1c78.010(21.990)93.988(6.012)25.58双三次tf_inception_v377.856(22.144)93.644(6.356)27.16米双三次tensorflow slim胶子resnet50μv1b77.578(22.422)93.718(6.282)25.56双三次adv_inception_v377.576(22.424)93.724(6.276)27.16米双三次tensorflow adv modelstf_efficientnet_b0*tfp77.258(22.742)93.478(6.522)5.29双三次谷歌tf_mixnet_m*tfp77.072(22.928)93.368(6.632)5.01双线性谷歌tf_mixnet_m76.950(23.050)93.156(6.844)5.01双三次谷歌tf_efficientnet_b076.848(23.152)93.228(6.772)5.29双三次谷歌tf_mixnet_s*tfp75.800(24.200)92.788(7.212)4.13双线性谷歌tf_mixnet_s75.648(24.352)< TD > 92.636(7.364)4.13双三次谷歌胶子resnet34 v1b74.580(25.420)91.988(8.012)21.80双三次胶子resnet18 v1b70.830(29.170)89.756(10.244)11.69双三次

旁边有tf p*tfp的模型用tf预处理标记进行评分。

tf-efficientnettf-mixnet模型需要一个等效的"相同"填充,因为它们的拱导致不对称填充。我已经在模型创建包装器中添加了这个,但它确实会带来性能损失。

用法

环境

所有的开发和测试都是在Linux x86-64系统上的Conda Python 3环境中完成的,特别是Python 3.6.x和3.7.x。如果您遇到在windows或其他操作系统上运行的任何挑战,只要是在可复制(read conda)环境中,我绝对愿意调查这些问题。

Pythorch版本1.0和1.1已使用此代码进行了测试。

我试图将依赖关系保持最小,设置是按照pytorch conda的默认安装说明进行的:

conda create -n torch-env
conda activate torch-env
conda install -c pytorch pytorch torchvision cudatoolkit=10.0

Pip

这个包可以通过pip安装。目前,模型工厂(timm.create_model)是通过PIP安装使用的最有用的组件。

安装(conda env/install之后):

pip install timm
使用:

>>> import timm
>>> m = timm.create_model('mobilenetv3_100', pretrained=True)
>>> m.eval()

脚本

github根文件夹中包含的训练、验证、推断和检查点清理脚本。脚本当前未打包在PIP版本中。

培训

训练参数的种类很多,并不是所有选项(甚至选项)的组合都经过了充分的测试。对于Training DataSet文件夹,指定包含trainvalidation文件夹的基文件夹。

在ImageNet上训练SE-ResNet34,本地分布,4个GPU,每个GPU一个进程,带余弦时间表,随机擦除概率为50%,每个像素随机值:

/distributed\u train.sh 4/data/imagenet——seresnet34型——sched cosine——epochs 150——warmup epochs 5——lr 0.4——reprob 0.5——remode pixel——批处理大小256-j 4

注意:nvidia apex应安装为在通过ddp分发的每个进程中运行,或使用--amp标志启用amp混合精度

验证/推断

验证脚本和推理脚本的用法相似。一个在验证集上输出度量,另一个在csv中输出topk类id。指定包含验证图像的文件夹,而不是训练脚本中的基文件夹。

使用模型的预训练权重(如果存在)进行验证:

python validate.py/imagenet/validation/--model seresnext26_32x4d--pretrained

从检查点运行推断:

python inference.py/imagenet/validation/--model mobilenetv3_100--checkpoint./output/model_best.pth.tar

待办事项

今后计划为各种项目增加若干项目,包括

  • 在所有模型中进行模型性能(速度+精度)基准测试(使其可作为脚本运行)
  • 在注释中添加用法示例,用于训练的良好超参数
  • 评论、清理和通常被推倒的事情

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

推荐PyPI第三方库


热门话题
jstl中循环内部的java方法   java如何以编程方式查找iOS应用程序的堆内存?   java JPA列注释   http Java在Web浏览器中显示HttpResponse的内容   ssl Java如何接受我的自签名证书而不必将其添加到Java信任库   java解析bufferedReader数据,在某些字符处停止   java将具有多个属性的对象映射到另一个对象,然后收集到列表   java是否可以将抽象方法的返回类型设置为与类相同?   java Android导航抽屉,带有菜单图标而非后退按钮   如何在JavaSpringMVC中防止会话重放攻击?   是VB。NET SmtpClient API受限于Java SendMail?   跨多线程/节点的java会话管理   来自Eclipse的java maven项目   使用已解析Java DOM XML中的元素添加新元素