项目介绍:Image GPT
Image GPT,是一种基于PyTorch的项目,其目的是实现从像素开始的生成式预训练。这项工作是基于Chen等人的Generative Pretraining from Pixels论文,以及他们提供的代码。Image GPT利用生成模型来完成和扩展输入的图像片段,从而生成完整的图像。
生成图像示例
在项目中,通过预训练的模型,可以生成测试集中一半图像的补全。比如,利用iGPT-S模型对CIFAR10数据集进行预训练时,由于仅在CIFAR10而非完整的ImageNet上进行训练,因此生成的图像补全效果相对较差。
项目进展
项目仍在进行中,目前的工作包括:
- 在GPU上批量化k均值,以便对大型数据集进行量化(当前使用
sklearn.cluster.MiniBatchKMeans
)。 - 支持类似BERT的预训练(目前只支持生成任务)。
- 从OpenAI加载预训练模型。
- 复现至少iGPT-S的成果。
根据OpenAI的博客文章,最大的模型iGPT-L(140万参数)在训练时使用了2500个V100天。通过大幅减少注意力头的数量、层数和输入大小(这会使模型大小呈二次方缩放),可以在单个NVIDIA 2070上不到两个小时内训练我们自己的模型(26,000参数)来处理Fashion-MNIST数据集。
使用说明
预训练模型
在项目的models
目录中可以找到一些预训练模型。通过./download.sh
可以下载CIFAR10预训练的iGPT-S模型。
计算质心
图像会被下载,然后使用K均值计算质心。计算的质心用于图像量化,图像在被输入模型之前需进行此步骤。
命令示例:
# 选项:mnist, fmnist, cifar10
python src/compute_centroids.py --dataset mnist --num_clusters=8
# 这会创建 data/<dataset>_centroids.npy
注意:使用与模型中num_vocab
相同的num_clusters
。
模型训练
可使用src/run.py
命令中的train
子命令对模型进行训练。
生成式预训练
通过指定数据集和模型配置文件可以对模型进行预训练。configs/s_gen.yml
对应于论文中的iGPT-S,configs/xxs_gen.yml
是一个用于小数据集的额外小型模型配置。
命令示例:
python src/run.py --dataset mnist train configs/xxs_gen.yml
分类微调
预训练模型可以通过传递预训练检查点的路径进行微调,此外还需提供配置文件和数据集。
命令示例:
python src/run.py --dataset mnist train configs/xxs_clf.yml --pretrained=models/mnist_gen.ckpt`
样本生成
可以使用随机的测试图像生成类似上图的样例:
命令示例:
# 输出至 figure.png
python src/sample.py models/mnist_gen.ckpt
还可以用命令生成类似于推文中展示的GIF:
# 输出至 out.gif
python src/gif.py models/mnist_gen.ckpt
通过以上说明,读者可以理解并使用Image GPT项目进行图像生成与分析。通过不断更新与优化,Image GPT有望在图像生成任务中得出更高质量的结果。