该代码是CVPR 2020纸addernet的演示:在深度学习中我们真的需要乘法吗?
我们向深度神经网络(尤其是卷积神经网络(CNN))中的大规模乘法提供了加法网络(ADDERNETS),以降低计算成本,以更便宜。在Addernets中,我们将过滤器和输入功能之间的L1-标记距离作为输出响应。结果,提出的addernets可以在ImageNet数据集上使用Resnet-50实现74.9%的TOP-1精度91.7%TOP-5精度,而无需在卷积层中任何乘法。
运行python main.py进行CIFAR-10训练。

CIFAR-10和CIFAR-100数据集上的分类结果。
| 模型 | 方法 | CIFAR-10 | CIFAR-100 |
|---|---|---|---|
| vgg-small | 安 | 93.72% | 72.64% |
| PKKD Ann | 95.03% | 76.94% | |
| Slac Ann | 93.96% | 73.63% | |
| Resnet-20 | 安 | 92.02% | 67.60% |
| PKKD Ann | 92.96% | 69.93% | |
| Slac Ann | 92.29% | 68.31% | |
| ShiftAddnet* | 89.32%(160epoch) | - | |
| Resnet-32 | 安 | 93.01% | 69.17% |
| PKKD Ann | 93.62% | 72.41% | |
| Slac Ann | 93.24% | 69.83% |
Imagenet数据集上的分类结果。
| 模型 | 方法 | TOP-1 ACC | 前5个ACC |
|---|---|---|---|
| Resnet-18 | CNN | 69.8% | 89.1% |
| 安 | 67.0% | 87.6% | |
| PKKD Ann | 68.8% | 88.6% | |
| Slac Ann | 67.7% | 87.9% | |
| Resnet-50 | CNN | 76.2% | 92.9% |
| 安 | 74.9% | 91.7% | |
| PKKD Ann | 76.8% | 93.3% | |
| Slac Ann | 75.3% | 92.6% |
*ShiftAddnet使用了不同的训练设置。
多个SR数据集的超分辨率结果。
| 规模 | 模型 | 方法 | set5(psnr/ssim) | set14(psnr/ssim) | B100(PSNR/SSIM) | Urban100(PSNR/SSIM) |
|---|---|---|---|---|---|---|
| ×2 | VDSR | CNN | 37.53/0.9587 | 33.03/0.9124 | 31.90/0.8960 | 30.76/0.9140 |
| 安 | 37.37/0.9575 | 32.91/0.9112 | 31.82/0.8947 | 30.48/0.9099 | ||
| EDSR | CNN | 38.11/0.9601 | 33.92/0.9195 | 32.32/0.9013 | 32.93/0.9351 | |
| 安 | 37.92/0.9589 | 33.82/0.9183 | 32.23/0.9000 | 32.63/0.9309 | ||
| ×3 | VDSR | CNN | 33.66/0.9213 | 29.77/0.8314 | 28.82/0.7976 | 27.14/0.8279 |
| 安 | 33.47/0.9151 | 29.62/0.8276 | 28.72/0.7953 | 26.95/0.8189 | ||
| EDSR | CNN | 34.65/0.9282 | 30.52/0.8462 | 29.25/0.8093 | 28.80/0.8653 | |
| 安 | 34.35/0.9212 | 30.33/0.8420 | 29.13/0.8068 | 28.54/0.8555 | ||
| ×4 | VDSR | CNN | 31.35/0.8838 | 28.01/0.7674 | 27.29/0.7251 | 25.18/0.7524 |
| 安 | 31.27/0.8762 | 27.93/0.7630 | 27.25/0.7229 | 25.09/0.7445 | ||
| EDSR | CNN | 32.46/0.8968 | 28.80/0.7876 | 27.71/0.7420 | 26.64/0.8033 | |
| 安 | 32.13/0.8864 | 28.57/0.7800 | 27.58/0.7368 | 26.33/0.7874 |
在没有对抗训练的情况下,在白色盒子攻击下,CIFAR-10对CIFAR-10的对抗性鲁棒性。
| 模型 | 方法 | 干净的 | FGSM | BIM7 | PGD7 | MIM5 | RFGSM5 |
|---|---|---|---|---|---|---|---|
| Resnet-20 | CNN | 92.68 | 16.33 | 0.00 | 0.00 | 0.01 | 0.00 |
| 安 | 91.72 | 18.42 | 0.00 | 0.00 | 0.04 | 0.00 | |
| CNN-R | 90.62 | 17.23 | 3.46 | 3.67 | 4.23 | 0.06 | |
| Ann-R | 90.95 | 29.93 | 29.30 | 29.72 | 32.25 | 3.38 | |
| Ann-r-awn | 90.55 | 45.93 | 42.62 | 43.39 | 46.52 | 18.36 | |
| Resnet-32 | CNN | 92.78 | 23.55 | 0.00 | 0.01 | 0.10 | 0.00 |
| 安 | 92.48 | 35.85 | 0.03 | 0.11 | 1.04 | 0.02 | |
| CNN-R | 91.32 | 20.41 | 5.15 | 5.27 | 6.09 | 0.07 | |
| Ann-R | 91.68 | 19.74 | 15.96 | 16.08 | 17.48 | 0.07 | |
| Ann-r-awn | 91.25 | 61.30 | 59.41 | 59.74 | 61.54 | 39.79 |
Pascal VOC的地图比较。
| 模型 | 骨干 | 脖子 | 地图 |
|---|---|---|---|
| 更快的R-CNN | Conv R50 | cons | 79.5 |
| FCO | Conv R50 | cons | 79.1 |
| 视网膜 | Conv R50 | cons | 77.3 |
| Foveabox | Conv R50 | cons | 76.6 |
| adder-fcos | 加法器R50 | 加法器 | 76.5 |
您可以按照Pytorch/示例来准备ImageNet数据。
验证的型号可在Google Drive或Baidu Cloud(访问代码:126B)中找到
运行python main.py进行CIFAR-10训练。
运行python test.py --data_dir 'path/to/imagenet_root/'以对Imagenet val设置进行评估。使用Resnet-50,您将在Imagenet数据集上实现74.9%的最高准确性和91.7%的TOP-5精度。
运行python test.py --dataset cifar10 --model_dir models/ResNet20-AdderNet.pth --data_dir 'path/to/cifar10_root/'在CIFAR-10上进行评估。您将使用Resnet-20在CIFAR-10数据集上实现91.8%的精度。
由于在没有CUDA加速的情况下实施了加法器过滤器,因此对Addernets的推断和培训很慢。您可以编写CUDA以达到更高的推理速度。
@article{AdderNet,
title={AdderNet: Do We Really Need Multiplications in Deep Learning?},
author={Chen, Hanting and Wang, Yunhe and Xu, Chunjing and Shi, Boxin and Xu, Chao and Tian, Qi and Xu, Chang},
journal={CVPR},
year={2020}
}
我们感谢所有贡献。如果您打算贡献较小的错误,请这样做,而无需进行任何进一步的讨论。
如果您打算为核心贡献新功能,实用功能或扩展,请首先与我们开放问题并讨论该功能。发送无讨论的公关可能最终导致拒绝的PR,因为我们可能会将核心朝着与您可能意识到的不同方向不同。