:tada: 更新(2021年8月):
想看看你的模型如何应对具有挑战性的风格化图像吗?请查看 bethgelab:model-vs-human 的综合工具箱,它支持风格化数据(附带人类对比数据),并提供评估任意 PyTorch / TensorFlow 模型的代码。只需加载你喜欢的模型,运行一下,就能获得一份关于分布外泛化行为的完整 PDF 报告,包括可直接使用的图表!
风格化 ImageNet
本仓库包含有关如何创建风格化 ImageNet 的信息和代码,这是 ImageNet 的一个风格化版本,可用于诱导 CNN 产生形状偏差,如我们的论文 基于 ImageNet 训练的 CNN 偏向纹理;增加形状偏差可提高准确性和鲁棒性 中所报告的那样。该论文由 Robert Geirhos、Patricia Rubisch、Claudio Michaelis、Matthias Bethge、Felix A. Wichmann 和 Wieland Brendel 共同撰写。我们希望这个仓库能成为你自己研究的有用资源。请注意,与本论文相关的所有代码、数据和材料都可在另一个仓库 rgeirhos:texture-vs-shape 中找到。
如有任何问题,请随时通过 robert.geirhos@bethgelab.org 联系我或在此处提出问题!
示例图像
以下是同一 ImageNet 图像的不同风格化效果示例: 如你所见,局部纹理被严重扭曲,而全局物体形状在风格化过程中基本保持完整。这使得风格化 ImageNet 成为一个有效的数据集,可以推动 CNN 更多地学习形状,而不是局部纹理。
使用方法
- 获取风格图像(绘画)。从 Kaggle 的 painter-by-numbers 数据集 下载
train.zip
;将内容(绘画)解压到这个新目录:code/paintings_raw/
(约 38G)。 - 获取 ImageNet 图像并设置路径。如果你已经有 ImageNet 图像,请在
code/general.py
中相应地设置IMAGENET_PATH
变量。如果没有,请从 ImageNet 网站 获取 ImageNet 图像并存储在本地,然后设置变量。注意,ImageNet 图像需要分为两个子目录,train/
和val/
(分别用于训练和验证图像)。无论如何,还要设置STYLIZED_IMAGENET_PATH
变量(也在code/general.py
中)。这个变量指示你想要存储最终数据集的路径。确保你有足够的磁盘空间:在我们的设置中,风格化 ImageNet 需要 134G 的磁盘空间(比标准 ImageNet 的 181G 稍少)。 - 进入
code/
目录并执行create_stylized_imagenet.sh
(假设可以访问 GPU)。最简单的方法是使用我们提供的 docker 镜像(参见下面的部分)。这将在你在步骤 2 中指定的目录中创建风格化 ImageNet。 - 可选地,删除不再需要的
paintings_raw/
、paintings_excluded/
和paintings_preprocessed/
。
Docker 镜像
我们提供了一个 docker 镜像,这样你就不必自己安装所有库:https://hub.docker.com/r/bethgelab/deeplearning/。该仓库已在 bethgelab/deeplearning:cuda9.0-cudnn7
上测试过。
在风格化 ImageNet 上预训练的 CNN
我们在 rgeirhos:texture-vs-shape 提供了在风格化 ImageNet 上训练的 CNN。
训练细节
在训练模型时,ImageNet 图像通常使用标准的 ImageNet 均值和标准差参数进行归一化。风格化 ImageNet 可以作为 ImageNet 的即插即用替代品用于训练,即我们论文中的结果基于与 ImageNet 图像相同的归一化。具体来说,我们在训练时对两个数据集都使用 ImageNet 的均值和标准差;均值和标准差参数来自 PyTorch ImageNet 示例训练脚本。
风格化任意数据集
这个仓库专门用于创建 ImageNet 的风格化版本。如果你对风格化其他数据集感兴趣,我建议使用这个代码:https://github.com/bethgelab/stylize-datasets,它可以风格化任意图像数据集。
常见问题:你能直接分享数据集吗(例如通过下载链接)?
很遗憾不能,但你可以自己风格化数据集(见上文),或在你的机构中找人已经做过这个工作,或者使用 bethgelab:model-vs-human 中的 16 类版本 stylized
作为代理,该数据集可以通过工具箱下载或直接从 这里 下载。
致谢
代码本身很大程度上依赖于 Naoto Inoue (naoto0804) 的 pytorch-AdaIN github 仓库,这是 X. Huang 和 S. Belongie 在 ICCV 2017 发表的 "Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization" 风格迁移方法的 PyTorch 实现。事实上,整个 AdaIN 实现都来自该仓库;为了让任何人都能以尽可能少的额外努力创建风格化 ImageNet,我们在这里将所有内容集中在一个仓库中(包括预处理、风格迁移等)。
如果你发现风格化 ImageNet 对你的工作有用,请考虑引用它:
@inproceedings{
geirhos2018,
title={ImageNet-trained {CNN}s are biased towards texture; increasing shape bias improves accuracy and robustness.},
author={Robert Geirhos and Patricia Rubisch and Claudio Michaelis and Matthias Bethge and Felix A Wichmann and Wieland Brendel},
booktitle={International Conference on Learning Representations},
year={2019},
url={https://openreview.net/forum?id=Bygh9j09KX},
}