(非官方)pytorch图片模型
timm的Python项目详细描述
pytorch图像模型等
简介
对于每一个涉及图像+卷积神经网络的个人或自由职业项目,我都建立在不断发展的代码和模型集合之上。这个repo包含一个(有点)清理和配对的代码迭代。希望对其他人有用。
这里有许多其他人的工作。我已尽力确保所有源材料都已确认:
- 培训/验证脚本是从早期版本的pytorch imagenet示例演变而来的
- cuda特定的性能增强来自nvidia的apex示例
- 模型来源广泛
- lr scheduler ideas fromallennlp,fairseq,sgdr:随机梯度带热重启的下降(https://arxiv.org/abs/1608.03983)
- 随机擦除来自zhun zhong(https://arxiv.org/abs/1708.04896)
型号
我已经包括了一些我最喜欢的模型,但这不是一个详尽的收集。在这方面你不能比卡登的收藏品做得更好。大多数模型都有来自各自来源或原始作者的预训练权重。
- resnet/resnext(来自torchvision我自己带mods)
- resnet-18、resnet-34、resnet-50、resnet-101、resnet-152、resnext50(32x4d)、resnext101(32x4d和64x4d)
- "技巧之袋"/胶子C,D,E,S变体(https://arxiv.org/abs/1812.01187)
- Instagram Trained/ImageNet将Resnext101-32x8d从FacebookResearch调整为32x48d
- 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变体
使用--model
arg为训练、验证和推理脚本指定模型。匹配所有小写字母
为您想要的型号创建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%的验证裁剪。
<表><广告>端口重量
<表><广告>旁边有tf p*tfp
的模型用tf预处理标记进行评分。
tf-efficientnet
,tf-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文件夹,指定包含train
和validation
文件夹的基文件夹。
在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
待办事项
今后计划为各种项目增加若干项目,包括
- 在所有模型中进行模型性能(速度+精度)基准测试(使其可作为脚本运行)
- 在注释中添加用法示例,用于训练的良好超参数
- 评论、清理和通常被推倒的事情