عباس خدائیان
عباس خدائیان
خواندن ۲ دقیقه·۲ سال پیش

مبحث تشخیص اشیاء با استفاده از الگورتیم YOLOv3

موضوع تمرین این هفته، تشخیص اشیاء و بخصوص تشخیص توپ بوده است.

به این منظور، از الگوریتم Yolo ورژن 3 و از دیتاست COCO (Common Objects in Context) استفاده شده است.

در ادامه کد های مربوطه را در نرم افزار متلب با هم میبینیم.

سورس برنامه در نرم افزار متلب
سورس برنامه در نرم افزار متلب


در ابتدا نام دیتاست مد نظر را در یک متغیر ذخیره میکنیم.

name3 = 'tiny-yolov3-coco';

برای تعریف کلاس مد نظرمان جهت تشخیص اشیاء از کد زیر استفاده میکنیم.

classes = {'sports ball'};

در نهایت با استفاده از تابع yolov3ObjectDetector متغیر detector را به صورت زیر ایجاد میکنیم.

detector = yolov3ObjectDetector(name3, classes, anchorBoxes);

بعد از فراخوانی الگورتیم YOLOv3 و لود کردن دیتاست COCO تصویر مد نظر را از ورودی میخوانیم. بعد از این مرحله، سایز تصویر خوانده شده از ورودی را نصف کرده و آن را از unit8 به single تبدیل میکنیم و عملیات preprocess را روی آن انجام میدهیم.

img = im2single(imresize(img,0.5)); img = preprocess(detector,img);

در آخر با استفاده از تابع detect به صورت زیر، شیء مد نظر را تشخیص داده که در ادامه پارامترهای آن را توضیح میدهیم.

[bboxes,scores,labels] = detect(detector,img,Threshold=0.82);

متغیر detector بر اساس بارگذاری دیتاست COCO و الگورتیم YOLOv3 به عنوان پارامتر اول تابع detect یا تشخیص می باشد. برای پارامتر دوم این تابع از تصویر دستکاری شده استفاده کردیم. در آخرین مرحله آستانه و دقت تشخیص را مشخص میکنیم.

این تابع در خروجی خود 3 پارامتر باز میگرداند که به ترتیب BoundingBox یا ابعاد مستطیل هایی که در اطراف شیء یا اشیاء تشخیص داده شده مشخص میکند، Scores یا امتیاز و دقت تشخیص شیء و Labels یا عنوان هر یک اشیاء تشخیص داده شده در تصویر ورودی.

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

results = table(bboxes,labels,scores); disp(results);

جهت نمایش داده های جدید و تفکیک اشیاء این اطلاعات را روی تصویر جدید نمایش میدهیم.

detectedImg = insertObjectAnnotation(img,'Rectangle',bboxes,labels); figure, imshow(detectedImg);

تصویر اولیه و تصویر نهایی به ترتیب به شرح زیر خواهد بود.

تصویر ورودی اولیه
تصویر ورودی اولیه
تصویر دوم بعد از تشخیص شیء
تصویر دوم بعد از تشخیص شیء

کلیه کد ها در نرم افزار متلب پیاده سازی شده اند و به شرح ذیل می باشند:

clc; clear all; close all; name3 = 'tiny-yolov3-coco'; classes = {'sports ball'}; anchorBoxes = {[122,177;223,84;80,94]; [111,38;33,47;37,18]}; detector = yolov3ObjectDetector(name3, classes, anchorBoxes); img = imread('baseball01.jpg'); img = im2single(imresize(img,0.5)); img = preprocess(detector,img); [bboxes,scores,labels] = detect(detector,img,Threshold=0.82); results = table(bboxes,labels,scores); disp(results); detectedImg = insertObjectAnnotation(img,'Rectangle',bboxes,labels); figure, imshow(detectedImg);
yoloتشخیص اشیاپردازش تصویر
شاید از این پست‌ها خوشتان بیاید