Niki
Niki
خواندن ۱۱ دقیقه·۱ سال پیش

تبدیل متن به تصویر با هوش مصنوعی ،مروری بر imagen و Diffusion Model

یک توضیح مختصر از یک صحنه بدهید، Imagen می تواند تصاویر واقعی و با وضوح بالا از آن صحنه ایجاد کند. همه چیزهایی را که باید در مورد Imagen و نحوه عملکرد آن بدانید در این راهنمای ساده بیاموزید.

در حالی که دنیای یادگیری ماشین هنوز در حال کنار آمدن با نتایج چشمگیر DALL-E 2 بود که در اوایل سال 2022 منتشر شد، گوگل با انتشار مدل تبدیل متن به تصویر خود Imagen ، به نظر می‌رسد مرزهای تولید تصویر از متن را جابجا می‌کند و حتی جلوتر می برد.

این Imagen که همین ماه گذشته (مقاله برای سال 2022 است ) منتشر شد، می‌تواند تصاویری با کیفیت بالا و وضوح بالا تولید کند که تنها با توضیحی از یک صحنه ارائه می‌شود، صرف نظر از اینکه چنین صحنه‌ای در دنیای واقعی چقدر منطقی یا قابل قبول است.

در زیر می توانید چندین نمونه از این تصاویر را با شرح زیر مشاهده کنید:

تصاویر ایجاد شده توسط Imagen با توجه به شرح‌های مربوطه (اقتباس از منبع)
تصاویر ایجاد شده توسط Imagen با توجه به شرح‌های مربوطه (اقتباس از منبع)


این نتایج چشمگیر بدون شک باعث تعجب بسیاری از نحوه عملکرد Imagen شده است. در این مقاله نحوه عملکرد Imagen در چندین سطح را توضیح خواهیم داد.

ابتدا Imagen را از دید بالا به پایین بررسی می کنیم تا اجزای سطح بالای آن و چگونگی ارتباط آنها با یکدیگر را درک کنیم. سپس به جزئیات بیشتری در مورد این مؤلفه‌ها، که هر کدام دارای زیربخش خاص خود هستند، خواهیم پرداخت تا نحوه عملکرد آنها را درک کنیم. در نهایت، ما یک بررسی عمیق در Imagen انجام خواهیم داد که برای محققان، دانشجویان و متخصصان یادگیری ماشین در نظر گرفته شده است.

بیایید بررسی کنیم!

مقدمه

در چند سال گذشته، پیشرفت قابل توجهی در حوزه تبدیل متن به تصویر در یادگیری ماشین صورت گرفته است. یک مدل متن به تصویر یک توصیف متنی کوتاه از یک صحنه را می گیرد و سپس تصویری تولید می کند که صحنه توصیف شده را بازتاب می دهد. به عنوان مثال توضیح ورودی (یا "Caption") و تصویر خروجی را می توان در زیر مشاهده کرد:

ورودی و خروجی مدل متن به تصویر (تصویر و توضیحات برگرفته از منبع)
ورودی و خروجی مدل متن به تصویر (تصویر و توضیحات برگرفته از منبع)

توجه به این نکته مهم است که مدل‌های متن به تصویر با کارایی بالا، لزوماً می‌توانند مفاهیم و اشیاء نامرتبط را به روش‌های معنایی قابل قبولی ترکیب کنند. بنابراین، این مدل‌ها باید بر چالش‌هایی مانند گرفتن روابط فضایی، درک کاردینالیته و تفسیر درست نحوه ارتباط کلمات در توضیحات با یکدیگر غلبه کنند. اگر تصویر بالا را با دقت بیشتری بررسی کنیم، می بینیم که Imagen در اولین موشکافی در این موراد عملکرد خوبی دارد.

این Imagen رابطه معنایی و منطقی را به خوبی ثبت می کند (تصویر اقتباس شده از منبع)
این Imagen رابطه معنایی و منطقی را به خوبی ثبت می کند (تصویر اقتباس شده از منبع)

اغراق آمیز است اگر بگوییم این مدل ها تحسین برانگیز اند. آنها از پایگاه داده برای جستجو و بازگرداندن تصویری که با توضیحات مطابقت دارد استفاده نمی کنند، و حتی تصاویر فرعی از قبل موجود را به روشی تمیز به هم نمی چسبانند تا نتیجه با عنوان مطابقت داشته باشد. آنها در عوض تصاویر کاملاً جدیدی تولید می کنند که به صورت بصری اطلاعات معنایی موجود در متن را منتقل می کنند.


آیا می خواهید یاد بگیرید که چگونه Imagen بسازید؟
مقاله MinImagen ما را بررسی کنید که در آن یاد می‌گیریم که چگونه یک پیاده‌سازی مینیمال Imagen را به صورت گام به گام، با یک مخزن کامل بسازیم!

اکنون که متوجه شدیم مدل های متن به تصویر به طور کلی چیست، می توانیم نگاهی به نحوه عملکرد مدل متن به تصویر Imagen با نگاه بالا و کلی بیندازیم.


در کل Imagen چگونه کار می کند: نمای کلی

در این بخش، ما یاد خواهیم گرفت که اجزای برجسته Imagen چه کار می کنند و چگونه با یکدیگر ارتباط دارند. ابتدا، معماری فراگیر Imagen را با توضیحی در سطح بالا از نحوه عملکرد آن بررسی خواهیم کرد و سپس هر جزء را با دقت بیشتری در زیر بخش های زیر بررسی خواهیم کرد.

در اینجا یک ویدیوی کوتاه وجود دارد که نشان می‌دهد Imagen چگونه کار می‌کند، به همراه توضیح آنچه که در ویدیو زیر می‌گذرد:

https://www.aparat.com/v/3qxNz
  • ابتدا متن به عنوان ورودی در یک انکدر متن وارد می شود. این انکدر، متن را به یک نمایش عددی تبدیل می کند که اطلاعات معنایی درون متن را کپسوله و محصور می کند.
  • در مرحله بعد، یک مدل تولید تصویر با شروع از نویز یا برفک تلویزیون ("TV Static")، تصویری را ایجاد می کند و به آرامی آن را به یک تصویر خروجی تبدیل می کند. برای هدایت این فرآیند، مدل تولید تصویر متن انکد شده را به عنوان ورودی دریافت می‌کند، که به مدل می‌گوید که چه چیزی در عنوان وجود دارد تا بتواند تصویر مربوطه را ایجاد کند. خروجی یک تصویر کوچک است که به صورت بصری عنوانی را که ما به انکدر متن وارد کردیم منعکس می کند.
  • سپس تصویر کوچک به یک مدل با وضوح فوق العاده (super-resolution model) منتقل می شود، که تصویر را به وضوح بالاتر می برد. این مدل همچنین متن انکد شده را به عنوان ورودی می‌گیرد، که به مدل کمک می‌کند تا تصمیم بگیرد که چگونه رفتار کند زیرا «شکاف‌های» اطلاعات گمشده را که لزوماً از چهار برابر شدن اندازه تصویر ما ناشی می‌شود، پر می‌کند. نتیجه یک تصویر با اندازه متوسط از آنچه ما می خواهیم است.
  • در نهایت، این تصویر با اندازه متوسط به مدل دیگری با وضوح فوق‌العاده (another super-resolution) منتقل می‌شود، که تقریباً مشابه نمونه قبلی عمل می‌کند، با این تفاوت که این بار تصویر با اندازه متوسط ما را می‌گیرد و آن را به تصویری با وضوح بالا تبدیل می‌کند. نتیجه تصویر 1024 در 1024 پیکسل است که به صورت بصری بازتاب دهنده ی معنایی است که ما به عنوان متن ورودی وارد کردیم.


در بالاترین سطح، این تمام چیزی است که وجود دارد! برای نگاهی جزئی تر به هر یک از اجزای بزرگ Imagen، بخش های فرعی زیر را بررسی کنید. در غیر این صورت، می‌توانید به ادامه جزئیات بپردازید تا با نحوه عملکرد Imagen آشنا شوید، یا مستقیماً به انتها یا سخن نهایی بروید.

انکدر متن یا Text Encoder

در این بخش، نگاهی دقیق‌تر به انکدر متن Imagen خواهیم داشت. همانطور که از ویدیوی بالا می توان فهمید، انکدر متن برای عملکرد Imagen بسیار مهم است. تمام اجزای دیگر Imagen را مشروط می کند و وظیفه انکد کردن عنوان متنی را به روشی مفید بر عهده دارد.

انکد متن در Imagen یک Transformer است. اگر با Transformers آشنا نیستید، نگران نباشید. مهمترین جزئیات در اینجا این است که چنین انکدری تضمین می کند که متن انکد شده و نحوه ارتباط کلمات درون عنوان را با یکدیگر درک می کند (با روشی به نام "توجه به خود" یا self-attention ). این بسیار مهم است زیرا زبان انگلیسی اطلاعات را از طریق ساختار نحوی خود انکد می کند که بر معنی دادن معنایی (semantic meaning) یک جمله داده شده تأثیر می گذارد.

اگر Imagen فقط به تک تک کلمات توجه می‌کرد و نه نحوه ارتباط آنها با یکدیگر، می‌توانستیم تصاویر باکیفیتی داشته باشیم که تک تک عناصر متن را به تصویر بکشند، اما آنها را به گونه‌ای به تصویر نمی‌کشند که معنی دادن معنایی کلمات را به درستی منعکس کند. ما می توانیم این تفاوت را در مثال زیر مشاهده کنیم، جایی که عدم توجه به نحوه ارتباط کلمات با یکدیگر می تواند نتیجه بسیار ضعیف (هر چند خنده دار) داشته باشد:

نکته: در حالی که مثال بالا به منظور برجسته کردن نیاز به انکدر - توجه به خود در Transformer است، نتایجی حتی به خوبی تصویر "نادرست" بالا نیز ممکن است نباشد. برای مثال، بدون ابزاری برای درک رابطه نحوی بین کلمات، مدل نمی‌فهمد که «ایستادن روی» هم به اشیاء مستقیم و هم غیرمستقیم نیاز دارد و بنابراین نمی‌تواند این مفهوم را به درستی به تصویر بکشد.

انکد کردن متن در طول آموزش ثابت می باشد (frozen)، به این معنی که مدل نحوه ایجاد انکدرها را یاد نمی‌گیرد یا تغییر نمی‌دهد. این فقط برای تولید انکدرهایی استفاده می‌شود که به بقیه مدل‌هایی که آموزش داده می‌شوند، تغذیه شوند (به عنوان استفاده کننده در مدل های دیگر بکار گرفته میشود).

مولد تصویر یا Image Generator

انکدر متن یک توضیح مفید از متن ورودی به Imagen را تولید می کند، اما ما هنوز باید روشی برای تولید تصویری که از این توضیح استفاده می کند، ابداع کنیم. برای انجام این کار، Imagen از مدل Diffusion استفاده می کند، که نوعی مدل مولد است که در سال های اخیر به دلیل عملکرد پیشرفته خود در چندین کار، محبوبیت قابل توجهی به دست آورده است. قبل از حرکت به جلو، اجازه دهید در حال حاضر به خلاصه ای از مدل های Diffusion نگاه کنیم.

مدل های Diffusion چه هستند؟

مدل‌های Diffusion روشی برای ایجاد داده‌هایی هستند که شبیه به مجموعه‌ای از داده‌های آموزشی است. آنها با از بین بردن داده های آموزشی از طریق اضافه کردن نویز، آموزش می بینند و سپس یاد می گیرند که داده ها را با معکوس کردن این فرآیند و از بین بردن نویز بازیابی کنند. با توجه به یک تصویر ورودی، مدل Diffusion به طور مکرر تصویر را با نویز گاوسی در یک سری مراحل زمانی خراب می‌کند، و در نهایت نویز گاوسی خالص یا "برفک تلویزیونی" باقی می‌ماند.

Diffusion فرآیند نویز تکراری مدل‌های
Diffusion فرآیند نویز تکراری مدل‌های

سپس مدل Diffusion به سمت عقبگرد کار می کند و یاد می گیرد که چگونه نویز را در هر مرحله جدا کرده و حذف کند و روند تخریب را که به تازگی رخ داده است، خنثی کند.

پس از آموزش، مدل را می‌توان به نصف تقسیم کرد و می‌توانیم از نویز گاوسی نمونه‌برداری تصادفی شروع کنیم که از مدل Diffusion برای حذف تدریجی نویز برای تولید تصویر استفاده می‌کنیم.

در زیر می‌توان نمونه‌ای از ارقام دست‌نویسی را مشاهده کرد که از نویز خالص گاوسی تولید می‌شوند:

یک مدل دیفیوژن می‌تواند ارقام دست‌نویس جدیدی را از نویز گاوسی تولید کند (منبع)
یک مدل دیفیوژن می‌تواند ارقام دست‌نویس جدیدی را از نویز گاوسی تولید کند (منبع)

شرطی سازی عنوان یا Caption Conditioning

به طور خلاصه، یک مدل Diffusion آموزش دیده با نویز گاوسی شروع می شود و سپس به طور تکراری تصویری شبیه به تصاویری که روی آن آموزش داده شده است تولید می کند. در این مرحله ممکن است آشکار باشد که ما هیچ کنترلی بر روی اینکه چه تصویری واقعاً خروجی است نداریم - ما به سادگی نویز گاوسی را به مدل وارد می‌کنیم و یک تصویر تصادفی را بیرون می‌ریزد که به نظر می‌رسد می‌تواند متعلق به مجموعه داده آموزشی باشد. به یاد بیاورید که هدف ما ایجاد تصاویری است که اطلاعات معنایی عنوانی را که در Imagen وارد می‌کنیم در خود محصور کند، بنابراین ما به روشی برای ترکیب عنوان در فرآیند Diffusion نیاز داریم. ما چطور میتونیم این را انجام بدیم؟

از بالا به یاد بیاورید که انکدر متن ما یک انکدر شرح دهنده عنوان را تولید کرد. این "انکد کننده" در واقع دنباله ای از بردارها است. برای تزریق این اطلاعات انکد شده به مدل Diffusion ، این بردارها را با هم ترکیب می کنیم و مدل Diffusion خود را بر اساس آنها شرط می کنیم. با شرطی کردن این بردار، مدل Diffusion یاد می‌گیرد که چگونه روش حذف نویز خود را به منظور ایجاد تصویری که به خوبی با عنوان همسو باشد، تطبیق دهد. این فرآیند را می توان در ویدیو زیر مشاهده کرد:

وضوح تصویر فوق العاده یا Image Super-Resolution

مولد تصویر، یا مدل "پایه"، یک تصویر کوچک 64x64 را خروجی می دهد. برای نمونه‌برداری از این مدل به نسخه نهایی 1024x1024، از یک مدل با وضوح فوق‌العاده (super-resolution model) برای نمونه‌برداری هوشمندانه تصویر استفاده می‌کنیم.

برای مدل با وضوح فوق العاده، Imagen دوباره از یک مدل Diffusion استفاده می کند. فرآیند کلی اساساً مشابه مدل پایه است. به جز اینکه به جای شرطی کردن صرفاً انکد کردن عنوان، تصویر کوچکتری را که نمونه اولیه است را نیز شرط می کنیم. روند کلی را می توان در ویدیوی زیر مشاهده کرد:

خروجی این مدل با وضوح فوق العاده در واقع خروجی نهایی ما نیست بلکه یک تصویر با اندازه متوسط است. برای ارتقاء این تصویر به رزولوشن نهایی 1024x1024، مدل دیگری با وضوح فوق العاده استفاده شده است. دو معماری سوپر-رزولوشن تقریباً معادل هستند، بنابراین ما با پرداختن به جزئیات مدل دوم با وضوح فوق‌العاده به این موضوع اهمیت نمی‌دهیم.

خروجی دومین مدل فوق رزولوشن خروجی نهایی Imagen است.

خلاصه

به طور خلاصه، عنوان به یک انکدر ترانسفورماتور از قبل آموزش دیده و منجمد-ثابت وارد می شود که دنباله ای از بردارها (انکد کننده ی متن) را خروجی می دهد. این بردارها مهم هستند زیرا آنها نحوه ارتباط کلمات در عنوان با یکدیگر را انکد می کنند و به عنوان اطلاعات شرطی برای سایر اجزای مدل عمل می کنند.

سپس متن انکد شده به یک مدل Diffusion تصویر، منتقل می‌شوند، که با نویز گاوسی شروع می‌شود و سپس به تدریج نویز را حذف می‌کند تا تصویر جدیدی تولید کند که اطلاعات معنایی درون عنوان را منعکس می‌کند. خروجی این مدل یک تصویر 64x64 پیکسل است.

پس از این، دو مدل Diffusion دیگر برای تفکیک فوق‌العاده این تصویر به اندازه نهایی 1024x1024 استفاده می‌شود که مجدداً مشروط به انکدهای متن (و همچنین تصاویر با وضوح پایین‌تر) است.

اکنون که درک از بالا به پایین از Imagen داریم، می توانیم در بخش بعدی به جزئیات بپردازیم. از طرف دیگر، به راحتی به نتایج و تجزیه و تحلیل یا سخن نهایی بروید.

نسخه کامل مقاله در اینجا


یادگیری ماشینهوش مصنوعییادگیری عمیق
کانال تلگرامی https://t.me/pcbooks جهت خواندن کتاب های تخصصی کامپیوتر
شاید از این پست‌ها خوشتان بیاید