การใช้งาน Pytorch อย่างง่ายของ Stylegan2 ตาม https://arxiv.org/abs/1912.04958 ที่สามารถฝึกฝนได้อย่างสมบูรณ์จากบรรทัดคำสั่งไม่จำเป็นต้องมีการเข้ารหัส
ด้านล่างนี้เป็นดอกไม้ที่ไม่มีอยู่
มือเหล่านี้ไม่ได้ทำ
หรือเมืองเหล่านี้
หรือคนดังเหล่านี้ (ฝึกอบรมโดย @yoniker)
คุณจะต้องใช้เครื่องที่ติดตั้ง GPU และ CUDA จากนั้น PIP ติดตั้งแพ็คเกจแบบนี้
$ pip install stylegan2_pytorchหากคุณใช้เครื่อง Windows คำสั่งต่อไปนี้ทำงานได้ดี
$ conda install pytorch torchvision -c python
$ pip install stylegan2_pytorch$ stylegan2_pytorch --data /path/to/images แค่นั้นแค่นั้น ภาพตัวอย่างจะถูกบันทึกเป็น results/default และรุ่นจะถูกบันทึกเป็นระยะเป็น models/default
คุณสามารถระบุชื่อโครงการของคุณด้วย
$ stylegan2_pytorch --data /path/to/images --name my-project-nameนอกจากนี้คุณยังสามารถระบุตำแหน่งที่ผลลัพธ์ระดับกลางและจุดตรวจสอบของแบบจำลองควรเก็บไว้ด้วย
$ stylegan2_pytorch --data /path/to/images --name my-project-name --results_dir /path/to/results/dir --models_dir /path/to/models/dir คุณสามารถเพิ่มความจุเครือข่าย (ซึ่งเริ่มต้นเป็น 16 ) เพื่อปรับปรุงผลลัพธ์การสร้างด้วยค่าใช้จ่ายของหน่วยความจำมากขึ้น
$ stylegan2_pytorch --data /path/to/images --network-capacity 256 โดยค่าเริ่มต้นหากการฝึกอบรมได้รับการตัดออกจะกลับมาทำงานต่อจากไฟล์ด่านสุดท้ายโดยอัตโนมัติ หากคุณต้องการรีสตาร์ทด้วยการตั้งค่าใหม่เพียงเพิ่มธง new
$ stylegan2_pytorch --new --data /path/to/images --name my-project-name --image-size 512 --batch-size 1 --gradient-accumulate-every 16 --network-capacity 10เมื่อคุณฝึกเสร็จแล้วคุณสามารถสร้างภาพจากจุดตรวจสอบล่าสุดของคุณได้เช่นนั้น
$ stylegan2_pytorch --generateเพื่อสร้างวิดีโอของการแก้ไขผ่านสองจุดสุ่มในพื้นที่แฝง
$ stylegan2_pytorch --generate-interpolation --interpolation-num-steps 100เพื่อบันทึกแต่ละเฟรมของการแก้ไขแต่ละเฟรม
$ stylegan2_pytorch --generate-interpolation --save-framesหากจุดตรวจสอบก่อนหน้านี้มีเครื่องกำเนิดไฟฟ้าที่ดีกว่า (ซึ่งมักจะเกิดขึ้นเมื่อเครื่องกำเนิดไฟฟ้าเริ่มลดลงในตอนท้ายของการฝึกอบรม) คุณสามารถโหลดจากจุดตรวจก่อนหน้านี้ด้วยธงอื่น
$ stylegan2_pytorch --generate --load-from {checkpoint number} เทคนิคที่ใช้ในทั้ง Stylegan และ Biggan กำลังตัดทอนค่าแฝงเพื่อให้ค่าของพวกเขาใกล้เคียงกับค่าเฉลี่ย ค่าการตัดทอนขนาดเล็กเท่าไหร่ตัวอย่างก็จะดีกว่าที่จะปรากฏในราคาที่หลากหลาย คุณสามารถควบคุมสิ่งนี้ได้ด้วย --trunc-psi ซึ่งโดยทั่วไปค่าจะอยู่ระหว่าง 0.5 และ 1 ตั้งค่าไว้ที่ 0.75 เป็นค่าเริ่มต้น
$ stylegan2_pytorch --generate --trunc-psi 0.5หากคุณมีเครื่องหนึ่งที่มี GPU หลายเครื่องที่เก็บข้อมูลมีวิธีใช้ประโยชน์ทั้งหมดสำหรับการฝึกอบรม ด้วย GPU หลายตัวแต่ละชุดจะถูกแบ่งเท่า ๆ กันในหมู่ GPU ที่มีอยู่ ตัวอย่างเช่นสำหรับ 2 GPUs ที่มีขนาดแบทช์ 32 แต่ละ GPU จะเห็น 16 ตัวอย่าง
คุณเพียงแค่ต้องเพิ่มธง --multi-gpus ทุกคนได้รับการดูแล หากคุณต้องการ จำกัด GPU ที่เฉพาะเจาะจงคุณสามารถใช้ตัวแปรสภาพแวดล้อม CUDA_VISIBLE_DEVICES เพื่อควบคุมอุปกรณ์ที่สามารถใช้งานได้ (เช่น CUDA_VISIBLE_DEVICES=0,2,3 อุปกรณ์เท่านั้น 0, 2, 3 มีให้บริการ)
$ stylegan2_pytorch --data ./data --multi-gpus --batch-size 32 --gradient-accumulate-every 1ในอดีต Gans ต้องการข้อมูลจำนวนมากเพื่อเรียนรู้วิธีการสร้างที่ดี รุ่น FACES ถ่ายภาพคุณภาพสูง 70K จาก Flickr เป็นตัวอย่าง
อย่างไรก็ตามในเดือนพฤษภาคม 2563 นักวิจัยทั่วโลกได้รวมตัวกันอย่างอิสระในเทคนิคง่ายๆเพื่อลดจำนวนนั้นให้ต่ำถึง 1-2K ความคิดง่ายๆนั้นคือการเพิ่มภาพทั้งหมดที่สร้างขึ้นหรือจริงได้อย่างแตกต่างในระหว่างการฝึกฝนในระหว่างการฝึกอบรม
หากมีการเพิ่มความน่าจะเป็นต่ำพอการเพิ่มจะไม่ 'รั่วไหล' ในรุ่น
ในการตั้งค่าข้อมูลต่ำคุณสามารถใช้คุณสมบัตินี้ด้วยธงอย่างง่าย
# find a suitable probability between 0. -> 0.7 at maximum
$ stylegan2_pytorch --data ./data --aug-prob 0.25 โดยค่าเริ่มต้นการเพิ่มที่ใช้คือ translation และ cutout หากคุณต้องการเพิ่ม color คุณสามารถทำได้ด้วยอาร์กิวเมนต์ --aug-types
# make sure there are no spaces between items!
$ stylegan2_pytorch --data ./data --aug-prob 0.25 --aug-types [translation,cutout,color]คุณสามารถปรับแต่งให้เข้ากับการรวมกันของสามสิ่งที่คุณต้องการ รหัสการเสริมที่แตกต่างกันถูกคัดลอกและแก้ไขเล็กน้อยจากที่นี่
นานที่สุดเท่าที่จะเป็นไปได้จนกระทั่งเกมที่เป็นปฏิปักษ์ระหว่างอวนประสาททั้งสองแตกสลาย (เราเรียกความแตกต่างนี้) โดยค่าเริ่มต้นจำนวนขั้นตอนการฝึกอบรมถูกตั้งค่าเป็น 150000 สำหรับ 128x128 ภาพ แต่คุณจะต้องการให้หมายเลขนี้สูงขึ้นอย่างแน่นอนหาก GAN ไม่แตกต่างกันเมื่อสิ้นสุดการฝึกอบรมหรือหากคุณกำลังฝึกอบรมที่ความละเอียดสูงกว่า
$ stylegan2_pytorch --data ./data --image-size 512 --num-train-steps 1000000เฟรมเวิร์กนี้ยังช่วยให้คุณสามารถเพิ่มรูปแบบที่มีประสิทธิภาพของการพยายามด้วยตนเองให้กับเลเยอร์ที่กำหนดของตัวเลือกปฏิบัติ (และเลเยอร์สมมาตรของเครื่องกำเนิดไฟฟ้า) ซึ่งจะปรับปรุงผลลัพธ์อย่างมาก ยิ่งคุณให้ความสนใจมากเท่าไหร่ก็ยิ่งดีขึ้น!
# add self attention after the output of layer 1
$ stylegan2_pytorch - - data . / data - - attn - layers 1 # add self attention after the output of layers 1 and 2
# do not put a space after the comma in the list!
$ stylegan2_pytorch - - data . / data - - attn - layers [ 1 , 2 ]การฝึกอบรมเกี่ยวกับภาพโปร่งใส
$ stylegan2_pytorch --data ./transparent/images/path --transparentยิ่งคุณมีหน่วยความจำ GPU มากเท่าไหร่การสร้างภาพก็จะยิ่งใหญ่ขึ้นและดีขึ้นเท่านั้น NVIDIA แนะนำให้มีการฝึกอบรม 1024x1024 ภาพ หากคุณมีน้อยกว่านั้นมีการตั้งค่าสองสามอย่างที่คุณสามารถเล่นด้วยเพื่อให้โมเดลพอดี
$ stylegan2_pytorch --data /path/to/data
--batch-size 3
--gradient-accumulate-every 5
--network-capacity 16 ขนาดแบทช์-คุณสามารถลด batch-size ลงเหลือ 1 แต่คุณควรเพิ่ม gradient-accumulate-every ตามลำดับเพื่อให้มินิแบทช์เครือข่ายเห็นว่าไม่เล็กเกินไป สิ่งนี้อาจทำให้คนทั่วไปสับสนดังนั้นฉันจะคิดว่าฉันจะเลือก gradient-accumulate-every โดยอัตโนมัติในอนาคต
ความจุเครือข่าย - คุณสามารถลดความสามารถของเครือข่ายประสาทเพื่อลดความต้องการหน่วยความจำ เพิ่งทราบว่าสิ่งนี้ได้รับการแสดงเพื่อลดประสิทธิภาพการสร้าง
หากไม่ได้ผลงานนี้คุณสามารถชำระให้กับ 'GaN ที่มีน้ำหนักเบา' ซึ่งจะช่วยให้คุณสามารถแลกเปลี่ยนคุณภาพเพื่อฝึกฝนมติมากขึ้นในระยะเวลาที่เหมาะสม
ด้านล่างนี้เป็นขั้นตอนบางอย่างซึ่งอาจเป็นประโยชน์สำหรับการปรับใช้โดยใช้ Amazon Web Services ในการใช้สิ่งนี้คุณจะต้องจัดทำอินสแตนซ์ EC2 ที่ได้รับการสนับสนุนจาก GPU ประเภทอินสแตนซ์ที่เหมาะสมจะมาจากซีรี่ส์ P2 หรือ P3 ฉัน (iboates) ลอง p2.xlarge (ตัวเลือกที่ถูกที่สุด) และมันค่อนข้างช้าช้ากว่าในความเป็นจริงมากกว่าการใช้ Google Colab ประเภทอินสแตนซ์ที่ทรงพลังกว่าอาจจะดีกว่า แต่มีราคาแพงกว่า คุณสามารถอ่านเพิ่มเติมเกี่ยวกับพวกเขาได้ที่นี่
sudo snap install aws-cli --classic
aws configureจากนั้นคุณจะต้องป้อนปุ่ม AWS Access ของคุณซึ่งคุณสามารถดึงข้อมูลจากคอนโซลการจัดการภายใต้คอนโซลการจัดการ AWS> โปรไฟล์> ข้อมูลรับรองความปลอดภัยของฉัน> คีย์การเข้าถึง
จากนั้นเรียกใช้คำสั่งเหล่านี้หรืออาจใส่ไว้ในสคริปต์เชลล์และดำเนินการนั้น:
mkdir data
curl -O https://bootstrap.pypa.io/get-pip.py
sudo apt-get install python3-distutils
python3 get-pip.py
pip3 install stylegan2_pytorch
export PATH= $PATH :/home/ubuntu/.local/bin
aws s3 sync s3:// < Your bucket name > ~ /data
cd data
tar -xf ../train.tar.gz ตอนนี้คุณควรจะสามารถฝึกได้โดยเพียงแค่เรียก stylegan2_pytorch [args]
หมายเหตุ:
screen ดังนั้นจะไม่สิ้นสุดเมื่อคุณออกจากระบบเซสชัน SSH ขอบคุณ GetSeclectic ตอนนี้คุณสามารถคำนวณคะแนน FID เป็นระยะ! อีกครั้งสร้างความเรียบง่ายด้วยอาร์กิวเมนต์พิเศษหนึ่งข้อดังที่แสดงไว้ด้านล่าง
ประการแรกติดตั้งแพ็คเกจ pytorch_fid
$ pip install pytorch-fidตามด้วย
$ stylegan2_pytorch --data ./data --calculate-fid-every 5000 ผลลัพธ์ FID จะถูกบันทึกไปที่ ./results/{name}/fid_scores.txt
หากคุณต้องการตัวอย่างภาพโดยทางโปรแกรมคุณสามารถทำได้ด้วยคลาส ModelLoader อย่างง่ายต่อไปนี้
import torch
from torchvision . utils import save_image
from stylegan2_pytorch import ModelLoader
loader = ModelLoader (
base_dir = '/path/to/directory' , # path to where you invoked the command line tool
name = 'default' # the project name, defaults to 'default'
)
noise = torch . randn ( 1 , 512 ). cuda () # noise
styles = loader . noise_to_styles ( noise , trunc_psi = 0.7 ) # pass through mapping network
images = loader . styles_to_images ( styles ) # call the generator on intermediate style vectors
save_image ( images , './sample.jpg' ) # save your images, or do whatever you desireในการบันทึกการสูญเสียไปยังตัวติดตามการทดลองโอเพนซอร์ส (AIM) คุณเพียงแค่ต้องผ่านธงพิเศษเช่นนั้น
$ stylegan2_pytorch --data ./data --logจากนั้นคุณต้องตรวจสอบให้แน่ใจว่าคุณติดตั้ง Docker แล้ว ตามคำแนะนำที่ AIM คุณจะดำเนินการต่อไปนี้ในเทอร์มินัลของคุณ
$ aim upจากนั้นเปิดเบราว์เซอร์ของคุณไปยังที่อยู่และคุณควรเห็น

บทความใหม่ได้สร้างหลักฐานว่าเพียงแค่ไม่ได้มีส่วนร่วมในการไล่ระดับสีจากตัวอย่างที่ถือว่าเป็นของปลอมโดยผู้จำแนกผู้ผลิตจะเรียนรู้ได้ดีขึ้นอย่างมีนัยสำคัญบรรลุสถานะใหม่ของศิลปะ
$ stylegan2_pytorch - - data . / data - - top - k - trainingแกมม่าเป็นตารางการสลายตัวที่ค่อยๆลด TOPK จากขนาดเต็มไปจนถึงส่วนเป้าหมาย 50%
$ stylegan2_pytorch - - data . / data - - top - k - training - - generate - top - k - frac 0.5 - - generate - top - k - gamma 0.99 รายงานล่าสุดรายงานผลลัพธ์ที่ดีขึ้นหากการเป็นตัวแทนระดับกลางของ discriminator เป็นปริมาณเวกเตอร์ แม้ว่าฉันจะไม่ได้สังเกตเห็นการเปลี่ยนแปลงที่น่าทึ่ง แต่ฉันได้ตัดสินใจที่จะเพิ่มสิ่งนี้เป็นคุณสมบัติดังนั้นจิตใจอื่น ๆ ที่มีอยู่สามารถตรวจสอบได้ ในการใช้งานคุณต้องระบุเลเยอร์ใดที่คุณต้องการให้เวกเตอร์ quantize ขนาดพจนานุกรมเริ่มต้นคือ 256 และสามารถปรับได้
# feature quantize layers 1 and 2, with a dictionary size of 512 each
# do not put a space after the comma in the list!
$ stylegan2_pytorch - - data . / data - - fq - layers [ 1 , 2 ] - - fq - dict - size 512ฉันได้ลองเรียนรู้ที่แตกต่างเกี่ยวกับ discriminator (ในขั้นตอนกับการฝึกอบรม GAN ตามปกติ) และอาจสังเกตเห็นความมั่นคงและคุณภาพของผลลัพธ์ขั้นสุดท้ายที่ดีขึ้น คุณสามารถเปิดคุณสมบัติการทดลองนี้ด้วยธงง่าย ๆ ดังที่แสดงด้านล่าง
$ stylegan2_pytorch - - data . / data - - cl - regสิ่งนี้ได้รับการเสนอในกระดาษกานที่สัมพันธ์กันเพื่อฝึกฝนให้มีเสถียรภาพ ฉันมีผลลัพธ์ที่หลากหลาย แต่จะรวมถึงคุณสมบัติสำหรับผู้ที่ต้องการทดลองใช้
$ stylegan2_pytorch - - data . / data - - rel - disc - loss โดยค่าเริ่มต้นสไตล์ Stylegan Architecture เป็นบล็อก 4x4 ที่เรียนรู้ค่าคงที่เนื่องจากมีการเพิ่มขึ้นอย่างต่อเนื่อง นี่คือคุณสมบัติการทดลองที่ทำให้มันดังนั้นบล็อก 4x4 ได้เรียนรู้จากเวกเตอร์สไตล์ w แทน
$ stylegan2_pytorch - - data . / data - - no - constบทความล่าสุดได้เสนอว่าการสูญเสียความแตกต่างที่แปลกใหม่ระหว่าง logits จริงและของปลอมสามารถปรับปรุงคุณภาพมากกว่าการสูญเสียประเภทอื่น ๆ (ค่าเริ่มต้นในที่เก็บนี้คือการสูญเสียบานพับและกระดาษแสดงการปรับปรุงเล็กน้อย)
$ stylegan2_pytorch - - data . / data - - dual - contrast - loss Stylegan2 + Unet Discriminator
ฉันได้ผลลัพธ์ที่ดีมากด้วยตัวเลือกที่ไม่ได้รับการคัดเลือก แต่การเปลี่ยนแปลงทางสถาปัตยกรรมนั้นใหญ่เกินไปที่จะพอดีเป็นตัวเลือกในที่เก็บนี้ หากคุณตั้งเป้าหมายเพื่อความสมบูรณ์แบบอย่าลังเลที่จะลอง
หากคุณต้องการให้ฉันได้รับการปฏิบัติต่อสถาปัตยกรรม Gan อื่น ๆ (Biggan) อย่าลังเลที่จะติดต่ออีเมลของฉัน มีความสุขที่ได้ยินระดับเสียงของคุณ
ขอบคุณ Matthew Mann สำหรับพอร์ตง่ายๆที่สร้างแรงบันดาลใจสำหรับ TensorFlow 2.0
@article { Karras2019stylegan2 ,
title = { Analyzing and Improving the Image Quality of {StyleGAN} } ,
author = { Tero Karras and Samuli Laine and Miika Aittala and Janne Hellsten and Jaakko Lehtinen and Timo Aila } ,
journal = { CoRR } ,
volume = { abs/1912.04958 } ,
year = { 2019 } ,
} @misc { zhao2020feature ,
title = { Feature Quantization Improves GAN Training } ,
author = { Yang Zhao and Chunyuan Li and Ping Yu and Jianfeng Gao and Changyou Chen } ,
year = { 2020 }
} @misc { chen2020simple ,
title = { A Simple Framework for Contrastive Learning of Visual Representations } ,
author = { Ting Chen and Simon Kornblith and Mohammad Norouzi and Geoffrey Hinton } ,
year = { 2020 }
} @article {,
title = { Oxford 102 Flowers } ,
author = { Nilsback, M-E. and Zisserman, A., 2008 } ,
abstract = { A 102 category dataset consisting of 102 flower categories, commonly occuring in the United Kingdom. Each class consists of 40 to 258 images. The images have large scale, pose and light variations. }
} @article { afifi201911k ,
title = { 11K Hands: gender recognition and biometric identification using a large dataset of hand images } ,
author = { Afifi, Mahmoud } ,
journal = { Multimedia Tools and Applications }
} @misc { zhang2018selfattention ,
title = { Self-Attention Generative Adversarial Networks } ,
author = { Han Zhang and Ian Goodfellow and Dimitris Metaxas and Augustus Odena } ,
year = { 2018 } ,
eprint = { 1805.08318 } ,
archivePrefix = { arXiv }
} @article { shen2019efficient ,
author = { Zhuoran Shen and
Mingyuan Zhang and
Haiyu Zhao and
Shuai Yi and
Hongsheng Li } ,
title = { Efficient Attention: Attention with Linear Complexities } ,
journal = { CoRR } ,
year = { 2018 } ,
url = { http://arxiv.org/abs/1812.01243 } ,
} @article { zhao2020diffaugment ,
title = { Differentiable Augmentation for Data-Efficient GAN Training } ,
author = { Zhao, Shengyu and Liu, Zhijian and Lin, Ji and Zhu, Jun-Yan and Han, Song } ,
journal = { arXiv preprint arXiv:2006.10738 } ,
year = { 2020 }
} @misc { zhao2020image ,
title = { Image Augmentations for GAN Training } ,
author = { Zhengli Zhao and Zizhao Zhang and Ting Chen and Sameer Singh and Han Zhang } ,
year = { 2020 } ,
eprint = { 2006.02595 } ,
archivePrefix = { arXiv }
} @misc { karras2020training ,
title = { Training Generative Adversarial Networks with Limited Data } ,
author = { Tero Karras and Miika Aittala and Janne Hellsten and Samuli Laine and Jaakko Lehtinen and Timo Aila } ,
year = { 2020 } ,
eprint = { 2006.06676 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV }
} @misc { jolicoeurmartineau2018relativistic ,
title = { The relativistic discriminator: a key element missing from standard GAN } ,
author = { Alexia Jolicoeur-Martineau } ,
year = { 2018 } ,
eprint = { 1807.00734 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.LG }
} @misc { sinha2020topk ,
title = { Top-k Training of GANs: Improving GAN Performance by Throwing Away Bad Samples } ,
author = { Samarth Sinha and Zhengli Zhao and Anirudh Goyal and Colin Raffel and Augustus Odena } ,
year = { 2020 } ,
eprint = { 2002.06224 } ,
archivePrefix = { arXiv } ,
primaryClass = { stat.ML }
} @misc { yu2021dual ,
title = { Dual Contrastive Loss and Attention for GANs } ,
author = { Ning Yu and Guilin Liu and Aysegul Dundar and Andrew Tao and Bryan Catanzaro and Larry Davis and Mario Fritz } ,
year = { 2021 } ,
eprint = { 2103.16748 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV }
}