本文涉及两篇文章,作者均为Hirokatsu Kataoka;第一篇文章《Pre-training without Natural Images》是分形理论生成的数据集在CNN上预训练的研究,第二篇文章《Can Vision Transformers Learn without Natural Images?》是将原思想拓展到Transformer上。
Pre-training without Natural Images
1 概览
(1)存在问题
使用自然图片及标签做预训练存在以下问题:
- 许多大型数据集均是以众包任务的形式创建的,参与标注的人员有可能缺乏专业性,导致标注信息存在不够精确、侵犯隐私、违背道德等问题
- 许多数据集存在侵权问题,而只能应用于非商业化用途
(2)研究内容
本文研究内容:使用公式驱动的监督学习及分形理论自动生成图片和标签数据:
- 没有自然图像的预训练,可通过公式驱动的图像投影来简化大规模数据库的构建,进而有效的进行预训练
- 公式驱动的图片数据集能够有效解决当前存在的CNN预训练问题:无需人工标注、无需数据集下载
(3)本文贡献
本文提出公式驱动的监督学习(formula-driven supervised learning),可以实现对卷积神经网络不使用任何自然图片来进行预训练。
- 提供了一种使用分形理论自动生成大规模数据集的方法
- 使用随机搜索分形数据集生成了2个大型数据集:
FractalDB-1k
、FractalDB-10k
- 这种自动生成策略可以生成无限大的带标签数据集
- 使用该自动生成的数据集进行预训练,部分精度超越了在真实数据集上做预训练。
2 自动生成大型数据集
使用迭代函数系统(iterated function system (IFS)
)生成无限多的分形图片I
和对应的分形类别c
(1)分形图片的生成
迭代函数系统(IFS
):
IFS
=
{
X
;
w
1
,
w
2
,
⋯
,
w
N
;
p
1
,
p
2
,
⋯
,
p
N
}
\operatorname{IFS}=\left\{\mathcal{X} ; w_{1}, w_{2}, \cdots, w_{N} ; p_{1}, p_{2}, \cdots, p_{N}\right\}
IFS={X;w1,w2,⋯,wN;p1,p2,⋯,pN}
- w i : X → X w_i: \mathcal{X} \to \mathcal{X} wi:X→X:仿射变换方程,预先设定;
-
p
i
p_i
pi:选择对应变换方程的概率值,和为1,预先设定
使用IFS
,每个分形 S = { x t } t = d ∞ ∈ X S=\left\{\boldsymbol{x}_{t}\right\}_{t=d}^{\infty} \in \mathcal{X} S={xt}t=d∞∈X是通过随机迭代算法(random iteration algorithm
)构造出来的: t
:迭代序号;t=0, 1, 2, ...
- 第一步:按照概率 p i = p ( w ∗ = w i ) p_i=p(w^*=w_i) pi=p(w∗=wi)从集合 { w 1 , w 2 , . . . , w N } \left\{w_{1}, w_{2}, ..., w_N\right\} {w1,w2,...,wN}选择一个仿射变换方程 w ∗ w^* w∗
- 第二步:使用 w ∗ w^* w∗迭代出一个新点 x t + 1 = w ∗ ( x t ) x_{t+1}=w^*(x_t) xt+1=w∗(xt)
- 不断重复第一、二步,最终得到分形图像
(2)分形类别
分形类别与仿射变换方程中参数a, b, c, d, e, f
的取值有关:
w
i
(
x
;
θ
i
)
=
[
a
i
b
i
c
i
d
i
]
x
+
[
e
i
f
i
]
w_{i}\left(\boldsymbol{x} ; \theta_{i}\right)=\left[\begin{array}{ll} a_{i} & b_{i} \\ c_{i} & d_{i} \end{array}\right] \boldsymbol{x}+\left[\begin{array}{l} e_{i} \\ f_{i} \end{array}\right]
wi(x;θi)=[aicibidi]x+[eifi]
预先假定分形类别总数为1000
或者10000
参数的生成步骤:
- i) 确定
N
值:N
为仿射变换方程的数量,从离散均匀分布N={2, 3, 4, 5, 6, 7, 8}
随机采样 - ii) 确定
θ
i
\theta_i
θi,即第
i
个仿射变换方程的参数 a i , b i , c i , d i , e i , f i a_i, b_i, c_i, d_i, e_i, f_i ai,bi,ci,di,ei,fi:分别从均匀分布[-1, 1]
中采样;重复N
次,生成N
组a-f
- iii)确定 p i p_i pi, p i = ( det A i ) / ( ∑ i = 1 N det A i ) p_{i}=\left(\operatorname{det} A_{i}\right) /\left(\sum_{i=1}^{N} \operatorname{det} A_{i}\right) pi=(detAi)/(∑i=1NdetAi),其中 A i = ( a i , b i ; c i , d i ) A_i=(a_i, b_i; c_i, d_i) Ai=(ai,bi;ci,di),是仿射变换的旋转矩阵
- iv) 不同的参数 Θ i = { ( θ i , p i ) } i = 1 N \Theta_{i}=\left\{\left(\theta_{i}, p_{i}\right)\right\}_{i=1}^{N} Θi={(θi,pi)}i=1N 就是不同的类别
(3)参数
-
#category
和#instance
:#category
是类别标签数量,#instance
是同一个类别中的实例数量;两者对预训练效果均有影响
-
Patch
和Point
:Point
即为上述使用随机迭代逐个生成点的方法;Patch
是重复进行以下步骤t
次:- 选择一个像素点
(u, v)
- 使用一个
3 * 3
的随机点的patch
插入到该位置
- 选择一个像素点
-
填充率
filling rate r
:取值{0.05, 0.10, 0.15, 0.20, 0.25}
-
类内分形的权重
w
:为了让同一个类别中的样本有一定差异性,需设置一个w
,去和参数a_i, b_i, c_i, d_i, e_i
中的一个相乘,以改变参数取值,进而改变生成的分形图像;取值:{0.8, 0.9, 1.0, 1.1, 1.2}
-
Dot(t)
:一个分形图片中点的数量,即迭代的次数t
,取值:{100K, 200K, 400K, 800K}
-
W, H
:图像的宽、高,取值:{256, 362, 512, 764, 1024}
,像素值均为(127,127,127)
,图片均为灰度图
3 实验
实验设置:
- 网络:
ResNet-50
- 优化器:
SGD
,momentum=0.9
,learning_rate=0.01
,学习率在30 epoch
和60 epoch
时均减小至原来的0.1
倍 batch_size
:256
epoch
:90
- 数据增强:从
256 * 256
随机裁剪至224 * 224
fine-tuning
数据集:CIFAR-10/100(C10, C100)
、ImageNet-100(IN100)
、Places-30(P30)
(1) Exploration study
#category
、#instance
经实验论证,数值越大越好。最终选择#category
为1000
个类别,#instance
每个类别有1000
个实例
Patch vs. Point
3*3 Patch
效果比用点效果好
填充率filling rate
取值0.10
效果效果最好
类内分形权重的取值间隔
取值间隔为0.4
效果最好,最终取值为:{0.2, 0.6, 1.0, 1.4, 1.8}
#Dot
迭代次数
迭代次数为200k
时获得最佳的精度与速度的权衡
图片尺寸
图片尺寸为256*256
或362*362
时效果较好
(2)与其他预训练数据集的对比
Scratch
:不做预训练Places-30/365
ImageNet-100/1k
FractalDB-1k/10k
以下这篇是同作者的另一篇文章,将在CNN上进行无自然图片的预训练思想,拓展到ViT上。
Can Vision Transformers Learn without Natural Images?
说明:
对上一篇文章中每个类别中1000个样本的生成策略进行了说明:
为保证同类样本间存在一定微小差异,使用下述三种方法:
- i)对分形参数进行微调
- 使用权重
w
(预先给定4种),对仿射变换的6个参数 a i , b i , c i , d i , e i a_i, b_i, c_i, d_i, e_i ai,bi,ci,di,ei 中的任意一个进行微调 - 原始参数 + 乘了权重后的参数,总计有:
1 + 4 *6 = 25
个
- 使用权重
- ii)旋转
- 四种操作:
{none, horizontal flip, vertical flip, horizontal vertical flip}
- 四种操作:
- iii)使用
patch
生成分形- 使用
10
种不同的3*3 patch
代替点进行迭代生成分形
- 使用
- 使用上述三种方法,可保证每个类别中有
25 * 4 * 10 = 1000
种样本
异同点:
- 本文数据集使用彩色分形数据集(具体策略未知),而上篇文章使用灰度图的分形数据集
- 训练
epoch
加长 - 其他数据集生成思路、训练思路、实验对比思路与上一篇文章基本相同