مجرد ملاحظة أنني أطلقت Dream Factory، وهي ترقية مهمة لهذا. إنه يحتوي على واجهة مستخدم رسومية (اختيارية)، ودعم حقيقي ومتزامن لوحدات معالجة الرسومات المتعددة، ومعرض متكامل مع دعم كامل لبيانات تعريف EXIF، والعديد من الميزات الجديدة الأخرى.
لقد أسقطت دعم VQGAN وDisco Diffusion للتركيز على Stable Diffusion، لذلك إذا كنت تريد VQGAN و/أو Disco Diffusion، فيجب عليك الالتزام بهذا في الوقت الحالي. وإلا فأنا أشجع الجميع على الهجرة إلى Dream Factory! سأستمر في تصحيح إصلاحات الأخطاء في هذا الريبو ولكن من المحتمل ألا أقوم بإضافة ميزات جديدة في المستقبل.
لأتمتة إنشاء مجموعات كبيرة من الأعمال الفنية التي تم إنشاؤها بواسطة الذكاء الاصطناعي محليًا. استخدم وحدات معالجة الرسومات الخاصة بك للعمل على إنجاز الأعمال الفنية التي تم إنشاؤها بواسطة الذكاء الاصطناعي على مدار الساعة طوال أيام الأسبوع مع القدرة على أتمتة قوائم الانتظار السريعة الكبيرة التي تجمع بين الموضوعات والأنماط/الفنانين التي حددها المستخدم، والمزيد! مزيد من المعلومات حول النماذج المتوفرة بعد صور العينة.
بعض الأمثلة على الصور التي قمت بإنشائها من خلال هذه العملية (تم انتقاؤها وشحذها):
لاحظ أنني لم أقم بإنشاء أو تدريب النماذج المستخدمة في هذا المشروع، ولم أشارك في الترميز الأصلي. لقد قمت ببساطة بتعديل إصدارات colab الأصلية بحيث يتم تشغيلها محليًا وأضفت بعض الدعم للأتمتة. النماذج المدعومة حاليًا، مع روابط لتطبيقاتها الأصلية:
ستحتاج إلى وحدة معالجة الرسومات Nvidia، ويفضل أن يكون ذلك مع كمية مناسبة من VRAM. تكفي ذاكرة VRAM بسعة 12 جيجابايت لمخرجات الصور مقاس 512 × 512 اعتمادًا على الطراز والإعدادات، ويجب أن تكون سعة 8 جيجابايت كافية لمقاس 384 × 384 (ينبغي اعتبار 8 جيجابايت كحد أدنى معقول!). لإنشاء صور بحجم 1024 × 1024، ستحتاج إلى ما يقرب من 24 جيجابايت من VRAM أو أكثر. إن إنشاء صور صغيرة ثم رفع مستواها عبر ESRGAN أو أي حزمة أخرى يوفر نتائج جيدة جدًا أيضًا.
من المفترض أن يكون من الممكن تشغيله على وحدة معالجة رسوميات AMD، لكنك ستحتاج إلى أن تكون على نظام التشغيل Linux لتثبيت إصدار ROCm من Pytorch. ليس لدي وحدة معالجة رسومات AMD لأستخدمها في جهاز يعمل بنظام التشغيل Linux، لذا لم أختبر ذلك بنفسي.
تم اختبار هذه التعليمات على سطح مكتب يعمل بنظام التشغيل Windows 10 مع وحدة معالجة الرسومات Nvidia 3080 Ti (ذاكرة VRAM سعة 12 جيجابايت)، وأيضًا على نظام Ubuntu Server 20.04.3 مع وحدة معالجة الرسومات Nvidia Tesla M40 القديمة (ذاكرة VRAM سعة 24 جيجابايت).
[1] قم بتثبيت Anaconda، وافتح المحطة الجذرية، وأنشئ بيئة جديدة (وقم بتنشيطها):
conda create --name ai-art python=3.9
conda activate ai-art
[2] تثبيت برنامج Pytorch:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
لاحظ أنه يمكنك تخصيص تثبيت Pytorch الخاص بك باستخدام الأداة عبر الإنترنت الموجودة هنا.
[3] تثبيت حزم بايثون الأخرى المطلوبة:
conda install -c anaconda git urllib3
pip install transformers keyboard pillow ftfy regex tqdm omegaconf pytorch-lightning IPython kornia imageio imageio-ffmpeg einops torch_optimizer
[4] انسخ هذا المستودع وانتقل إلى الدليل الخاص به:
git clone https://github.com/rbbrdckybk/ai-art-generator
cd ai-art-generator
لاحظ أن مستخدمي Linux قد يحتاجون إلى علامات اقتباس مفردة حول عنوان URL في أمر النسخ.
[5] استنساخ المستودعات الإضافية المطلوبة:
git clone https://github.com/openai/CLIP
git clone https://github.com/CompVis/taming-transformers
[6] قم بتنزيل ملفات نقاط تفتيش نموذج VQGAN الافتراضية المدربة مسبقًا:
mkdir checkpoints
curl -L -o checkpoints/vqgan_imagenet_f16_16384.yaml -C - "https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1"
curl -L -o checkpoints/vqgan_imagenet_f16_16384.ckpt -C - "https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fckpts%2Flast.ckpt&dl=1"
لاحظ أنه يجب على مستخدمي Linux استبدال علامات الاقتباس المزدوجة في أوامر الضفيرة بعلامات اقتباس مفردة.
[7] (اختياري) تنزيل نماذج إضافية تم تدريبها مسبقًا:
النماذج الإضافية ليست ضرورية، ولكنها توفر لك المزيد من الخيارات. فيما يلي قائمة جيدة بالنماذج المتاحة المدربة مسبقًا.
على سبيل المثال، إذا كنت تريد أيضًا نموذج FFHQ (الذي تم تدريبه على الوجوه):
curl -L -o checkpoints/ffhq.yaml -C - "https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/2021-04-23T18-19-01-project.yaml?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fconfigs%2F2021-04-23T18-19-01-project.yaml&force"
curl -L -o checkpoints/ffhq.ckpt -C - "https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/last.ckpt?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fcheckpoints%2Flast.ckpt"
[8] (اختياري) اختبار VQGAN+CLIP:
python vqgan.py -s 128 128 -i 200 -p "a red apple" -o output/output.png
من المفترض أن تشاهد ملف Output.png الذي تم إنشاؤه في دليل المخرجات، والذي يجب أن يشبه التفاحة بشكل غير محكم.
[9] قم بتثبيت الحزم الخاصة بالنشر الموجه بـ CLIP (إذا كنت مهتمًا فقط بـ VQGAN+CLIP، فيمكنك تخطي كل شيء من هنا حتى النهاية):
pip install ipywidgets omegaconf torch-fidelity einops wandb opencv-python matplotlib lpips datetime timm
conda install pandas
[10] مستودعات النسخ للنشر الموجه بـ CLIP:
git clone https://github.com/crowsonkb/guided-diffusion
git clone https://github.com/assafshocher/ResizeRight
git clone https://github.com/CompVis/latent-diffusion
[11] تنزيل النماذج اللازمة للنشر الموجه بـ CLIP:
mkdir contentmodels
curl -L -o content/models/256x256_diffusion_uncond.pt -C - "https://openaipublic.blob.core.windows.net/diffusion/jul-2021/256x256_diffusion_uncond.pt"
curl -L -o content/models/512x512_diffusion_uncond_finetune_008100.pt -C - "http://batbot.tv/ai/models/guided-diffusion/512x512_diffusion_uncond_finetune_008100.pt"
curl -L -o content/models/secondary_model_imagenet_2.pth -C - "https://ipfs.pollinations.ai/ipfs/bafybeibaawhhk7fhyhvmm7x24zwwkeuocuizbqbcg5nqx64jq42j75rdiy/secondary_model_imagenet_2.pth"
mkdir contentmodelssuperres
curl -L -o content/models/superres/project.yaml -C - "https://heibox.uni-heidelberg.de/f/31a76b13ea27482981b4/?dl=1"
curl -L -o content/models/superres/last.ckpt -C - "https://heibox.uni-heidelberg.de/f/578df07c8fc04ffbadf3/?dl=1"
لاحظ أنه يجب على مستخدمي Linux مرة أخرى استبدال علامات الاقتباس المزدوجة في أوامر الضفيرة بعلامات اقتباس مفردة، واستبدال الخطوط المائلة العكسية mkdir بخطوط مائلة للأمام.
[12] (اختياري) اختبار النشر الموجه بـ CLIP:
python diffusion.py -s 128 128 -i 200 -p "a red apple" -o output.png
من المفترض أن تشاهد ملف Output.png الذي تم إنشاؤه في دليل المخرجات، والذي يجب أن يشبه التفاحة بشكل غير محكم.
[13] مستودع Clone Stable Diffusion (إذا لم تكن مهتمًا بـ SD، فيمكنك تخطي كل شيء من هنا إلى النهاية):
git clone https://github.com/rbbrdckybk/stable-diffusion
[14] تثبيت التبعيات الإضافية التي يتطلبها Stable Diffusion:
pip install diffusers
[15] قم بتنزيل ملف نقطة التفتيش المدربة مسبقًا على Stable Diffusion:
mkdir stable-diffusionmodelsldmstable-diffusion-v1
curl -L -o stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt -C - "https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt"
إذا لم يقم أمر الضفيرة بتنزيل نقطة التحقق، فسيتم حجبها خلف معلومات تسجيل الدخول. ستحتاج إلى التسجيل هنا (يتطلب فقط البريد الإلكتروني والاسم) وبعد ذلك يمكنك تنزيل ملف نقطة التفتيش هنا.
بعد التنزيل، ستحتاج إلى وضع ملف .ckpt في الدليل الذي تم إنشاؤه أعلاه وتسميته model.ckpt .
[16] (اختياري) اختبار الانتشار المستقر:
أسهل طريقة لاختبار SD هي إنشاء ملف موجه بسيط باستخدام !PROCESS = Stablediff وموضوع واحد. راجع example-prompts.txt والقسم التالي لمزيد من المعلومات. بافتراض أنك قمت بإنشاء ملف موجه بسيط يسمى test.txt أولاً، يمكنك الاختبار عن طريق تشغيل:
python make_art.py test.txt
يجب حفظ الصور في دليل الإخراج إذا نجحت (يتم تنظيمها في أدلة فرعية مسماة بالتاريخ وملف المطالبة).
[17] إعداد ESRGAN/GFPGAN (إذا كنت لا تخطط لترقية الصور، يمكنك تخطي هذا وكل شيء آخر):
git clone https://github.com/xinntao/Real-ESRGAN
pip install basicsr facexlib gfpgan
cd Real-ESRGAN
curl -L -o experiments/pretrained_models/RealESRGAN_x4plus.pth -C - "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth"
python setup.py develop
cd ..
لقد انتهيت!
إذا كنت تتلقى أخطاء خارج نطاق GPU VRAM غير الكافي أثناء التشغيل ولم تقم بتحديث التثبيت الخاص بك منذ فترة، فحاول تحديث بعض الحزم الأكثر أهمية، على سبيل المثال:
pip install transformers -U
في الأساس، تحتاج فقط إلى إنشاء ملف نصي يحتوي على الموضوعات والأنماط التي تريد استخدامها لإنشاء الصور. إذا كان لديك 5 موضوعات و20 نمطًا في ملف المطالبة الخاص بك، فسيتم إنشاء إجمالي 100 صورة مخرجة (20 صورة نمطية لكل موضوع).
ألقِ نظرة على example-prompts.txt لترى كيف يجب أن تبدو ملفات المطالبة. يمكنك تجاهل كل شيء باستثناء مناطق [المواضيع] و[الأنماط] في الوقت الحالي. الأسطر التي تبدأ بـ '#' هي تعليقات وسيتم تجاهلها، والأسطر التي تبدأ بـ '!' هي توجيهات الإعدادات ويتم شرحها في القسم التالي. في الوقت الحالي، ما عليك سوى تعديل مواضيع الأمثلة والأنماط بما تريد استخدامه.
بعد ملء ملف example-prompts.txt حسب رغبتك، يمكنك ببساطة تشغيل:
python make_art.py example-prompts.txt
اعتمادًا على أجهزتك وإعداداتك، سيستغرق إنشاء كل صورة من بضع ثوانٍ إلى بضع ساعات (على الأجهزة القديمة). إذا كان بإمكانك تشغيل Stable Diffusion، فإنني أوصي به بشدة للحصول على أفضل النتائج - سواء من حيث السرعة أو جودة الصورة.
يتم إنشاء صور الإخراج في دليل الإخراج/[التاريخ الحالي]-[اسم الملف الفوري]/ بشكل افتراضي. سيحتوي دليل الإخراج على ملف JPG لكل صورة مسماة بالموضوع والنمط المستخدم في إنشائها. لذلك، على سبيل المثال، إذا كان لديك "قرد على دراجة نارية" كأحد موضوعاتك، و"بواسطة بيكاسو" كنمط، فسيتم إنشاء صورة الإخراج كإخراج/[التاريخ الحالي]-[اسم الملف الفوري]/a -monkey-on-a-motorcycle-by-picasso.jpg (ستختلف أسماء الملفات قليلاً حسب العملية المستخدمة).
يمكنك الضغط على CTRL+SHIFT+P في أي وقت لإيقاف التنفيذ مؤقتًا (سيصبح الإيقاف المؤقت ساري المفعول عند انتهاء عرض الصورة الحالية). اضغط على CTRL+SHIFT+P مرة أخرى لإلغاء الإيقاف المؤقت. مفيد إذا كنت تقوم بتشغيل هذا على جهاز الكمبيوتر الأساسي الخاص بك وتحتاج إلى استخدام وحدة معالجة الرسومات الخاصة بك لشيء آخر لفترة من الوقت. يمكنك أيضًا الضغط على CTRL+SHIFT+R لإعادة تحميل ملف المطالبة إذا قمت بتغييره (سيتم تجاهل قائمة انتظار العمل الحالية، وسيتم إنشاء قائمة انتظار جديدة من محتويات ملف المطالبة الخاص بك). لاحظ أن إدخال لوحة المفاتيح يعمل فقط على نظام التشغيل Windows.
يتم حفظ الإعدادات المستخدمة لإنشاء كل صورة كبيانات تعريفية في كل ملف JPG مخرج بشكل افتراضي. يمكنك قراءة معلومات البيانات التعريفية مرة أخرى باستخدام أي أداة EXIF، أو ببساطة عن طريق النقر بزر الماوس الأيمن على ملف الصورة في مستكشف Windows وتحديد "خصائص"، ثم النقر فوق جزء "التفاصيل". يحتوي حقل "التعليقات" على الأمر المستخدم لإنشاء الصورة.
يمكن تضمين التوجيهات في ملف الموجه الخاص بك لتعديل الإعدادات لجميع المطالبات التي تتبعه. يتم تحديد توجيهات الإعدادات هذه عن طريق وضعها في سطر خاص بها داخل منطقة [الموضوع] في ملف المطالبة، بالتنسيق التالي:
![إعداد التغيير] = [قيمة جديدة]
بالنسبة لـ [setting to Change] ، التوجيهات الصالحة هي:
بعض الأمثلة:
!PROCESS = vqgan
سيؤدي هذا إلى ضبط عملية إنشاء الصور الحالية بالذكاء الاصطناعي. الخيارات الصالحة هي vqgan لـ VQGAN+CLIP، أو diffusion للنشر الموجه بـ CLIP (Disco Diffusion)، أو Stablediff لـ Stable Diffusion.
!CUDA_DEVICE = 0
سيؤدي هذا إلى استخدام GPU 0 (الافتراضي). مفيد إذا كان لديك وحدات معالجة رسومات متعددة - يمكنك تشغيل مثيلات متعددة، كل منها بملف موجه خاص بها يحدد معرف GPU فريد.
!WIDTH = 384
!HEIGHT = 384
سيؤدي هذا إلى ضبط حجم الصورة الناتجة على 384 × 384. يتطلب حجم الإخراج الأكبر المزيد من GPU VRAM. لاحظ أنه بالنسبة للانتشار المستقر، يجب أن تكون هذه القيم من مضاعفات 64.
!TRANSFORMER = ffhq
سيخبر هذا VQGAN باستخدام محول FFHQ (أفضل إلى حد ما في الوجوه)، بدلاً من الافتراضي (vqgan_imagenet_f16_16384). يمكنك اتباع الخطوة 7 في تعليمات الإعداد أعلاه للحصول على محول ffhq، بالإضافة إلى رابط للعديد من المحولات الأخرى.
كل ما تحدده هنا يجب أن يكون موجودًا في دليل نقاط التفتيش كملف .ckpt و.yaml.
!INPUT_IMAGE = samples/face-input.jpg
سيؤدي هذا إلى استخدام Samples/face-input.jpg (أو أي صورة تحددها) كصورة البداية، بدلاً من الضوضاء العشوائية الافتراضية. يجب أن تكون الصور المدخلة بنفس نسبة العرض إلى الارتفاع للصور الناتجة للحصول على نتائج جيدة. لاحظ أنه عند الاستخدام مع Stable Diffusion، سيكون حجم الصورة الناتجة هو نفس حجم الصورة المدخلة (سيتم تجاهل إعدادات الارتفاع/العرض).
!SEED = 42
سيستخدم هذا 42 كقيمة أولية للإدخال، بدلاً من رقم عشوائي (الافتراضي). مفيد لإمكانية التكرار - عندما تكون جميع المعلمات الأخرى متطابقة، فإن استخدام نفس القيمة الأولية يجب أن ينتج صورة متطابقة عبر عمليات تشغيل متعددة. اضبط على لا شيء أو -1 لإعادة التعيين لاستخدام قيمة عشوائية.
!INPUT_IMAGE =
سيؤدي تعيين أي من هذه القيم إلى لا شيء إلى إعادتها إلى وضعها الافتراضي. لذا، في هذا المثال، لن يتم استخدام أي صورة بداية.
!STEPS = 50
يضبط عدد الخطوات (المشابهة للتكرارات) عند استخدام Stable Diffusion على 50 (الإعداد الافتراضي). تستغرق القيم الأعلى وقتًا أطول وقد تؤدي إلى تحسين جودة الصورة. نادراً ما تنتج القيم التي تزيد عن 100 اختلافات ملحوظة مقارنة بالقيم الأقل.
!SCALE = 7.5
يضبط مقياس التوجيه عند استخدام Stable Diffusion على 7.5 (الافتراضي). القيم الأعلى (إلى حد ما، قد تكون النتائج التي تتجاوز 25 تقريبًا غريبة) ستؤدي إلى التزام الإخراج بشكل وثيق بموجهك.
!SAMPLES = 1
يضبط عدد مرات أخذ العينة عند استخدام Stable Diffusion على 1 (الافتراضي). ستؤدي القيم التي تزيد عن 1 إلى إنشاء صور إخراج متعددة لكل مطالبة مع توفير بسيط للوقت لكل صورة. لا توجد تكلفة في GPU VRAM المطلوبة لزيادة ذلك.
!STRENGTH = 0.75
يضبط تأثير صورة البداية على 0.75 (الافتراضي). يكون ذلك مناسبًا فقط عند استخدام Stable Diffusion مع صورة مُدخلة. تتراوح القيم الصالحة بين 0-1، حيث يقابل 1 التدمير الكامل لصورة الإدخال، ويقابل 0 ترك صورة البداية سليمة تمامًا. تميل القيم بين 0.25 و0.75 إلى إعطاء نتائج مثيرة للاهتمام.
!SD_LOW_MEMORY = no
هل تستخدم الريبو المتشعب مع متطلبات ذاكرة GPU أقل بكثير عند استخدام Stable Diffusion (نعم/لا)؟ سيؤدي ضبط هذا على نعم إلى التبديل إلى استخدام إصدار SD محسّن للذاكرة والذي سيسمح لك بإنشاء صور بدقة أعلى مع ذاكرة GPU أقل بكثير (يجب أن تتطلب الصور مقاس 512 × 512 حوالي 4 جيجابايت من VRAM فقط). والمقايضة هي أن الاستدلال أبطأ بكثير مقارنة بالريبو الرسمي الافتراضي. للمقارنة: في بطاقة RTX 3060، يستغرق إنشاء صورة مقاس 512 × 512 بالإعدادات الافتراضية حوالي 12 ثانية؛ مع !SD_LOW_MEMORY = نعم ، نفس الصورة تستغرق أكثر من دقيقة. نوصي بإيقاف تشغيل هذا إلا إذا كان لديك أقل من 8 جيجابايت من GPU VRAM، أو إذا كنت ترغب في تجربة إنشاء صور أكبر قبل الترقية.
!USE_UPSCALE = no
هل يتم ترقية الصور تلقائيًا باستخدام Stable Diffusion (نعم/لا)؟ يستخدم ESRGAN/GFPGAN (انظر الإعدادات الإضافية أدناه).
!UPSCALE_AMOUNT = 2
ما مقدار القياس عندما !USE_UPSCALE = Yes . الافتراضي هو 2.0x؛ تتطلب القيم الأعلى المزيد من VRAM والوقت.
!UPSCALE_FACE_ENH = no
ما إذا كان سيتم استخدام GFPGAN (مقابل ESRGAN الافتراضي) أم لا عند الترقية. يوفر GFPGAN أفضل النتائج مع الوجوه، ولكنه قد يوفر نتائج أسوأ قليلاً إذا تم استخدامه على مواضيع غير متعلقة بالوجه.
!UPSCALE_KEEP_ORG = no
هل احتفظ بالصورة الأصلية غير المعدلة عند الترقية (نعم/لا)؟ إذا تم التعيين على لا (الافتراضي)، فسيتم حذف الصورة الأصلية. إذا تم التعيين على نعم، فسيتم حفظ الصورة الأصلية في دليل فرعي / أصلي لمجلد إخراج الصورة.
!REPEAT = no
عند الانتهاء من جميع المهام في ملف المطالبة، هل تريد إعادة التشغيل مرة أخرى في أعلى الملف (نعم/لا)؟ الافتراضي هو لا، والذي سيؤدي ببساطة إلى إنهاء التنفيذ عند اكتمال جميع المهام.
TODO: إنهاء أمثلة الإعدادات وإضافة نصائح/أمثلة للاستخدام، والمستند Random_art.py