Detectron: تنسيق RLE أو المضلع لـ "التجزئة" للتوسيع إلى مجموعة بيانات coco

تم إنشاؤها على ٢ فبراير ٢٠١٨  ·  38تعليقات  ·  مصدر: facebookresearch/Detectron

مرحبًا Detectron ،

حاولت مؤخرًا إضافة بيانات coco المخصصة الخاصة بي لتشغيل Detectron وواجهت المشكلات التالية.
(1) "التجزئة" في بيانات كوكو مثل أدناه ,

{"التجزئة": [[ 499.71، 397.28، ...... 342.71، 172.31 ]] ، "المنطقة": 43466.12825، "iscrowd": 0، "image_id": 182155، "bbox": [338.89، 51.69، 205.82 ، 367.61] ، "category_id": 1 ، "id": 1248258} ،

{"التجزئة": {"التعداد": [66916، 6، 587، ..... 1، 114303]، "الحجم": [594، 640] "المنطقة": 6197، "iscrowd": 1، "image_id": 284445، "bbox": [112، 322، 335، 94]، "category_id": 1، "id": 9.001002844e + 11} ،
الشكل الأول من "التجزئة" هو المضلع والثاني يحتاج إلى ترميز / فك ترميز تنسيق RLE.

يمكن تشغيل التنسيقات أعلاه على Detectron.

(2) أضفت فئة جديدة ، وقمت بإنشاء تنسيق RLE جديد لحقل "التجزئة" عبر coco api encode () / decode () mask.
لقد ولدت مثل هذه البيانات.

"تجزئة": [{ "التهم": "MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ ^ OQ O9Pb0EQ ^ O؛ Wb0OO01O1O1O001O1N2N`jT3؟"، "حجم": [600،1000]}]

لقد وجدت أن الأحرف الغامقة تختلف عن تنسيق json الأصلي لـ coco "التجزئة" على الرغم من أنه يمكن تشغيلها على تطبيق MatterPort لـ Mask-RCNN.

أيضًا ، حاولت تعديل بعض كود Detectron لتلبية متطلباتي ، لكن صعب جدًا بالنسبة لي لأن الكثير من التعليمات البرمجية تحتاج إلى التغيير.

هل يمكن أن تعطيني بعض الاقتراحات لتشغيل بياناتي المخصصة؟

شكرا.

community help wanted

التعليق الأكثر فائدة

تضمين التغريدة
ربما يمكنك محاولة تحويل القناع إلى أقطاب.

labels_info = []
for mask in mask_list:
    # opencv 3.2
    mask_new, contours, hierarchy = cv2.findContours((mask).astype(np.uint8), cv2.RETR_TREE,
                                                        cv2.CHAIN_APPROX_SIMPLE)
    # before opencv 3.2
    # contours, hierarchy = cv2.findContours((mask).astype(np.uint8), cv2.RETR_TREE,
    #                                                    cv2.CHAIN_APPROX_SIMPLE)
    segmentation = []

    for contour in contours:
        contour = contour.flatten().tolist()
        # segmentation.append(contour)
        if len(contour) > 4:
            segmentation.append(contour)
    if len(segmentation) == 0:
        continue
    # get area, bbox, category_id and so on
    labels_info.append(
        {
            "segmentation": segmentation,  # poly
            "area": area,  # segmentation area
            "iscrowd": 0,
            "image_id": index,
            "bbox": [x1, y1, bbox_w, bbox_h],
            "category_id": category_id,
            "id": label_id
        },
    )

ال 38 كومينتر

لدي مشكلة مماثلة: بعض الوظائف في lib / utils / segms.py تتوقع أن تكون الأقسام بتنسيق "poly" وتنقطع عند توفيرها في RLE.
إنه غير مريح ولكن يبدو أنه يتماشى مع مواصفات المناطق غير المزدحمة (iscrowd = 0):

يعتمد تنسيق التجزئة على ما إذا كان المثال يمثل كائنًا واحدًا (iscrowd = 0 وفي هذه الحالة يتم استخدام المضلعات) أو مجموعة من الكائنات (iscrowd = 1 وفي هذه الحالة يتم استخدام RLE).

[1] http://cocodataset.org/#download ، القسم "4.1. شروح مثيل الكائن"

كان الحل بالنسبة لي هو التحويل إلى تنسيق "بولي" ، وهو في الأساس قائمة من الرؤوس (س ، ص).

-ليشا.

في 2. فبراير 2018 ، الساعة 06:41 ، كتب Hu Xingui [email protected] :

مرحبًا Detectron ،

حاولت مؤخرًا إضافة بيانات coco المخصصة الخاصة بي لتشغيل Detectron وواجهت المشكلات التالية.
(1) "التجزئة" في بيانات كوكو مثل أدناه ,

{"التجزئة": [[499.71، 397.28، ...... 342.71، 172.31]]، "المنطقة": 43466.12825، "iscrowd": 0، "image_id": 182155، "bbox": [338.89، 51.69، 205.82 ، 367.61] ، "category_id": 1 ، "id": 1248258} ،

{"التجزئة": {"التعداد": [66916، 6، 587، ..... 1، 114303]، "الحجم": [594، 640]}، "المنطقة": 6197، "iscrowd": 1، "image_id": 284445، "bbox": [112، 322، 335، 94]، "category_id": 1، "id": 9.001002844e + 11} ،
الشكل الأول من "التجزئة" هو المضلع والثاني يحتاج إلى ترميز / فك ترميز تنسيق RLE.

يمكن تشغيل التنسيقات أعلاه على Detectron.

(2) أضفت فئة جديدة ، وقمت بإنشاء تنسيق RLE جديد لحقل "التجزئة" عبر coco api encode () / decode () mask.
لقد ولدت مثل هذه البيانات.

"تجزئة": [{ "التهم": "MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ ^ OQ O9Pb0EQ ^ O؛ Wb0OO01O1O1O001O1N2N`jT3؟"، "حجم": [600،1000]}]

لقد وجدت أن الأحرف الغامقة تختلف عن تنسيق json الأصلي لـ coco "التجزئة" على الرغم من أنه يمكن تشغيلها على تطبيق MatterPort لـ Mask-RCNN.

أيضًا ، حاولت تعديل بعض كود Detectron لتلبية متطلباتي ، لكن صعب جدًا بالنسبة لي لأن الكثير من التعليمات البرمجية تحتاج إلى التغيير.

هل يمكن أن تعطيني بعض الاقتراحات لتشغيل بياناتي المخصصة؟

شكرا.

-
أنت تتلقى هذا لأنك مشترك في هذا الموضوع.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub ، أو قم بكتم صوت الموضوع.

amokeev ، كيف تحول تنسيق "RLE" إلى تنسيق "poly" إلى الحل البديل الخاص بك؟

amokeev ، هل أنت متأكد من أن الرقم في التجزئة هو (س ، ص) رؤوس؟ على سبيل المثال "66916" رقم كبير! آخر ، على الرغم من أنني قمت بتعيين "iscrowd" كـ "1" لتنسيق RLE ، إلا أنه لا يمكن تشغيله على Detectron.

أفسر poly كقائمة من المضلعات ، التي تحددها الرؤوس ، مثل [[x1 ، y1 ، x2 ، y2 ... xN ، yN] ، ... [x1 ، y1 ، x2 ، y2 ... xN ، yN]] ، حيث تكون إحداثيات بنفس حجم الصورة.
يتم عرض الأقنعة ، المشفرة بهذه الطريقة ، بشكل صحيح بواسطة CocoAPI [1]

ولكن قد ترغب في الحصول على إجابة "رسمية".

[1] https://github.com/cocodataset/cocoapi https://github.com/cocodataset/cocoapi

في 2. فبراير 2018 ، الساعة 09:18 ، كتب Hu Xingui [email protected] :

amokeev https://github.com/amokeev ، هل أنت متأكد من أن الرقم في التجزئة هو (س ، ص) رؤوس؟ على سبيل المثال "66916" رقم كبير! آخر ، على الرغم من أنني قمت بتعيين "iscrowd" كـ "1" لتنسيق RLE ، إلا أنه لا يمكن تشغيله على Detectron.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/facebookresearch/Detectron/issues/100#issuecomment-362516928 ، أو تجاهل الموضوع https://github.com/notifications/unsubscribe-auth/AFlh63ObnXg- DcaDKwIi3pB4Ppig464Hks5tQsTkgaJpZM4R2tN3 .

تضمين التغريدة
ربما يمكنك محاولة تحويل القناع إلى أقطاب.

labels_info = []
for mask in mask_list:
    # opencv 3.2
    mask_new, contours, hierarchy = cv2.findContours((mask).astype(np.uint8), cv2.RETR_TREE,
                                                        cv2.CHAIN_APPROX_SIMPLE)
    # before opencv 3.2
    # contours, hierarchy = cv2.findContours((mask).astype(np.uint8), cv2.RETR_TREE,
    #                                                    cv2.CHAIN_APPROX_SIMPLE)
    segmentation = []

    for contour in contours:
        contour = contour.flatten().tolist()
        # segmentation.append(contour)
        if len(contour) > 4:
            segmentation.append(contour)
    if len(segmentation) == 0:
        continue
    # get area, bbox, category_id and so on
    labels_info.append(
        {
            "segmentation": segmentation,  # poly
            "area": area,  # segmentation area
            "iscrowd": 0,
            "image_id": index,
            "bbox": [x1, y1, bbox_w, bbox_h],
            "category_id": category_id,
            "id": label_id
        },
    )

amokeev ،
تضمين التغريدة

شكرا لاقتراحاتكم.
سأحاول.

Sundrops ، كطريقة للتحويل ، يمكن الحصول على نتيجة قائمة "بولي". شكرًا جزيلاً! لكنني ما زلت لا أعرف لماذا التنسيق في ملف COCO json كبير / صغير مثل "66916" أو "1"؟

التعليقات التوضيحية topcomma COCO لها نوعان من التعليقات التوضيحية للتجزئة

  1. المضلع (مثيل الكائن) [[499.71، 397.28، ...... 342.71، 172.31]] رؤوس
  2. غير مضغوط RLE (الحشد). "التجزئة": {"counts": [66916، 6، 587، ..... 1، 114303]، "الحجم": [594، 640]} ، 66916 يمثل رقم التصنيف 0.

سيتم تحويل المضلع و RLE غير المضغوط إلى تنسيق RLE مضغوط مع MaskApi.
تنسيق RLE المضغوط:
تجزئة ": [{" التهم ":" MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ ^ OQ O9Pb0EQ ^ O؛ Wb0OO01O1O1O001O1N2N`jT3 "،" حجم ": [600،1000]}]

Sundrops ،
شكرا على مساعدتك العظيمة.
يمكن تدريب بياناتي المخصصة التي تشبه coco على Detectron الآن.

topcomma ،
لدي نفس المشكلة مثلك.
كطريقة Sundrops ، لا يمكنني العثور على الملف لتحويل القناع إلى polys.
هل يمكن أن تخبرني أي ملف؟ شكرا جزيلا لك!

@ lg12170226
يمكنك إحالة كود ثعبان coco stuff (https://github.com/nightrome/cocostuff) لتنفيذه بنفسك.
في قاعدة الكود لا يوجد ملف للتعليق التوضيحي ذي الصلة.

topcomma : لدي صورة خام وصور تسمية N . يتم تخزين كل تسمية في ملف واحد ، لذلك لدي N صورة للتسمية. أرغب في تدريب Mask RCNN في مجموعة البيانات الخاصة بي ، لذلك أحتاج أولاً إلى التحويل إلى تنسيق COCO. هل يمكنك مشاركة الكود في كيفية تحويله إلى نمط COCO؟ شكرا

فقط أتساءل عما إذا كانت هناك طريقة لتحويل RLEs المضغوطة إلى polys / RLEs غير المضغوطة؟

realwecan بعد فك تشفير RLE باستخدام pycocotools.mask.decode ، يمكنك التحقق من التنفيذ الخاص بي لإنشاء المضلعات باستخدام opencv:

كوكو json المحول

hazirbas : شكرا على التعليمات البرمجية الخاصة بك. لماذا لا تستخدم Davis 2017 الذي يحتوي على مثيل segmenyation؟ هل يمكننا استخدام الكود الخاص بك لتحويل Davis 2017 إلى تنسيق coco لاستخدام تنفيذ maskrcnn هذا؟

@ John1231983 تحتاج إلى تعديل البرنامج النصي وفقًا لقراءة الملفات المنقسمة وكذلك ملف db_info.yml. من أجل بحثي الخاص ، كنت بحاجة إليه من أجل DAVIS 2016.

حل آخر لتوليد المضلعات ، ولكن باستخدام skimage بدلاً من opencv .

import json
import numpy as np
from pycocotools import mask
from skimage import measure

ground_truth_binary_mask = np.array([[  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
                                     [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
                                     [  0,   0,   0,   0,   0,   1,   1,   1,   0,   0],
                                     [  0,   0,   0,   0,   0,   1,   1,   1,   0,   0],
                                     [  0,   0,   0,   0,   0,   1,   1,   1,   0,   0],
                                     [  0,   0,   0,   0,   0,   1,   1,   1,   0,   0],
                                     [  1,   0,   0,   0,   0,   0,   0,   0,   0,   0],
                                     [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
                                     [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0]], dtype=np.uint8)

fortran_ground_truth_binary_mask = np.asfortranarray(ground_truth_binary_mask)
encoded_ground_truth = mask.encode(fortran_ground_truth_binary_mask)
ground_truth_area = mask.area(encoded_ground_truth)
ground_truth_bounding_box = mask.toBbox(encoded_ground_truth)
contours = measure.find_contours(ground_truth_binary_mask, 0.5)

annotation = {
        "segmentation": [],
        "area": ground_truth_area.tolist(),
        "iscrowd": 0,
        "image_id": 123,
        "bbox": ground_truth_bounding_box.tolist(),
        "category_id": 1,
        "id": 1
    }

for contour in contours:
    contour = np.flip(contour, axis=1)
    segmentation = contour.ravel().tolist()
    annotation["segmentation"].append(segmentation)

print(json.dumps(annotation, indent=4))

كيف يمكنك تحويل قناع ثنائي أو RLE مشفر إلى RLE غير مضغوط لاستخدامه في حقل "iscrowd: 1" "counts"؟

تختلف التجزئة Sundrops باستخدام cv2.
هل هاتان النتيجتان صحيحتان وهل يمكن استخدام هاتين النتيجتين بواسطة Detectron؟ من فضلك أعطني بعض النصائح ، شكرا لك. تضمين التغريدة

النتائج باستخدام التعليمات البرمجية الخاصة بك مع skimage:

{"التقسيم": [[0.0، 252.00196078431372، 1.0، 252.00196078431372، 2.0، 252.00196078431372، 3.0، 252.00196078431372، 4.0، 252.00196078431372، 5.0، 252.00196078431372، 6.0، 252.00196078431372، 7.0، 252.001372، 252.00196078431372، 7.0، 252.001372، 252.00196078431372، 7.0، 252.001372، 252.00196078431372 ، 11.0، +252.00196078431372، 12.0، +252.00196078431372، 13.0، +252.00196078431372، 14.0، +252.00196078431372، 15.0، +252.00196078431372، 16.0، +252.00196078431372، 17.0، +252.00196078431372، 18.0، +252.00196078431372، 19.0، +252.00196078431372، 20.0، +252.00196078431372، 21.0، +252.00196078431372، 22.0، +252.00196078431372، 23.0 ، +252.00196078431372، 24.0، +252.00196078431372، 25.0، +252.00196078431372، 26.0، +252.00196078431372، 27.0، +252.00196078431372، 28.0، +252.00196078431372، 29.0، +252.00196078431372، 30.0، +252.00196078431372، 31.0، +252.00196078431372، 32.0، +252.00196078431372، 33.0، +252.00196078431372، 34.0، +252.00196078431372، 35.0، +252.00196078431372 ، 36.0 ، 252.00196078431372 ، 37.0 ، 252.00196078431372 ، 38. 0، +252.00196078431372، 39.0، +252.00196078431372، 40.0، +252.00196078431372، 41.0، +252.00196078431372، 42.0، +252.00196078431372، 43.0، +252.00196078431372، 44.0، +252.00196078431372، 45.0، +252.00196078431372، 46.0، +252.00196078431372، 47.0، +252.00196078431372، 48.0، +252.00196078431372، 49.0، +252.00196078431372، 50.0، +252.00196078431372، 51.0، +252.00196078431372، 52.0، +252.00196078431372، 53.0، +252.00196078431372، 54.0، +252.00196078431372، 55.0، +252.00196078431372، 56.0، +252.00196078431372، 57.0، +252.00196078431372، 58.0، +252.00196078431372، 59.0، +252.00196078431372، 60.0، +252.00196078431372، 61.0، +252.00196078431372، 62.0، +252.00196078431372، 63.0، +252.00196078431372، 64.0، +252.00196078431372، 65.0، +252.00196078431372، 66.0، +252.00196078431372، 67.0، +252.00196078431372، 68.0، +252.00196078431372، 69.0، +252.00196078431372، 70.0، +252.00196078431372، 71.0، +252.00196078431372، 72.0، +252.00196078431372، 73.0، +252.00196078431372، 74.0، +252.00196078431372، 75.0، 252.00196078431372، 76.0، 252.00196 078431372، 77.0، +252.00196078431372، 78.0، +252.00196078431372، 79.0، +252.00196078431372، 80.0، +252.00196078431372، 81.0، +252.00196078431372، 82.0، +252.00196078431372، 83.0، +252.00196078431372، 84.0، +252.00196078431372، 85.0، +252.00196078431372، 86.0، +252.00196078431372، 87.0، +252.00196078431372، 88.0، +252.00196078431372، 89.0، 252.00196078431372، 90.0، 252.00196078431372، 91.0، 252.00196078431372، 92.0، 252.00196078431372، 93.0، 252.00196078431372، 93.00196078431372، 252.0، 94.0، 251.00196078431372، 95.01372 ...

النتائج مع رمزSundrops باستخدام cv2:

[94 ، 252 ، 93 ، 253 ، 0 ، 253 ، 0 ، 286 ، 188 ، 286 ، 188 ، 269 ، 187 ، 268 ، 187 ، 252]

Kongsea لم أختبر تطبيق Sundrops cv2 ، لكن الفكرة الأساسية يجب أن تكون هي نفسها. ستنتج نتائج مختلفة نظرًا لوجود عدد لا حصر له من مجموعات النقاط التي يمكنك استخدامها لوصف الشكل. لكن بخلاف ذلك يجب أن يعمل كلاهما. لم يكن لدي cv2 مثبتًا ، لذلك كتبت شيئًا لا يتطلب ذلك.

Kongseawaspinator لقد اختبرت قانون بلدي. إنها تعمل.

شكرا لكSundropswaspinator.
سأحاول.

waspinator هل توجد طريقة لتحويل تجزئة

Sundrops لماذا قمت بالتعليق على هذا الجزء في التعليمات البرمجية الخاصة بك؟

# if len(contour) > 4:
    #     segmentation.append(contour)
# if len(segmentation) == 0:
#     continue

نحن بالفعل بحاجة للتعامل مع مثل هذه القضية ، أليس كذلك؟

@ Yuliang-Zou يجب إلغاء التعليق على هذا الجزء عندما تكون الخطوط العريضة لـ Detectron. Beacase the Detectron ستتعامل معه على أنه مستطيل عندما يكون len (كفاف) == 4. لقد قمت بتحديث الكود الخاص بي السابق.

تضمين التغريدة لكن ما زلنا بحاجة إلى التعامل مع len(contour)==2 ، أليس كذلك؟

@ Yuliang-Zou نعم ، لكن الكود if len(contour) > 4: يعالج len(contour)==2 و len(contour)==4 .

Sundrops أرى ، شكرا لك!

لقد كتبت مكتبة ومقالًا للمساعدة في إنشاء مجموعات بيانات بأسلوب COCO.

https://patrickwasp.com/create-your-own-coco-style-dataset/

Sundrops & topcomma لدي مشكلة في تحميل البيانات المشروحة في pycocotols حيث يتم تضمين تعليقي التوضيحي بدون قناع. أي فكرة عن كيفية تصور التعليق التوضيحي بدون قناع في pycocotools؟

تضمين التغريدة
آن: {
"تجزئة": [
[312.29 ، 562.89 ، 402.25 ، 511.49 ، 400.96 ، 425.38 ، 398.39 ، 372.69 ، 388.11 ، 332.85 ، 318.71 ، 325.14 ، 295.58 ، 305.86 ، 269.88 ، 314.86 ، 258.31 ، 337.99 ، 217.19 ، 321.29 ، 182.49 141.37 ، 343.313 ، ، 358.55 ، 159.36 ، 377.83 ، 116.95 ، 421.53 ، 167.07 ، 499.92 ، 232.61 ، 560.32 ، 300.72 ، 571.89]
] ،
"المنطقة": 54652.9556 ،
"iscrowd": 0 ،
"image_id (معرّف_الصورة): 480023 ،
"bbox": [116.95 ، 305.86 ، 285.3 ، 266.03] ،
"category_id": 58 ،
"المعرف": 86
}
كيف يمكنني حساب المساحة باستخدام mask.py في coco-api؟ شكرا لك.
الكود الخاص بي كالتالي ولكن الخطأ:

التجزئة = ann ['التجزئة']
bimask = np.array (تجزئة ، نوع dtype = np.uint8 ، ترتيب = 'F')
print ("bimask:"، bimask)
rleObjs = mask.encode (قناع ثنائي القناع)
طباعة ("rleObjs:" ، rleObjs)
المنطقة = mask.area (rleObjs)
طباعة ("المنطقة:" ، المنطقة)

تضمين التغريدة
ربما يمكنك تجربة cv2 ، لكنني لست متأكدًا من صحتها. إنه مجرد مثال من إزالة ملامح من صورة باستخدام Python و OpenCV .

def is_contour_bad(c):
    # approximate the contour
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02 * peri, True)
    # return True if it is not a rectangle
    return not len(approx) == 4
image = cv2.imread('xx.jpg')
contours = ann['segmentation']
mask = np.ones(image.shape[:2], dtype="uint8") * 255
# loop over the contours
for c in contours:
    # if the contour is not a rectangle, draw it on the mask
    if is_contour_bad(c):
        cv2.drawContours(mask, [c], -1, 0, -1)
area = (mask==0).sum()

تضمين التغريدة إذا كان قناع الكائن الأصلي يحتوي على ثقوب كبيرة ، فعند تحويله إلى مضلعات ، كيف يمكنني تحويله مرة أخرى بشكل صحيح؟ وظائف فك التشفير والدمج في coco API ستتعامل مع الفتحة كأجزاء من الكائن ، لذلك عند إعادة التحويل تصبح الثقوب أقنعة. كيف أفعل في هذه الحالة؟

@ wangg12 على حد علمي ، ليس لدى COCO طريقة أصلية لتشفير الثقوب.

for contour in contours:
        contour = contour.flatten().tolist()
        segmentation.append(contour)
        if len(contour) > 4:
            segmentation.append(contour)

مرحبًا Sundrops ، شكرًا جزيلاً على

for contour in contours:
        contour = contour.flatten().tolist()
        if len(contour) > 4:
            segmentation.append(contour)

سيكون موضع تقدير كبير إذا كنت تستطيع تقديم بعض الاقتراحات لي. شكرا جزيلا لك!

BobZhangHT نعم ، يجب أن
بالنسبة إلى سؤالك الأول ، إذا كان len (ann ['التجزئة'] [0]) == 4 ، فسيفترض cocoapi أن جميعها مستطيلة.

# cocoapi/PythonAPI/pycocotools/coco.py
def annToRLE(self, ann):
    t = self.imgs[ann['image_id']]
    h, w = t['height'], t['width']
    segm = ann['segmentation']
    if type(segm) == list:
        rles = maskUtils.frPyObjects(segm, h, w) 
        rle = maskUtils.merge(rles)
   ......
# cocoapi/PythonAPI/pycocotools/_mask.pyx
def frPyObjects(pyobj, h, w):
    # encode rle from a list of python objects
    if type(pyobj) == np.ndarray:
        objs = frBbox(pyobj, h, w)
    elif type(pyobj) == list and len(pyobj[0]) == 4:
        objs = frBbox(pyobj, h, w)
    elif type(pyobj) == list and len(pyobj[0]) > 4:
        objs = frPoly(pyobj, h, w)
   ......

Sundrops شكرا

أفسر poly كقائمة من المضلعات ، التي تحددها الرؤوس ، مثل [[x1 ، y1 ، x2 ، y2 ... xN ، yN] ، ... [x1 ، y1 ، x2 ، y2 ... xN ، yN]] ، حيث تكون إحداثيات بنفس حجم الصورة. يتم عرض الأقنعة ، المشفرة بهذه الطريقة ، بشكل صحيح بواسطة CocoAPI [1] ولكن قد ترغب في الحصول على إجابة "رسمية". [1] https://github.com/cocodataset/cocoapi https://github.com/cocodataset/cocoapi
...
في 2. فبراير 2018 ، الساعة 09:18 ، Hu Xingui @ . * > كتب: amokeev https://github.com/amokeev ، هل أنت متأكد من أن الرقم في التجزئة هو (x ، y) قمة؟ على سبيل المثال "66916" رقم كبير! آخر ، على الرغم من أنني قمت بتعيين "iscrowd" كـ "1" لتنسيق RLE ، إلا أنه لا يمكن تشغيله على Detectron. - أنت تتلقى هذا لأنه تم ذكرك. قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub < # 100 (تعليق) > ، أو كتم صوت السلسلة https://github.com/notifications/unsubscribe-auth/AFlh63ObnXg-DcaDKwIi3pB4Ppig464Hks5tQsTkgaJpZM4R2tN3 .

كيف يمكنني تحويل RLE إلى مضلعات عندما يكون "iscrowd" هو "1" لأن منفذ المسألة / MaskRCNN يعمل فقط مع المضلعات. تضمين التغريدة أرغب في استخدام تنفيذ الأمر matterport الخاص بـ maskRCNN مع مجموعة بيانات coco تم إنشاؤها باستخدام pycocreator.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

kampelmuehler picture kampelmuehler  ·  4تعليقات

gaopeng-eugene picture gaopeng-eugene  ·  4تعليقات

fangpengcheng95 picture fangpengcheng95  ·  4تعليقات

lilichu picture lilichu  ·  3تعليقات

junxiaoge picture junxiaoge  ·  3تعليقات