Pre-training without Natural Images
文中关于分形类别生成部分(2-(2))存在理解问题(标注红色问号的位置)
1 概览
(1)存在问题
使用自然图片及标签做预训练存在以下问题:
- 许多大型数据集均是以众包任务的形式创建的,参与标注的人员有可能缺乏专业性,导致标注信息存在不够精确、侵犯隐私、违背道德等问题
- 许多数据集存在侵权问题,而只能应用于非商业化用途
(2)研究内容
本文研究内容:使用公式驱动的监督学习及分形理论自动生成图片和标签数据:
- 没有自然图像的预训练,可通过公式驱动的图像投影来简化大规模数据库的构建,进而有效的进行预训练
- 公式驱动的图片数据集能够有效解决当前存在CNN预训练问题:无需人工标注、无需数据集下载
(3)本文贡献
本文提出公式驱动的监督学习(formula-driven supervised learning),可以实现对卷积神经网络不使用任何自然图片来进行预训练。
- 提供了一种使用分形理论自动生成大规模数据集的方法
- 使用随机搜索分形数据集生成了2个大型数据集:
FractalDB-1k、FractalDB-10k - 这种自动生成策略可以生成无限大的带标签数据集
- 使用该自动生成的数据集进行预训练,部分精度超越了在ImageNet/Places真实数据集上做预训练。
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?)=[ai?ci??bi?di??]x+[ei?fi??] 预先假定分型类别总数为1000或者10000 参数的生成步骤:
- i) 确定
N值:N为放射变换方程的数量,从离散均匀分布N={2, 3, 4, 5, 6, 7, 8}随机采样 - ii) 确定
θ
i
\theta_i
θi?,即第
i个放射变换方程a, b, c, d, e, f:分别从均匀分布[-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=1N?detAi?),其中
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} -
a-f:取值:{0.8, 0.9, 1.0, 1.1, 1.2} -
Dot(t):一个分形图片中点的数量,即迭代的次数t,取值:{100K, 200K, 400K, 800K} -
W, H:图像的宽、高,取值:{256, 362, 512, 764, 1024}
3 实验
实验设置:
- 网络:
ResNet-50 - 优化器:
SGD,momentum=0.9,learning_rate=0.01,学习率在30 epoch和60 epoch时均减小至原来的0.1倍 batch_size:256epoch: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/365ImageNet-100/1kFractalDB-1k/10k 

|