Chatbot with Voice

مقدمه

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

ادامه خواندن Chatbot with Voice

تشخیص پلاک فارسی خودرو

پروژه دانشجویی درس یادگیری عمیق  |  محمدحسن ستاریان و امیرمحمد قریشی

مقدمه

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

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

ادامه خواندن تشخیص پلاک فارسی خودرو

پردازش اشیاء بصری با مدل‌های مولد

مقدمه

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

ادامه خواندن پردازش اشیاء بصری با مدل‌های مولد

pix2pix & cyclegan

به نام خدا

کلاس نوت – محمد حسین نیکی ملکی
مقدمه ای بر cyclegan & pix2pix

ساختار شبکه ای pix2pix از ساختار شبکه های شرطی GAN برای ساخت دیتا ها و تبدیل و generate کردن آن هااستفاده میکند .
فرض کنید تصاویری ورودی شبکه ما باینری شده و انتظار خروجی شبکه امان هم از همان جنس دیتا رنگی rgb باشد .طبیعتا انتظار داریم که generator در اینجا یاد بگیرد که چطور رمگ امیزی کند .و همچنین discriminator هم تلاش میکند تا تفاوت بین رنگی که generator تولید کرده و رنگ اصلی به نظر صحیح که در بین دیتاست ها بوده را محاسبه کند .

ساختار generator بصورت “encoder-decoder” است و pix2pix هم تقریبا مانند همین (در شکل پایین هم میبینید ) است .

مقادیر دایمنشن های هر لایه در کنار آن نوشته شده است .در اینجا ورودی شبکه ما یک 256*256*3 است و پس از اعمال تغییرات دوباره به همان شیپ ابتدایی در خروجی باز میگردد .
در اینجا generator ورودی هارا میگیرد وبا انکودر ها مقادیرش را کم میکند ( لازم به یاداوری است که انکودر محصولی از کانولوشن و اکتیویشن فانکشن مربوطه است .) همچنین در ادامه ی مسیر هم از دیکودر برای بازگشت ز مسیر استفاده میکنیم .
نکته : برای بهبود \رفورمنس شبکه و سرعت پردازش میتونیم از شبکه unet هم به جای encoder-decoder استفاده کنیم . شبکه unet در واقع همون encoder-decoder است اما بصورت موازی هر لایه encoder را به لایه decoder مربوطه اش متصل میکند و سودش در این است که ممکن است به برخی از لایه ها احتیاجی نداشته باشیم و از آنها ب\ریم و گذر نکنیم .
Descriminator :

کار descriminator این است که دو عکس یکی از ورودی و یکی از خروجی یا عکس هدف میگیرد و تصمیم میگیرد که ایا عکس دوم توسط generator ساخته شده است یا خیر .

ساختار DISCRIMINATOR شبیه به ENCODER-DECODER به نظر میرسد اما فرق دارد .

خروجی اش یک عکس ۳۰ در ۳۰ باینری است که مشخص میکند چقدر قسمت های مختلف عکس دوم به اول شبیه هستند . در پیاده سازی PIX2PIX هر پیکسل ۳۰ در ۳۰ به یک قسمت ۷۰ در ۷۰ عکس ورودی مپ میشود .

How to train :

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

cyclegans :

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

Loss function :

قدرت سایکل گن در این است که loss function ای برای هر سایکل رفت و برگشت ست میکند و آن را به عنوان یک optimizer اضافی در مسله قرار میدهد .
در این قسمت نحوه ی محاسبه ی loss function برای generator را میبینیم :


g_loss_G_disc = tf.reduce_mean((discY_fake — tf.ones_like(discY_fake)) ** 2)
g_loss_F_dicr = tf.reduce_mean((discX_fake — tf.ones_like(discX_fake)) ** 2)


g_loss_G_cycle = tf.reduce_mean(tf.abs(real_X — genF_back)) + tf.reduce_mean(tf.abs(real_Y — genG_back))
g_loss_F_cycle = tf.reduce_mean(tf.abs(real_X — genF_back)) + tf.reduce_mean(tf.abs(real_Y — genG_back))

در این قسمت نحوه ی محاسبه ی loss function برای discriminator را بررسی میکنیم :


DY_loss_real = tf.reduce_mean((DY — tf.ones_like(DY))** 2)
DY_loss_fake = tf.reduce_mean((DY_fake_sample — tf.zeros_like(DY_fake_sample)) ** 2)
DY_loss = (DY_loss_real + DY_loss_fake) / 2
DX_loss_real = tf.reduce_mean((DX — tf.ones_like(DX)) ** 2)
DX_loss_fake = tf.reduce_mean((DX_fake_sample — tf.zeros_like(DX_fake_sample)) ** 2)
DX_loss = (DX_loss_real + DX_loss_fake) / 2

تجربه شرکت در یکی از چالش‌‌های کگل (Kaggle)

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

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

در این مقاله، تجربه شرکت در چالش طبقه‌بندی سوالات غیرعملی Quora را به اشتراک می‌گذاریم.

ادامه خواندن تجربه شرکت در یکی از چالش‌‌های کگل (Kaggle)

Connectionist Temporal Classification – CTC

CTC الگوریتمی است که در آموزش deep neural network ها در حوزه تشخیص گفتار و تشخیص دست خط و تشخیص عمل(action recognition) و  دیگر مسائل ترتیبی (sequence problems)  به عنوان loss function مورد استفاده قرار می گیرد. 

بطور کلی می توان گفت که CTC  قادر است تا خروجی deep neural network ها را گرفته و با محاسبه loss ، آموزش شبکه را ممکن سازد و همچین برای یک input sequence که تا به حال توسط شبکه رویت نشده خروجی تولید کند. بطور مثال برای یک ورودی صوتی بدون اینکه مشخص باشد چه کلمه ای بیان شده، کلمه را حدس بزند.

برای آشنایی  با  CTC در ادامه نحوه عملکرد آن بر روی صوت و دست نوشته بررسی خواهد شد

ادامه خواندن Connectionist Temporal Classification – CTC

Global & adaptive pooling

در شبکه های عمیق برای کاهش تعداد پارامتر ها  ازmax pooling  استفاده می شود به این صورت که بعد از چند لایه کانولوشنی ابعاد آن لایه های کانولوشنی را تغییر میدهد.

هایپرپارامتر هایی Pooling

  • stride
  • kernel size
  • average or max بودن تابع

درشبکه های عمیق و در لایه های fully connected پارامتر های این لایه ها  به سایز ورودی وابسته بود ولی در لایه های کانولوشنی تعداد پارامتر ها تنها به اندازه و تعداد فیلتر بستگی دارد. برای مثال وقتی مانند شکل زیر لایه آخر5 در 5 در 100 باشد (feature map تصویر) و به یک لایه fully connected صد تایی وصل میکنیم.اگر تصویر ورودی مقداری بزرگتر شود این لایه 100*5*5 تغییر می کند مثلا سایز آن 100*7*7 می شود ، پس تعداد وزن هایی که به نورون های لایه آخر وصل می شوند تغییر می کند.

مشکل : تعداد وزن های لایه flat  و fully conected

راه حل :  global average pooling(GAP)

روش کار

در مقاله [Lin et al., 2013. Network in network] به جای fully connected  ها در انتها global average pooling میزنیم تا future map ها را مستقیم به softmax وصل کنیم و از fully connected  استفاده نکنیم.

لایه آخر را pooling با kernel هم سایز  تصویر ورودی (activation map) میذاریم تا درانتها تنها یک کانال باقی بماند، یعنی طول و عرض هرچه باشد 1 شده و عمقش همان باقی می ماند. حال همین لایه را مستقیم به fully connected وصل می کنیم.

ResNet50 هم به صورت غیر مستقیم از average pooling استفاده کرده. به این صورت که لایه pooling آخرش اندازه خروجی (2048 * 1* 1) شده است ولی از  fully connected ها هم برای کلاس بندی انتهایی استفاده کرده است.

بررسی لایه های آخر  ResNet50

در لایه های انتهایی شبکه به دلیل وجود , Activation ، AveragePooling2D و لایه Dense  برای ما مهم هستند.

  • ابتدا  لایه activation  را بررسی می کنیم؛ این لایه شامل2048  نقشه فعال سازی (activation map )  که سایز آن (7 * 7) است، می باشد.در تصویر بالا k  همان تعداد activation map ها است.

k ={1, 2, 3, …., 2048}

  • لایه (GAP) AveragePooling2D   سایز هر کدام از این  activation map   ها را از (7 * 7) به (1 * 1) کاهش می دهد.
  • لایهDense  که صرفا ورودی را صاف کرده و بدون تغییر در اطلاعاتی که در لایه قبلی GAP ایجاد شده است  تنها دسته یا کلاس آن خروجی را مشخص می کند. حال برای اینکه شبکه هایی که طراحی می کنیم به سایز ورودی وابسته نباشند می توان از این لایه صرف نظر کرد و لایه GAP  را مستقیما به softmax  متصل کرد.

مزایا :

  • متناسب تر با شبکه های کانولوشنی است. زیرا با  ساختار convolution ها بیشتر دارد.  fully connected ساختار کانولوشن را به هم می ریزد. ارتباط بین دسته بندی لایه آخر و  feature map  ها حفظ می کند.
  • از overfitting جلوگیری می کند. : هیچ پارامتری برای بهینه سازی ندارد واز  overfitting  هم دراین لایه جلوگیری می کند. و می توان با کانولوشن بیشتر ، کاری کنیم عمق افزایش یافته و داده کمتری از دست برود.
  • به جابجایی حساس نیست. : نسبت به جابجایی های تصویر عملکرد بهتری دارد. مثلا شبکه ایی برای شناسایی سگ داریم و دیگر جایگاه سگ در هرجای تصویراهمیتی ندارد.

 

استفاده از global average pooling   در framework  های مختلف

در keras کد global average pooling  به صورت زیر است که تنها dataform را میگیرد و سایز ورودی نمی خواهد چون نسبت به سایز activation map سایز آن را انتخاب میکند.

 

pytorch

از بخوایم global pooling در pytorch داشته باشیم adaptivePooling با سایز یک را صدا میزنیم. اینگونه عمل می کند که سایز خروجی رابهش به عنوان پارامتر می دهیم.

 

 

fastai

به این صورت پیاده سازی شده است که AdaptiveAvgPool2d و AdaptiveMaxPool2d   را صدا میزند و خروجی این دو تابع را بهم متصل می کند.

 

مسئله : تشخیص نژاد های مختلف سگ

دیتا شامل پوشه عکس ها و یک فایل اکسل شامل نام عکس و نژادش است.

در کد بالا آدرس پوشه عکس ها را داده خط 2 سایز ورودی را مشخص کرده در خط 3 شبکه را resnex124 تعریف کرده ایم و خط 4  batch size رو هم 58 گذاشتم.

(اگر روی gpu کارکنید و 2 یا 3 گیگ رم دارید احتمالا باید تعداد batch size   را کم کنید.)

لیبل ها را از فایل csv خونده واون label  باز کن و لیستش کن و طول اون لیست رو به ما بعده منهای یک برای جدا کردن هدر لیست  که همان تعداده داده های ماست، توسط تابع get_cv_index(n)   ایندکس های cross validation را جدا می کند اینگونه که 20 درصد index ها را برای cross validation  جدا میکند.

 

 

کد بالا نشان می دهد تا اینجا دو پوشه train و test همراه با label ها جدا شده است.

فایل csv را با پاندا خونده و 5تای اولشو نمایش می دهد.

تعداد هر کلاس را پیدا کرده ایم.

تابع pivot_table   :

 

به تابع tfms_from_model معماری ، سایز ورودی، ارگومیشن هم میخواهیم به صورت side_on ، بیشترین زوم هم 1.1 باشه بر روی تصاویر(چقدر روی عکس هربار رندوم زون کند)

تابع ImageClassifierData.from_csv می گوید از همان ساختاری که عکس های توی یک پوشه هستند و لیبل ها در  csv استفاده  کن. مسیر پوشه ها و اسم پوشه های train و test  را گرفته و اگر valdation_index  بهش پاس بدیم توی train_set اونا رو در نظر نمیگیره. توی اکسل پسوند اسم عکس ها وجود نداشته و به عنوان suffix پسوند پاس داده شده.

بر روی تمام فایل ها سایز ها گرفته و  تمام سایز ها را در size_d  دارد

سایز سطر و ستون را جدا کرده و به صورت هیستوگرام نمایش می دهد. که هیستوگرام نشان می دهد بیشتر تصاویر سایزی در اندازه 500 تا 1000 و کمتر از هزار هستند. پس تصاویر من در اندازه های بزرگ اند.

تابع فوق  داده ها را برمیگرداند با سایز تصویر و batch size ورودی دلخواه. هروقت تابع صدا شود یک trasformation میزند و سپس تصاویر را به اندازه batch size در متغییر data ریخته و در انتها قبل از بازگردانی تصاویر کوچکتر از 300 را ابتدا به 340 تبدیل کرده و سپس در پوشه tmp ذخیره میکند که حداقل تغییر اندازه از 340 باشد به اون سایز که cashing یک بارانجام شده باشد تا در تغییر اندازه تصاویر خیلی بزرگ به سایز کوچک overhead کمتری داشته باشیم و سرعت افزایش بیابد.(چون میخواهیم هر epoch را با یه سایزی پیش بریم)

 

از ConvLearner  متد pretrained را صدا زده و معماری و داده و پارامتر precompute هم true قرار میدهد.

متدpretrained  درای پارامتر ps است که بیانگر احتمال dropout است.

(در هنگام اجرای کد بالا با خطا مواجهه شدید وزن هارا دانلودکرده و در پوشه اشاره شده قرار دهید.)

 

با learning rate  ده به توان منفی 2 ، به تعداد 5 epoch می زند. با سایز وردوی 224 در 224

precompute را false کرده تا data argumation ما فعال بشه.

 

cycle_len= 1  بیانگر این است که یکی   یکی بره بالا

با set_data شبکه رو آگاه! میکنه که سایز عکس قراره تغییرکنه. سپس شبکه را فیریز می کند.

 

 

دیده می شود که بعد از adavtivePooling سایز ورودی از 2048 به سایز 4069 تغییر یافته است.

باTTA() می خواهد ببیند که می توان validation را بهتر کرد ..

مدل را ذخیره می کند.

مقدمه ای بر شبکه‌های مولد تخاصمی (Generative Adversarial Networks)

یادگیری بدون نظارت (Unsupervised Learning)
همان‌طور که پیش‌تر بحث شده بود، یکی از حوزه های یادگیری ماشین، یادگیری بدون نظارت است که در آن داده‌ها برچسب ندارند. در یادگیری بدون نظارت هدف اصلی، یادگیری ساختار داده‌ها می‌باشد.

 

ادامه خواندن مقدمه ای بر شبکه‌های مولد تخاصمی (Generative Adversarial Networks)

تشخیص اشیا در تصویر با YOLO object detection

Object detection یا تشخیص شی در تصویر چیست ؟

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

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

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

وظایف اصلی بینایی ماشین را می‌توان به موارد زیر تقسیم کرد:

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

 

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

1 – روش های اولیه و سنتی :

در این روش ها مسئله را با رویکرد های ساده تری انجام میدهند. بعنوان مثال ابتدا تصویر را به یک شبکه سگمنتیشن داده و با روش های موجود به سگمنت کردن اشیا موجود در تصویر پرداخته و پس از مشخص شدن محدوده اشیا در تصویر هر کدام را جداگانه به یک شبکه دسته بند میدهیم تا کلاس آن نیز مشخص شود.
این روش ها زمان بر بوده و عملا برای تشخیص اشیا به صورت real time کارآمد نیستند. برای مثال روش selective search

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

2 – روش های مدرن و پیشرفته :

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

از جمله این روش ها و الگوریتم ها میتوان روش YOLO و SSD را نامبرد.

که در ادامه به بررسی آنها میپردازیم.

 

YOLO : You Only Look Once

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

همه‌ این کارها به صورت موازی انجام می‌شوند؛ در نتیجه به صورت بلادرنگ است و می‌تواند تا 40 تصویر را در یک ثانیه پردازش کند. با اینکه این مدل کمی نسبت به RCNN عملکرد ضعیف‌تری دارد، ولی به دلیل بلادرنگ بودن آن، می‌توان از آن برای حل مشکلات روزانه استفاده کرد. در زیر تصویری از معماری YOLO را مشاهده می‌کنید.

نحوه تشخیص شی در تصویر توسط الگوریتم yolo :

در شبکه ی YOLO تصاویر به صورت فرضی به N در N ناحیه تقسیم می شوند. به ازای هر کدام از این نواحی فرض می شود که K شی امکان حضور دارند. شبکه به صورتی طراحی شده است که در نهایت به ازای تمامی نواحی امکان وجود اشیا در آن ناحیه ها – دسته ی آن شی و همچنین مختصات کادر دور شی را پیش بینی می کند.

با توجه به اینکه کادر دور هر شی ۴ مختصات دارد و همچنین دسته ی مورد نظر شی یک بردار C تایی هست و همین طور یک عدد برای احتمال وجود شی داریم پس به ازای هر شی یک تنزور (4 + 1 + C) تایی مورد نیاز است.

با توجه به اینکه فرض شد در هر تصویر N در N ناحیه وجود دارد و هر ناحیه احتمال حضور K شی به صورت بیشینه وجود دارد و هر شی نیز تزوری (4 + 1 + C) نیاز دارد پس در انتهای شبکه تنزوری KNN(C+1+4) وجود دارد که به پیشبینی کادر اشیا و احتمال آنها و دسته آنها می پردازد.

در نسخه نخست این شبکه پس از لایه های کانولوشن ویژگی ها خطی شده و به لایه های تمام متصل تحویل داده شده و در نهایت پیشبینی ها انجام می شوند در حالی که در نسخه های بعدی به جای ایجاد تنزوری به این ابعاد حجیم یک کرنل کانولوشن با ابعاد K(C+1+4) به نحوی بر روی ویژگی های آخرین لایه ی کانولوشن کانوالو می شود که ناحیه های ادراکی آن (Receptive Field) بر روی هر یک از N*N ناحیه از تصور ورودی قرار بگیرند و عملیات پیشبینی انجام شود.

 

تفاوت عمده این شبکه با شبکه ی RCNN این است که این شبکه به صورت سراسری (End-to-End) کار می کند و بحث تشخیص مکان اشیا را بدون نیاز به الگوریتم های بیرونی (Selective Search در RCNN) حل می کند و سرعت بسیار بالایی دارد و تماما با استفاده از شبکه های عصبی پیاده سازی شده و در نتیجه قابلیت موازی سازی بسیار مناسبی بر روی پردازنده هایی مثل GPU ها و FPGAها را داراست.

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

Cost function :

نتایج نهایی تشخیص اشیا روی تصویر توسط YOLO :