پس از یک مدت طولانی ننوشتن، بالاخره برگشتم تا بخوام در مورد مانی صحبت کنم. فکر کنم مدتهای طولانیه که این پروژه رو شروع کردم ولی خب هربار به یک دلیل خاصی، از نوشتن محتوای فارسی در موردش صرف نظر کرده بودم. اما این بار آمدم تا با قدرت در مورد مانی، میدجرنی، دالی و سایر دوستانی که به کمک هوش مصنوعی برای شما نقاشی جنریت میکنن صحبت کنم.
ابتدا بذارید کمی از میدجرنی صحبت کنم.میدجرنی یک ابزار هوش مصنوعیه که در پیامرسان اجتماعی دیسکورد داره استفاده میشه و مردم با کمکش تصاویر جذابی تولید میکنند. میدجرنی، همیشه چند مرحله از باقی تولیدکنندگان تصویر جلوتر بود و همین باعث شده بود که خیلیها حتی از من بپرسند «چرا مثل اون تصویر تولید نمیکنی؟» و در نهایت من هم به این نتیجه رسیدم که باید ته و توی این مدل خاص رو دربیارم و مانی رو بهش نزدیک یا ازش بهتر کنم. در این پست، قصد دارم در مورد پروسه کارم بنویسم.
تاریخچه مانی
پارسال همین موقعها (حوالی شروع سال نوی میلادی، در این حد که حتی یادمه که جنگ اکراین هم حتی شروع نشده بود) در خیلی از شبکههای اجتماعی میدیدم که دوستان دیگری دارند با کمک هوش مصنوعی، نقاشی تولید میکنند و خب حقیقتا من هم با خودم گفتم که بهتره من هم سراغ این قضیه برم.
اون موقع، ابزاری به اسم VQGAN بود که با کمک CLIP میتونست ورودیهای متنی رو به تصویر تبدیل کنه اما خروجیها خیلی خوب نبودند و خیلی از سایر رقبا عقب بود. بهرحال این نقطه شروع خوبی بود و با یادگیری این ابزار و این که چطور کار میکنه، موفق به ساخت مدل خودم مبتنی بر VQGAN+CLIP شدم.
اون موقع خیلی راضی نبودم و بیشتر میخواستم، اما حقیقتا ابزار آزاد و متنباز خوب دیگری در دسترس نبود که بخوام روی اون کار کنم تا این که با Latent Diffusion آشنا شدم که تصاویر قشنگتر و بهتری تولید میکرد اما اون هم هنوز خیلی جای کار داشت.
مدتهای زیادی، در نظر داشتم که پروژه «مانی» رو پیش ببرم اما پایه مناسبی نداشتم. اونهایی که میشد به راحتی به قولی پیادهسازی یا حتی Fine Tune بشند خروجی خوبی نداشتند و اونهایی که میتونستند خروجیهای خوبی تولید کنند هم آموزش دادن و فاینتیون کردنشون منابع بسیار بسیار زیادی میخواست.
ظهور Stable Diffusion
اوضاع در حدود مردادماه امسال، خیلی عوض شد. یکباره شرکتی به اسم Stability AI (لینک) تصمیم گرفت یک مدل تولید تصویر متنباز ارائه کنه به اسم Stable Diffusion که خب این خودش میتونست یک نقطه عطف در تولید تصویر و در کل اثر هنری به کمک هوش مصنوعی محسوب بشه.
وقتی این مدل منتشر شد، مجددا مشکلی وجود داشت اون هم این بود که فاینتیون کردن این مدل، منابع زیادی میخواست تا این که نسخه یک و نیم این مدل، منتشر شد (لینک) که دقیقا همراهش، یک یا چند برنامهنویس باحال دیگر هم بودند که تکنولوژی Dream Booth گوگل رو با کمک Stable Diffusion پیاده کرده بودند. اینجا بود که فاینتیون کردن این ماجرا، به سادگی امکانپذیر بود.
اما به خوبی Midjourney نبود…
حالا یک مشکلی وجود داشت. مشکل این بود که تصاویر علیرغم زیبایی بصریای که داشتند و درک و فهمی که مدل از ورودیها داشت، به خوبی میدجرنی نبودند.
البته این نگرانی من نبود، عمدتا نگرانی افرادی بود که به عنوان «مشتری» سراغ این پروژه میآمدند و میخواستند از این پروژه استفاده تجاری کنند و خب ظاهرا نُرمی در بین هموطنانمون وجود داره که با علم به این که کجا زندگی میکنیم و با چه امکاناتی چی توسعه میدیم؛ همچنان انتظار دارند در حد و اندازه غولها ظاهر بشیم 🙂
خلاصه این قضیه خیلی باعث شد به من بربخوره 😁 و به همین خاطر یک دیتاست از تصاویری که در میدجرنی تولید شده بود رو برداشتم، به همراه متون ورودیشون (دیتاست حدود ۱۰۰۰ تصویر) و آخرین نسخه مانی (لینک) رو ساختم. خروجیها واقعا خوب شده بودند اون هم فقط با هزار تصویر. اما یک مشکلی بود، تنوع خروجی به شکل میدجرنی نبود تا این که کمی در دیسکورد میدجرنی، چرخیدم و نتایج جالبی دستم آمد 🙂
چگونه رمز موفقیت میدجرنی شکسته شد؟
خارجیها یه اصطلاح جالبی دارند. وقتی میخوان ببینن چیزی چطور کار میکنه میگن Let’s look under the hood یا «بذار یه نگاه به زیر کاپوت بندازیم». اما مشکل اینجاست که میدجرنی کاپوتش جوش داده شده. پس چطور میشه فهمید اون زیر چه خبره؟
خب حقیقت اینه که در سالهای اخیر خیلی چیزها منجمله ویندوز، مک او اس، آیفون! تکنولوژیهای فیسبوک و … مهندسی معکوس شدند و نمونههای آزاد و متنباز ازشون ساخته شده. پس مهندسی معکوس میدجرنی هم نباید کار سختی باشه نه؟ فقط به کمی اطلاعات نیاز داریم. این اطلاعات رو میشد از دیسکورد به دست آورد.
اول، داشتم دنبال مدلهایی میگشتم که بر اساس روش کار میدجرنی ساخته شده باشند. نخستین چیزی که دیدم OpenJourney از Prompthero بود که خب کارم رو تا حد زیادی راه انداخت و تصاویر خوبی بهم داد (که حتی بعضیاش رو برای تست و بهبود مانی هم استفاده کردم). اما هنوز به خود میدجرنی، نرسیده بودم. پس باید چه کار میکردم؟
میدجرنی یک مدل نیست، چند مدله!
خب یکی از چیزهایی که در مورد میدجرنی خیلی جالبه اینه که همیشه در آپدیتهاش مدعی میشه که اضافه کردن یک کلمه یا عبارت جدید (مثلا Double Exposure) در متون ورودی میتونه نتیجههای جدیدتر و بهتری برای شما تولید کنه.
همین باعث شد که من کمی به اتفاقاتی که زیر کاپوت داره میافته، شک کنم. شکم هم تا حد خوبی به یقین تبدیل شد وقتی دیدم چند پروژه مشابه (که هنوز عمومی نشدند) مدعی «استفاده از چند مدل» شدند، اما چطور؟
خب یکی از راههایی که میشه این حرکت رو زد اینه که چندین مدل روی چندین قضیه متفاوت ترین/فاینتیون بشه و بعد با یک if ساده، ورودیها رو به اونها فرستاد. اما سوال اینه که من چه کردم؟ آیا چندین مدل ترین کردم؟ خیر.
ترکیب چند مدل با هم و نتایج آنها
اگر کمی با هوش مصنوعی آشنا باشید، احتمالا میدونید مدلهای هوش مصنوعی وزن و بایاسهایی هستند که به دادههای مختلف داده شدند.
حالا اگر این مدلها ساختار مشابهی داشته باشند، این امکان وجود داره که اونها رو با هم ترکیب کنیم و نتیجههای بهتری بگیریم. خب کاری که کردم این بود که اول از همه مانی رو با Open Journey و یکی دو مدل دیگه ترکیب کنم (و اسم این مدل رو new_mann_e_2 گذاشتم) و بعد یک سری مقایسه با openjourney انجام دادم.
اما حالا نیاز بود که کمی از خوبیهای میدجرنی رو هم اینجا داشته باشیم 😁 پس حالا چه کردم؟ هیچی. آمدم و وزنهای مانی جدید و اوپنجرنی رو با هم ترکیب کردم.
نتایج آزمایشها
متنهای ورودی همونطوری که مشخصه یک منظره (در سبک wasteland و cyberpunk) یک چهره (در سبک و سیاق نقاشانی چون Alphonse Mucha) و یک وسیله نقلیه (نقاشی فانتزی) بودند و مقدار seed (که تعیینکنندگی خوبی در جزییان نقاشی داره) در هر سه تصویر، یکی نگه داشته شد.
میتونم بگم به جرات مانی ۴ – که در حال حاضر در حال کار روش هستم – با متد «چند مدل» به خوبی تونسته از پس خودش بربیاد و این یعنی که همه چیز چقدر خوب داره پیش میره و با یکم تغییر و یکم ترکیبات جدید، میتونه نتایج به شدت بهتری هم بهم بده.
فاین تیون کردن مانی با دادههای شما
یکی از سوالاتی که در مورد مانی ازم پرسیده شد، دقیقا همین بود که چطور میشه مانی یا حتی خود میدجرنی رو فاینتیون کرد. در مورد میدجرنی باید بگم متاسفم، این مدل هیچیش آزاد یا متنباز نیست و نمیشه کاری کرد.
اما مانی رو میشه به کمک Dream Booth فاینتیون کرد و احتمالا بعدتر در مورد اون هم خواهم نوشت. ولی اگر شما ایده یا دیتایی دارید، میتونید به من بگید تا در نسخه ۴ اضافه کنم و مدل بهتری در نهایت ارائه کنم.
جمعبندی و سخن آخر
بالاخره این پست هم به پایان رسید و وقتشه که یک جمعبندی روی مطالب گفتهشده داشته باشیم. همونطوری که در شروع مطلب گفتم، یکی از دغدغههای من از زمانی که این مطالعه/تحقیق خاص رو شروع کردم این بود که تصاویر بهتری بتونم تولید کنم و این تصاویر در نظرم بود که به خروجیهای Midjourney نزدیک یا ازشون بهتر باشند.
این یکی از وجوه این مطالعه/تحقیق بود و وجه دیگرش هم این که چطور ترکیب وزنها و بایاسهای چند مدل مختلف (که البته از معماری یکسانی تبعیت میکنند) میتونه در نتیجه اونها تغییر ایجاد کنه.
خب باید بگم که این فاز آکادمیک و تحقیقاتی به خوبی پیش رفته و کمی جای توسعه و تحقیق فنی برای این پروژهها باقی میمونه که در آیندهای نه چندان دور، بروزرسانیهای اون هم منتشر میشه.
در نهایت بگم که اگر دوست دارید محتوای مشابه و به زبان انگلیسی بخونید میتونید بلاگ انگلیسی من، اگر دوست دارید محتوای سابق من رو بخونید ویرگول من (بنا به پارهای از اتفاقات دیگر در ویرگول نمینویسم) و اگر هم علاقمند به بینایی ماشین هستید جامعه بینایی ماشین رو بخونید.
یادتان هم نره که یادگیری مستمر به بهبود زندگی شما در هر شرایطی کمک میکنه و همیشه شما رو میتونه به شخص بهتری تبدیل کنه ✌️