抗锯齿模型和张的池层。再次使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)进行下采样时,这实际上是用来防止索引漂移的正确大小。在
目录
- More information about antialiased models
- Instructions for antialiasing your own model,使用^{
} 层 - 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)
我们还为抗锯齿AlexNet
、VGG16(bn)
、Resnet18,34,50,101
、Densenet121
和{
(2) 如何反走样您自己的架构
antialiased_cnns
模块包含BlurPool
class,它进行模糊+子采样。运行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评估、结果和培训代码
我们观察到准确度(图像正确分类的频率)和一致性(同一图像的两个移位被分类为相同的频率)都有改进。在
ACCURACY | Baseline | Antialiased | Delta |
---|---|---|---|
alexnet | 56.55 | 56.94 | +0.39 |
vgg11 | 69.02 | 70.51 | +1.49 |
vgg13 | 69.93 | 71.52 | +1.59 |
vgg16 | 71.59 | 72.96 | +1.37 |
vgg19 | 72.38 | 73.54 | +1.16 |
vgg11_bn | 70.38 | 72.63 | +2.25 |
vgg13_bn | 71.55 | 73.61 | +2.06 |
vgg16_bn | 73.36 | 75.13 | +1.77 |
vgg19_bn | 74.24 | 75.68 | +1.44 |
resnet18 | 69.74 | 71.67 | +1.93 |
resnet34 | 73.30 | 74.60 | +1.30 |
resnet50 | 76.16 | 77.41 | +1.25 |
resnet101 | 77.37 | 78.38 | +1.01 |
resnet152 | 78.31 | 79.07 | +0.76 |
resnext50_32x4d | 77.62 | 77.93 | +0.31 |
resnext101_32x8d | 79.31 | 79.33 | +0.02 |
wide_resnet50_2 | 78.47 | 78.70 | +0.23 |
wide_resnet101_2 | 78.85 | 78.99 | +0.14 |
densenet121 | 74.43 | 75.79 | +1.36 |
densenet169 | 75.60 | 76.73 | +1.13 |
densenet201 | 76.90 | 77.31 | +0.41 |
densenet161 | 77.14 | 77.88 | +0.74 |
mobilenet_v2 | 71.88 | 72.72 | +0.84 |
为了减少混乱,扩展结果(不同的过滤器大小)是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。在
- 项目
标签: