بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

ارجو تقييم المقال

المقدمة
بعد استكشاف شبكة CNN لفترة من الوقت ، قررت تجربة  مهمة أخرى في Computer Vision ، التعرف على الصور  وفهم الحركة بالصورة . هناك العديد من الطرق الشائعة في هذا المجال ، بما في ذلك Faster R-CNN و RetinaNet و YOLOv3 و SSD وغيرها. سوف نجرب  Faster R-CNN في هذه المقالة. ، أود أن ألخص ما تعلمته ، وربما أعطيك بعض الإلهام إذا كنت مهتمًا بهذا الموضوع.

تمت كتابة التعليمات البرمجية الأصلية لإصدار Keras من Faster R-CNN الذي استخدمته yhenon (رابط المورد: GitHub.) وقد استخدم مجموعات بيانات PASCAL VOC 2007 و 2012 و MS COCO. بالنسبة لي ، لقد استخرجت للتو ثلاثة فصول ، “الشخص” و “السيارة” و “الهاتف المحمول” ، من Google Open Open Dataset V4. لقد تقدمت بطلبات مختلفة عن عمله لتناسب مجموعة البيانات الخاصة بي وأزلت رمزًا غير مناسب. راجع للشغل ، لتشغيل هذا على Google Colab (للحصول على وحدة معالجة الرسومات المجانية حتى 12 ساعة) ، ضغطت جميع الشفرات في ثلاثة دفاتر .ipynb. آسف على هيكل فوضوي.

بادئ ذي بدء ، أفترض أنك تعرف المعرفة الأساسية لشبكة CNN وما هو اكتشاف الأشياء. هذا هو الرابط الخاص بالورقة الأصلية ، المسمى “أسرع R-CNN: نحو اكتشاف كائن في الوقت الفعلي مع شبكات اقتراح المناطق”. بالنسبة إلى الشخص الذي يرغب في تنفيذ بيانات مخصصة من Dataset V4 من Google للصور على Faster R-CNN ، يجب عليك متابعة قراءة المحتوى أدناه.

قرأت العديد من المقالات التي تشرح الموضوعات المتعلقة بـ Faster R-CNN. لديهم فهم جيد وتفسير أفضل حول هذا الموضوع. راجع للشغل ، إذا كنت تعرف بالفعل تفاصيل Faster R-CNN وكنت أكثر فضولًا بشأن الكود ، فيمكنك تخطي الجزء أدناه والانتقال مباشرةً إلى جزء شرح الكود. هذا هو رابط GitHub لهذا المشروع.

أسرع R-CNN
R-CNN (R. Girshick et al. ، 2014) هي الخطوة الأولى لـ Faster R-CNN. يستخدم البحث الانتقائي (J.R.R. Uijlings and al. (2012)) لاكتشاف مناطق المصالح ونقلها إلى ConvNet. يحاول معرفة المناطق التي قد تكون كائنًا عن طريق دمج وحدات البكسل والقوام المتشابهة في عدة مربعات مستطيلة. تستخدم ورقة R-CNN 2000 منطقة مقترحة (مربعات مستطيلة) من البحث الانتقائي. ثم ، يتم تمرير هذه المناطق 2000 إلى نموذج CNN المدربين مسبقا. أخيرًا ، يتم تمرير المخرجات (خرائط المعالم) إلى SVM للتصنيف. يتم حساب الانحدار بين مربعات الربط المتوقعة (bboxes) و bboxes الحقيقة.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

تقدم Fast R-CNN (R. Girshick (2015)) خطوة للأمام. بدلاً من تطبيق 2000 مرة من CNN على المناطق المقترحة ، يتم نقل الصورة الأصلية فقط إلى نموذج CNN تم تدريبه مسبقًا مرة واحدة. يتم حساب خوارزمية البحث الانتقائي قاعدة على خريطة ميزة الإخراج في الخطوة السابقة. ثم ، يتم استخدام طبقة تجميع العائد على الاستثمار لضمان حجم الإخراج القياسي والمحددة مسبقًا. يتم تمرير هذه المخرجات الصالحة إلى طبقة متصلة بالكامل كمدخلات. أخيرًا ، يتم استخدام متجهين للإخراج للتنبؤ بالكائن المرصود باستخدام مصنف softmax وتكييف مواقع الصندوق المحيط مع رجعي خطي.

تقدم أسرع R-CNN (frcnn باختصار) مزيدًا من التقدم من Fast R-CNN. يتم استبدال عملية البحث الانتقائية بشبكة اقتراح المنطقة (RPN). كما كشف الاسم ، RPN هي شبكة لاقتراح المناطق. على سبيل المثال ، بعد الحصول على خريطة ميزة الإخراج من نموذج تم تدريبه مسبقًا (VGG-16) ، إذا كانت صورة الإدخال تحتوي على أبعاد 600 × 800 × 3 ، فسيكون مخطط ميزة الإخراج 37 × 50 × 256 بُعدًا.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

كل نقطة في 37×50 تعتبر مرساة. نحن بحاجة إلى تحديد نسب وأحجام محددة لكل مرساة (1: 1 ، 1: 2 ، 2: 1 لثلاث نسب و 128 ² ، 256 ² ، 512 ² لثلاثة أحجام في الصورة الأصلية).

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4 R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

بعد ذلك ، يتم توصيل RPN بطبقة Conv مع مرشحات 3 × 3 ، وحشوة واحدة ، و 512 قناة إخراج. يتم توصيل الإخراج بطبقتين تلافيف 1×1 للتصنيف والانحدار المربع (لاحظ أن التصنيف هنا هو لتحديد ما إذا كان المربع هو كائن أم لا

للتدريب ، نأخذ جميع المذيعين ونضعهم في فئتين مختلفتين. تلك التي تتداخل مع كائن الحقيقة – الأرض مع تقاطع فوق الاتحاد (IoU) أكبر من 0.5 تعتبر “مقدمة” وتلك التي لا تتداخل مع أي كائن حقيقة أو تحتوي على أقل من 0.1 IoU مع كائنات الحقيقة – تعتبر “خلفية” “.
في هذه الحالة ، يكون لكل مرساة مربعات مقابلة 3 × 3 = 9 في الصورة الأصلية ، مما يعني وجود 37 × 50 × 9 = 16650 مربعات في الصورة الأصلية. نحن فقط نختار 256 من هذه الصناديق 16650 كدفعة صغيرة تحتوي على 128 مقدمة (pos) و 128 خلفيات (neg). في الوقت نفسه ، يتم تطبيق إلغاء الحد الأقصى للتأكد من عدم وجود تداخل للمناطق المقترحة.

تم الانتهاء من RPN بعد اجتياز الخطوات المذكورة أعلاه. ثم نذهب إلى المرحلة الثانية من frcnn. على غرار Fast R-CNN ، يتم استخدام تجميع العائد على الاستثمار لهذه المناطق المقترحة (ROIs). الإخراج هو 7x7x512. بعد ذلك ، نقوم بتسوية هذه الطبقة ببعض الطبقات المتصلة بالكامل. الخطوة الأخيرة هي وظيفة softmax للتصنيف والانحدار الخطي لإصلاح موقع الصناديق.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

 

شرح الكود
الجزء 1: استخراج التعليقات التوضيحية للفئات المخصصة من مجموعة بيانات الصور المفتوحة من Google الإصدار 4 (Bounding Boxes)
قم بتنزيل وتحميل ثلاثة ملفات .csv
في الموقع الرسمي ، يمكنك تنزيل class-descriptions-boxable.csv من خلال النقر على المربع الأحمر في أسفل الصورة المسماة Class Names. ثم انتقل إلى Download from Figure Eight وقم بتنزيل ملفين آخرين.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

في موقع Figure Eight الإلكتروني ، قمت بتنزيل train-annotation-bbox.csv و train-images-boxable.csv مثل الصورة أدناه.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

بعد تنزيلها ، دعونا نلقي نظرة على ما يوجد داخل هذه الملفات الآن. train-images-boxable.csv يحتوي على اسم الصورة boxable ورابط URL الخاص بهم. class-descriptions-boxable.csv يحتوي على اسم الفصل المطابق للفئة LabelName. لدى train-annotations-bbox.csv مزيد من المعلومات. يحتوي كل صف في train-annotations-bbox.csv على إحداثيات مربع واحد (bbox للاختصار) لإحدى الصور ، كما يحتوي أيضًا على LabelName الخاص بـ bbox ومعرف الصورة الحالية (ImageID + ‘. jpg’ = Image_name). XMin ، YMin هي النقطة اليسرى العليا من bbox و XMax ، YMax هي النقطة اليمنى السفلى من bbox. يرجى ملاحظة أن قيم الإحداثيات هذه يتم ضبطها ويجب حسابها للإحداثيات الحقيقية إذا لزم الأمر.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

 

الحصول على مجموعة فرعية من مجموعة البيانات بأكملها
مجموعة البيانات الكاملة لـ Open Images Dataset V4 التي تحتوي على 600 فئة كبيرة جدًا بالنسبة لي. لذلك أنا استخراج 1000 صورة لثلاثة فصول ، “الشخص” ، “الهاتف المحمول” و “السيارة” على التوالي.

بعد تنزيل هذه الصور البالغ عددها 3000 صورة ، قمت بحفظ معلومات التعليقات التوضيحية المفيدة في ملف txt. كل صف له التنسيق مثل هذا: file_path ، x1 ، y1 ، x2 ، y2 ، class_name (لا توجد فاصلة فقط بين قيمتين) حيث file_path هو مسار الملف المطلق لهذه الصورة ، (x1 ، y1) و (x2 ، y2) تمثل الإحداثيات الحقيقية اليمنى العليا والسفلية اليمنى من الصورة الأصلية ، class_name هو اسم فئة مربع الإحاطة الحالي. لقد استخدمت صور 80٪ للتدريب و 20٪ صور للاختبار. يجب أن يكون العدد المتوقع لصور التدريب واختبار الصور 3 × 800 -> 2400 و 3 × 200 -> 600. ومع ذلك ، قد يكون هناك بعض الصور المتداخلة التي تظهر في فصول أو ثلاث فصول في وقت واحد. على سبيل المثال ، قد تكون الصورة شخصًا يسير في الشارع ، وهناك العديد من السيارات في الشارع. وبالتالي فإن عدد صناديق bboxes لصور التدريب هو 7236 ، وعدد صناديق bboxes لاختبار الصور هو 1931.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4 R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

الجزء 2: أسرع رمز R-CNN
ساوضح بعض الوظائف الرئيسية في الرموز. تتم كتابة التعليقات الكاملة لكل وظيفة في دفاتر .jpynb. لاحظ أنني احتفظ بالصورة التي تم تغيير حجمها إلى 300 لتدريب أسرع بدلاً من 600 التي شرحتها في الجزء 1.

إعادة إنشاء بنية VGG-16 وتحميل طراز المدربين مسبقًا (nn_base)

إعداد بيانات التدريب وتسميات التدريب (get_anchor_gt)
بيانات الإدخال هي من ملف annotation.txt الذي يحتوي على مجموعة من الصور مع معلومات الصناديق المحيطة بها. نحن بحاجة إلى استخدام طريقة RPN لإنشاء bboxes المقترحة.

الحجج في هذه الوظيفة
all_img_data: list (filepath ، العرض ، الارتفاع ، القائمة (bboxes))
C: التكوين
img_length_calc_function: دالة لحساب حجم خريطة خريطة الطبقة النهائية (من النموذج الأساسي) وفقًا لحجم إدخال الصورة
الوضع: “قطار” أو “اختبار” ؛ يحتاج وضع “القطار” إلى زيادة
إرجاع القيمة في هذه الوظيفة
x_img: بيانات الصورة بعد تغيير حجمها وتحجيمها (أصغر حجم = 300 بكسل)
Y: [y_rpn_cls، y_rpn_regr]
img_data_aug: بيانات الصورة المعززة (الصورة الأصلية مع زيادة)
debug_img: إظهار صورة للتصحيح
num_pos: إظهار عدد نقاط الارتساء الموجبة للتصحيح
حساب rpn لكل صورة (calc_rpn)
إذا كانت خريطة المعالم لها شكل 18×25 = 450 وأحجام المرساة = 9 ، فهناك 450×9 = 4050 نقاط ربط محتملة. الحالة الأولية لكل مرساة هي “سلبية”. بعد ذلك ، قمنا بتعيين المرساة على الإيجابية إذا كان IOU> 0.7. إذا كان IOU> 0.3 و <0.7 ، فهو غامض وغير مدرج في الهدف. تتمثل إحدى المشكلات في أن شبكة RPN بها العديد من المناطق السلبية أكثر من المناطق الإيجابية ، لذلك نقوم بإيقاف تشغيل بعض المناطق السلبية. ونحصر أيضًا إجمالي عدد المناطق الإيجابية والمناطق السلبية في 256. ويمثل y_is_box_valid إذا كان هذا المرسِل له كائن. يمثل y_rpn_overlap إذا تداخل هذا المرسِل مع المربع المحيط بحقيقة الأرض.

بالنسبة للرسو “الإيجابي” ، y_is_box_valid = 1 ، y_rpn_overlap = 1.
بالنسبة للرسو “المحايد” ، y_is_box_valid = 0 ، y_rpn_overlap = 0.
بالنسبة للرسو “السلبي” ، y_is_box_valid = 1 ، y_rpn_overlap = 0.

الحجج في هذه الوظيفة
C: التكوين
img_data: بيانات الصور المعززة
العرض: عرض الصورة الأصلي (على سبيل المثال 600)
الارتفاع: ارتفاع الصورة الأصلية (مثل 800)
resized_width: تم تغيير حجم عرض الصورة وفقًا لـ C.im_size (على سبيل المثال ، 300)
resized_height: ارتفاع حجم الصورة وفقًا لـ C.im_size (على سبيل المثال ، 400)
img_length_calc_function: دالة لحساب حجم خريطة خريطة الطبقة النهائية (من النموذج الأساسي) وفقًا لحجم إدخال الصورة
إرجاع القيمة في هذه الوظيفة
y_rpn_cls: قائمة (num_bboxes ، y_is_box_valid + y_rpn_overlap)
y_is_box_valid: 0 أو 1 (0 تعني أن المربع غير صالح ، 1 يعني أن المربع صالح)
y_rpn_overlap: 0 أو 1 (0 تعني أن المربع ليس كائنًا ، 1 يعني أن المربع كائن)
y_rpn_regr: قائمة (num_bboxes ، 4 * y_rpn_overlap + y_rpn_regr)
y_rpn_regr: x1 ، y1 ، x2 ، y2 إحداثيات مربعات حزم
شكل y_rpn_cls هو (1 ، 18 ، 25 ، 18). 18×25 هو حجم خريطة الميزة. تحتوي كل نقطة في خريطة المعالم على 9 نقاط ربط ، ولكل نقطة ربط قيمتان لـ y_is_box_valid و y_rpn_overlap على التوالي. لذلك الشكل الرابع 18 هو من 9×2.

شكل y_rpn_regr هو (1 ، 18 ، 25 ، 72). 18×25 هو حجم خريطة الميزة. تحتوي كل نقطة في خريطة المعالم على 9 نقاط ربط ولكل مرساة 4 قيم لكل من tx و ty و tw و th على التوالي. لاحظ أن هذه القيمة الأربعة لها y_is_box_valid و y_rpn_overlap. لذلك الشكل الرابع 72 هو من 9x4x2.

حساب منطقة الاهتمام من RPN (rpn_to_roi)
الوسيطات في هذه الوظيفة (num_anchors = 9)
rpn_layer: طبقة الخرج لتصنيف rpn
الشكل (1 ، feature_map.height ، feature_map.width ، num_anchors)
قد يكون (1 ، 18 ، 25 ، 9) إذا كانت الصورة التي تم تغيير حجمها 400 عرض و 300
regr_layer: طبقة الإخراج لارتداد rpn
الشكل (1 ، feature_map.height ، feature_map.width ، num_anchors * 4)
قد يكون (1 ، 18 ، 25 ، 36) إذا كانت الصورة التي تم تغيير حجمها 400 عرض و 300
C: التكوين
use_regr: الطقس لاستخدام bboxes الانحدار في rpn
max_boxes: عدد bboxes الأقصى لغير الحد الأقصى للقمع (NMS)
overlap_thresh: إذا كنت في NMS أكبر من هذه العتبة ، فقم بإسقاط المربع
إرجاع القيمة في هذه الوظيفة
النتيجة: الصناديق من غير الحد الأقصى للقمع (الشكل = (300 ، 4))
المربعات: إحداثيات bboxes (على خريطة الميزات)
بالنسبة إلى 4050 مرساة من الخطوة أعلاه ، نحتاج إلى استخراج عدد من الصناديق max_boxes (300 في الرمز) كمنطقة اهتمامات وتمريرها إلى طبقة المصنف (المرحلة الثانية من frcnn). في هذه الوظيفة ، نقوم أولاً بحذف المربعات التي تتجاوز الصورة الأصلية. ثم ، نحن نستخدم غير الحد الأقصى للقمع مع قيمة عتبة 0.7.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

طبقة RoIPooling وطبقة المصنف (RoiPoolingConv ، classifier_layer)
طبقة RoIPooling هي وظيفة معالجة roi إلى إخراج بحجم معين من خلال الحد الأقصى للتجمع. ينقسم كل دخل استثمار إلى بعض الخلايا الفرعية ، وقد طبقنا أقصى تجمع على كل خلية فرعية. يجب أن يكون عدد الخلايا الفرعية بعد شكل الإخراج.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

طبقة المصنف هي الطبقة الأخيرة من النموذج بأكمله وخلف طبقة RoIPooling. يتم استخدامه للتنبؤ باسم الفئة لكل مرساة إدخال وانحدار المربع المحيط بها.

الحجج في هذه الوظيفة
base_layers: vgg
input_rois: `(1 ، num_rois ، 4)` قائمة rois ، مع ترتيب (x ، y ، w ، h)
num_rois: عدد rois المطلوب معالجتها في وقت واحد (4 هنا)
إرجاع القيمة في هذه الوظيفة
قائمة (out_class ، out_regr)
out_class: إخراج طبقة المصنف
out_regr: خرج طبقة الانحدار
أولاً ، يتم تسطيح طبقة التجميع.
بعد ذلك ، يتبع ذلك بطبقتين متصلتين تمامًا و 0.5 تسرب.
أخيرًا ، هناك طبقتان للإخراج.
# out_class: وظيفة تنشيط softmax لتصنيف اسم فئة الكائن
# out_regr: وظيفة التنشيط الخطي لإحداثيات bboxes الانحدار

بيانات
مرة أخرى ، يتم استخراج مجموعة البيانات الخاصة بي من مجموعة بيانات Google Open Open Dataset V4. تم اختيار ثلاثة فصول لـ “السيارة” و “الشخص” و “الهاتف المحمول”. يحتوي كل فصل على حوالي 1000 صورة. عدد الصناديق المحاطة بـ “السيارة” و “الهاتف المحمول” و “الشخص” هي 2383 و 1108 و 3745 على التوالي.

المعلمات
قيمة الحجم (im_size) هي 300.
عدد المراسي 9.
الحد الأقصى لعدد غير الحد الأقصى للقمع هو 300.
عدد عائد الاستثمار المطلوب معالجته في النموذج هو 4 (لم أحاول حجمًا أكبر مما قد يسرع من الحساب ولكن يلزم مزيد من الذاكرة)
يستخدم آدم للتحسين ومعدل التعلم هو 1e-5. قد يكون الأمر مختلفًا إذا طبقنا حل الورقة الأصلية. لقد استخدموا معدل تعليمي قدره 0.001 للدفعات المصغرة 60k ، و 0.0001 للدُفعات المصغرة 20k التالية على مجموعة بيانات PASCAL VOC.
بالنسبة لتكبير الصور ، أقوم بتشغيل التدوير الأفقي ، التدوير العمودي و 90 درجة.
بيئة
غوغل كولاب مع تسلا تسلا K80 GPU للتدريب.

وقت التدريب
يبلغ طول كل حقبة أختارها 1000. لاحظ أن كل دفعة تعالج صورة واحدة فقط هنا. العدد الإجمالي للحلقات التي درستها هو 114. تقضي كل فترة حوالي 700 ثانية في هذه البيئة ، مما يعني أن إجمالي وقت التدريب حوالي 22 ساعة. إذا كنت تستخدم وحدة معالجة الرسومات (GPU) في Colab مثلي ، فأنت بحاجة إلى إعادة الاتصال بالخادم وتحميل الأوزان عند قطع الاتصال تلقائيًا لمواصلة التدريب لأنه يحتوي على قيود زمنية لكل جلسة.

نتيجة
هناك وظيفتان للخسارة قمنا بتطبيقهما على كل من نموذج RPN ونموذج المصنف. كما ذكرنا من قبل ، نموذج RPN له خرجان. أحدهما هو تصنيف ما إذا كان كائنًا والآخر مخصصًا لتراجع إحداثيات المربعات. من الشكل أدناه ، يمكننا أن نرى أنها تعلمت بسرعة كبيرة في أول 20 حقبة. بعد ذلك ، أصبح أبطأ لطبقة المصنف بينما لا تزال طبقة الانحدار مستمرة في الانخفاض. قد يكون السبب في ذلك أن دقة الموضوعية عالية بالفعل في المرحلة المبكرة من التدريب ، لكن في نفس الوقت ، لا تزال دقة إحداثيات الصناديق المحيطية منخفضة وتحتاج إلى مزيد من الوقت للتعلم.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

يتم عرض عملية التعلم المماثلة في نموذج المصنف. بالمقارنة مع قطعتي الانحدار في bboxes ، فإنها تظهر ميلًا مماثلًا وحتى قيمة خسارة مماثلة. أعتقد أن السبب في ذلك هو أنهم يتوقعون القيمة المتشابهة تمامًا مع اختلاف بسيط في بنية الطبقة الخاصة بهم. مقارنةً بقطعتين للتصنيف ، يمكننا أن نرى أن التنبؤ بالكائن أسهل من توقع اسم الفئة في bbox.

هذه الخسارة الكلية هي مجموع الخسائر الأربع أعلاه. لديه ميل تناقصي. ومع ذلك ، فإن mAP (متوسط ​​الدقة المتوسط) لا يزداد مع انخفاض الخسارة. يكون MAP هو 0.15 عندما يكون عدد الحلقات 60. يكون MAP هو 0.19 عندما يكون عدد الحلقات 87. يكون MAP هو 0.13 عندما يكون عدد الحلقات هو 114. أعتقد أن هذا يرجع إلى قلة عدد الصور التدريبية التي تؤدي لتجهيز النموذج.

أشياء أخرى يمكننا ضبطها
لعملية تدريب أقصر. اخترت 300 حجمًا للصور التي تم تغيير حجمها بدلاً من 600 في الشفرة الأصلية (والورقة الأصلية). لذلك اخترت anchor_size أصغر [64 ، 128 ، 256] بدلاً من [128 ، 256 ، 512].
اخترت VGG-16 كنموذج أساسي لأنه يحتوي على بنية أكثر بساطة. ومع ذلك ، قد يكون للطراز مثل ResNet-50 نتيجة أفضل لأدائه الأفضل في تصنيف الصور.
هناك العديد من العتبات في النموذج. لقد استخدمت معظمهم كما فعلت الكود الأصلي. rpn_max_overlap = 0.7 و rpn_min_overla = 0.3 هو النطاق للتمييز “موجب” و “محايد” و “سلبي” لكل مرساة. overlap_thresh = 0.7 هو الحد الأدنى للقمع غير الأقصى.
اختبار على الصور
في دفتر الملاحظات ، قمت بتقسيم عملية التدريب وعملية الاختبار إلى جزأين. يرجى إعادة تعيين جميع أوقات التشغيل على النحو التالي قبل تشغيل اختبار دفتر .ipynb. وربما تحتاج إلى إغلاق دفتر التدريب عند تشغيل دفتر اختبار ، لأن استخدام الذاكرة يكاد يكون غير محدود.

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

 

R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4 R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4 R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4 R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4 R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4 R-CNN-النعرف-على-الصور-460x306 بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4

أخيرا
للحصول على المتعة ، يمكنك إنشاء مجموعة البيانات الخاصة بك غير المضمنة في Open Images Dataset V4 من Google وتدريبهم. بالنسبة لصورة الغلاف التي أستخدمها في هذا المقال ، فهناك ثلاثة رهبان مسامي مصنوع من الصين. أنا فقط أسماؤهم وفقًا لمظهر وجههم (لست متأكداً من المظهر النائم). لا يتم تضمينها في Open Images Dataset V4. لذلك أنا استخدم RectLabel للتعليق عليها بنفسي. قضيت حوالي 3 ساعات لسحب مربعات الحقيقة الأرضية لست فصول مع 465 صورة (بما في ذلك “Apple Pen” و “Lipbalm” و “Scissor” و “Sleepy Monk” و “Upset Monk”). بالنسبة إلى anchor_scaling_size ، اخترت [32 ، 64 ، 128 ، 256] لأن Lipbalm عادة ما يكون صغيرًا في الصورة. للعثور على هذه بلسم الشفاه مربع صغير. أضفت أصغر حجم مرساة لنموذج أقوى. بالنظر إلى أن Apple Pen طويل ورقيق ، يمكن أن يستخدم anchor_ratio 1: 3 و 3: 1 أو حتى 1: 4 و 4: 1 لكنني لم أحاول. وقت التدريب لم يكن طويلاً ، وكان الأداء ليس سيئًا. أعتقد أنه بسبب الخلفية البسيطة نسبياً والمشهد العادي. في الواقع ، أجد أن الجزء الأصعب لا يتمثل في التعليق على مجموعة البيانات هذه ، بل التفكير في كيفية تصويرها لجعل مجموعة البيانات أكثر قوة.

حسنًا ، هذا كل شيء في هذا المقال. شكرا لمشاهدتك. هذا هو رابط GitHub لهذا المشروع. المضي قدما وتدريب للكشف عن جسمك. إذا كان لديك أي مشكلة ، يرجى ترك رأيك. أنا سعيد لسماع منك 🙂

يونيو 18, 2019

0 responses on "بناء أسرع شبكة R-CNN (التعرف على الصور ) التي تنفذها Keras للحصول على بيانات مخصصة من Google Open Open Dataset V4"

Leave a Message

X