تعويض Pytorch Op-for-op لنموذج Biggan DeepMind مع الأوزان التي تم تدريبها مسبقًا من DeepMind.
يحتوي هذا المستودع على إعادة تخطيط Pytorch Op-for-op لـ DeepMind's Biggan التي تم إصدارها مع تدريب GAN على نطاق واسع على نطاق واسع من أجل توليف الصور الطبيعية العالية من الإخلاص من تأليف أندرو بروك وجيف دوناهو وكارين سيمونيان.
يتم تزويد تطبيق Pytorch of Biggan هذا بنماذج 128 × 128 و 256 × 256 و 512 × 512 بواسطة DeepMind. نقدم أيضًا البرامج النصية المستخدمة لتنزيل هذه النماذج وتحويلها من نماذج TensorFlow Hub.
تم إجراء عملية إعادة التنفيذ هذه من الرسم البياني للحساب الخام لإصدار TensorFlow وتصرف بشكل مشابه لإصدار TensorFlow (تباين اختلاف الإخراج في ترتيب 1E-5).
لا يحتوي هذا التنفيذ حاليًا على المولد فقط حيث لم يتم إصدار أوزان التمييز (على الرغم من أن هيكل التمييز يشبه إلى حد كبير المولد بحيث يمكن إضافته بسهولة. أخبرني إذا كنت تريد القيام بالعلاقات العامة على ذلك ، سأكون سعيدًا بالمساعدة.)
تم اختبار هذا الريبو على Python 3.6 و Pytorch 1.0.1
يمكن تثبيت Pytorch PretRained Biggan من PIP على النحو التالي:
pip install pytorch-pretrained-bigganإذا كنت ترغب ببساطة في اللعب مع GAN ، فيجب أن يكون هذا كافيًا.
إذا كنت ترغب في استخدام البرامج النصية للتحويل ومرافق ImageNet ، فستكون هناك حاجة إلى متطلبات إضافية ، وخاصة TensorFlow و NLTK. لتثبيت جميع المتطلبات ، يرجى استخدام ملف full_requirements.txt :
git clone https://github.com/huggingface/pytorch-pretrained-BigGAN.git
cd pytorch-pretrained-BigGAN
pip install -r full_requirements.txtيوفر هذا المستودع وصولًا مباشرًا وبسيطًا إلى الإصدارات "العميقة" المسبقة من Biggan لقرارات 128 و 256 و 512 بكسل كما هو موضح في المنشور المرتبط. فيما يلي بعض التفاصيل حول النماذج:
BigGAN-deep-128 : نموذج معلمات 50.4m يولد صورًا 128 × 128 بكسل ، أوزان تفريغ النموذج 201 ميغابايت ،BigGAN-deep-256 : نموذج 55.9m المعلمات يولد صورًا 256x256 بكسل ، أوزان تفريغ النموذج 224 ميجابايت ،BigGAN-deep-512 : نموذج 56.2M المعلمات يولد صور 512x512 بكسل ، أوزان تفريغ النموذج 225 ميجابايت.يرجى الرجوع إلى الملحق ب من الورقة للحصول على تفاصيل حول البنية.
تشتمل جميع النماذج على إحصائيات قيم الدُفعات المحسوبة مسبقًا لـ 51 قيم اقتطاع بين 0 و 1 (انظر الملحق C.1 في الورقة للحصول على التفاصيل).
فيما يلي مثال سريع البدء باستخدام BigGAN مع نموذج تم تدريبه مسبقًا.
راجع قسم DOC أدناه للحصول على تفاصيل حول هذه الفئات والأساليب.
import torch
from pytorch_pretrained_biggan import ( BigGAN , one_hot_from_names , truncated_noise_sample ,
save_as_images , display_in_terminal )
# OPTIONAL: if you want to have more information on what's happening, activate the logger as follows
import logging
logging . basicConfig ( level = logging . INFO )
# Load pre-trained model tokenizer (vocabulary)
model = BigGAN . from_pretrained ( 'biggan-deep-256' )
# Prepare a input
truncation = 0.4
class_vector = one_hot_from_names ([ 'soap bubble' , 'coffee' , 'mushroom' ], batch_size = 3 )
noise_vector = truncated_noise_sample ( truncation = truncation , batch_size = 3 )
# All in tensors
noise_vector = torch . from_numpy ( noise_vector )
class_vector = torch . from_numpy ( class_vector )
# If you have a GPU, put everything on cuda
noise_vector = noise_vector . to ( 'cuda' )
class_vector = class_vector . to ( 'cuda' )
model . to ( 'cuda' )
# Generate an image
with torch . no_grad ():
output = model ( noise_vector , class_vector , truncation )
# If you have a GPU put back on CPU
output = output . to ( 'cpu' )
# If you have a sixtel compatible terminal you can display the images in the terminal
# (see https://github.com/saitoha/libsixel for details)
display_in_terminal ( output )
# Save results as png images
save_as_images ( output )


لتحميل واحدة من نماذج DeepMind التي تم تدريبها مسبقًا ، قم بتثبيت نموذج BigGAN مع from_pretrained() على النحو التالي:
model = BigGAN . from_pretrained ( PRE_TRAINED_MODEL_NAME_OR_PATH , cache_dir = None )أين
PRE_TRAINED_MODEL_NAME_OR_PATH إما:
اسم اختصار طراز Google AI أو Openai قبل التدريب المحدد في القائمة:
biggan-deep-128 : 12 طبقة ، 768-Hidden ، 12 رأس ، 110 متر معلماتbiggan-deep-256 : 24 طبقة ، 1024-Hidden ، 16 رأسًا ، 340 مترًا معلماتbiggan-deep-512 : 12 layer ، 768-Hidden ، 12 Heads ، 110 M Parametersمسار أو عنوان URL إلى أرشيف النموذج المسبق يحتوي على:
config.json : ملف تكوين للنموذج ، وpytorch_model.bin مكب pytorch من مثيل تدريب مسبقا من BigGAN (يتم حفظه مع torch.save() المعتاد). إذا كان PRE_TRAINED_MODEL_NAME_OR_PATH اسم اختصار ، فسيتم تنزيل الأوزان المدربة مسبقًا من AWS S3 (انظر الروابط هنا) وتخزينها في مجلد ذاكرة التخزين المؤقت لتجنب التنزيل المستقبلي (يمكن العثور على مجلد ذاكرة التخزين المؤقت على ~/.pytorch_pretrained_biggan/ ).
يمكن أن يكون cache_dir مسارًا اختياريًا إلى دليل محدد لتنزيل وتخزين الأوزان النموذجية التي تم تدريبها مسبقًا.
BigGANConfig هو فئة لتخزين وتحميل تكوينات Biggan. تم تعريفه في config.py .
فيما يلي بعض التفاصيل حول السمات:
output_dim : دقة إخراج GAN (128 ، 256 أو 512) للنماذج التي تم تدريبها مسبقًا ،z_dim : حجم متجه الضوضاء (128 للنماذج المدربة مسبقًا).class_embed_dim : حجم متجهات تضمين الفئة (128 للنماذج التي تم تدريبها مسبقًا).channel_width : حجم كل قناة (128 للنماذج المدربة مسبقًا).num_classes : عدد الفئات في مجموعة بيانات التدريب ، مثل ImageNet (1000 للنماذج التي تم تدريبها مسبقًا).layers : قائمة بتعريف الطبقات. كل تعريف للطبقة هو ثلاثية من [عينة أعلى في الطبقة؟ (Bool) ، عدد قنوات الإدخال (INT) ، عدد قنوات الإخراج (int)]attention_layer_position : موضع طبقة الاهتمام الذاتي في التسلسل الهرمي للطبقة (8 للنماذج المدربة مسبقًا).eps : قيمة Epsilon لاستخدامها لطبقات التطبيع الطيفية والدفعة (1E-4 للنماذج التي تم تدريبها مسبقًا).n_stats : عدد الإحصاءات المحسوبة مسبقًا لطبقات تطبيع الدُفعات المرتبطة بقيم اقتطاع مختلفة بين 0 و 1 (51 للنماذج التي تم تدريبها مسبقًا). BigGAN هو نموذج Pytorch ( torch.nn.Module ) من Biggan المحددة في model.py . يشتمل هذا النموذج على تضمينات الفئة (طبقة خطية) والمولد مع سلسلة من التلوينات وقواعد الدُفعات الشرطية. لم يتم تنفيذ التمييز حاليًا نظرًا لأن الأوزان المدربة مسبقًا لم يتم إصدارها لذلك.
المدخلات والإخراج متطابقة مع مدخلات ومخرجات نموذج TensorFlow .
نحن نفصلهم هنا.
BigGAN يأخذ كمدخلات :
z : torch.floattensor من الشكل [batch_size ، config.z_dim] مع أخذ عينات من الضوضاء من التوزيع الطبيعي المقطوع ، وclass_label : torch.longtensor اختياري من الشكل [batch_size ، sequence_length] مع مؤشرات أنواع الرمز المميز المحدد في [0 ، 1]. يتوافق النوع 0 مع sentence A والنوع 1 يتوافق مع رمز sentence B (انظر ورقة Bert لمزيد من التفاصيل).truncation : تعويم بين 0 (غير مكون) و 1. اقتطاع المعتاد المقطوع المستخدم لإنشاء متجه الضوضاء. يتم استخدام قيمة الاقتطاع هذه لتحديد مجموعة من الإحصاءات المحسوبة مسبقًا (الوسائل والتباين) لطبقات المعيار الدُفعات. يخرج BigGAN مجموعة من الشكل [Batch_size ، 3 ، الدقة ، الدقة] حيث يكون الدقة 128 أو 256 أو 512 حسب النموذج:
نحن نقدم بعض طريقة الأداة المساعدة لاستخدام النموذج. يتم تعريفها في utils.py .
فيما يلي بعض التفاصيل حول هذه الطرق:
truncated_noise_sample(batch_size=1, dim_z=128, truncation=1., seed=None) :
إنشاء متجه الضوضاء المقطوع.
convert_to_images(obj) :
تحويل موتر الإخراج من Biggan في قائمة الصور.
save_as_images(obj, file_name='output') :
تحويل وحفظ موتر الإخراج من Biggan في قائمة الصور المحفوظة.
file_name_{image_number}.png display_in_terminal(obj) :
تحويل وعرض موتر إخراج من Biggan في المحطة. تستخدم هذه الوظيفة libsixel وستعمل فقط في محطة متوافقة مع libsixel. يرجى الرجوع إلى https://github.com/saitoha/libsixel لمزيد من التفاصيل.
file_name_{image_number}.png one_hot_from_int(int_or_list, batch_size=1) :
قم بإنشاء متجه واحد من فئة فئة أو قائمة بمؤشرات الفصل.
len(int_or_list) == batch_size one_hot_from_names(class_name, batch_size=1) :
قم بإنشاء متجه واحد من اسم فئة ImageNet ('Tennis Ball' ، 'Daisy' ، ...). نستخدم بحث WordNet من NLTK لمحاولة العثور على synset ذات الصلة من ImageNet وأخذ أول واحد. إذا لم نتمكن من العثور عليه بشكل كبير ، فإننا ننظر إلى hyponyms و hypernyms لاسم الفصل.
يتم توفير البرامج النصية لتنزيل نماذج TensorFlow وتحويلها من TensorFlow Hub في ./scripts.
يمكن استخدام البرامج النصية مباشرة على النحو التالي:
./scripts/download_tf_hub_models.sh
./scripts/convert_tf_hub_models.sh