في المقالة السابقة من سلسلة التبصير الحاسوبي تعرفنا على شبكات اللف الرياضي العصبية الإقليمية ، و في هذه المقالة سنتعرف على ديتيكتورن 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()
سنحصل على التالي :
بإمكاننا إيجاد جميع النماذج (Models) المتوفرة في ديتيكترون 2 من هنا
و لمعرفة موقع ملف الإعدادات فعلينا الضغط على أسم النموذج و سنحصل على التالي .
أما بالنسبة لرابط الأوزان فيمكننا نسخة مباشر من الرابط المسمى (Model)
يمكننا نسخ الرابط مباشرة بهذا الشكل :
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()
و سنحصل على التالي :
و بهذا نكون قد وصلنا إلى ختام هذه المقالة
إضافة تعليق