الصورة: هؤلاء الأشخاص ليسوا حقيقيين، لقد تم إنتاجهم بواسطة المولد الخاص بنا والذي يسمح بالتحكم في جوانب مختلفة من الصورة.
يحتوي هذا المستودع على تطبيق TensorFlow الرسمي للورقة التالية:
بنية المولدات القائمة على الأسلوب لشبكات الخصومة التوليدية
تيرو كاراس (NVIDIA)، سامولي لين (NVIDIA)، تيمو أيلا (NVIDIA)
https://arxiv.org/abs/1812.04948الملخص: نقترح بنية مولدة بديلة لشبكات الخصومة التوليدية، مستوحاة من أدبيات نقل الأسلوب. تؤدي البنية الجديدة إلى فصل يتم تعلمه تلقائيًا وغير خاضع للرقابة للسمات عالية المستوى (على سبيل المثال، الوضعية والهوية عند التدريب على الوجوه البشرية) والتباين العشوائي في الصور التي تم إنشاؤها (على سبيل المثال، النمش والشعر)، كما أنها تمكن من تحديد حجم بديهي وقياسي. مراقبة محددة للتوليف. يعمل المولد الجديد على تحسين أحدث ما توصلت إليه مقاييس جودة التوزيع التقليدية، ويؤدي إلى خصائص استيفاء أفضل بشكل واضح، وكذلك يفكك عوامل الاختلاف الكامنة بشكل أفضل. لقياس جودة الاستيفاء وفك التشابك، نقترح طريقتين آليتين جديدتين تنطبقان على أي بنية للمولد. أخيرًا، نقدم مجموعة بيانات جديدة ومتنوعة للغاية وعالية الجودة للوجوه البشرية.
للاستفسارات التجارية، يرجى زيارة موقعنا على الإنترنت وإرسال النموذج: NVIDIA Research Licensing
★★★ جديد: StyleGAN2-ADA-PyTorch متاح الآن؛ انظر القائمة الكاملة للإصدارات هنا ★★★
المواد المتعلقة بورقتنا متاحة عبر الروابط التالية:
الورقة: https://arxiv.org/abs/1812.04948
الفيديو: https://youtu.be/kSLJriaOumA
الكود: https://github.com/NVlabs/stylegan
FFHQ: https://github.com/NVlabs/ffhq-dataset
يمكن العثور على مواد إضافية على Google Drive:
طريق | وصف |
---|---|
StyleGAN | المجلد الرئيسي. |
├ stylegan-paper.pdf | نسخة ورقية بصيغة PDF عالية الجودة. |
├ stylegan-video.mp4 | نسخة عالية الجودة من الفيديو الناتج. |
├ الصور | أمثلة على الصور التي تم إنتاجها باستخدام المولد الخاص بنا. |
│ ├ صور تمثيلية | صور عالية الجودة لاستخدامها في المقالات ومنشورات المدونات وما إلى ذلك. |
│ └ 100 ألف صورة تم إنشاؤها | تم إنشاء 100000 صورة لكميات مختلفة من الاقتطاع. |
│ ├ ffhq-1024x1024 | تم إنشاؤها باستخدام مجموعة بيانات Flickr-Faces-HQ بدقة 1024×1024. |
│ ├ غرف النوم-256x256 | تم إنشاؤها باستخدام مجموعة بيانات LSUN Bedroom بحجم 256×256. |
│ ├ سيارات-512x384 | تم إنشاؤها باستخدام مجموعة بيانات LSUN Car بحجم 512×384. |
│ └ القطط-256x256 | تم إنشاؤها باستخدام مجموعة بيانات LSUN Cat بحجم 256×256. |
├ مقاطع فيديو | أمثلة على مقاطع الفيديو التي تم إنتاجها باستخدام المولد الخاص بنا. |
│ └ مقاطع فيديو عالية الجودة | المقاطع الفردية للفيديو الناتج بصيغة MP4 عالية الجودة. |
├ مجموعة بيانات ffhq | البيانات الأولية لمجموعة بيانات Flickr-Faces-HQ. |
└ الشبكات | الشبكات المدربة مسبقًا كمثيلات مخللة لـ dnnlib.tflib.Network. |
├ stylegan-ffhq-1024x1024.pkl | تم تدريب StyleGAN باستخدام مجموعة بيانات Flickr-Faces-HQ بدقة 1024×1024. |
├ stylegan-celebahq-1024x1024.pkl | تم تدريب StyleGAN باستخدام مجموعة بيانات CelebA-HQ بدقة 1024×1024. |
├ غرف نوم ستايل غان-256x256.pkl | تم تدريب StyleGAN باستخدام مجموعة بيانات LSUN Bedroom بحجم 256 × 256. |
├ stylegan-cars-512x384.pkl | تم تدريب StyleGAN باستخدام مجموعة بيانات LSUN Car بحجم 512 × 384. |
├ stylegan-cats-256x256.pkl | تم تدريب StyleGAN باستخدام مجموعة بيانات LSUN Cat بحجم 256 × 256. |
└ المقاييس | الشبكات المساعدة لمقاييس الجودة والتفكيك. |
├ inception_v3_features.pkl | مُصنف Inception-v3 القياسي الذي يقوم بإخراج ناقل الميزات الخام. |
├ vgg16_zhang_perceptual.pkl | مقياس LPIPS القياسي لتقدير التشابه الإدراكي. |
├ celebahq-classifier-00-male.pkl | تم تدريب المصنف الثنائي لاكتشاف سمة واحدة لـ CelebA-HQ. |
└ ⋯ | يرجى الاطلاع على قائمة الملفات للشبكات المتبقية. |
جميع المواد، باستثناء مجموعة بيانات Flickr-Faces-HQ، متاحة بموجب ترخيص Creative Commons BY-NC 4.0 من قبل شركة NVIDIA. يمكنك استخدام المواد وإعادة توزيعها وتكييفها لأغراض غير تجارية ، طالما أنك تمنح الاعتماد المناسب من خلال الاستشهاد ببحثنا والإشارة إلى أي تغييرات أجريتها.
للحصول على معلومات الترخيص المتعلقة بمجموعة بيانات FFHQ، يرجى الرجوع إلى مستودع Flickr-Faces-HQ.
inception_v3_features.pkl
و inception_v3_softmax.pkl
مشتقان من شبكة Inception-v3 المدربة مسبقًا بواسطة Christian Szegedy وVincent Vanhoucke وSergey Ioffe وJonathon Shlens وZbigniew Wojna. تمت مشاركة الشبكة في الأصل بموجب ترخيص Apache 2.0 في مستودع TensorFlow Models.
vgg16.pkl
و vgg16_zhang_perceptual.pkl
مشتقان من شبكة VGG-16 المدربة مسبقًا بواسطة كارين سيمونيان وأندرو زيسرمان. تمت مشاركة الشبكة في الأصل بموجب ترخيص Creative Commons BY 4.0 على صفحة مشروع الشبكات التلافيفية العميقة جدًا للتعرف البصري على نطاق واسع.
vgg16_zhang_perceptual.pkl
مشتق أيضًا من أوزان LPIPS المدربة مسبقًا بواسطة ريتشارد تشانغ، وفيليب إيزولا، وأليكسي أ. إفروس، وإيلي شيختمان، وأوليفر وانغ. تمت مشاركة الأوزان في الأصل بموجب ترخيص BSD 2-Clause "المبسط" في مستودع PerceptualSimilarity.
يتم دعم كل من Linux وWindows، لكننا نوصي بشدة باستخدام Linux لأسباب تتعلق بالأداء والتوافق.
تثبيت بايثون 3.6 64 بت. نوصي باستخدام Anaconda3 مع numpy 1.14.3 أو أحدث.
TensorFlow 1.10.0 أو الأحدث مع دعم GPU.
واحدة أو أكثر من وحدات معالجة الرسومات NVIDIA المتطورة مع ما لا يقل عن 11 جيجابايت من ذاكرة الوصول العشوائي الديناميكية (DRAM). نوصي باستخدام NVIDIA DGX-1 مع 8 وحدات معالجة رسومات Tesla V100.
برنامج تشغيل NVIDIA 391.35 أو أحدث، مجموعة أدوات CUDA 9.0 أو أحدث، cuDNN 7.3.1 أو أحدث.
يوجد مثال بسيط لاستخدام مولد StyleGAN المُدرب مسبقًا في pretrained_example.py. عند التنفيذ، يقوم البرنامج النصي بتنزيل مولد StyleGAN مُدرب مسبقًا من Google Drive ويستخدمه لإنشاء صورة:
> python pretrained_example.py Downloading https://drive.google.com/uc?id=1MEGjdvVpUsu1jB4zrXZN7Y4kBBOzizDQ .... done Gs Params OutputShape WeightShape --- --- --- --- latents_in - (?, 512) - ... images_out - (?, 3, 1024, 1024) - --- --- --- --- Total 26219627 > ls results example.png # https://drive.google.com/uc?id=1UDLT_zb-rof9kKH0GwiJW_bS9MoZi8oP
يوجد مثال أكثر تقدمًا في generator_figures.py. يقوم النص بإعادة إنتاج الأشكال من ورقتنا لتوضيح خلط الأنماط ومدخلات الضوضاء والاقتطاع:
> python generate_figures.py results/figure02-uncurated-ffhq.png # https://drive.google.com/uc?id=1U3r1xgcD7o-Fd0SBRpq8PXYajm7_30cu results/figure03-style-mixing.png # https://drive.google.com/uc?id=1U-nlMDtpnf1RcYkaFQtbh5oxnhA97hy6 results/figure04-noise-detail.png # https://drive.google.com/uc?id=1UX3m39u_DTU6eLnEW6MqGzbwPFt2R9cG results/figure05-noise-components.png # https://drive.google.com/uc?id=1UQKPcvYVeWMRccGMbs2pPD9PVv1QDyp_ results/figure08-truncation-trick.png # https://drive.google.com/uc?id=1ULea0C12zGlxdDQFNLXOWZCHi3QNfk_v results/figure10-uncurated-bedrooms.png # https://drive.google.com/uc?id=1UEBnms1XMfj78OHj3_cx80mUf_m9DUJr results/figure11-uncurated-cars.png # https://drive.google.com/uc?id=1UO-4JtAs64Kun5vIj10UXqAJ1d5Ir1Ke results/figure12-uncurated-cats.png # https://drive.google.com/uc?id=1USnJc14prlu3QAYxstrtlfXC9sDWPA-W
يتم تخزين الشبكات المدربة مسبقًا كملفات اختيار قياسية على Google Drive:
# Load pre-trained network. url = 'https://drive.google.com/uc?id=1MEGjdvVpUsu1jB4zrXZN7Y4kBBOzizDQ' # karras2019stylegan-ffhq-1024x1024.pkl with dnnlib.util.open_url(url, cache_dir=config.cache_dir) 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.
يقوم التعليمة البرمجية أعلاه بتنزيل الملف وإلغاء تحديده لإنتاج 3 مثيلات لـ dnnlib.tflib.Network. لإنشاء الصور، ستحتاج عادةً إلى استخدام Gs
- يتم توفير الشبكتين الأخريين للاكتمال. لكي يعمل pickle.load()
، ستحتاج إلى وجود دليل مصدر dnnlib
في PYTHONPATH وتعيين tf.Session
كإعداد افتراضي. يمكن تهيئة الجلسة عن طريق استدعاء dnnlib.tflib.init_tf()
.
هناك ثلاث طرق لاستخدام المولد المدرب مسبقًا:
استخدم Gs.run()
لتشغيل الوضع الفوري حيث تكون المدخلات والمخرجات عبارة عن صفائف numpy:
# Pick latent vector. rnd = np.random.RandomState(5) 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)
الوسيطة الأولى عبارة عن مجموعة من المتجهات الكامنة للشكل [num, 512]
. الوسيطة الثانية محجوزة لتسميات الفئات (لا تستخدمها StyleGAN). تعتبر وسيطات الكلمات الرئيسية المتبقية اختيارية ويمكن استخدامها لتعديل العملية بشكل أكبر (انظر أدناه). الإخراج عبارة عن مجموعة من الصور، يتم تحديد تنسيقها بواسطة وسيطة output_transform
.
استخدم Gs.get_output_for()
لدمج المولد كجزء من تعبير TensorFlow أكبر:
latents = tf.random_normal([self.minibatch_per_gpu] + Gs_clone.input_shape[1:]) images = Gs_clone.get_output_for(latents, None, is_validation=True, randomize_noise=True) images = tflib.convert_images_to_uint8(images) result_expr.append(inception_clone.get_output_for(images))
الكود أعلاه مأخوذ من metrics/frechet_inception_distance.py. يقوم بإنشاء مجموعة من الصور العشوائية ويغذيها مباشرة إلى شبكة Inception-v3 دون الحاجة إلى تحويل البيانات إلى صفائف numpy بينهما.
ابحث عن Gs.components.mapping
و Gs.components.synthesis
للوصول إلى الشبكات الفرعية الفردية للمولد. كما هو الحال مع Gs
، يتم تمثيل الشبكات الفرعية كمثيلات مستقلة لـ dnnlib.tflib.Network:
src_latents = np.stack(np.random.RandomState(seed).randn(Gs.input_shape[1]) for seed in src_seeds) src_dlatents = Gs.components.mapping.run(src_latents, None) # [seed, layer, component] src_images = Gs.components.synthesis.run(src_dlatents, randomize_noise=False, **synthesis_kwargs)
الكود أعلاه مأخوذ من generator_figures.py. يقوم أولاً بتحويل مجموعة من المتجهات الكامنة إلى مساحة W المتوسطة باستخدام شبكة التعيين ثم يحول هذه المتجهات إلى مجموعة من الصور باستخدام شبكة التوليف. تقوم مجموعة dlatents
بتخزين نسخة منفصلة من نفس المتجه لكل طبقة من شبكة التوليف لتسهيل خلط الأنماط.
يتم تعريف التفاصيل الدقيقة للمولد في التدريب/networks_stylegan.py (راجع G_style
و G_mapping
و G_synthesis
). يمكن تحديد وسيطات الكلمات الرئيسية التالية لتعديل السلوك عند استدعاء run()
و get_output_for()
:
يتحكم truncation_psi
و truncation_cutoff
في خدعة الاقتطاع التي يتم تنفيذها افتراضيًا عند استخدام Gs
(ψ=0.7، القطع=8). يمكن تعطيله عن طريق تعيين truncation_psi=1
أو is_validation=True
، ويمكن تحسين جودة الصورة بشكل أكبر على حساب الاختلاف عن طريق الإعداد، على سبيل المثال truncation_psi=0.5
. لاحظ أن الاقتطاع يتم تعطيله دائمًا عند استخدام الشبكات الفرعية مباشرةً. يمكن البحث عن متوسط w اللازم لتنفيذ خدعة الاقتطاع يدويًا باستخدام Gs.get_var('dlatent_avg')
.
يحدد randomize_noise
ما إذا كان سيتم استخدام إعادة عشوائية مدخلات الضوضاء لكل صورة تم إنشاؤها ( True
، افتراضي) أو ما إذا كان سيتم استخدام قيم ضوضاء محددة للمجموعة الصغيرة بأكملها ( False
). يمكن الوصول إلى القيم المحددة عبر نسخ tf.Variable
التي تم العثور عليها باستخدام [var for name, var in Gs.components.synthesis.vars.items() if name.startswith('noise')]
.
عند استخدام شبكة التعيين مباشرة، يمكنك تحديد dlatent_broadcast=None
لتعطيل التكرار التلقائي لـ dlatents
عبر طبقات شبكة التوليف.
يمكن ضبط أداء وقت التشغيل بدقة عبر structure='fixed'
و dtype='float16'
. الأول يعطل دعم النمو التدريجي، وهو أمر غير ضروري لمولد مدرب بالكامل، والأخير ينفذ جميع العمليات الحسابية باستخدام حساب الفاصلة العائمة بنصف الدقة.
تعمل البرامج النصية للتدريب والتقييم على مجموعات البيانات المخزنة على شكل سجلات TFRecords متعددة الدقة. يتم تمثيل كل مجموعة بيانات بدليل يحتوي على نفس بيانات الصورة بعدة دقة لتمكين التدفق الفعال. يوجد ملف *.tfrecords منفصل لكل دقة، وإذا كانت مجموعة البيانات تحتوي على تسميات، فسيتم تخزينها في ملف منفصل أيضًا. افتراضيًا، تتوقع البرامج النصية العثور على مجموعات البيانات في datasets/<NAME>/<NAME>-<RESOLUTION>.tfrecords
. يمكن تغيير الدليل عن طريق تحرير config.py:
result_dir = 'results' data_dir = 'datasets' cache_dir = 'cache'
للحصول على مجموعة بيانات FFHQ ( datasets/ffhq
)، يرجى الرجوع إلى مستودع Flickr-Faces-HQ.
للحصول على مجموعة بيانات CelebA-HQ ( datasets/celebahq
)، يرجى الرجوع إلى مستودع GAN التقدمي.
للحصول على مجموعات البيانات الأخرى، بما في ذلك LSUN، يرجى الرجوع إلى صفحات المشروع المقابلة لها. يمكن تحويل مجموعات البيانات إلى TFRecords متعددة الدقة باستخدام dataset_tool.py المتوفرة:
> python dataset_tool.py create_lsun datasets/lsun-bedroom-full ~/lsun/bedroom_lmdb --resolution 256 > python dataset_tool.py create_lsun_wide datasets/lsun-car-512x384 ~/lsun/car_lmdb --width 512 --height 384 > python dataset_tool.py create_lsun datasets/lsun-cat-full ~/lsun/cat_lmdb --resolution 256 > python dataset_tool.py create_cifar10 datasets/cifar10 ~/cifar10 > python dataset_tool.py create_from_images datasets/custom-dataset ~/custom-images
بمجرد إعداد مجموعات البيانات، يمكنك تدريب شبكات StyleGAN الخاصة بك على النحو التالي:
قم بتحرير Train.py لتحديد مجموعة البيانات وتكوين التدريب عن طريق إلغاء التعليق أو تحرير أسطر معينة.
قم بتشغيل البرنامج النصي للتدريب باستخدام python train.py
.
تتم كتابة النتائج إلى الدليل الذي تم إنشاؤه حديثًا results/<ID>-<DESCRIPTION>
.
قد يستغرق التدريب عدة أيام (أو أسابيع) حتى يكتمل، اعتمادًا على التكوين.
افتراضيًا، يتم تكوين train.py
لتدريب StyleGAN عالي الجودة (التكوين F في الجدول 1) لمجموعة بيانات FFHQ بدقة 1024×1024 باستخدام 8 وحدات معالجة رسوميات. يرجى ملاحظة أننا استخدمنا 8 وحدات معالجة رسوميات في جميع تجاربنا. قد لا يؤدي التدريب باستخدام عدد أقل من وحدات معالجة الرسومات إلى نتائج متطابقة - إذا كنت ترغب في المقارنة مع تقنيتنا، فإننا نوصي بشدة باستخدام نفس العدد من وحدات معالجة الرسومات.
أوقات التدريب المتوقعة للتكوين الافتراضي باستخدام وحدات معالجة الرسوميات Tesla V100:
وحدات معالجة الرسومات | 1024×1024 | 512×512 | 256×256 |
---|---|---|---|
1 | 41 يوم 4 ساعات | 24 يوما 21 ساعة | 14 يوم 22 ساعة |
2 | 21 يوم 22 ساعة | 13 يوم 7 ساعات | 9 أيام 5 ساعات |
4 | 11 يوم 8 ساعات | 7 أيام 0 ساعات | 4 أيام 21 ساعة |
8 | 6 أيام 14 ساعة | 4 أيام 10 ساعات | 3 أيام 8 ساعات |
يمكن تقييم مقاييس الجودة وفك التشابك المستخدمة في ورقتنا باستخدام run_metrics.py. افتراضيًا، سيقوم البرنامج النصي بتقييم مسافة بداية Fréchet ( fid50k
) لمولد FFHQ المُدرب مسبقًا ويكتب النتائج في دليل تم إنشاؤه حديثًا ضمن results
. يمكن تغيير السلوك الدقيق عن طريق إلغاء التعليق أو تحرير أسطر معينة في run_metrics.py.
وقت التقييم المتوقع ونتائج مولد FFHQ المدرب مسبقًا باستخدام وحدة معالجة الرسوميات Tesla V100:
متري | وقت | نتيجة | وصف |
---|---|---|---|
com.fid50k | 16 دقيقة | 4.4159 | مسافة بداية فريشيه باستخدام 50000 صورة. |
ppl_zfull | 55 دقيقة | 664.8854 | طول المسار الإدراكي للمسارات الكاملة في Z . |
ppl_wfull | 55 دقيقة | 233.3059 | طول المسار الإدراكي للمسارات الكاملة في W . |
ppl_zend | 55 دقيقة | 666.1057 | طول المسار الإدراكي لنقاط نهاية المسار في Z . |
ppl_wend | 55 دقيقة | 197.2266 | طول المسار الإدراكي لنقاط نهاية المسار في W . |
ليرة سورية | 10 ساعات | ض: 165.0106 ث: 3.7447 | الانفصال الخطي في Z و W. |
يرجى ملاحظة أن النتائج الدقيقة قد تختلف من تشغيل لآخر بسبب الطبيعة غير الحتمية لـ TensorFlow.
نشكر جاكو ليهتينن، وديفيد لوبكي، وتوماس كينكانيمي على المناقشات المتعمقة والتعليقات المفيدة؛ Janne Hellsten وTero Kuosmanen وPekka Jänis للبنية التحتية للحوسبة والمساعدة في إصدار التعليمات البرمجية.