طراحی تصاویر با استفاده از شبکه های عصبی: بدون عرفان، فقط فحش دادن. Ostagram: یک سرویس مبتنی بر شبکه عصبی که عکس ها و زیور آلات را در شاهکارهای هنری ترکیب می کند و در اینجا یک ویدیو است، اما فقط با بافت مناسب

در معمولی ترین عکس ها، موجودیت های متعدد و نه کاملاً قابل تشخیص ظاهر می شوند. اغلب به دلایلی سگ ها. چنین تصاویری در ژوئن 2015، زمانی که DeepDream از Google راه اندازی شد، اینترنت را پر کرد - یکی از اولین خدمات باز مبتنی بر شبکه های عصبی و طراحی شده برای پردازش تصویر.

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

ابتدا این پروژه به عنوان منبع باز ارائه شد و سپس خدمات آنلاین ایجاد شده بر اساس همان اصول در اینترنت ظاهر شد. یکی از راحت‌ترین و محبوب‌ترین آنها Deep Dream Generator است: پردازش یک عکس کوچک در اینجا فقط حدود 15 ثانیه طول می‌کشد (قبلاً کاربران مجبور بودند بیش از یک ساعت منتظر بمانند).

چگونه شبکه های عصبی ایجاد چنین تصاویری را یاد می گیرند؟ و به هر حال، چرا آنها به این نام خوانده می شوند؟

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

الگوریتم های بازی شطرنج، به عنوان مثال، بازی های شطرنج را تجزیه و تحلیل می کنند. در همین مسیر، الگوریتم AlphaGo گوگل DeepMind به بازی چینی Go - که به عنوان یک پیشرفت مورد استقبال قرار گرفت، زیرا Go بسیار پیچیده تر و غیرخطی تر از شطرنج است.

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

    یوتیوب همچنین دارای یک سری نقاشی های قابل فهم با دست است غلطک هادر مورد نحوه عملکرد شبکه های عصبی

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

ظاهراً بخش الگوریتمی سرویس، اصلاح برنامه سبک عصبی است که قبلاً در مورد آن صحبت کردیم.

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

علاوه بر این، رنگ آمیزی در اینجا تنها حدود 1 دقیقه طول می کشد.

همین شرکت توسعه همچنین سرویسی را راه اندازی کرد که انواع مختلف اشیاء را در تصاویر تشخیص می دهد.

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

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

از زمانی که محققان آلمانی دانشگاه توبینگن ایده خود را در مورد امکان انتقال سبک هنرمندان مشهور به عکس های دیگر در آگوست 2015 ارائه کردند، خدماتی ظاهر شدند که از این فرصت درآمدزایی می کنند. در بازار غرب و در بازار روسیه - نسخه کامل آن راه اندازی شد.

به نشانک ها

علیرغم این واقعیت که Ostagram در ماه دسامبر راه اندازی شد، در اواسط آوریل شروع به محبوبیت سریع در شبکه های اجتماعی کرد. در همان زمان، تا 19 آوریل، کمتر از هزار نفر در پروژه VKontakte بودند.

برای استفاده از این سرویس، باید دو تصویر تهیه کنید: یک عکس که نیاز به پردازش دارد، و یک عکس با نمونه ای از سبک برای پوشش روی تصویر اصلی.

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

دو نسخه پولی وجود دارد: Premium تصویری تا 700 پیکسل در طولانی‌ترین ضلع تولید می‌کند و 600 تکرار پردازش شبکه عصبی را روی تصویر اعمال می‌کند (هرچه تکرار بیشتر باشد، پردازش جالب‌تر و فشرده‌تر است). یک چنین عکس 50 روبل هزینه خواهد داشت.

در نسخه HD، می توانید تعداد تکرارها را تنظیم کنید: 100 50 روبل و 1000 - 250 روبل هزینه دارد. در این حالت، تصویر تا 1200 پیکسل در طولانی ترین سمت وضوح خواهد داشت و می توان از آن برای چاپ روی بوم استفاده کرد: Ostagram این سرویس را با تحویل از 1800 روبل ارائه می دهد.

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

تی جی با مدیر بازرگانی پروژه تماس گرفت که خود را آندری معرفی کرد. به گفته او، Ostagram قبل از Instapainting ظاهر شد، اما از پروژه مشابهی به نام Vipart الهام گرفت.

Ostagram توسط گروهی از دانشجویان NNSTU توسعه داده شد. الکسیوا: پس از آزمایش اولیه روی یک گروه محدود از دوستان در پایان سال 2015، آنها تصمیم گرفتند این پروژه را عمومی کنند. در ابتدا پردازش تصویر کاملا رایگان بود و قرار بود با فروش تابلوهای چاپ شده درآمد کسب کنند. به گفته آندری، چاپ بزرگ‌ترین مشکل بود: عکس‌های افراد پردازش‌شده توسط شبکه عصبی به ندرت برای چشم انسان خوشایند به نظر می‌رسند و مشتری نهایی باید قبل از اعمال آن روی بوم، نتیجه را برای مدت طولانی تنظیم کند. به منابع ماشینی زیادی نیاز دارد.

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

مخاطبان پروژه روزانه حدود هزار نفر است، اما در برخی روزها به دلیل انتقال از رسانه های خارجی که قبلاً قبل از رسانه های داخلی متوجه پروژه شده بودند، به 40 هزار نفر می رسید (Ostagram حتی موفق به همکاری با دی جی های اروپایی شد). در شب، زمانی که ترافیک کم است، پردازش تصویر ممکن است 5 دقیقه طول بکشد و در طول روز تا یک ساعت طول بکشد.

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

تا به امروز، چشم انداز بازپرداخت مشروط است. اگر هر کاربر 10 روبل برای پردازش بپردازد، شاید نتیجه دهد. […]

کسب درآمد در کشور ما بسیار دشوار است: مردم ما آماده اند یک هفته صبر کنند، اما یک ریال هم برای آن پرداخت نخواهند کرد. اروپایی‌ها بیشتر از این - از نظر پرداخت هزینه برای افزایش سرعت، بهبود کیفیت - مطلوب‌تر هستند، بنابراین جهت‌گیری به آن بازار می‌رود.

آندری، نماینده Ostagram

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

نمونه کارهای خدماتی

در فید در وب سایت Ostagram، همچنین می توانید ببینید که چه ترکیبی از تصاویر منجر به عکس های نهایی شده است: اغلب این حتی از خود نتیجه جالب تر است. در همان زمان، فیلترها - تصاویری که به عنوان جلوه ای برای پردازش استفاده می شوند - می توانند برای استفاده بیشتر ذخیره شوند.

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


تجسم و درک شبکه های کانولوشن (28 نوامبر 2013)

اول از همه، شایان ذکر است مقاله ای که در آن نویسندگان توانستند نشان دهند که یک شبکه عصبی یک جعبه سیاه نیست، بلکه یک چیز قابل تفسیر است (به هر حال، امروز این را می توان نه تنها در مورد شبکه های کانولوشن برای رایانه گفت: چشم انداز). نویسندگان تصمیم گرفتند یاد بگیرند که چگونه فعالیت های نورون های لایه پنهان را تفسیر کنند، برای این کار آنها از شبکه عصبی deconvolutional (deconvnet) که چندین سال قبل پیشنهاد شده بود (به هر حال، توسط همان Zeiler و Fergus، که نویسندگان این نشریه هستند، استفاده کردند. خوب). یک شبکه دکانولوشنال در واقع همان شبکه ای است که کانولوشن ها و ادغام ها به ترتیب معکوس اعمال می شوند. کار اصلی در deconvnet از شبکه در حالت یادگیری بدون نظارت برای تولید تصاویر استفاده کرد. این بار، نویسندگان آن را صرفاً برای عبور معکوس از ویژگی‌های به‌دست‌آمده پس از عبور از شبکه به سمت تصویر اصلی استفاده کردند. نتیجه تصویری است که می تواند به عنوان سیگنالی تعبیر شود که باعث این فعال شدن روی نورون ها شده است. طبیعتاً این سؤال مطرح می شود: چگونه می توان از کانولوشن و غیرخطی عبور معکوس ایجاد کرد؟ و حتی بیشتر از آن از طریق max-pooling، این مطمئناً یک عملیات معکوس نیست. بیایید به هر سه مؤلفه نگاه کنیم.

ReLu معکوس

در شبکه های کانولوشن اغلب از تابع فعال سازی استفاده می شود ReLu(x) = حداکثر (0، x)، که باعث می شود تمام فعال سازی های روی لایه غیر منفی باشد. بر این اساس، هنگام عبور از غیر خطی، نتایج غیرمنفی نیز لازم است. برای این، نویسندگان پیشنهاد می کنند از همان ReLu استفاده کنند. از نقطه نظر معماری Theano، لازم است که عملکرد گرادیان عملیات را نادیده بگیرید (نوت بوک بی نهایت ارزشمند در دستور العمل های لازانیا وجود دارد، از آنجا شما جزئیات مربوط به کلاس ModifiedBackprop را خواهید دید).

کلاس ZeilerBackprop(ModifiedBackprop): def grad(self, inputs, out_grads): (inp,) = inputs (grd,) = out_grads #return (grd * (grd > 0).astype(inp.dtype),) # صریحاً اصلاح return (self.nonlinearity(grd),) # از غیرخطی بودن داده شده استفاده کنید

پیچیدگی معکوس

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


پیچیدگی در هنگام گام = 1

پیچیدگی در هنگام گام = 1 نسخه معکوس

پیچیدگی در هنگام گام = 2

پیچیدگی در هنگام گام = 2 نسخه معکوس

ادغام معکوس

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



نتیجه

الگوریتم تجسم بسیار ساده است:

  1. یک پاس مستقیم انجام دهید.
  2. لایه مورد نظر خود را انتخاب کنید.
  3. فعال شدن یک یا چند نورون را برطرف کنید و بقیه را ریست کنید.
  4. استنباط کنید

هر مربع خاکستری در تصویر زیر مربوط به تجسم فیلتر (که برای کانولوشن استفاده می شود) یا وزن یک نورون است و هر تصویر رنگی بخشی از تصویر اصلی است که نورون مربوطه را فعال می کند. برای وضوح، نورون های درون یک لایه به گروه های موضوعی گروه بندی می شوند. به طور کلی، ناگهان معلوم شد که شبکه عصبی دقیقاً متوجه می شود که هوبل و ویزل در کار خود در مورد ساختار سیستم بصری در مورد آن چیزی که در سال 1981 جایزه نوبل دریافت کردند، می نویسند. با تشکر از این مقاله، ما یک نمایش بصری از آنچه که یک شبکه عصبی کانولوشن در هر لایه می آموزد، دریافت کردیم. این دانش است که بعداً امکان دستکاری محتویات تصویر تولید شده را فراهم می کند، اما این هنوز خیلی دور است، چند سال آینده به سمت بهبود روش های "ترپناسیون" شبکه های عصبی رفته است. علاوه بر این، نویسندگان مقاله روشی را برای تجزیه و تحلیل بهترین روش ساخت معماری یک شبکه عصبی کانولوشن برای دستیابی به نتایج بهتر پیشنهاد کردند (با این حال، آنها برنده ImageNet 2013 نشدند، اما در صدر قرار گرفتند. UPD: معلوم است که آنها بردند، کلاریفای همان چیزی است که هستند).


تجسم ویژگی


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


نقشه های برجسته با استفاده از deconvnet

Deep Inside Convolutional Networks: Visualizing Image Classification Models and Saliency Maps (19 آوریل 2014)

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

تجسم مدل کلاس

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



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


def compile_saliency_function(net): """ تابعی را برای محاسبه نقشه های برجسته و کلاس های پیش بینی شده برای یک دسته کوچک از تصاویر ورودی کامپایل می کند. """ inp = net["input"].input_var outp = lasagne.layers.get_output(net ["fc8"]، deterministic=True) max_outp = T.max(outp، axis=1) saliency = theano.grad(max_outp.sum()، wrt=inp) max_class = T.argmax(outp، axis=1) بازگشت theano.function(, )

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

  1. تصویر اولیه را با صفر مقداردهی کنید.
  2. مقدار مشتق را از این تصویر محاسبه کنید.
  3. تصویر را با اضافه کردن تصویر حاصل از مشتق به آن تغییر دهید.
  4. به مرحله 2 برگردید یا از حلقه خارج شوید.

تصاویر به دست آمده عبارتند از:




اما اگر اولین تصویر را با یک عکس واقعی مقداردهی اولیه کنید و همین روند را شروع کنید چه؟ اما در هر تکرار یک کلاس تصادفی را انتخاب می کنیم، بقیه را صفر می کنیم و مقدار مشتق را محاسبه می کنیم، سپس چنین رویای عمیقی می گیریم.


احتیاط 60 مگابایت


چرا این همه صورت و چشم سگ وجود دارد؟ ساده است: تقریباً 200 سگ در شبکه تصویر از 1000 کلاس وجود دارد، آنها چشم دارند. و همچنین بسیاری از کلاس ها که در آن فقط افراد وجود دارند.

استخراج برجستگی کلاس

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


نقشه های برجسته با استفاده از مشتق


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

تلاش برای سادگی: شبکه همه جانبه (13 آوریل 2015)

این مقاله به طور کلی در مورد تجسم نیست، بلکه در مورد این واقعیت است که جایگزینی Pooling با یک پیچش با یک گام بزرگ منجر به از دست دادن کیفیت نمی شود. اما به عنوان محصول جانبی تحقیقات خود، نویسندگان روش جدیدی را برای تجسم ویژگی‌ها پیشنهاد کردند که از آن برای تجزیه و تحلیل دقیق‌تر آنچه مدل یاد می‌گیرد استفاده کردند. ایده آنها به این صورت است: اگر ما به سادگی مشتق را بگیریم، آنگاه ویژگی هایی که در تصویر ورودی کمتر از صفر بودند در حین دکانولوشن (با استفاده از ReLu برای تصویر ورودی) به عقب بر نمی گردند. و این منجر به این واقعیت می شود که مقادیر منفی در تصویر پشت منتشر شده ظاهر می شود. از سوی دیگر، اگر از deconvnet استفاده می‌کنید، ReLu دیگری از مشتق ReLu گرفته می‌شود - این به شما امکان می‌دهد مقادیر منفی را پشت سر نگذارید، اما همانطور که دیدید، نتیجه "چنین" است. اما اگر این دو روش را با هم ترکیب کنیم چه؟




class GuidedBackprop(ModifiedBackprop): def grad(self, inputs, out_grads): (inp,) = inputs (grd,) = out_grads dtype = inp.dtype بازگشت (grd * (inp > 0).atype(dtype) * (grd > 0).atype(dtype)،)

سپس یک تصویر کاملا تمیز و قابل تفسیر به دست می آورید.


نقشه های برجستگی با استفاده از پس انتشار هدایت شده

عمیق تر برو

حالا بیایید فکر کنیم، این چه چیزی به ما می دهد؟ به شما یادآوری می کنم که هر لایه کانولوشن تابعی است که یک تانسور سه بعدی را به عنوان ورودی دریافت می کند و همچنین یک تانسور سه بعدی را به عنوان خروجی تولید می کند، شاید با ابعاد متفاوت. دایکس wایکس ساعت; د epth تعداد نورون های لایه است که هر یک از آنها یک نقشه ویژگی با اندازه تولید می کنند w igth x ساعتهشت


بیایید آزمایش زیر را در شبکه VGG-19 امتحان کنیم:



conv1_2

بله، شما تقریبا هیچ چیز نمی بینید، زیرا. ناحیه پذیرش بسیار کوچک است، این دومین پیچیدگی 3x3 است، به ترتیب، مساحت کل 5x5 است. اما با بزرگنمایی، می بینیم که این ویژگی فقط یک آشکارساز گرادیان است.




conv3_3


conv4_3


conv5_3


استخر 5


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


conv1_1


conv2_2


conv4_3


می توانید دیتابیس کامل تری از فعال سازی های چند تصویر و .

الگوریتم عصبی سبک هنری (2 سپتامبر 2015)

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

از دست دادن محتوا

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




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



برای آزمایش این مقاله، می توانید از این لپ تاپ جادویی استفاده کنید، جایی که محاسبات در آن انجام می شود (هم روی GPU و هم روی CPU). GPU برای محاسبه ویژگی های شبکه عصبی و مقدار تابع هزینه استفاده می شود. Theano تابعی را تولید می کند که می تواند گرادیان تابع هدف را محاسبه کند eval_gradتوسط تصویر ورودی ایکس. سپس به lbfgs وارد می شود و فرآیند تکراری شروع می شود.


# مقداردهی اولیه را با یک تصویر نویز ایجاد کنید. = xs.append(x0) # Optimize، ذخیره نتیجه به صورت دوره ای برای i در محدوده(8): print(i) scipy.optimize.fmin_l_bfgs_b(eval_loss, x0.flatten(), fprime=eval_grad, maxfun=40) x0 = generated_image.get_value().atype("float64") xs.append(x0)

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


از دست دادن محتوا: conv4_2



فرآیند بهینه سازی




به راحتی می توان به دو ویژگی تصویر حاصل توجه کرد:

  • رنگ های از دست رفته - این نتیجه این واقعیت است که در یک مثال خاص فقط از لایه conv4_2 استفاده شده است (یا به عبارت دیگر وزن w برای آن غیر صفر و برای لایه های دیگر صفر بود). همانطور که به یاد دارید، این لایه های اولیه هستند که حاوی اطلاعاتی در مورد رنگ ها و انتقال گرادیان هستند، و لایه های بعدی حاوی اطلاعاتی در مورد جزئیات بزرگتر هستند، چیزی که ما مشاهده می کنیم - رنگ ها گم می شوند، اما محتوا نیست.
  • برخی از خانه ها "بیا برویم"، یعنی. خطوط مستقیم کمی منحنی هستند - این به این دلیل است که هر چه لایه عمیق تر باشد، اطلاعات کمتری در مورد موقعیت مکانی ویژگی موجود در آن وجود دارد (نتیجه اعمال کانولوشن ها و ادغام ها).

افزودن لایه های اولیه بلافاصله وضعیت را با رنگ ها اصلاح می کند.


از دست دادن محتوا: conv1_1، conv2_1، conv4_2


امیدواریم تا به حال این احساس را داشته باشید که بر آنچه که در تصویر نویز سفید ترسیم می شود، کنترل دارید.

از دست دادن سبک

و اکنون به جالب ترین آنها رسیدیم: چگونه می توانیم سبک را منتقل کنیم؟ استایل چیست؟ بدیهی است که سبک آن چیزی نیست که در Content Loss بهینه سازی کرده ایم، زیرا حاوی اطلاعات زیادی در مورد موقعیت مکانی ویژگی ها است.بنابراین اولین کاری که باید انجام دهید این است که به نحوی این اطلاعات را از نماهای دریافتی در هر لایه حذف کنید.


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




سپس Style Loss به صورت زیر وارد می شود که در آن سیک تصویر با سبک است:



آیا برای وینسنت تلاش کنیم؟ در اصل، ما چیزی مورد انتظار را دریافت می کنیم - سر و صدا به سبک ون گوگ، اطلاعات در مورد آرایش فضایی ویژگی ها به طور کامل از بین می رود.


وینسنت




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


عکس با افت سبک


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




از دست دادن سبک ساده

ضرر ترکیبی

به طور طبیعی، تمایل به ترکیب این دو تابع هزینه وجود دارد. سپس چنین تصویری را از نویز سفید تولید خواهیم کرد که ویژگی‌هایی را از محتوا-تصویر (که دارای مختصات فضایی هستند) حفظ می‌کند، و همچنین ویژگی‌های «سبکی» وجود خواهد داشت که به مختصات فضایی گره نمی‌خورند، یعنی. امیدواریم جزئیات تصویر محتوا را دست نخورده نگه داریم، اما با سبک مناسب دوباره ترسیم شوند.



در واقع یک تنظیم کننده نیز وجود دارد، اما برای سادگی آن را حذف می کنیم. پاسخ به این سوال باقی می ماند: از چه لایه هایی (وزن) در بهینه سازی استفاده کنیم؟ و من می ترسم که من و نویسندگان مقاله پاسخی برای این سوال نداشته باشم. آنها پیشنهادی برای استفاده از موارد زیر دارند، اما این به هیچ وجه به این معنی نیست که ترکیب دیگری بدتر کار خواهد کرد، فضای جستجو خیلی بزرگ است. تنها قاعده ای که از درک مدل به دست می آید این است که گرفتن لایه های همسایه بی معنی است، زیرا علائم آنها تفاوت زیادی با یکدیگر نخواهد داشت، بنابراین یک لایه از هر گروه conv*_1 به سبک اضافه می شود.


# تعریف تلفات تابع از دست دادن = # از دست دادن محتوا losses.append(0.001 * content_loss(photo_features, gen_features, "conv4_2")) # style loss losses.append(0.2e6 * style_loss(art_features, gen_features, "conv1_1")) losses.append (0.2e6 * style_loss(art_features، gen_features، "conv2_1")) losses.append(0.2e6 * style_loss(art_features, gen_features, "conv3_1")) losses.append(0.2e6 * style_loss(art_features, "4e_features, "genv ) losses.append(0.2e6 * style_loss(art_features, gen_features, "conv5_1")) # total variation penalty losses.append(0.1e-7 * total_variation_loss(تصویر_تولید شده)) total_loss = مجموع (زیان)

مدل نهایی را می توان به شکل زیر ارائه کرد.




و در اینجا نتیجه خانه های با ون گوگ است.



سعی کنید روند را کنترل کنید

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




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


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


و بلافاصله می توانید یک تصویر ساده را به عنوان سبک بگیرید



نتایج








و اینجا یک vidosik است، اما فقط با بافت مناسب

شبکه‌های بافت: سنتز فید فوروارد بافت‌ها و تصاویر سبک (10 مارس 2016)

به نظر می رسد که این می تواند متوقف شود، اگر نه یک تفاوت ظریف. الگوریتم یک ظاهر طراحی فوق برای مدت بسیار طولانی کار می کند. اگر پیاده‌سازی را در نظر بگیریم که در آن lbfgs روی CPU اجرا می‌شود، این فرآیند حدود پنج دقیقه طول می‌کشد. اگر آن را بازنویسی کنید تا بهینه سازی به پردازنده گرافیکی برود، فرآیند 10-15 ثانیه طول می کشد. خوب نیست. شاید نویسندگان این مقاله و مقاله بعدی به همین موضوع فکر کرده باشند. هر دو نشریه به فاصله 17 روز، تقریباً یک سال پس از مقاله قبلی، به طور مستقل منتشر شدند. نویسندگان مقاله فعلی، مانند نویسندگان مقاله قبلی، درگیر تولید بافت هستند (اگر فقط Style Loss را بازنشانی کنید، این تقریباً همان چیزی است که دریافت می کنید). آنها پیشنهاد کردند که نه یک تصویر به دست آمده از نویز سفید، بلکه برخی از شبکه های عصبی که یک تصویر تلطیف شده تولید می کند، بهینه شود.




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



تلفات ادراکی برای انتقال سبک در زمان واقعی و وضوح فوق العاده (27 مارس 2016)

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




بر این اساس بلوک باقیمانده و بلوک تبدیل.



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

پایان

ما از اطلاعات مقالات بررسی شده و کد نویسندگان به عنوان نقطه شروع برای ایجاد یک برنامه سبک دیگر برای اولین برنامه استایلینگ ویدیو استفاده کردیم:



چیزی شبیه به این تولید کنید.