Proyek ini bertujuan untuk menyederhanakan proses pembuatan model DeepDream khusus dengan menggunakan model Googlenet pretrained dan set data gambar khusus.
Berikut adalah beberapa contoh visualisasi yang dibuat dengan model Deepdream khusus yang dilatih pada gambar bertema musim panas:
Ketergantungan:
Anda dapat menemukan instruksi instalasi terperinci untuk Ubuntu dan Windows di panduan instalasi.
Setelah memastikan bahwa Pytorch diinstal, Anda dapat secara opsional mengunduh model Places365 Googlenet dan Inception5h (InceptionV1) dengan perintah berikut:
python models/download_models.py
Jika Anda hanya ingin membuat deepdreams dengan model pretrained atau Anda mengunduh model pretrained yang dibuat oleh orang lain dengan pencipta mimpi, maka Anda dapat melompat ke depan untuk memvisualisasikan model.
Buat & Persiapkan Dataset Anda
Kumpulkan gambar
Urutkan gambar ke dalam format yang diperlukan.
Hapus gambar yang korup.
Pastikan bahwa duplikat dihapus jika Anda belum melakukannya
Ubah mengubah dataset untuk mempercepat pelatihan.
Hitung rata -rata dan standar deviasi dataset Anda.
Latih model googlenet
Visualisasikan hasilnya
Jika hasilnya tidak bagus, maka Anda mungkin harus kembali ke langkah 1-2 dan membuat beberapa perubahan dengan gambar, kategori, dan parameter pelatihan apa yang digunakan.
Diperlukan hanya 5 zaman untuk membuat visualisasi yang menyerupai data pelatihan Anda menggunakan lapisan FC/Logit utama. Untuk mempercepat pelatihan dan menciptakan hasil yang lebih terlihat, model BVLC pretrained yang digunakan sebagian beku untuk melindungi lapisan yang lebih rendah dari perubahan.
Untuk melatih model DeepDream khusus, Anda perlu membuat dataset yang terdiri dari gambar yang ingin Anda gunakan untuk pelatihan. Ada berbagai cara yang dapat Anda peroleh gambar untuk dataset Anda, dan Anda akan membutuhkan setidaknya beberapa ratus gambar untuk setiap kategori/kelas.
Deepdream paling sering dilakukan dengan model klasifikasi gambar yang dilatih pada dataset gambar yang terdiri dari berbagai kategori/kelas. Model klasifikasi gambar berusaha mempelajari perbedaan antara kelas gambar yang berbeda dan dengan melakukan itu neuron mendapatkan kemampuan untuk menciptakan halusinasi seperti mimpi. Gambar yang Anda pilih, perbedaan di antara mereka, perbedaan antara kelas yang Anda pilih, dan jumlah gambar yang digunakan akan sangat mempengaruhi visualisasi yang dapat diproduksi.
Dataset gambar pytorch harus disusun di mana direktori/folder utama berisi subfolder/direktori untuk setiap kategori/kelas. Di bawah contoh struktur dataset yang diperlukan ditampilkan:
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
Setelah Anda membuat dataset dalam format yang tepat, pastikan Anda menghapus gambar duplikat jika Anda belum melakukannya. Ada berbagai alat yang dapat Anda gunakan untuk tugas ini, termasuk perangkat lunak gratis dan open source.
Jika Anda belum melakukannya, Anda mungkin ingin membuat salinan cadangan dari dataset Anda.
Selanjutnya Anda perlu memverifikasi bahwa tidak ada gambar yang korup sedemikian rupa sehingga mencegah Pytorch memuatnya. Untuk secara otomatis menghapus gambar yang rusak dari dataset Anda, gunakan perintah berikut:
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
Selanjutnya Anda mungkin ingin mengubah ukuran dataset Anda agar lebih dekat dengan ukuran gambar pelatihan untuk mempercepat pelatihan. Mengubah ukuran dataset Anda tidak akan mencegah Anda membuat gambar deepdream yang lebih besar dengan model yang dihasilkan. Skrip pengubah ukuran yang disertakan hanya akan memodifikasi gambar yang melampaui ukuran gambar yang ditentukan dengan tinggi atau lebarnya.
Untuk mengubah ukuran gambar dalam dataset Anda, gunakan perintah berikut:
python data_tools/resize_data.py -data_path <training_data> -max_size 500
Sekarang dengan dataset yang baru diubah ukuran Anda, Anda dapat menghitung rata -rata dan standar deviasi dataset Anda untuk digunakan dalam pelatihan, dan Deepdreaming. Pastikan untuk menghitung ulang rata -rata dan standar deviasi lagi jika Anda memodifikasi dataset dengan menambahkan atau menghapus gambar.
Untuk menghitung rata -rata dan standar deviasi dataset Anda, gunakan perintah berikut dan simpan output untuk langkah berikutnya:
python data_tools/calc_ms.py -data_path <training_data>
Sekarang Anda dapat mulai melatih model DeepDream Anda dengan menjalankan skrip pelatihan Googlenet. Dianjurkan agar Anda menyimpan model setiap 5-10 zaman untuk memantau kualitas visualisasi.
Setelah melatih model Anda, Anda dapat menambahkan matriks korelasi warna ke dalamnya untuk dekorelasi warna dengan perintah berikut:
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
Perintah pelatihan dasar:
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
Opsi Input:
-data_path
: Path to the Dataset Directory/Folder yang ingin Anda gunakan.-data_mean
: Daftar nilai rata -rata Anda yang sudah dialokasikan untuk dataset yang Anda pilih.-data_sd
: Daftar nilai deviasi standar Anda yang telah diaktifkan untuk dataset yang Anda pilih.Opsi Pelatihan:
-num_epochs
: Jumlah zaman pelatihan untuk digunakan. Default adalah 120
.-batch_size
: Jumlah pelatihan dan gambar validasi untuk dimasukkan melalui jaringan pada saat yang sama. Default adalah 32
.-learning_rate
: Tingkat belajar untuk digunakan dengan Adam atau SGD Optimizer. Default adalah 1e-2
.-optimizer
: algoritma optimasi untuk digunakan; baik sgd
atau adam
; Default adalah sgd
.-train_workers
: Berapa banyak pekerja untuk digunakan untuk pelatihan. Default adalah 0
.-val_workers
: Berapa banyak pekerja yang digunakan untuk validasi. Default adalah 0
.-balance_classes
: Mengaktifkan bendera ini akan menyeimbangkan pelatihan untuk setiap kelas berdasarkan ukuran kelas.Opsi Model:
-model_file
: jalur ke file model .pth
untuk digunakan untuk model awal. Default adalah model BVLC Googlenet.-freeze_to
: lapisan mana yang akan membekukan model hingga; none
satu, conv1
, conv2
, conv3
, mixed3a
, mixed3b
, mixed4a
, mixed4b
, mixed4c
, mixed4d
, mixed4e
, mixed5a
, atau mixed5b
. Default adalah mixed3b
.-freeze_aux1_to
: Lapisan mana yang akan membekukan cabang bantu pertama hingga; salah satu dari none
, loss_conv
, loss_fc
, atau loss_classifier
. Default none
.-freeze_aux2_to
: Lapisan mana yang akan membekukan cabang bantu kedua hingga; salah satu dari none
, loss_conv
, loss_fc
, atau loss_classifier
. Default none
.-delete_branches
: Jika bendera ini diaktifkan, tidak ada cabang tambahan yang akan digunakan dalam model.Opsi Output:
-save_epoch
: Simpan model setiap zaman save_epoch
. Default adalah 10
. Diatur ke 0
untuk menonaktifkan Simpan Model Menengah.-output_name
: Nama model output. Default adalah bvlc_out.pth
.-individual_acc
: Mengaktifkan bendera ini akan mencetak akurasi individual dari setiap kelas.-save_csv
: Mengaktifkan bendera ini akan menyimpan data kehilangan dan akurasi ke file txt.-csv_dir
: Di mana menyimpan file CSV. Default diatur ke direktori kerja saat ini.Opsi lain:
-use_device
: ID nol-indeks dari GPU untuk menggunakan plus cuda:
. Default adalah cuda:0
.-seed
: Nilai integer yang dapat Anda tentukan untuk hasil yang dapat diulang. Secara default nilai ini acak untuk setiap proses.Opsi Dataset:
-val_percent
: Persentase gambar dari setiap kelas untuk digunakan untuk validasi. Default adalah 0.2
.Setelah melatih model Deepdream baru, Anda harus menguji visualisasi. Visualisasi terbaik ditemukan di lapisan FC utama yang juga dikenal sebagai lapisan 'logit'. Script ini membantu Anda dengan cepat dan mudah memvisualisasikan semua saluran lapisan tertentu dalam model tertentu untuk zaman model tertentu, dengan menghasilkan gambar terpisah untuk setiap saluran.
Opsi Input:
-model_file
: jalur ke model googlenet pretrained yang ingin Anda gunakan.-learning_rate
: Tingkat belajar untuk digunakan dengan pengoptimal Adam atau L-BFGS. Default adalah 1.5
.-optimizer
: algoritma optimasi untuk digunakan; baik lbfgs
atau adam
; Default adalah adam
.-num_iterations
: Default adalah 500
.-layer
: Lapisan spesifik yang ingin Anda gunakan. Default diatur ke fc
.-extract_neuron
: Jika bendera ini diaktifkan, neuron tengah akan diekstraksi dari setiap saluran.-image_size
: Daftar koma yang terpisah dari <height>,<width>
untuk digunakan untuk gambar output. Default diatur ke 224,224
.-jitter
: Jumlah gambar jitter yang akan digunakan untuk preprocessing. Default adalah 16
.-fft_decorrelation
: Apakah menggunakan dekorelasi spasial FFT atau tidak. Jika diaktifkan, tingkat pembelajaran yang lebih rendah harus digunakan.-color_decorrelation
: Apakah menggunakan dekorelasi warna atau tidak. Secara opsional memberikan daftar nilai yang terpisah koma untuk matriks korelasi warna. Jika tidak ada nilai yang disediakan, upaya untuk memuat matriks korelasi warna dari file model akan dilakukan sebelum default ke matriks korelasi warna ImageNet.-random_scale
: Apakah menggunakan penskalaan acak atau tidak. Secara opsional memberikan daftar nilai yang terpisah koma untuk skala untuk dipilih secara acak. Jika tidak ada nilai yang disediakan, maka skala akan dipilih secara acak dari daftar berikut: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: Apakah menggunakan rotasi acak atau tidak. Secara opsional memberikan daftar nilai derajat yang terpisah untuk rotasi yang dipilih secara acak dari atau nilai tunggal untuk digunakan untuk gelar pemilihan secara acak dari [-value, value]
. Jika tidak ada nilai yang disediakan, maka kisaran [-5, 5]
akan digunakan.-padding
: Jumlah bantalan yang akan digunakan sebelum penskalaan acak dan rotasi acak untuk mencegah artefak tepi. Padding kemudian dilepas setelah transformasi. Default diatur ke 0
untuk menonaktifkannya.Opsi Pemrosesan:
-batch_size
: Berapa banyak gambar visualisasi saluran untuk dibuat di setiap batch. Default adalah 10
.-start_channel
: Saluran apa yang akan mulai membuat gambar visualisasi di. Default adalah 0
.-end_channel
: Saluran apa yang harus berhenti membuat gambar visualisasi di. Default diatur ke -1
untuk semua saluran.Hanya diperlukan jika model tidak mengandungnya, opsi :
-model_epoch
: Epok pelatihan yang disimpan oleh model, untuk digunakan untuk nama gambar output. Default adalah 120
.-data_mean
: Daftar nilai rata -rata Anda yang telah diaktifkan yang digunakan untuk melatih model, jika mereka tidak disimpan di dalam model.-num_classes
: Jumlah kelas yang dilatih model. Default adalah 120
.Opsi Output :
-output_dir
: Di mana menyimpan gambar output. Default diatur ke direktori kerja saat ini.-print_iter
: Cetak kemajuan setiap iterasi print_iter
. Diatur ke 0
untuk menonaktifkan pencetakan.-save_iter
: Simpan gambar setiap iterasi save_iter
. Default adalah 0
untuk menonaktifkan hasil menengah yang menghemat.Opsi lain:
-use_device
: ID nol-indeks dari GPU untuk menggunakan plus cuda:
. Default adalah cuda:0
.-seed
: Nilai integer yang dapat Anda tentukan untuk hasil yang dapat diulang. Secara default nilai ini acak untuk setiap proses.Visualisasi Lapisan FC (Logit):
python vis_multi.py -model_file <bvlc_out120>.pth
Visualisasi Lapisan FC (Logits) Lanjutan:
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
Skrip ini memungkinkan Anda membuat halusinasi Deepdream dengan model Googlenet terlatih.
Opsi Input:
-model_file
: jalur ke model googlenet pretrained yang ingin Anda gunakan.-learning_rate
: Tingkat belajar untuk digunakan dengan pengoptimal Adam atau L-BFGS. Default adalah 1.5
.-optimizer
: algoritma optimasi untuk digunakan; baik lbfgs
atau adam
; Default adalah adam
.-num_iterations
: Default adalah 500
.-content_image
: Path ke gambar input Anda. Jika tidak ada gambar input yang ditentukan, noise acak digunakan sebagai gantinya.-layer
: Lapisan spesifik yang ingin Anda gunakan. Default diatur ke mixed5a
.-channel
: Saluran layer spesifik yang ingin Anda gunakan. Default diatur ke -1
untuk menonaktifkan pemilihan saluran tertentu.-extract_neuron
: Jika bendera ini diaktifkan, neuron tengah akan diekstraksi dari saluran yang dipilih oleh parameter -channel
.-image_size
: Daftar koma yang terpisah dari <height>,<width>
untuk digunakan untuk gambar output. Jika nilai tunggal untuk panjang sisi maksimum disediakan bersama dengan gambar konten, maka panjang sisi minimum akan dihitung secara otomatis. Default diatur ke 224,224
.-jitter
: Jumlah gambar jitter yang akan digunakan untuk preprocessing. Default adalah 16
.-fft_decorrelation
: Apakah menggunakan dekorelasi spasial FFT atau tidak. Jika diaktifkan, tingkat pembelajaran yang lebih rendah harus digunakan.-color_decorrelation
: Apakah menggunakan dekorelasi warna atau tidak. Secara opsional memberikan daftar nilai yang terpisah koma untuk matriks korelasi warna. Jika tidak ada nilai yang disediakan, upaya untuk memuat matriks korelasi warna dari file model akan dilakukan sebelum default ke matriks korelasi warna ImageNet.-random_scale
: Apakah menggunakan penskalaan acak atau tidak. Secara opsional memberikan daftar nilai yang terpisah koma untuk skala untuk dipilih secara acak. Jika tidak ada nilai yang disediakan, maka skala akan dipilih secara acak dari daftar berikut: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: Apakah menggunakan rotasi acak atau tidak. Secara opsional memberikan daftar nilai derajat yang terpisah untuk rotasi yang dipilih secara acak dari atau nilai tunggal untuk digunakan untuk gelar pemilihan secara acak dari [-value, value]
. Jika tidak ada nilai yang disediakan, maka kisaran [-5, 5]
akan digunakan.-padding
: Jumlah bantalan yang akan digunakan sebelum penskalaan acak dan rotasi acak untuk mencegah artefak tepi. Padding kemudian dilepas setelah transformasi. Default diatur ke 0
untuk menonaktifkannya.-layer_vis
: Apakah akan menggunakan deepdream atau visualisasi arah saat tidak memvisualisasikan saluran lapisan tertentu. Salah satu deepdream
atau direction
; Default adalah deepdream
.Hanya diperlukan jika model tidak mengandungnya, opsi :
-data_mean
: Daftar nilai rata -rata Anda yang telah diaktifkan yang digunakan untuk melatih model, jika mereka tidak disimpan di dalam model.-num_classes
: Jumlah kelas yang dilatih model, jika tidak disimpan di dalam model.Opsi Output :
-output_image
: Nama gambar output. Default out.png
.-print_iter
: Cetak kemajuan setiap iterasi print_iter
. Diatur ke 0
untuk menonaktifkan pencetakan.-save_iter
: Simpan gambar setiap iterasi save_iter
. Default adalah 0
untuk menonaktifkan hasil menengah yang menghemat.Opsi ubin:
-tile_size
: Ukuran ubin yang diinginkan untuk digunakan. Entah daftar koma yang terpisah dari <height>,<width>
atau nilai tunggal untuk digunakan untuk tinggi dan lebar ubin. Default diatur ke 0
untuk menonaktifkan ubin.-tile_overlap
: Persentase tumpang tindih untuk digunakan untuk ubin. Default adalah 25
untuk 25% tumpang tindih. Persentase tumpang tindih lebih dari 50% akan mengakibatkan masalah.-tile_iter
: Default adalah 50
.Opsi lain:
-use_device
: ID nol-indeks dari GPU untuk menggunakan plus cuda:
. Default adalah cuda:0
.-seed
: Nilai integer yang dapat Anda tentukan untuk hasil yang dapat diulang. Secara default nilai ini acak untuk setiap proses.Dasar Deepdream:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
Deepdream Lanjutan:
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
Lihat di sini untuk informasi lebih lanjut tentang semua skrip/alat yang disertakan yang berkaitan dengan pembuatan dataset, pembersihan, dan persiapan.