تنفيذ 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إذا كان لديك جهاز واحد مع وحدات معالجة الرسومات المتعددة ، فإن المستودع يوفر وسيلة لاستخدامها جميعًا للتدريب. مع وحدات معالجة الرسومات المتعددة ، سيتم تقسيم كل دفعة بالتساوي بين وحدات معالجة الرسومات المتاحة. على سبيل المثال ، بالنسبة ل 2 وحدات معالجة الرسومات ، مع حجم دفعة 32 ، سيرى كل وحدة معالجة الرسومات 16 عينة.
عليك ببساطة إضافة علامة- --multi-gpus ، كل شيء آخر يتم الاعتناء به. إذا كنت ترغب في تقييد وحدات معالجة الرسومات المحددة ، فيمكنك استخدام متغير بيئة 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 إلى الكثير من البيانات لتعلم كيفية توليدها بشكل جيد. التقط نموذج الوجوه 70 ألف صورة عالية الجودة من Flickr ، كمثال.
ومع ذلك ، في شهر مايو 2020 ، تقارب الباحثون في جميع أنحاء العالم بشكل مستقل على تقنية بسيطة لتقليل هذا الرقم إلى 1-2 كيلو بايت . كانت هذه الفكرة البسيطة هي زيادة جميع الصور ، التي تم إنشاؤها أو حقيقية ، ودخول التمييز أثناء التدريب.
إذا كان هناك ما يزيد من احتمال منخفض بما فيه الكفاية ، فلن "تسرب" التعزيزات إلى الأجيال.
في إعداد البيانات المنخفضة ، يمكنك استخدام الميزة مع علامة بسيطة.
# 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 لصور 128 × 128 ، لكنك بالتأكيد تريد أن يكون هذا الرقم أعلى إذا لم يتباعد 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 بوجود ما يصل إلى 16 جيجابايت لتدريب الصور 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. جربت I (Iboates) p2.xlarge (الخيار الأرخص) وكان بطيئًا جدًا وأبطأ في الواقع من استخدام Google Colab. قد تكون أنواع الأمثلة الأكثر قوة أفضل لكنها أكثر تكلفة. يمكنك قراءة المزيد عنها هنا.
sudo snap install aws-cli --classic
aws configureسيتعين عليك بعد ذلك إدخال مفاتيح AWS Access ، والتي يمكنك استردادها من وحدة التحكم الإدارية ضمن وحدة التحكم في إدارة AWS> ملف التعريف> بيانات اعتماد الأمان الخاصة بي> مفاتيح الوصول
بعد ذلك ، قم بتشغيل هذه الأوامر ، أو ربما ضعها في نص Shell وتنفيذ ذلك:
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. بفضل getClectic ، يمكنك الآن حساب درجة 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 أبلغت ورقة حديثة أبلغت عن نتائج محسنة إذا كانت تمثيلات وسيطة للتمييز كميا. على الرغم من أنني لم ألاحظ أي تغييرات درامية ، فقد قررت إضافة هذا كميزة ، حتى تتمكن العقول الأخرى من التحقيق. للاستخدام ، يجب عليك تحديد الطبقات (الطبقات) التي ترغب في تحديدها. حجم القاموس الافتراضي هو 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لقد جربت التعلم المتناقض على التمييز (في خطوة مع تدريب GAN المعتاد) وربما لاحظت تحسين الاستقرار وجودة النتائج النهائية. يمكنك تشغيل هذه الميزة التجريبية مع علامة بسيطة كما هو موضح أدناه.
$ stylegan2_pytorch - - data . / data - - cl - regتم اقتراح هذا في ورقة GAN النسبية لتحقيق الاستقرار في التدريب. لقد حصلت على نتائج مختلطة ، لكنني سأشمل ميزة لأولئك الذين يرغبون في تجربتها.
$ stylegan2_pytorch - - data . / data - - rel - disc - loss بشكل افتراضي ، أنماط Stylegan Architecture Styles كتلة 4x4 مستمرة لأنها ترفع تدريجياً. هذه ميزة تجريبية تجعلها حتى يتم تعلم كتلة 4x4 من ناقل النمط w بدلاً من ذلك.
$ stylegan2_pytorch - - data . / data - - no - constاقترحت ورقة حديثة أن الخسارة المتناقضة الجديدة بين السجلات الحقيقية والمزيفة يمكن أن تحسن الجودة على أنواع أخرى من الخسائر. (الافتراضي في هذا المستودع هو فقدان المفصلات ، وتظهر الورقة تحسنًا طفيفًا)
$ stylegan2_pytorch - - data . / data - - dual - contrast - loss stylegan2 + unet التمييز
لقد حصلت على نتائج جيدة حقًا مع تمييز UNET ، لكن التغيير المعماري كان أكبر من أن يتناسب كخيار في هذا المستودع. إذا كنت تهدف إلى الكمال ، فلا تتردد في تجربته.
إذا كنت ترغب في تقديم العلاج الملكي لبعض الهندسة المعمارية الأخرى 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 }
}