ARTICLE

ARTICLE

خط چشم انداز رایانه ای ، قسمت 4: استخراج ویژگی

از آموزش عمیق برای سیستم های بینایی توسط محمد الجندی

در این بخش ، ما نگاهی به استخراج ویژگی ها بیندازید - یکی از اجزای اصلی خط لوله بینایی رایانه. فقط کافی است fccelgendy را در جعبه کد تخفیف در هنگام پرداخت در manning.com وارد کنید. ________________________________________________________________________

قسمت 1 را برای معرفی خط لوله دید رایانه ، قسمت 2 را برای مرور کلی تصاویر ورودی و قسمت 3 را برای پیش پردازش تصویر مطالعه کنید.

استخراج ویژگی

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

یکی از ویژگی های یادگیری ماشین یک فرد است ویژگی یا ویژگی قابل اندازه گیری پدیده ای که مشاهده می شود. ویژگی ها ورودی ای هستند که به مدل یادگیری ماشین خود وارد می کنید تا یک پیش بینی یا طبقه بندی را تولید کنید. فرض کنید که می خواهید قیمت یک خانه را پیش بینی کنید ، ویژگی های ورودی (خواص) شما ممکن است شامل: مربع_پا ، تعداد_اتاقها ، حمام و غیره باشد و مدل قیمت پیش بینی شده را بر اساس مقادیر ویژگی های شما نشان می دهد. انتخاب ویژگی های خوب که به وضوح اشیاء شما را متمایز می کند ، قدرت پیش بینی الگوریتم های یادگیری ماشین را افزایش می دهد.

ویژگی بینایی رایانه چیست؟

در بینایی رایانه ، یک ویژگی یک قطعه قابل اندازه گیری است داده های موجود در تصویر شما که منحصر به این شیء خاص است. ممکن است یک رنگ متمایز در یک تصویر یا یک شکل خاص مانند خط ، لبه یا بخش تصویر باشد. یک ویژگی خوب برای تشخیص اشیاء از یکدیگر استفاده می شود. به عنوان مثال ، اگر به شما ویژگی ای مانند چرخ بدهم ، و از شما بخواهم حدس بزنید که این وسیله موتورسیکلت است یا سگ. حدس شما چه خواهد بود؟ یک موتور سیکلت. درست! در این مورد ، چرخ یک ویژگی قوی است که به وضوح بین موتور سیکلت و سگ تمایز قائل می شود. اگر همان ویژگی (چرخ) را به شما بدهم و از شما بخواهم حدس بزنید که شی دوچرخه است یا موتورسیکلت. در این مورد ، این ویژگی به اندازه کافی قوی نیست که بین هر دو شیء تمایز قائل شود. سپس باید به دنبال ویژگی های بیشتری مانند آینه ، پلاک ، شاید پدالی باشیم که به طور جمعی یک شی را توصیف می کند.

در پروژه های یادگیری ماشین ، می خواهیم داده های خام (تصویر) را به بردار ویژگی ها تبدیل کنیم. برای نشان دادن الگوریتم یادگیری ما نحوه یادگیری ویژگی های شی.

در تصویر بالا ، ما تصویر ورودی خام موتورسیکلت را به الگوریتم استخراج ویژگی تغذیه می کنیم. بیایید الگوریتم استخراج ویژگی را به عنوان یک جعبه سیاه در نظر بگیریم و به زودی به آن باز خواهیم گشت. در حال حاضر ، ما باید بدانیم که الگوریتم استخراج یک بردار تولید می کند که لیستی از ویژگی ها را شامل می شود. به این می گویند بردار ویژگی ها که یک آرایه 1 بعدی است که نمای قوی از شی را ایجاد می کند.

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

اگر برای مثال ویژگی چرخ را در نظر بگیریم ، این ویژگی دقیقاً شبیه چرخ تنها در یک موتورسیکلت نخواهد بود. در عوض ، به نظر می رسد یک شکل دایره ای با برخی الگوها است که چرخ ها را در همه تصاویر موجود در مجموعه داده آموزشی مشخص می کند. وقتی ویژگی استخراج هزاران تصویر از موتورسیکلت ها را می بیند ، الگوهایی را تشخیص می دهد که به طور کلی چرخ ها را بدون توجه به جایی که در تصویر نشان داده می شود و نوع موتورسیکلت آن مشخص می کند.

چه ویژگی خوب (مفید) می سازد ؟

مدلهای یادگیری ماشین فقط به اندازه ویژگیهایی که ارائه می دهید خوب هستند. این بدان معناست که ارائه ویژگی های خوب یک کار مهم در ساخت مدل های ML است. اما ویژگی خوب آن چیست؟ و چگونه می توانید بگویید؟

بیایید با یک مثال در این مورد بحث کنیم: فرض کنید ما می خواهیم طبقه بندی کننده ای بسازیم تا تفاوت بین دو نوع سگ ، Greyhound و Labrador را تشخیص دهد. بیایید دو ویژگی را در نظر بگیریم و آنها را ارزیابی کنیم: 1) قد سگها و 2) رنگ چشم آنها.

بیایید با ارتفاع شروع کنیم. به نظر شما این ویژگی چقدر مفید است؟ خوب ، به طور متوسط ​​، تازی ها چند اینچ بلندتر از لابرادورها هستند ، اما نه همیشه. تنوع زیادی در جهان وجود دارد. بیایید این ویژگی را در مقادیر مختلف در جمعیت هر دو نژاد ارزیابی کنیم. ما می توانیم توزیع ارتفاع را بر روی نمونه اسباب بازی در هیستوگرام زیر تجسم کنیم:

< /img>

از هیستوگرام بالا ، می بینیم که اگر قد سگ بیست اینچ یا کمتر باشد ، بیش از 80٪ احتمال دارد که این سگ لابرادور باشد. در طرف دیگر هیستوگرام ، اگر به سگهای بلندتر از 30 اینچ نگاه کنیم ، می توانیم کاملا مطمئن باشیم که سگ تازی است. حال ، داده های وسط هیستوگرام (ارتفاع از بیست تا سی اینچ) چطور؟ ما می بینیم که احتمال هر نوع سگ بسیار نزدیک است. فرایند فکر در این مورد به شرح زیر است:

اگر ارتفاع <= 20: احتمال بیشتر را به لابرادور

اگر ارتفاع> = 30: بازگشت احتمال بیشتر به تازی

اگر 20 <ارتفاع> 30: برای طبقه بندی جسم به دنبال ویژگی های دیگر باشید

"قد" سگ در این مورد یک ویژگی مفید است زیرا به تشخیص (افزودن اطلاعات) بین هر دو سگ کمک می کند انواع ما می توانیم آن را نگه داریم ، اما در همه موارد بین Greyhounds و Labradors تمایزی قائل نمی شود ، که خوب است. در پروژه های ML ، معمولاً هیچ ویژگی خاصی وجود ندارد که بتواند همه اشیاء را به تنهایی طبقه بندی کند. به همین دلیل است که با یادگیری ماشین تقریباً همیشه به ویژگی های متعددی نیاز داریم که در آن هر ویژگی نوع متفاوتی از اطلاعات را ضبط می کند. اگر فقط یک ویژگی این کار را انجام دهد ، می توانیم به جای ایجاد مشکل در آموزش طبقه بندی ، دستور if-else را بنویسیم.

مشابهآنچه را که قبلاً با تبدیل رنگ (رنگ در مقابل مقیاس خاکستری) انجام دادیم ، برای فهمیدن اینکه از کدام ویژگی باید برای یک مشکل خاص استفاده کنید ، یک آزمایش فکری انجام دهید. وانمود کنید که طبقه بندی کننده هستید. اگر می خواهید بین تازی و لابرادور تمایز قائل شوید ، چه اطلاعاتی را باید بدانید؟ ممکن است در مورد طول مو یا اندازه بدن ، رنگ و موارد دیگر بپرسید.

یک مثال سریع دیگر از ویژگی های غیر مفید برای هدایت این ایده به خانه. بیایید رنگ چشم را بررسی کنیم. برای این مثال اسباب بازی ، تصور کنید که ما فقط دو رنگ چشم داریم ، آبی و قهوه ای. در اینجا می بینید که هیستوگرام برای این مثال چگونه است:

< p> واضح است که برای اکثر مقادیر ، توزیع حدود 50/50 برای هر دو نوع است. عملاً این ویژگی به ما چیزی نمی گوید زیرا با نوع سگ ارتباط ندارد. بنابراین ، بین تازی ها و لابرادورها تفاوتی قائل نمی شود.

قابل شناسایی به راحتی قابل ردیابی و مقایسه در مقیاس های مختلف ، شرایط نور و زوایای دید سازگار است < /uli> هنوز در تصاویر پر سر و صدا یا هنگامی که فقط قسمتی از یک شی قابل مشاهده است قابل مشاهده است

استخراج ویژگی ها (کار دستی در مقابل استخراج خودکار)

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

یادگیری ماشین سنتی از ویژگی های دست ساز استفاده می کند

در مشکلات سنتی یادگیری ماشین ، ما زمان زیادی را در انتخاب ویژگی های دستی صرف می کنیم و مهندسی در این فرآیند ما به دانش حوزه خود (یا مشارکت با متخصصان حوزه) برای ایجاد ویژگی هایی که باعث می شود الگوریتم های یادگیری ماشین بهتر کار کنند ، متکی هستیم. سپس برای پیش بینی خروجی ، ویژگی های تولید شده را به یک دسته بندی مانند Support Vector Machines (SVM) یا Adaboost می دهیم. برخی از مجموعه ویژگی های دست ساز عبارتند از: سرعت بخشیدن به ویژگی قوی (SURF)

یادگیری عمیق به طور خودکار ویژگی ها را استخراج می کند

در یادگیری عمیق ، نیازی به استخراج دستی ویژگی ها از تصویر نداریم. شبکه به طور خودکار ویژگی ها را استخراج می کند و با اعمال وزنه به اتصالات خود اهمیت آنها را در خروجی می آموزد. شما تصویر خام را به شبکه تغذیه می کنید و با عبور از لایه های شبکه ، الگوهای درون تصویر را برای ایجاد ویژگی ها مشخص می کند. شبکه های عصبی را می توان به عنوان استخراج کننده های ویژگی + طبقه بندی کننده در نظر گرفت که در مقایسه با مدل های سنتی ML که از ویژگی های دست ساز استفاده می کنند ، قابل آموزش هستند.

چگونه شبکه های عصبی ویژگی های مفید را از ویژگی های غیر مفید تشخیص می دهند؟

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

چرا از ویژگی ها استفاده کنیم؟

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

مثال زیر را در نظر بگیرید. فرض کنید به ما مجموعه داده ای از 10000 تصویر موتورسیکلت داده می شود که هرکدام 1000 عرض و 1000 ارتفاع دارند. برخی از تصاویر دارای پس زمینه محکم و برخی دیگر دارای پس زمینه مشغول داده های غیر ضروری هستند. وقتی این هزاران تصویر با الگوریتم های استخراج ویژگی تغذیه می شوند ، ما تمام داده های غیر ضروری که برای شناسایی موتورسیکلت ها مهم نیستند را از دست می دهیم و فقط یک لیست تلفیقی از ویژگی های مفید را نگه می داریم که می تواند مستقیماً به طبقه بندی کننده داده شود. این فرایند بسیار ساده تر از این است که طبقه بندی کننده مجموعه داده ای از 10000 تصویر را برای یادگیری خواص موتورسیکلت ها بررسی کند.

فعلا این همه. قسمت 5 را ملاحظه فرمایید ، اگر علاقمند به کسب اطلاعات بیشتر در مورد کتاب هستید ، آن را در liveBook اینجا ببینید و این اسلاید را مشاهده کنید.

ابتدا در https: //freecontent.manning منتشر شده است. com.

Kornia الهام گرفته از OpenCV یک کتابخانه دید رایانه ای متمایز برای PyTorch

Kornia الهام گرفته از OpenCV یک کتابخانه دید رایانه ای متمایز برای PyTorch

< /img>

OpenCV محبوب ترین کتابخانه پردازش تصویر امروز است که همه چیز را از الگوریتم های پردازش تصویر کلاسیک گرفته تا مدل های از پیش آموزش پیشرفته عمیق پوشش می دهد. اما از آنجا که OpenCV قابل تمایز نیست ، عمدتا بر کارهای پیش پردازش تمرکز می کند و نمی تواند در یک فرایند آموزشی کامل گنجانده شود. این نقص ، ادگار ریبا ، محقق تحقیق OpenCV.org را بر آن داشت تا کتابخانه جدید بینایی رایانه ای متمایز ، "Kornia" را پیشنهاد کند که اکنون در GitHub منبع باز شده است.

با الهام از OpenCV ، Kornia بر اساس PyTorch و برای حل مشکلات بینایی رایانه عمومی طراحی شده است. این شامل مجموعه ای از روالها برای انجام تبدیل فضای رنگ و ماژول های متمایز برای انجام وظایفی مانند فیلتر کردن تصویر و تشخیص لبه است. کد اصلی Kornia می تواند شیب عملکردهای پیچیده را با تمایز خودکار حالت معکوس به طور موثر تعریف و محاسبه کند.

نحوه برخورد Kornia با پردازش تمایز

Kornia شامل بسته های زیرمجموعه ای است که دارای اپراتورهایی است که می توان آنها را در شبکه های عصبی قرار داد تا مدل ها را قادر به انجام وظایفی مانند تغییر تصویر ، هندسه دو قطبی و برآورد عمق کند.

اجزای اصلی کتابخانه Kornia

استفاده از Kornia آسان است ، و مستندات API و آموزش های آن در صفحه پروژه Kornia موجود است.

< /img>

پروژه Kornia همچنین تعدادی نوت بوک Jupyter ارائه می دهد که موارد استفاده مختلف را به نمایش می گذارد. مثال زیر مراحل استخراج ویژگی های تصویر را برای توصیف کننده های محلی با استفاده از Kornia نشان می دهد: . وصله های تصویر را بر اساس ویژگی ها استخراج کرده و برای پردازش بعدی آماده کنید. وصله های استخراج شده تصویر را می توان برای ساخت بیشتر تنسورها با استفاده از روش SIFT استفاده کرد.

یکی از مشارکت کنندگان اصلی Kornia ، Dmytro Mishkin از دانشکده مهندسی برق در دانشگاه فنی چک ، می گوید تیم تحقیق از بازخورد جامعه AI برای کمک به گسترش و استقبال می کند Kornia و فیلترهای مختلف ، هندسه و ویژگی های محلی آن را بهبود بخشید.

مقاله Kornia: یک کتابخانه چشم انداز رایانه ای متمایز منبع باز برای PyTorch در arXiv است.

نویسنده: Heri n ژائو | ویرایشگر: Michael Sarazen

ما می دانیم که شما نمی خواهید هیچ داستانی را از دست بدهید. برای دریافت به روزرسانی های هفتگی هوش مصنوعی ، در هفته نامه محبوب Synced Global AI ما مشترک شوید.

به مرور جامع گذشته ، حال و آینده توسعه تحقیقات مدرن هوش مصنوعی نیاز دارید؟ گزارش روندهای توسعه فناوری AI منتشر شد!

گزارش تطبیق پذیری هوش مصنوعی شرکت Fortune Global 500 2018 منتشر شد! یک گزارش فرمت Kindle در آمازون خریداری کنید. برای دریافت گزارش PDF کامل از Insight Partner درخواست دهید.

CycleGAN ها برای ایجاد هنرهای تولید شده توسط کامپیوتر

CycleGAN ها برای ایجاد هنرهای تولید شده توسط کامپیوتر

توضیحی در مورد CycleGAN ها و نمایش هنرهای تولید شده توسط کامپیوتر

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

این رقم از مقاله CycleGAN اصلی گرفته شده است.

در اینجا ، من مروری دقیق بر نحوه عملکرد CycleGAN ها خواهد داشت. این پست فرض می کند که شما حداقل با GAN آشنایی دارید. بنابراین اگر با GAN آشنا نیستید ، پست وبلاگ من را با عنوان "Networks Adversarial Networks (GANs) برای مبتدیان: ایجاد تصاویر رانندگان حواس پرت" بررسی کنید.

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

مجموعه داده

در اینجا ، مجموعه داده شامل تصاویر جنگل و نقاشی های انتزاعی است. من این تصاویر را با استفاده از کلمات کلیدی "جنگل" و "نقاشی های انتزاعی مشهور" از Google Images حذف کردم. برای این کار از بسته پایتون Google Images Download استفاده کردم. چند نمونه در زیر آمده است.

مدل

هنگام آموزش CycleGAN ، چهار شبکه عصبی وجود دارد که باید آموزش ببینند:

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

آموزش مدل

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

آموزش CycleGAN. این رقم از CycleGAN اصلی اقتباس شده استمقاله.

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

خوب حالا اجازه دهید وارد جزئیات شویم! هنگام آموزش مدل ، اساساً دو مرحله وجود دارد: آموزش ژنراتورها و سپس تشخیص دهندگان.

آموزش ژنراتورها

درست مانند هر شبکه عصبی ، ما باید ضرر را محاسبه کنیم ( در این مورد برای ژنراتورها) و از نزول شیب تصادفی با انتشار عقب (یعنی قانون زنجیره) برای محاسبه گرادیان ها و به روز رسانی وزن ها با توجه به این شیب ها استفاده کنید. اما چگونه تلفات ژنراتور را محاسبه کنیم؟ این ضرر در واقع شامل چند جزء مختلف است.

ابتدا ، تلفات GAN را برای مولد نقاشی انتزاعی محاسبه می کنیم (در "چرخه" در قسمت زیر سایه زرد شکل زیر قرار داریم). این کار با گرفتن یک تصویر جنگلی واقعی و قرار دادن آن در ژنراتور نقاشی انتزاعی برای ایجاد یک نقاشی انتزاعی جعلی انجام می شود. سپس نقاشی انتزاعی جعلی از طریق تمایز نقاشی انتزاعی قرار داده می شود. ما می توانیم خروجی تشخیص دهنده را این احتمال بدانیم که تصویر یک نقاشی انتزاعی واقعی است. سپس خروجی تشخیص دهنده با از دست دادن دوتایی آنتروپی ارزیابی می شود. این از دست دادن GAN درد انتزاعی است. img>

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

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

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

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

شکل 9 از CycleGAN مقاله.

سرانجام آماده محاسبه تلفات ژنراتور هستیم که همه اجزای تلفات جمع شده است: چرخه تصویر-از دست دادن قوام + چرخه نقاشی انتزاعی-از دست دادن قوام + از دست دادن نقشه هویت تصویر جنگل + از دست دادن نقشه هویت نقاشی انتزاعی

سپس وزن تولیدکنندگان با توجه به این فقدان به روز می شود!

< p> 2 تبعیض آمیز را آموزش دهید

اکنون که وزن ژنراتورها را به روز کرده ایم ، در مرحله بعد باید تبعیض آمیز را آموزش دهیم.

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

ثانیاً ، ما وزن های تشخیص دهنده تصویر جنگل را به روز می کنیم. ما یک تصویر واقعی از جنگل را از طریق تشخیص دهنده جنگل قرار می دهیم و این خروجی را گرفته و با از دست دادن آنتروپی دوتایی ارزیابی می کنیم. سپس ، ما تصویر جنگلی جعلی ایجاد شده قبلی را گرفته ، آن را از طریق تشخیص تصویر جنگل قرار می دهیم و همچنین آن را با از دست دادن دوتایی آنتروپی ارزیابی می کنیم. سپس میانگین این دو ضرر را در نظر می گیریم. این از دست دادن تمایز تصویر جنگل است. وزن تشخیص دهنده جنگل با توجه به این از دست رفتن به روز می شود. معماری دقیق این شبکه های عصبی خوب ، البته ، الف وجود داردگزینه های زیادی برای معماری این شبکه ها وجود دارد ، اما در اینجا به طور مختصر به معماری های مورد استفاده برای ایجاد نقاشی های انتزاعی از جنگل ها اشاره می کنم. جزئیات این معماری ها ممکن است در کد مشاهده شود. ژنراتورها از معماری می آیند که قبلاً برای انتقال سبک و وضوح فوق العاده استفاده می شد (به جانسون و همکاران مراجعه کنید). معماری شبکه اساساً شامل مجموعه ای از بلوک های ResNet است که اندازه شبکه را کوچک می کند ، اندازه شبکه را ثابت نگه می دارد و سپس اندازه شبکه را مثال می زند. برای مشاهده نمودار معماری به شکل زیر مراجعه کنید.

معماری ژنراتور از جانسون و دیگران.

برای افراد متمایز ، از PatchGAN استفاده کردیم که اساساً سعی می کند طبقه بندی کند که آیا هر وصله N x N (در اینجا 70 70 70) یک تصویر واقعی است یا جعلی. برای اطلاعات بیشتر در مورد PatchGAN ، کد و این مقاله را مشاهده کنید.

تصاویر جنگل های تولید شده توسط کامپیوتر

پس از مدتی آموزش ، اجازه دهید ببینیم تصاویر جنگلی انتزاعی تولید شده توسط کامپیوتر ما چگونه به نظر می رسند! در زیر چند نمونه ذکر شده است ، اما می توانید همه آنها را در GitHub من مشاهده کنید. >

خیلی هم بد نیست! من این تصاویر را برای مسابقه هنرهای هوش مصنوعی در دانشگاه دوک ایجاد کردم و در نهایت مقام اول را کسب کردم - برای اطلاعات بیشتر اینجا را کلیک کنید.

نتیجه گیری

همانطور که در بالا مشاهده می کنید ، در واقع به نظر می رسد که رایانه ها می توانند به لطف CycleGAN در این مورد هنر تولید کنند. باز هم ، قسمت بسیار جالب CycleGAN این است که شما نیازی به تصاویر جفت شده در مجموعه داده ندارید. بسیار شگفت انگیز است که چنین چیزی امکان پذیر است! من کنجکاو خواهم بود که ببینم آیا یادگیری ماشینی بدون زوج در زمینه های دیگر مانند پردازش زبان طبیعی امکان پذیر است (شاید این قبلاً وجود داشته باشد!).

*** به روز رسانی در 1/20/2020 ***: من فراموش کردم که این پست را زودتر ارسال کنم ، اما هنر ارائه شده در اینجا در مسابقات هنری هوش مصنوعی در دانشگاه دوک مقام اول را کسب کرد. مقاله ای را توصیف کنید که این مسابقه را توصیف می کند!