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

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

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

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

برای تشخیص اشیاء دلخواه، مانند گربه ها و قورباغه ها، رنگ به وضوح مهم است: قورباغه سبز است، اما گربه ها نه. اگر کانال های رنگی را رها کنیم، برای هر پالت، شبکه دوباره یاد می گیرد که اشیاء را در تصویر تشخیص دهد، زیرا این کانال رنگی به نورون های دیگر تغذیه می شود.

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

بانک های فیلتر و بینایی بیولوژیکی

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

در زمینه بینایی ماشین، بانک های فیلتر توسعه یافته اند - مجموعه ای از فیلترها برای برجسته کردن ویژگی های اصلی اشیاء.

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

تقسیم وزن

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

این نیاز به یک معماری شبکه تخصصی دارد:

  • شبکه های کانولوشن برای کار با تصاویر
  • شبکه های تکراری برای کار با متن / دنباله
شبکه های عصبی که به طور موثر در تشخیص تصویر استفاده می شوند که از لایه های کانولوشن ویژه (لایه های پیچشی) استفاده می کنند.

ایده اصلی این است:

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


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

بیایید تابع پیچیدگی را با پارامترهای زیر توصیف کنیم:

  • هسته - هسته کانولوشن، ماتریس وزن
  • pad - چند پیکسل برای اضافه کردن به تصویر در اطراف لبه ها
  • گام - فرکانس اعمال فیلتر. برای مثال، برای stride=2، هر ثانیه پیکسل از تصویر را به صورت عمودی و افقی می گیریم و وضوح تصویر را به نصف کاهش می دهیم.
در : def convolve(تصویر، هسته، پد = 0، گام = 1): سطرها، ستون‌ها = image.شکل خروجی_ردیف‌ها = سطرها // stride output_columns = ستون‌ها // stride result = np.zeros((output_rows, output_columns)) اگر pad > 0: image = np.pad(image, pad, "constant") kernel_size = kernel.size kernel_length = kernel.shape half_kernel = kernel_length // 2 kernel_flat = kernel.reshape(kernel_size, 1) offset half_kernel-pad) برای r در محدوده (offset, rows - offset, stride): برای c در محدوده (offset, columns - offset, stride): rr = r - half_kernel + pad cc = c - half_kernel + patch pad = نتیجه تصویر = np.dot(patch.reshape(1، kernel_size)، kernel_flat) نتیجه را برمی گرداند
در : def show_convolution(kernel, stride = 1): """نمایش می دهد تاثیرمربوط به هسته داده شده است.""" fig = pylab.figure(figsize = (9,9)) gs = gridspec.GridSpec(3, 3, height_ratios=) start=1 برای i در محدوده(3): image = images_train conv = convolve(image, kernel, kernel.shape//2, stride) ax = fig.add_subplot(gs[i]) pylab.imshow(image, interpolation="nearest") ax.set_xticks() ax.set_yticks( ) ax = fig.add_subplot(gs) pylab.imshow(kernel, cmap="gray", interpolation="nearest") ax.set_xticks() ax.set_yticks() ax = fig.add_subplot(gs) pylab.imshow(conv , interpolation="نزدیکترین") ax.set_xticks() ax.set_yticks() pylab.show()
در : blur_kernel = np.array([, , , , ], dtype="float32") blur_kernel /= 273

فیلترها

محو کردن

فیلتر تاری به شما امکان می دهد برآمدگی ها را صاف کنید و بر شکل کلی اشیا تأکید کنید.


در: show_convolution(blur_kernel)

لبه های عمودی

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


در : vertical_edge_kernel = np.array([, , , , ], dtype="float32") vertical_edge_kernel /= 166
در: show_convolution(vertical_edge_kernel)

لبه های افقی

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


در : horizontal_bar_kernel = np.array([, [-2, -8, -13, -8, -2], , [-2, -8, -13, -8, -2], ], dtype=" float32") horizontal_bar_kernel /= 132
در: show_convolution(نوار_افقی_هسته)

فیلتر کانتور

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


در : blob_kernel = np.array([, , , , , , , , ], dtype="float32") blob_kernel /= np.sum(np.abs(blob_kernel))
در: show_convolution(blob_kernel)
مثال کلاسیک تشخیص رقم به این صورت عمل می کند: هر رقم دارای ویژگی های هندسی مشخصه خود است (دو دایره - شکل هشت، یک بریده بریده در نیمه تصویر - یک، و غیره)، که بر اساس آن شبکه عصبیمی تواند تعیین کند که چه نوع شی. ما فیلترهایی ایجاد می کنیم که هر رقم را مشخص می کند، هر یک از فیلترها را روی تصویر اجرا می کنیم و خطا را به حداقل می رسانیم.


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

ایده اولیه یک شبکه کانولوشن

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

تمرین با وزنه

الگوریتم این است:
  • فیلتری با وزن های یکسان برای تمام پیکسل های تصویر اعمال می شود.
  • در این حالت، فیلتر بر روی کل تصویر اجرا می شود.
  • ما می‌خواهیم این وزن‌ها را (معمول برای همه پیکسل‌ها) با استفاده از یک الگوریتم پس انتشار آموزش دهیم.
  • برای انجام این کار، باید اعمال فیلتر را به یک ضرب واحد از ماتریس کاهش دهیم.
  • برخلاف یک لایه کاملا متصل، وزنه های کمتری برای تمرین و نمونه های بیشتری وجود خواهد داشت.
  • حیله گری - im2col

im2col

بیایید با تصویر x شروع کنیم، جایی که هر پیکسل با یک حرف مطابقت دارد:

برنامه همیشه به درستی کار نمی کند. خروجی هیولاهایی با چهار چشم، بدون گوش، کشیده به شکل ستاره و پخش شده روی بوم است. شما می توانید با کشیدن یک پوچ در پنجره اول، یک هیولا ایجاد کنید.


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

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


چشم ها ترسناک هستند.

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

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

کیف مد برای تابستان. طراحی انحصاری!

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

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

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



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


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


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


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


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


نوجوانان با وجود اینکه خود را بزرگسال می دانند، باز هم دوست دارند کارتون ببینند. برای نوجوانان، آنها در حال حاضر جسورتر هستند و به اندازه کودکان بی ضرر نیستند. آنها تحت سلطه سرگرمی، شوخی های بزرگسالان، مشکلات نوجوانان هستند. اینها عمدتاً کارتون های سریال خارجی هستند، مانند The Simsons، Family Guy، Futurama و غیره.


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


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