یادگیری ماشین جذاب است! قسمت هفتم : استفاده از شبکه های مولد تخاصمی برای ساخت بازی ۸ بیتی

مدل های مولد ( Generative Models ) به کامپیوتر این توانایی را می  دهند تا خودش داده را به وجود آورد؛ مانند عکس ها، فیلم ها و موسیقی.

چند سال قبل، الکس رادفورد ( Alex Radford ) با همکاری ایان گودفلو ( Goodfellow ) مقاله ای را منتشر کرد که طرز تفکر به همه در مورد ساخت مدل های مولد با یادگیری ماشین را تغییر داد. سیستم جدید، شبکه های عمیق مولد تخاصمی کانولوشنی ( Deep Convolutional Generative Adversarial Networks ) نام دارد یا به اختصار DCGAN .

مجموعه ی یادگیری ماشین جذاب است!

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

تصاویر تولید شده توسط شبکه های عمیق مولد تخاصمی کانولوشنی
عکسی از مقاله ی DCGAN توسط Alec Radford

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

ولی بیاید از مدل های مولد برای انجام کارهای احمقانه تر استفاده کنیم – ساخت جلوه های هنری برای بازی های ویدیویی ۸ بیتی!

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

هدف مدل های مولد

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

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

به این تصویر نگاه کنید:

تصویر سگ
یک سگ

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

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

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

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

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

تقویم سگ ها
بله، ربات ها نهایتا جایگزین همه ی مشاغل خواهند شد.

و اگر شما بتوانید برنامه ای بسازید که سگ ها را متوجه شود، چرا نتوانید برنامه ای بسازید که چیزهای دیگر را تشخیص دهد؟ در مورد برنامه ای که بتواند بی نهایت تصویر از افرادی که با هم دست می دهند تولید کند، چطور؟ مطمئنم بعضی افراد می توانند این کار را انجام دهند.

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

بسیار خب، شاید یک برنامه که انباری از عکس های بدرد نخور را تولید می کند، آنقدر ها هم جذاب نباشد. ولی بر اساس سرعت پیشرفت مدل های مولد فقط در عرض یک سال گذشته، کسی چه می داند که ما طی ۵ تا ۱۰ سال آینده،  کجا خواهیم بود. چه می شود اگر کسی بتواند سیستمی اختراع کند که فیلم هایی کامل را تولید کند؟ یا موسیقی؟ یا بازی های ویدیویی؟

اگر شما به ۲۰ تا ۳۰ سال آینده نگاه کنید، شما می توانید جهانی را متصور شوید که ۱۰۰ درصد سرگرمی ها توسط ماشین تولید شده اند:

یک روز ما در مورد فیلم های خوب قدیمی که “دست ساز” هستند، صحبت خواهیم کرد و در عوض، حالت معمولی آن زمان محتواهای بی نهایتی خواهند بود که توسط هوش مصنوعی با توجه به تقاضای مخاطب تولید شده اند.آندره کارپاتی ( Andrei  Karpathy )

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

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

DCGAN ها چگونه کار می کنند؟

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

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

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

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

شبکه عصبی متمایز کننده تشخیص پول
شبکه متمایز کننده

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

 این شبکه عصبی دوم،  مولد نامیده می شود:

شبکه عصبی مولد تولید پول
شبکه مولد

خب،  ما الان یک افسر پلیس ( متمایز کننده ) داریم که به دنبال پول تقلبی می گردد و یک جعل کننده پول ( مولد ) که پول تقلبی تولید می کند. بیایید آن ها را به مبارزه وادار کنیم!

در راند اول، مولد سند های جعلی موثری که به سختی شبیه پول هستند را می سازد زیرا این شبکه هیچ چیز در مورد اینکه پول قرار است شبیه چه باشد، نمی داند:

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

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

شبکه متمایز کننده تشخیص پول تقلبی
متمایز کننده فکر می کند که دلار واقعی است!

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

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

شبکه متمایز کننده تشخیص بهتر
سطح متمایز کننده بالاتر می رود! حالا می تواند دلار های تقلبی بسیار بد را پیدا کند.

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

شبکه مولد تولید پول با چهره
شبکه مولد دلار تقلبی بهتری می سازد.

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

این بازی رفت و برگشتی بین مولد و جدا کننده، هزاران بار ادامه پیدا می کند تا زمانی که هر دو شبکه متخصص شوند.

نهایتاً مولد در حال تولید مواد تقلبی تقریباً کامل می باشد و متمایز کننده به یک کارآگاه ماهر تبدیل شده که به دنبال پیدا کردن کوچکترین اشتباهات می باشد.

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

استفاده از این کار در بازی های ویدیویی

خب حالا که ما می دانیم DCGAN ها چگونه کار می کنند، بیایید ببینیم که آیا می توانیم یکی از آن ها را برای تولید جلوه های هنری جدید در زمینه بازی های ویدئویی مدل ۱۹۸۰استفاده کنیم.

بیایید یک DCGAN بسازیم که تلاش می کند عکس های صفحه ی یک بازی های ویدیویی برای دستگاه بازی نینتندو NES را با استفاده از تصاویر بازی اصلی ایجاد کند.

دستگاه نینتندو nes

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

جلوه های هنری بازی های ویدیویی در آن روزها بسیار ساده بود. از آنجایی که NES از مقدار کمی حافظه برخوردار بود ( بازی ها به حافظه ی بسیار کمتری نسبت به این متن نیاز داشتند!)، برنامه نویس ها باید از تعداد زیادی از ترفندها استفاده می کردند تا این جلوه های هنری بازی را در حافظه بگنجانند. برای بزرگ کردن فضای محدود، بازی ها از گرافیک مبتنی بر تایل( Tile-Based ) استفاده می کردند که هر تصویر صفحه در بازی فقط از مقدار کمی (معمولا ۱۶ در ۱۶ پیکسل) تایل های گرافیکی تکراری ساخته شدند.

برای مثال، صفحه ی آغازی “افسانه زلدا” فقط از هشت تایل (کاشی) مجزا ساخته شده است:

صحنه ی بازی افسانه زلدا تایل ها

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

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

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

 به دست آوردن داده ها

برای آموزش سیستم خود، ما به مقدار زیادی داده نیاز داریم. خوشبختانه بیش از ۷۰۰ بازی برای NES وجود دارد که ما می توانیم اطلاعات آن ها را استخراج کنیم.

من از wget برای دانلود تصاویر صفحه های بازی های NES از وبسایت موزه بازی های ویدیویی استفاده کردم. (ببخشید که در سایت شما کند و کاو کردم!) بعد از چند دقیقه دانلود، من بیشتر از ۱۰ هزار تصویر صفحه از صد ها بازی NES داشتم :

بخشی از تصاویر صفحه از بازی های NES
فقط تعداد کمی از ۱۰ هزار تصویر صفحه که مجموعه داده ما را می سازد.

در حال حاضر، DCGAN ها فقط روی تصاویر کوچک کار می کنند؛ حدود ۲۵۶ پیکسل مربع. ولی کل وضوح تصویرNES  فقط ۲۵۶ پیکسل در ۲۲۴ پیکسل بود،  خب پس مشکلی نیست. برای ساده کردن کار،  من هر تصویر صفحه ی  NESرا به ۲۲۴ پیکسل مربع برش دادم.

راه اندازی DCGAN

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

اینجا می بینید که یک نمونه از داده آموزشی اصلی به چه صورت است:

مجموعه داده های آموزش شبکه مولد تخاصمی

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

آموزش شبکه مولد تخاصمی دوره های اپتدایی

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

آموزش شبکه مولد تخاصمی دوره های پایانی

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

آموزش شبکه مولد تخاصمی

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

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

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

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

سپس نیاز است که روی تصاویر تولید شده، پیش پردازش انجام دهیم تا مطمئن شویم آن ها فقط از ۶۴ رنگی که در NES موجود است، استفاده باشند:

رنگ های قابل استفاده NES
Nintendo اصلی فقط می تواند این ۶۴ رنگ را نشان دهد. در واقع، فقط ۵۴ رنگ متفاوت زیرا بعضی از آن ها تکرار شده اند.

پس من تصاویر ۶۴ رنگی را در Tiled Map Editor باز می کنم. از آنجا، می توانم به آسانی تایل های ۱۶ در ۱۶ که با آن زیبایی که مورد نظر من است مطابقت دارند را دریافت کنم:

تایل های استخراج شده از تصاویر تولید شده شبکه مولد تخاصمی
تایل هایی که من از تصاویر صفحه تولید شده برداشتم.

سپس از داخل Tiled Map Editor من آن تایل های ۱۶ در ۱۶ را در یک مرحله ی ساده که یاد آور بازی Castlevania از NES است، مرتب می کنم :

مرحله ساخته شده توسط شبکه مولد تخاصمی

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

حالا بیایید شخصیت اصلی و تعدادی دشمن را از Castlevania اضافه کنیم، خب الان می توانیم ببینیم که این مرحله در عمل چگونه به نظر می رسد :

بازی تولید شده با شبکه مولد تخاصمی

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

بازی کامل ساخته شده با شبکه های مولد تخاصمی
بسیار ترسناک!

فکر می کنم که شبیه بازی های NES ی که به یاد دارم، شده است! من ادعا نمی کنم که این بهترین جلوه ی هنری ممکن NES شده ، ولی مطمئنا بدترین هم نیست:

بازی cheetahmen
Cheetahmen بازی خوبی نیست.

فقط همین؟

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

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

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

ولی تا چند سال گذشته هیچ کاری نزدیک به این هم نمی توانستیم انجام دهیم. ما از دیدن تصویر تولید شده شبیه به این هم بسیار شگفت زده می شدیم:

تصویر تولید شده ی دوچرخه
این یک دوچرخه است ! قسم می خورم!

و تکنولوژی روز به روز در حال پیشرفت است. این یک مقاله است که از GANها برای پیرتر کردن چهره های مردم استفاده می کند:

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

 یادگیری را ادامه دهید

اگر می خواهید بیشتر و عمیق تر در مورد مدل های مولد و DCGAN ها یاد بگیرید، اینجا برخی منابع پیشنهادی برای شما ارائه شده است:

این متن یکی از قسمت های مجموعه ی یادگیری ماشین جذاب است، می باشد. شما می توانید قسمت های قبلی را اینجا بررسی کنید: قسمت ۱ ، قسمت ۲ ، قسمت ۳ ، قسمت ۴ ، قسمت ۵ و قسمت ۶ .

بیشتر بخوانید :

منبع Medium
0/5 (0 نظر)

درباره‌ی احمدرضا جعفری

همچنین ببینید

اپلیکیشن FaceApp شبکه عصبی

اپلیکیشن شگفت انگیز FaceApp چگونه کار می کند؟

“چه کسی صورت انسان را به درستی می بیند: عکاس، آینه یا نقاش؟” – پابلو …