該項目旨在通過使用驗證的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
有關與數據集創建,清潔和準備有關的所有隨附腳本/工具的更多信息,請參見此處。