التبصير الحاسوبي : إكتشاف الأجسام بواسطة ديتيكتورون 2 (Detectron2)

في المقالة السابقة من سلسلة التبصير الحاسوبي تعرفنا على شبكات اللف الرياضي العصبية الإقليمية ، و في هذه المقالة سنتعرف على ديتيكتورن 2 (Detectron2) ، وكيفية تنصيبه في أجهزتنا الشخصية و إستخدامها لإجراء مختلف عمليات إكتشاف الأجسام

ما هو ديتيكتورون 2 :

ديتيكترون 2 (Detectron2) هي منصة إكتشاف أجسام (object detection) تم تطويرها من قبل قسم فيسبوك لأبحاث الذكاء الإصطناعي (Facebook AI Research) و المعروف كذلك بـ فاير (FAIR) و يتم إستخدام ديتكترون 2 كأساس في جميع أبحاث الذكاء اللإصطناعي داخل فيسبوك و المعتمدة على التبصير الحاسوبي .

تنصيب ديتيكترون 2 :

قبل البدء في خطوات تنصيب ديتيكترون 2  على نظام تشغيل الوبندوذ فهناك متطلب أساسي :

  • بايثون بإصدار أحدث من 3.6 ( يفضل إستخدام أناكوندا)

الخطوة الأولى : تنصيب git

سنقوم بتحميله  و تسطيبه من الموقع الرسمي هنا  

أو

conda install -c anaconda git

الخطوه الثانيه : تنصيب Pytorch

سنقوم بتحميل و تسطيب أحدث إصدار من الموقع الرسمي هنا

أو

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

الخطوة الثالثة : تنصيب opencv

إما

pip install opencv-python

أو

conda install -c conda-forge opencv

الخطوة الرابعة : تنصيب pycocotools

1- تنصيب Visual C++ 2015 Build Tools من الرابط هنا

2- الذهاب إلى C:\Program Files (x86)\Microsoft Visual C++ Build Tools و نضغط على  vcbuildtools_msbuild.bat

3- تنصيب pycocotools  

pip install git+https://github.com/philferriere/cocoapi.git#egg=pycocotools^&subdirectory=PythonAPI

الخطوة الخامسة : بناء ديتيكترون 2 من المصدر.

git clone https://github.com/facebookresearch/detectron2.git
cd detectron2 && pip install -e .    

إستخدام ديتيكترون 2 :

لإستخدام نموذج مدرب مسبقا فالأمر بسيط جداً بإستخدام ديتيكترون 2 ، كل ما علينا هو إنشاء ملف إعدادات ، و إستخدام  أوزان  ، و من ثم إنشاء متنبأ إفتراضي بعد ذلك القيام بعملية التنبو..

الخطوة الأولى  :  إستيراد ديتيكترون 2 و بعض أدواته المساعدة

from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog
import cv2

 الخطوة الثانية : قراءة الصورة

im = cv2.imread("./input.jpg")

سأقوم بإستخدام هذه الصورة

صورة

الخطوة الثالثة : إنشاء ملف إعدادات و الأوزان

cfg = get_cfg()
#موقع ديتيكترون 2 على جهازنا
cfg.merge_from_file("./detectron2/configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml") 
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 
cfg.MODEL.WEIGHTS = "detectron2://COCO-Detection/faster_rcnn_R_101_FPN_3x/137851257/model_final_f6e8b1.pkl"

الخطوة الرابعة : إنشاء متنبأ إفتراضي

predictor = DefaultPredictor(cfg)

الخطوة الخامسة :التنبؤ

outputs = predictor(im)

الخطوة السادسة :إظهار التنبؤ

v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
#سنقوم بإظهار الصورة في نافذة
cv2.imshow("test", v.get_image()[:, :, ::-1])
# إضعظ أي زر لإعلاق النافذة
cv2.waitKey(0)
cv2.destroyAllWindows()

سنحصل على التالي :

ديتيكتورن 2  (Detectron2) إكتشاف أجسام ، محمد العوض

بإمكاننا إيجاد جميع النماذج (Models) المتوفرة في ديتيكترون 2  من هنا

و لمعرفة موقع ملف الإعدادات فعلينا الضغط على أسم النموذج و سنحصل على التالي .

ديتيكتورن 2  (Detectron2) ، محمد العوض

أما بالنسبة لرابط  الأوزان فيمكننا نسخة مباشر من الرابط المسمى (Model)

ديتيكتورن 2  (Detectron2)  موديل

يمكننا نسخ الرابط مباشرة بهذا الشكل :

cfg.MODEL.WEIGHTS ="https://dl.fbaipublicfiles.com/detectron2/COCO-InstanceSegmentation/mask_rcnn_R_101_FPN_3x/138205316/metrics.json"

أو إختصاره بهذا الشكل :

cfg.MODEL.WEIGHTS ="detectron2://COCO-Detection/faster_rcnn_R_101_FPN_3x/137851257/model_final_f6e8b1.pkl"

إستخدام ديتيكترون 2  في تجزئة الصورة :

كما ذكرنا سابقا فيحتوي ديتيكترون 2 على نماذج عديده و منها تجزئة الصورة (image segmentation)

و الشيئ الوحيد الذي سنحتاج في تغييره  لإجراء عملية تجزئة الصورة هو إستخدام ملف إعدادات و ملف أوزان يختص بنموذج تجزئة الصورة عوضاً عن نموذج إكتشاف الأجسام  ، وهذا هو الكود بالكامل

cfg = get_cfg()
cfg.merge_from_file("./detectron2/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
cfg.MODEL.WEIGHTS = "detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl"
predictor = DefaultPredictor(cfg)
outputs = predictor(im)
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
cv2.imshow("test", v.get_image()[:, :, ::-1])
cv2.waitKey(0)
cv2.destroyAllWindows()

و سنحصل على التالي :

ديتيكتورن 2  (Detectron2) تجزئة أجسام ، محمد العوض

و بهذا نكون قد وصلنا إلى ختام هذه المقالة

  • رالط ديتيكترون 2 على الغيتهاب (هنا)
  • رابط تدريب ديتيكترون 2 على الكولاب من فيسبوك ( هنا )

إضافة تعليق