抗锯齿模型和张的池层。再次使Convnets ShiftInvariant。ICML 2019年。

antialiased-cnns的Python项目详细描述


抗锯齿CNN[Project Page][Paper][Talk]

使卷积网络再次保持不变Richard Zhang。在ICML, 2019中。在

快速入门

运行pip install antialiased-cnns

importantialiased_cnnsmodel=antialiased_cnns.resnet50(pretrained=True)

如果您已经有了一个模型,并且希望反锯齿并继续训练,请将旧权重复制到:

^{pr2}$

如果要修改自己的模型,请使用BlurPool层。下面是有关我们提供的模型以及如何使用BlurPool的更多信息。在

C=10# example feature channel sizeblurpool=antialiased_cnns.BlurPool(C,stride=2)# BlurPool layer; use to downsample a feature mapex_tens=torch.Tensor(1,C,128,128)print(blurpool(ex_tens).shape)# 1xCx64x64 tensor

更新

  • (2020年10月)Finetune我使用基线模型和Finetune的权重初始化抗锯齿模型。以前,我是白手起家训练的。结果更好。在
  • (2020年10月)其他型号我们现在总共有23个型号变体。我添加了vgg,densenet,resnext,wide resnet的变种!同样的结论成立。在
  • (2020年9月)Pip安装现在您还可以pip install antialiased-cnns并使用pretrained=True标志加载模型。在
  • (2020年9月)Kernel 4我添加了内核大小为4的实验。当对大小相等的要素图(例如128x128-->64x64)进行下采样时,这实际上是用来防止索引漂移的正确大小。在

目录

  1. More information about antialiased models
  2. Instructions for antialiasing your own model,使用^{}
  3. ImageNet training and evaluation code。实现更好的一致性,同时保持或提高准确性,是一个开放的问题。帮助提高结果!在

(0)准备工作

Pip安装这个包

  • pip install antialiased-cnns

或者克隆这个存储库并安装需求(特别是PyTorch)

https://github.com/adobe/antialiased-cnns.git
cd antialiased-cnns
pip install -r requirements.txt

(1) 加载抗锯齿模型

下面加载一个经过预训练的抗锯齿模型,可能作为应用程序的主干。在

importantialiased_cnnsmodel=antialiased_cnns.resnet50(pretrained=True,filter_size=4)

我们还为抗锯齿AlexNetVGG16(bn)Resnet18,34,50,101Densenet121和{}提供权重(请参见example_usage.py)。在

(2) 如何反走样您自己的架构

antialiased_cnns模块包含BlurPoolclass,它进行模糊+子采样。运行pip install antialiased-cnns或复制antialiased_cnns子目录。在

Methodology该方法很简单——首先用步长1求值,然后使用我们的BlurPool层进行抗锯齿下采样。进行以下架构更改。在

importantialiased_cnns# MaxPool --> MaxBlurPoolbaseline=nn.MaxPool2d(kernel_size=2,stride=2)antialiased=[nn.MaxPool2d(kernel_size=2,stride=1),antialiased_cnns.BlurPool(C,stride=2)]# Conv --> ConvBlurPoolbaseline=[nn.Conv2d(Cin,C,kernel_size=3,stride=2,padding=1),nn.ReLU(inplace=True)]antialiased=[nn.Conv2d(Cin,C,kernel_size=3,stride=1,padding=1),nn.ReLU(inplace=True),antialiased_cnns.BlurPool(C,stride=2)]# AvgPool --> BlurPoolbaseline=nn.AvgPool2d(kernel_size=2,stride=2)antialiased=antialiased_cnns.BlurPool(C,stride=2)

我们假设传入张量有C个通道。在第1步而不是第2步计算层会增加内存和运行时间。因此,我们通常跳过最高分辨率的抗锯齿(在网络早期),以防止大幅增加。在

添加抗锯齿,然后继续训练如果已经训练了模型,然后添加了抗锯齿,则可以从旧模型进行微调:

antialiased_cnns.copy_params_buffers(old_model,antialiased_model)

如果这不起作用,您可以复制参数(而不是缓冲区)。添加抗锯齿不会添加任何参数,因此参数列表是相同的。(它确实添加了缓冲区,因此使用一些启发式方法来匹配缓冲区,这可能会引发错误。)

antialiased_cnns.copy_params(old_model,antialiased_model)

(3) ImageNet评估、结果和培训代码

我们观察到准确度(图像正确分类的频率)和一致性(同一图像的两个移位被分类为相同的频率)都有改进。在

ACCURACYBaselineAntialiasedDelta
alexnet56.5556.94+0.39
vgg1169.0270.51+1.49
vgg1369.9371.52+1.59
vgg1671.5972.96+1.37
vgg1972.3873.54+1.16
vgg11_bn70.3872.63+2.25
vgg13_bn71.5573.61+2.06
vgg16_bn73.3675.13+1.77
vgg19_bn74.2475.68+1.44
resnet1869.7471.67+1.93
resnet3473.3074.60+1.30
resnet5076.1677.41+1.25
resnet10177.3778.38+1.01
resnet15278.3179.07+0.76
resnext50_32x4d77.6277.93+0.31
resnext101_32x8d79.3179.33+0.02
wide_resnet50_278.4778.70+0.23
wide_resnet101_278.8578.99+0.14
densenet12174.4375.79+1.36
densenet16975.6076.73+1.13
densenet20176.9077.31+0.41
densenet16177.1477.88+0.74
mobilenet_v271.8872.72+0.84
^{tb2}$

为了减少混乱,扩展结果(不同的过滤器大小)是here。帮助提高结果!在

许可证

本作品以知识共享署名非商业共享4.0国际许可证授权。在

所有材料均由Adobe公司提供Creative Commons BY-NC-SA 4.0许可证。您可以使用、重新分发和改编材料用于非商业用途,只要引用我们的论文表示您所做的任何更改。在

存储库基于PyTorchexamples repository和torch构建视觉models repository。这些是BSD-style licensed。在

引证,联系人

如果你觉得这对你的研究有用,请考虑引用这个bibtex。如有任何意见或反馈,请联系adobe dot com的Richard Zhangg<;rizhang。在

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

推荐PyPI第三方库


热门话题
java如何在安卓 studio中使用调用jaxws web服务的jar文件   java双时间模拟时钟不打印两个不同的时间   java Jackson反序列化处理不带字段的生成值   多线程在java同步中读锁的目的是什么   为什么java中有这么多获取日期时间的方法?   java从listview中的TextView获取数据   java是否可以定义如何对枚举进行(反)序列化以在枚举内持久化?   Java:异常处理我的catch()有问题   VMWare java SDK:可用的PerfMetricID何时不报告数据?   exec在Java中执行命令而不重定向输出   java使用SpringXML配置实现观察者模式?   java在竹笔平板电脑中使用JPen