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 :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
|