该项目旨在通过使用验证的GoogLenet模型和自定义图像数据集来简化创建自定义深梦模型的过程。
以下是通过在夏季主题图像中训练的自定义Deepdream模型创建的一些示例可视化效果:
依赖性:
您可以在“安装指南”中找到Ubuntu和Windows的详细安装说明。
确保安装了Pytorch之后,您可以选择下载Placs365 googlenet和Inception5H(InceptionV1)预告型模型,并具有以下命令:
python models/download_models.py
如果您只想使用预验证的型号创建深梦,或者下载了其他人使用Dream-Creator制作的验证模型,那么您可以跳过可视化模型。
创建并准备数据集
收集图像
将图像分类为所需的格式。
删除任何损坏的图像。
确保删除任何重复项,如果您还没有这样做
调整数据集的大小以加快培训。
计算数据集的平均值和标准偏差。
培训Googlenet模型
可视化结果
如果结果不是很好,那么您可能必须返回步骤1-2,并对使用哪些图像,类别和培训参数进行一些更改。
可以使用主要FC/Logits层创建类似于您的训练数据的可视化效果,仅需5个时代。为了加快训练的速度并创造出更好的结果,所使用的BVLC型号部分被部分冷冻,以保护下层不变。
为了培训自定义的Deepdream模型,您将需要创建一个由希望用于培训的图像组成的数据集。您可以通过多种方式为数据集绘制图像,并且每个类别/类都需要至少几百个图像。
Deepdream最常使用由不同类别/类组成的图像数据集训练的图像分类模型。图像分类模型试图学习不同的图像类别之间的差异,并在这样做时,神经元获得了创造类似梦想的幻觉的能力。您选择的图像,它们之间的差异,所选类别之间的差异以及所使用的图像数量将极大地影响可以产生的可视化。
pytorch图像数据集应在主要目录/文件夹包含每个类别/类的子文件夹/目录的情况下进行构造。下面显示了所需数据集结构的示例:
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
一旦以适当的格式创建数据集后,请确保删除所有重复的映像,如果您还没有完成任何重复的映像。您可以将多种工具用于此任务,包括免费和开源软件。
如果您还没有这样做,则可能希望创建数据集的备份副本。
接下来,您需要验证任何图像都不会以防止Pytorch加载它们的方式损坏。要自动从数据集中删除任何损坏的图像,请使用以下命令:
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
接下来,您可能想调整数据集的大小以使其更接近训练图像大小,以加快培训。调整数据集的大小不会阻止您使用结果模型创建更大的深梦图像。随附的调整脚本只会修改超过指定图像大小的高度或宽度的图像。
要调整数据集中的图像大小,请使用以下命令:
python data_tools/resize_data.py -data_path <training_data> -max_size 500
现在,使用新调整大小的数据集,您可以计算数据集的平均值和标准偏差,以用于培训和深梦。如果您通过添加或删除图像来修改数据集,请确保再次重新计算平均值和标准偏差。
要计算数据集的平均值和标准偏差,请使用以下命令并将输出保存为下一步:
python data_tools/calc_ms.py -data_path <training_data>
现在,您可以通过运行Googlenet培训脚本开始训练深梦模型。建议您每5-10个时期保存模型,以监视可视化的质量。
训练模型后,您可以通过以下命令向其添加颜色相关矩阵以进行颜色去相关:
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
基本培训命令:
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
输入选项:
-data_path
:您希望使用的数据集目录/文件夹的路径。-data_mean
:您所选数据集的预先计算的平均值列表。-data_sd
:您选择的数据集的标准偏差值列表。培训选项:
-num_epochs
:要使用的训练时期数量。默认值为120
。-batch_size
:培训和验证图像的数量,同时通过网络进行。默认值为32
。-learning_rate
:与Adam或SGD优化器一起使用的学习率。默认值为1e-2
。-optimizer
:要使用的优化算法; sgd
或adam
;默认值为sgd
。-train_workers
:有多少工人用于培训。默认值为0
。-val_workers
:有多少工人用于验证。默认值为0
。-balance_classes
:启用此标志将根据班级规模平衡每个班级的培训。模型选项:
-model_file
:用于开始模型的.pth
模型文件的路径。默认值是BVLC Googlenet模型。-freeze_to
:将模型冻结到哪一层;一个none
, conv1
, conv2
, conv3
, mixed3a
, mixed3b
, mixed4a
, mixed4b
,混合4c, mixed4c
, mixed4d
, mixed4e
, mixed5a
或mixed5b
。默认值为mixed3b
。-freeze_aux1_to
:哪一层要冻结第一个辅助分支; none
, loss_conv
, loss_fc
或loss_classifier
。默认值none
。-freeze_aux2_to
:哪一层要冻结第二个辅助分支; none
, loss_conv
, loss_fc
或loss_classifier
。默认值none
。-delete_branches
:如果启用了此标志,则在模型中不会使用辅助分支。输出选项:
-save_epoch
:保存每个save_epoch
时期的模型。默认值为10
。设置为0
以禁用保存中间模型。-output_name
:输出模型的名称。默认值为bvlc_out.pth
。-individual_acc
:启用此标志将打印每个类的个人精度。-save_csv
:启用此标志将为TXT文件节省损失和准确性数据。-csv_dir
:在哪里保存CSV文件。默认设置为当前工作目录。其他选项:
-use_device
:GPU的零索引ID用于使用Plus cuda:
默认值为cuda:0
。-seed
:可以指定可重复结果的整数值。默认情况下,此值对于每个运行都是随机的。数据集选项:
-val_percent
:每个班级的图像百分比用于验证。默认值为0.2
。在训练了新的Deepdream模型之后,您需要测试其可视化。最好的可视化位于主FC层中,也称为“逻辑”层。该脚本通过为每个通道生成单独的图像来帮助您快速,轻松地在特定模型时以特定模型的特定模型中的所有指定图层的通道。
输入选项:
-model_file
:您希望使用的经过预定的Googlenet型号的路径。-learning_rate
:与ADAM或L-BFGS优化器一起使用的学习率。默认值为1.5
。-optimizer
:要使用的优化算法; lbfgs
或adam
;默认是adam
。-num_iterations
:默认值为500
。-layer
:您希望使用的特定层。默认设置为fc
。-extract_neuron
:如果启用了此标志,则将从每个通道中提取中心神经元。-image_size
:用于输出图像的逗号分隔<height>,<width>
。默认设置为224,224
。-jitter
:用于预处理的图像抖动量。默认值为16
。-fft_decorrelation
:是否使用FFT空间去相关。如果启用,则应使用较低的学习率。-color_decorrelation
:是否使用颜色去相关。可选地提供颜色相关矩阵的逗号分开的值列表。如果没有提供值,将尝试从模型文件加载颜色相关矩阵,然后在默认为Imagenet颜色相关矩阵之前制作。-random_scale
:是否使用随机缩放。可选地提供逗号分开的值列表,以便从中随机选择量表。如果没有提供值,则将从以下列表中随机选择量表: 1, 0.975, 1.025, 0.95, 1.05
。-random_rotation
:是否使用随机旋转。 (可选)提供逗号分隔的度值列表,以便从[-value, value]
中随机选择旋转或单个值。如果没有提供值,则将使用[-5, 5]
的范围。-padding
:在随机缩放和随机旋转之前要使用的填充量以防止边缘伪像。然后在变换后卸下填充物。默认值设置为0
以禁用它。处理选项:
-batch_size
:在每个批次中创建多少个频道可视化图像。默认值为10
。-start_channel
:哪种频道开始创建可视化图像。默认值为0
。-end_channel
:什么频道停止创建可视化图像。对于所有频道,默认设置为-1
。仅当模型不包含它们时才需要选项:
-model_epoch
:用于输出图像名称的模型保存的训练时期。默认值为120
。-data_mean
:如果未保存在模型中,则预先计算用于训练模型的平均值列表。-num_classes
:模型训练的类数量。默认值为120
。输出选项:
-output_dir
:在哪里保存输出图像。默认设置为当前工作目录。-print_iter
:打印进度每个print_iter
迭代。设置为0
以禁用打印。-save_iter
:保存每个save_iter
迭代的图像。默认值为0
以禁用保存中间结果。其他选项:
-use_device
:GPU的零索引ID用于使用Plus cuda:
默认值为cuda:0
。-seed
:可以指定可重复结果的整数值。默认情况下,此值对于每个运行都是随机的。基本FC(logitt)层可视化:
python vis_multi.py -model_file <bvlc_out120>.pth
高级FC(logitt)层可视化:
python vis_multi.py -model_file <bvlc_out120>.pth -layer fc -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -output_dir <output_dir> -padding 16 -jitter 16,8
该脚本使您可以通过训练有素的Googlenet模型来创建深梦幻觉。
输入选项:
-model_file
:您希望使用的经过预定的Googlenet型号的路径。-learning_rate
:与ADAM或L-BFGS优化器一起使用的学习率。默认值为1.5
。-optimizer
:要使用的优化算法; lbfgs
或adam
;默认是adam
。-num_iterations
:默认值为500
。-content_image
:输入图像的路径。如果未指定输入图像,则使用随机噪声。-layer
:您希望使用的特定层。默认设置为mixed5a
。-channel
:您希望使用的特定图层通道。默认值设置为-1
以禁用特定的频道选择。-extract_neuron
:如果启用了此标志,将从-channel
参数选择的通道中提取中心神经元。-image_size
:用于输出图像的逗号分隔<height>,<width>
。如果提供最大侧长的单个值以及内容图像,则最小侧长将自动计算。默认设置为224,224
。-jitter
:用于预处理的图像抖动量。默认值为16
。-fft_decorrelation
:是否使用FFT空间去相关。如果启用,则应使用较低的学习率。-color_decorrelation
:是否使用颜色去相关。可选地提供颜色相关矩阵的逗号分开的值列表。如果没有提供值,将尝试从模型文件加载颜色相关矩阵,然后在默认为Imagenet颜色相关矩阵之前制作。-random_scale
:是否使用随机缩放。可选地提供逗号分开的值列表,以便从中随机选择量表。如果没有提供值,则将从以下列表中随机选择量表: 1, 0.975, 1.025, 0.95, 1.05
。-random_rotation
:是否使用随机旋转。 (可选)提供逗号分隔的度值列表,以便从[-value, value]
中随机选择旋转或单个值。如果没有提供值,则将使用[-5, 5]
的范围。-padding
:在随机缩放和随机旋转之前要使用的填充量以防止边缘伪像。然后在变换后卸下填充物。默认值设置为0
以禁用它。-layer_vis
:当不可视化特定层通道时,是使用深梦还是方向可视化。 deepdream
或direction
之一;默认是deepdream
。仅当模型不包含它们时才需要选项:
-data_mean
:如果未保存在模型中,则预先计算用于训练模型的平均值列表。-num_classes
:如果未保存在模型中,则对模型进行了训练的类数。输出选项:
-output_image
:输出图像的名称。默认值为out.png
。-print_iter
:打印进度每个print_iter
迭代。设置为0
以禁用打印。-save_iter
:保存每个save_iter
迭代的图像。默认值为0
以禁用保存中间结果。平铺选项:
-tile_size
:所需的瓷砖大小要使用。逗号分隔的<height>,<width>
的列表或用于瓷砖高度和宽度的单个值。默认值设置为0
以禁用瓷砖。-tile_overlap
:用于瓷砖的重叠的百分比。默认值为25%的重叠为25
。超过50%的重叠百分比将导致问题。-tile_iter
:默认值为50
。其他选项:
-use_device
:GPU的零索引ID用于使用Plus cuda:
默认值为cuda:0
。-seed
:可以指定可重复结果的整数值。默认情况下,此值对于每个运行都是随机的。基本深梦:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
高级深梦:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a/conv_5x5_relu -channel 9 -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -padding 16 -jitter 16,8
有关与数据集创建,清洁和准备有关的所有随附脚本/工具的更多信息,请参见此处。