<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          自定義數(shù)據(jù)集上訓(xùn)練StyleGAN | 基于Python+OpenCV+colab實現(xiàn)

          共 16514字,需瀏覽 34分鐘

           ·

          2021-04-07 17:14

          點擊上方AI算法與圖像處理”,選擇加"星標"或“置頂”

          重磅干貨,第一時間送達

          概要
          • 分享我的知識,使用帶有示例代碼片段的遷移學(xué)習(xí)逐步在Google colab中的自定義數(shù)據(jù)集上訓(xùn)練StyleGAN
          • 如何使用預(yù)訓(xùn)練的權(quán)重從自定義數(shù)據(jù)集中生成圖像
          • 使用不同的種子值生成新圖像

          介紹

          生成對抗網(wǎng)絡(luò)(GAN) 是機器學(xué)習(xí)中的一項最新創(chuàng)新,由 Ian J. Goodfellow 及其同事于2014年首次提出。
          它是一組神經(jīng)網(wǎng)絡(luò),以兩人零和博弈的形式相互對抗。博弈論(一個人的勝利就是另一個人的損失)。它是用于無監(jiān)督學(xué)習(xí)的生成模型的一種形式。
          這里有一個生成器(用于從潛在空間中的某個點在數(shù)據(jù)上生成新實例)和鑒別器(用于將生成器生成的數(shù)據(jù)與實際或真實數(shù)據(jù)值區(qū)分開)。
          最初,生成器生成虛假或偽造的數(shù)據(jù),鑒別器可以將其分類為偽造,但是隨著訓(xùn)練的繼續(xù),生成器開始學(xué)習(xí)真實數(shù)據(jù)的分布并開始生成真實的數(shù)據(jù)。
          這種情況一直持續(xù)到鑒別器無法將其分類為不真實的并且生成器輸出的所有數(shù)據(jù)看起來都像真實數(shù)據(jù)。
          因此,此處生成器的輸出連接到鑒別器的輸入,并根據(jù)鑒別器的輸出(是實數(shù)還是非實數(shù))計算損失,并通過反向傳播,為后續(xù)訓(xùn)練(epoch)更新生成器的權(quán)重。
          StyleGAN目前在市場上有多種GAN變體,但在本文中,我將重點介紹Nvidia在2018年12月推出的StyleGAN。StyleGAN的體系結(jié)構(gòu)使用基線漸進式GAN。即,生成圖像的大小從非常低的角度逐漸增加分辨率(4×4)到非常高的分辨率(1024×1024),并使用雙線性采樣代替基線漸進式GAN中使用的最近鄰居上/下采樣。
          該博客的主要目的是解釋如何使用遷移學(xué)習(xí)在自定義數(shù)據(jù)集上訓(xùn)練StyleGAN,因此,有關(guān)GAN架構(gòu)的更多詳細信息,請參見NVlabs / stylegan-官方TensorFlow GitHub鏈接
          • https://github.com/NVlabs/stylegan
          遷移學(xué)習(xí)在另一個相似的數(shù)據(jù)集上使用已訓(xùn)練的模型權(quán)重并訓(xùn)練自定義數(shù)據(jù)集。
          自定義數(shù)據(jù)集包含2500個來自時尚的紋理圖像。下面幾張示例紋理圖像可供參考。此處你可以替換成自己的自定義數(shù)據(jù)集。

          重點和前提條件:

          1. 必須使用GPU,StyleGAN無法在CPU環(huán)境中進行訓(xùn)練。為了演示,我已經(jīng)使用google colab環(huán)境進行實驗和學(xué)習(xí)。
          2. 確保選擇Tensorflow版本1.15.2。StyleGAN僅適用于tf 1.x

          3. StyleGAN訓(xùn)練將花費大量時間(幾天之內(nèi)取決于服務(wù)器容量,例如1個GPU,2個GPU等)

          4. 如果你正在從事與GAN相關(guān)的任何實時項目,那么由于colab中的使用限制和超時,你可能想在 tesla P-80或 P-100專用服務(wù)器上訓(xùn)練GAN 。

          5. 如果你有g(shù)oogle-pro(不是強制性的),則可以節(jié)省多達40-50%的本文訓(xùn)練時間 ,我對GAN進行了3500次迭代訓(xùn)練,因為訓(xùn)練整個GAN需要很長時間(要獲取高分辨率圖像),則需要至少運行25000次迭代(推薦)。另外,我的圖像分辨率是64×64,但是styleGAN是在1024×1024分辨率圖像上訓(xùn)練的。

          6. 我已使用以下預(yù)先訓(xùn)練的權(quán)重來訓(xùn)練我的自定義數(shù)據(jù)集(有關(guān)更多詳細信息,請參見Tensorflow Github官方鏈接)

            • https://drive.google.com/uc?id=1MEGjdvVpUsu1jB4zrXZN7Y4kBBOzizDQ

          使用遷移學(xué)習(xí)在Google Colab中的自定義數(shù)據(jù)集上訓(xùn)練style GAN

          1. 打開colab并打開一個新的botebook。確保在Runtime->Change Runtime type->Hardware accelerator下設(shè)置為GPU
          2. 驗證你的帳戶并裝載G驅(qū)動器
          from google.colab import drive
          drive.mount('/content/drive', force_remount=True)
          1. 確保選擇了Tensorflow版本1.15.2。StyleGAN僅適用于tf1.x。
          %tensorflow_version 1.x
          import tensorflow
          print(tensorflow.__version__)
          1. 從 https://github.com/NVlabs/stylegan 克隆stylegan.git
          !git clone https://github.com/NVlabs/stylegan.git
          !ls /content/stylegan/
          You should see something like this
          config.py              LICENSE.txt             run_metrics.py
          dataset_tool.py        metrics                 stylegan-teaser.png
          dnnlib                 pretrained_example.py   training
          generate_figures.py    README.md               train.py
          5.  將 stylegan文件夾添加到python,以導(dǎo)入dnnlib模塊
          import sys
          sys.path.insert(0"/content/stylegan")
          import dnnlib
          6. 將自定義數(shù)據(jù)集從G驅(qū)動器提取到你選擇的colab服務(wù)器文件夾中
          !unrar x "/content/drive/My Drive/CustomDataset.rar" "/content/CData/"
          7. Stylegan要求圖像必須是正方形,并且為獲得很好的分辨率,圖像必須為1024×1024。但是在本演示中,我將使用64×64的分辨率,下一步是將所有圖像調(diào)整為該分辨率。
          # resize all the images to same size
          import os
          from tqdm import tqdm
          import cv2
          from PIL import Image
          from resizeimage import resizeimage
          path = '/content/CData/'
          for filename in tqdm(os.listdir(path),desc ='reading images ...'):
          image = Image.open(path+filename)
          image = image.resize((64,64))
          image.save(path+filename, image.format)
          8.將自定義數(shù)據(jù)集復(fù)制到colab并調(diào)整大小后,使用以下命令將自定義圖像轉(zhuǎn)換為tfrecords這是StyleGAN的要求,因此此步驟對于訓(xùn)練StyleGAN是必不可少的。
          ! python /content/stylegan/dataset_tool.py create_from_images /content/stylegan/datasets/custom-dataset /content/texture
          replace your custom dataset path (instead of /content/texture)
          9.一旦成功創(chuàng)建了tfrecords,你應(yīng)該查看它們
          /content/stylegan/datasets/custom-dataset/custom-dataset-r02.tfrecords - 22
          /content/stylegan/datasets/custom-dataset/custom-dataset-r03.tfrecords - 23
          /content/stylegan/datasets/custom-dataset/custom-dataset-r04.tfrecords -24
          /content/stylegan/datasets/custom-dataset/custom-dataset-r05.tfrecords -25
          /content/stylegan/datasets/custom-dataset/custom-dataset-r06.tfrecords -26
          These tfrecords correspond to 4x4 , 8x8 ,16x16, 32x32 and 64x64 resolution images (baseline progressive) respectiviely
          10.現(xiàn)在轉(zhuǎn)到styleGAN文件夾并打開train.py文件并進行以下更改
          Replace line no 37 below # Dataset. from
          desc += '-ffhq'; dataset = EasyDict(tfrecord_dir='ffhq'); train.mirror_augment = True    TO
          desc += '-PATH of YOUR CUSTOM DATASET'= EasyDict(tfrecord_dir='PATH of YOUR CUSTOM DATASET'); train.mirror_augment = True

          uncomment line no 46 below # Number of GPUs. and comment line no 49
          line number 52, train.total_kimg = 25000 is recommended for complete GAN training of 1024x1024 resolution image. I have set it to 3500. Training will stop after this much iterations
          11.在我們開始GAN訓(xùn)練之前,還需要做幾個更改。我們需要知道哪個經(jīng)過pickle預(yù)訓(xùn)練的模型將用于訓(xùn)練我們自己的定制數(shù)據(jù)集。StyleGAN也使用 inception-v3,所以,我們需要得到 inception_v3_features.pkl
          轉(zhuǎn)到鏈接 https://drive.google.com/drive/folders/1MASQyN5m0voPcx7-9K0r5gObhvvPups7 Google 云端硬盤 https://drive.google.com/drive/folders/1MASQyN5m0voPcx7-9K0r5gObhvvPups7
          你會看到一個文件 karras2019stylegan-ffhq1024x1024.pkl。該預(yù)訓(xùn)練版本經(jīng)過訓(xùn)練可生成高分辨率人臉。名人,貓,汽車等還有其他型號。你需要將此文件復(fù)制到G驅(qū)動器上,并從G驅(qū)動器中的文件獲取URL鏈接。URL鏈接看起來是這樣
          https://drive.google.com/uc?id=1FtjSVZawl-e_LDmIH3lbB0h_8q2g51Xq
          同樣,我們需要將 inception_v3_features.pkl 復(fù)制到G盤并獲取URL鏈接。現(xiàn)在轉(zhuǎn)到styleGAN / metrics下的路徑,然后打開python文件 frechet_inception_distance.py。 我們 需要在第29行做一些小的更改,如下所示
          將以下代碼替換為
          inception = misc.load_pkl('https://drive.google.com/uc?id=1MzTY44rLToO5APn8TZmfR7_ENSe5aZUn'# inception_v3_features.pkl
          inception = misc.load_pkl(''YOUR G-Drive inception-v3_features.pkl LINK url') # inception_v3_features.pkl
          我們現(xiàn)在都準備去訓(xùn)練自己的styleGAN
          1. 運行以下命令開始訓(xùn)練
          ! python /content/stylegan/train.py (! nohup python /content/stylegan/train.py if you want it to run in the background and you do not wish to see the progress in your terminal directly. Do note this will take a lot of time depending on the configurations mentioned above) you should observe something like below
          Training...
          tick 1 kimg 140.3 lod 3.00 minibatch 128 time 4m 34s sec/tick 239.7 sec/kimg 1.71 maintenance 34.5 gpumem 3.6
          network-snapshot-000140 time 6m 33s fid50k 331.8988
          WARNING:tensorflow:From /content/stylegan/dnnlib/tflib/autosummary.py:137: The name tf.summary.scalar is deprecated. Please use tf.compat.v1.summary.scalar instead.
          WARNING:tensorflow:From /content/stylegan/dnnlib/tflib/autosummary.py:182: The name tf.summary.merge_all is deprecated. Please use tf.compat.v1.summary.merge_all instead.

          tick 2 kimg 280.6 lod 3.00 minibatch 128 time 15m 18s sec/tick 237.1 sec/kimg 1.69 maintenance 407.2 gpumem 3.6
          tick 3 kimg 420.9 lod 3.00 minibatch 128 time 19m 16s sec/tick 237.3 sec/kimg 1.69 maintenance 0.7 gpumem 3.6
          tick 4 kimg 561.2 lod 3.00 minibatch 128 time 23m 15s sec/tick 238.1 sec/kimg 1.70 maintenance 0.7 gpumem 3.6
          tick 5 kimg 681.5 lod 2.87 minibatch 128 time 31m 54s sec/tick 518.6 sec/kimg 4.31 maintenance 0.7 gpumem 4.7
          tick 6 kimg 801.8 lod 2.66 minibatch 128 time 42m 53s sec/tick 658.0 sec/kimg 5.47 maintenance 0.8 gpumem 4.7
          tick 7 kimg 922.1 lod 2.46 minibatch 128 time 53m 52s sec/tick 657.7 sec/kimg 5.47 maintenance 0.9 gpumem 4.7
          tick 8 kimg 1042.4 lod 2.26 minibatch 128 time 1h 04m 49s sec/tick 656.6 sec/kimg 5.46 maintenance 0.8 gpumem 4.7
          tick 9 kimg 1162.8 lod 2.06 minibatch 128 time 1h 15m 49s sec/tick 658.5 sec/kimg 5.47 maintenance 0.8 gpumem 4.7
          tick 10 kimg 1283.1 lod 2.00 minibatch 128 time 1h 26m 40s sec/tick 650.0 sec/kimg 5.40 maintenance 0.8 gpumem 4.7
          network-snapshot-001283 time 6m 10s fid50k 238.2729
          tick 11 kimg 1403.4 lod 2.00 minibatch 128 time 1h 43m 39s sec/tick 647.7 sec/kimg 5.38 maintenance 371.7 gpumem 4.7
          tick 12 kimg 1523.7 lod 2.00 minibatch 128 time 1h 54m 27s sec/tick 647.5 sec/kimg 5.38 maintenance 0.8 gpumem 4.7
          tick 13 kimg 1644.0 lod 2.00 minibatch 128 time 2h 05m 15s sec/tick 647.4 sec/kimg 5.38 maintenance 0.9 gpumem 4.7
          tick 14 kimg 1764.4 lod 2.00 minibatch 128 time 2h 16m 04s sec/tick 647.3 sec/kimg 5.38 maintenance 0.8 gpumem 4.7
          tick 15 kimg 1864.4 lod 1.89 minibatch 64 time 2h 41m 25s sec/tick 1520.8 sec/kimg 15.19 maintenance 0.8 gpumem 4.7
          tick 16 kimg 1964.5 lod 1.73 minibatch 64 time 3h 15m 48s sec/tick 2060.2 sec/kimg 20.58 maintenance 2.9 gpumem 4.7
          tick 17 kimg 2064.6 lod 1.56 minibatch 64 time 3h 50m 11s sec/tick 2060.1 sec/kimg 20.58 maintenance 3.1 gpumem 4.7
          tick 18 kimg 2164.7 lod 1.39 minibatch 64 time 4h 24m 36s sec/tick 2061.2 sec/kimg 20.59 maintenance 3.1 gpumem 4.7
          tick 19 kimg 2264.8 lod 1.23 minibatch 64 time 4h 59m 00s sec/tick 2061.1 sec/kimg 20.59 maintenance 3.0 gpumem 4.7
          tick 20 kimg 2364.9 lod 1.06 minibatch 64 time 5h 33m 24s sec/tick 2061.1 sec/kimg 20.59 maintenance 2.9 gpumem 4.7
          network-snapshot-002364 time 7m 46s fid50k 164.6632
          tick 21 kimg 2465.0 lod 1.00 minibatch 64 time 6h 15m 16s sec/tick 2042.9 sec/kimg 20.41 maintenance 469.6 gpumem 4.7
          tick 22 kimg 2565.1 lod 1.00 minibatch 64 time 6h 49m 11s sec/tick 2032.3 sec/kimg 20.30 maintenance 2.9 gpumem 4.7
          tick 23 kimg 2665.2 lod 1.00 minibatch 64 time 7h 23m 07s sec/tick 2032.5 sec/kimg 20.31 maintenance 2.9 gpumem 4.7
          tick 24 kimg 2765.3 lod 1.00 minibatch 64 time 7h 57m 03s sec/tick 2033.5 sec/kimg 20.32 maintenance 2.9 gpumem 4.7
          tick 25 kimg 2865.4 lod 1.00 minibatch 64 time 8h 31m 00s sec/tick 2034.1 sec/kimg 20.32 maintenance 2.9 gpumem 4.7
          一旦達到train.py文件中指定的train.total_kimg值,訓(xùn)練便會結(jié)束。
          現(xiàn)在讓我們看看由styleGAN在自定義數(shù)據(jù)上生成的圖像

          真實(原始)圖像64 x 64分辨率

          初始迭代后-S-GAN生成的偽造
          經(jīng)過1000次以上的訓(xùn)練
          經(jīng)過> 3500次訓(xùn)練后
          我們可以看到,隨著訓(xùn)練迭代的進行,模型已經(jīng)開始生成真實圖像。經(jīng)過將近4000次迭代,我已經(jīng)終止了訓(xùn)練,因為這只是一個實驗和演示。
          但是,隨著我們對模型進行較長時間的訓(xùn)練,圖像將越來越精細,經(jīng)過9000或10000輪訓(xùn)練后,GAN將開始生成原始圖片的死角。太神奇了!
          現(xiàn)在讓我們看看如何使用預(yù)訓(xùn)練的自定義權(quán)重來生成類似于我們的自定義數(shù)據(jù)集的圖像

          如何使用預(yù)訓(xùn)練的權(quán)重從自定義數(shù)據(jù)集中生成圖像

          訓(xùn)練結(jié)束后,將創(chuàng)建一個如下所示的目錄
          / content / results / 00006-sgan- / content / stylegan / datasets / custom-dataset-1gpu /
          在此之下,你可以看到創(chuàng)建了許多網(wǎng)絡(luò)快照的pickle文件。我們需要獲取最新的.pkl文件,并將該文件的權(quán)重用于預(yù)訓(xùn)練模型,如下面的代碼片段所示
          # 4.0 International License. To view a copy of this license, visit# http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
          使用預(yù)訓(xùn)練的StyleGAN生成器生成圖像的最小腳本。
          導(dǎo)入操作系統(tǒng)
          import pickle
          import numpy as np
          導(dǎo)入PIL.Image
          import dnnlib
          import dnnlib.tflib as tflib
          import config
          def main():
          初始化TensorFlow。
          tflib.init_tf()
          url = '/content/network-snapshot-003685 .pkl'
          with open(url,'rb'as f :
          _G,_D,Gs = pickle.load(f)
          # _G = Instantaneous snapshot of the generator. Mainly useful for resuming a previous training run.
          # _D = Instantaneous snapshot of the discriminator. Mainly useful for resuming a previous training run.
          # Gs = Long-term average of the generator. Yields higher-quality results than the instantaneous snapshot.

          # Print network details.
          Gs.print_layers()

          # Pick latent vector.
          rnd = np.random.RandomState()
          latents = rnd.randn(1, Gs.input_shape[1])

          # Generate image.
          fmt = dict(func=tflib.convert_images_to_uint8, nchw_to_nhwc=True)
          images = Gs.run(latents, None, truncation_psi=0.7, randomize_noise=True, output_transform=fmt)
          保存圖片。
          os.makedirs(config.result_dir, exist_ok=True)
          png_filename = os.path.join(config.result_dir, f’/content/example1.png’)
          PIL.Image.fromarray(images[0], ‘RGB’).save(png_filename)
          #if __name__ == "__main__":
          main()

          on running this code , output image example1.png will be created under /content 

          The output quality will be based on the network_snapshot.pkl we use

          使用不同的種子值生成新圖像-潛在空間中的不同點

          從不同種子值(潛伏空間中的不同點)生成的圖像
          代碼片段
          !python /content/stylegan2/run_generator.py generate-latent-walk --network=/content/results/00000-sgan-/content/stylegan/datasets/custom-dataset-1gpu/network-snapshot-003685.pkl --seeds=200,1000,2500,4000,200 --frames 10 --truncation-psi=0.8
          上面的代碼將生成10張圖像。在這里,我使用了使用自定義模型的styleGAN訓(xùn)練的預(yù)訓(xùn)練權(quán)重,并使用run_generator.py(在styleGAN2中可用)生成了不同的圖像。
          我們可以從邏輯上選擇看起來相似的種子(你需要嘗試一些實驗才能達到此目的),然后對它們進行插值以獲取原始數(shù)據(jù)集中不存在的全新圖像。
          同樣,輸出的質(zhì)量將取決于我們的模型完成訓(xùn)練的哪個階段。就我而言,它大約在4000個epoch終止。

          結(jié)論

          在此博客中,我分享了我在Google colab服務(wù)器中進行 stylegan / stylegan2 實驗時獲得的知識。以下是一些混合的python程序示例,你可以參考
          • stylegan – pretrained_example.py
          • stylegan – generate_figure.py
          • stylegan2 – run_generator.py
          官方StyleGAN github鏈接
          • https://github.com/NVlabs/stylegan
          • https://github.com/NVlabs/stylegan2

          ☆ END ☆
          個人微信(如果沒有備注不拉群!
          請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會分享


          AI算法與圖像處理」公眾號后臺回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


          下載2:終身受益的編程指南:Google編程風(fēng)格指南


          AI算法與圖像處理」公眾號后臺回復(fù):c++,即可下載。歷經(jīng)十年考驗,最權(quán)威的編程規(guī)范!



          下載3 CVPR2021

          AI算法與圖像處公眾號后臺回復(fù):CVPR即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文

          點亮 ,告訴大家你也在看


          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美操逼一区二区 | 午夜福利一区二区三区 | 成人大香蕉视频 | 国产精品一卡二卡在线观看 | 天天拍夜夜操 |