Detectron: рдХреЛрдХреЛ рдбрд╛рдЯрд╛рд╕реЗрдЯ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП "рд╡рд┐рднрд╛рдЬрди" рдХрд╛ RLE рдпрд╛ рдмрд╣реБрднреБрдЬ рдкреНрд░рд╛рд░реВрдк

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдлрд╝рд░ре░ 2018  ┬╖  38рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebookresearch/Detectron

рд╣рд╛рдп рдбрд┐рдЯреЗрдХреНрдЯреНрд░реЙрди,

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдбрд┐рдЯреЗрдХреНрдЯреНрд░реЙрди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдХреЛрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред
(1) рдХреЛрдХреЛ рдбреЗрдЯрд╛ рдореЗрдВ "рд╡рд┐рднрд╛рдЬрди" рдиреАрдЪреЗ ation рдХреА рддрд░рд╣

{"рд╡рд┐рднрд╛рдЬрди": [[рек репрепред segmentрез, рей реп ,.реи ......, ...... рейрекреи. ,рез, рез.3реи.рейрез ]] , "рдХреНрд╖реЗрддреНрд░": рекрейрекремрем.резреи ,реирел, "iscrowd": реж, "image_id": рез2реирезрелрел, "рдмреЙрдХреНрд╕": [рейрей8..8 реп, релрез.рем реп, релрезред 205.82, 367.61], "рд╢реНрд░реЗрдгреА_рдЖрдИрдбреА": 1, "рдЖрдИрдбреА": 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 рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреЛрдб / рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдКрдкрд░ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдбреЗрдЯреНрд░реЙрди рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред

(2) рдореИрдВрдиреЗ рдПрдХ рдирдИ рд╢реНрд░реЗрдгреА рдЬреЛрдбрд╝реА, рдФрд░ рдХреЛрдХреЛ рдПрдкреАрдЖрдИ рдПрдирдХреЛрдб () / рдбреАрдХреЛрдб () рдорд╛рд╕реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рд╡рд┐рднрд╛рдЬрди" рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ RLE рдкреНрд░рд╛рд░реВрдк рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдбреЗрдЯрд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ред

"рд╡рд┐рднрд╛рдЬрди": [{ "рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ": "MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ OQ ^ O9Pb0EQ ^ рд╣реЗ; Wb0OO01O1O1O001O1N2N`jT3?", "рдЖрдХрд╛рд░": [600,1000]}]

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдмреЛрд▓реНрдб рдХрд┐рдП рдЧрдП рдкрд╛рддреНрд░ рдореВрд▓ рдХреЛрдХреЛ "рд╡рд┐рднрд╛рдЬрди" рдЬреЛрдВрд╕ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореИрдЯрд░рдкрд╛рд░реНрдЯ рдХреЗ рдорд╛рд╕реНрдХ-рдЖрд░рд╕реАрдПрдирдПрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ Detectron рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

рдзрдиреНрдпрд╡рд╛рджред

community help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@topcomma
рд╢рд╛рдпрдж рдЖрдк рдорд╛рд╕реНрдХ рдХреЛ рдкреЛрд▓рд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рдореБрджреНрджрд╛ рдерд╛: рдХреБрдЫ рдХрд╛рд░реНрдп рд▓рд┐рдм / utils / segms.py рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдХреЛ "рдкрд╛рд▓реА" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реЛрдиреЗ рдФрд░ RLE рдореЗрдВ рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЯреВрдЯрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рд▓реЗрдХрд┐рди рдЧреИрд░-рднреАрдбрд╝ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (iscrowd = 0):

рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рдПрдХрд▓ рд╡рд╕реНрддреБ (iscrowd = 0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣реБрднреБрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ (iscrowd = 1 рдЬрд┐рд╕рдореЗрдВ RLE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

[рез] http://cocodataset.org/#download , рдЕрдиреБрднрд╛рдЧ "4.1ред рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдПрдиреЛрдЯреЗрд╢рди"

рдореЗрд░реЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб "рдкреЙрд▓реА" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рдерд╛, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ (x, y) рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреА рд╕реВрдЪреА рд╣реИред

-рд▓реЗрд╢рд╛ред

реи рдлрд░рд╡рд░реА реирежрез41 рдХреЛ режрем:рекрез рдкрд░ рд╣реВ рдЭрд┐рдВрдЧреБрдИ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдп рдбрд┐рдЯреЗрдХреНрдЯреНрд░реЙрди,

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдбрд┐рдЯреЗрдХреНрдЯреНрд░реЙрди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдХреЛрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред
(1) рдХреЛрдХреЛ рдбреЗрдЯрд╛ рдореЗрдВ "рд╡рд┐рднрд╛рдЬрди" рдиреАрдЪреЗ ation рдХреА рддрд░рд╣

{"рд╡рд┐рднрд╛рдЬрди": [[рек репрепред segmentрез, рей реп ,.реи ......, ...... рейрекреи. ,рез, рез.3реи.рейрез]], "рдХреНрд╖реЗрддреНрд░": рекрейрекремрем.резреи ,реирел, "iscrowd": реж, "image_id": рез2реирезрелрел, "рдмреАрдмреЙрдХреНрд╕": [рейрей8..8 реп, релрез.рем реп, рел репред 205.82, 367.61], "рд╢реНрд░реЗрдгреА_рдЖрдИрдбреА": 1, "рдЖрдИрдбреА": 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 рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреЛрдб / рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдКрдкрд░ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдбреЗрдЯреНрд░реЙрди рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред

(2) рдореИрдВрдиреЗ рдПрдХ рдирдИ рд╢реНрд░реЗрдгреА рдЬреЛрдбрд╝реА, рдФрд░ рдХреЛрдХреЛ рдПрдкреАрдЖрдИ рдПрдирдХреЛрдб () / рдбреАрдХреЛрдб () рдорд╛рд╕реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рд╡рд┐рднрд╛рдЬрди" рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ RLE рдкреНрд░рд╛рд░реВрдк рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдбреЗрдЯрд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ред

"рд╡рд┐рднрд╛рдЬрди": [{ "рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ": "MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ OQ ^ O9Pb0EQ ^ рд╣реЗ; Wb0OO01O1O1O001O1N2N`jT3?", "рдЖрдХрд╛рд░": [600,1000]}]

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдмреЛрд▓реНрдб рдХрд┐рдП рдЧрдП рдкрд╛рддреНрд░ рдореВрд▓ рдХреЛрдХреЛ "рд╡рд┐рднрд╛рдЬрди" рдЬреЛрдВрд╕ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореИрдЯрд░рдкрд╛рд░реНрдЯ рдХреЗ рдорд╛рд╕реНрдХ-рдЖрд░рд╕реАрдПрдирдПрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ Detectron рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

рдзрдиреНрдпрд╡рд╛рджред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЧрдИ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

@amokeev , "RLE" рдХреЛ "рдкреЙрд▓реА" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрдВ рдХреИрд╕реЗ

@amokeev , рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ (x, y) рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "66916", рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛! рдПрдХ рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ "iscrowd" рдХреЛ RLE рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП "1" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдбреЗрдЯреНрд░реЙрди рдкрд░ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрд╛ред

рдореИрдВ рдкрд╛рд▓реА рдХреЛ рдмрд╣реБрднреБрдЬ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ [[X1, y1, x2, y2тАж xN, yN],тАж [X1, y1, x2, y2тАж xN, yN]], рдЬрд╣рд╛рдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВ рдЫрд╡рд┐ рдХреЗ рд╕рдорд╛рди рдкреИрдорд╛рдиреЗред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдирдХреЛрдб рдХрд┐рдП рдЧрдП рдореБрдЦреМрдЯреЛрдВ рдХреЛ рдХреЛрдХреЛрдкреА рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ [1]

рд▓реЗрдХрд┐рди рдЖрдк "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

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

2. рдлрд░рд╡рд░реА 2018 рдХреЛ, 09:18 рдмрдЬреЗ, рд╣реВ рдЬрд┐рдВрдЧреБрдИ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@amokeev https://github.com/amokeev , рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ (x, y) рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "66916", рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛! рдПрдХ рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ "iscrowd" рдХреЛ RLE рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП "1" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдбреЗрдЯреНрд░реЙрди рдкрд░ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрд╛ред

-
рдЖрдк рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/facebookresearch/Detectron/issues/100#issuecomment-362516928 рдкрд░ https://github.com/notifications-unsubscribe-auth/AFlh63ObnXg- рдкрд░ рдореНрдпреВрдЯ

@topcomma
рд╢рд╛рдпрдж рдЖрдк рдорд╛рд╕реНрдХ рдХреЛ рдкреЛрд▓рд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред

@Sundrops , рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрдкрдХреА рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, "рдкреЙрд▓реА" рд╕реВрдЪреА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж I рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ COCO json рдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрдбрд╝реА / рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдЬреИрд╕реЗ "66916" рдпрд╛ "1" рдХреНрдпреЛрдВ рд╣реИ?

@topcomma COCO рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдПрдиреЛрдЯреЗрд╢рди рд╣реЛрддреЗ рд╣реИрдВ

  1. рдмрд╣реБрднреБрдЬ (рд╡рд╕реНрддреБ рдЙрджрд╛рд╣рд░рдг) [[499.71, 397.28, ...... 342.71, 172.31]] рдХреНрд░рд┐рдпрд╛
  2. рдЕрд╕рдореНрдмрджреНрдз RLE (рднреАрдбрд╝)ред "рд╡рд┐рднрд╛рдЬрди": {"рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ": [66916, 6, 587, ..... 1, 114303], "рдЖрдХрд╛рд░": [594, 640]}, 66916 рд▓реЗрдмрд▓ 0 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдмрд╣реБрднреБрдЬ рдФрд░ рдЕрд╕рдореНрдкреАрдбрд┐рдд RLE рдХреЛ MFSApi рдХреЗ рдХреЙрдореНрдкреИрдХреНрдЯ RLE рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреЙрдореНрдкреИрдХреНрдЯ RLE рдкреНрд░рд╛рд░реВрдк:
рд╡рд┐рднрд╛рдЬрди ": [{" рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ ":" MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ OQ ^ O9Pb0EQ ^ рд╣реЗ; Wb0OO01O1O1O001O1N2N`jT3 "," рдЖрдХрд╛рд░ ": [600,1000]}]

@ рд╕рдВрдЪрд╛рд░ ,
рдЖрдкрдХреА рдмрд╣реБрдд рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореЗрд░рд╛ рдХрд╕реНрдЯрдо рдХреЛрдХреЛ рдЬреИрд╕рд╛ рдбреЗрдЯрд╛ рдЕрдм рдбреЗрдЯреНрд░реЙрдХреНрдЯрди рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@topcomma ,
рдореБрдЭреЗ рдпреВ рдХреЗ рд╕рдорд╛рди рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
Sundrops рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдорд╛рд╕реНрдХ рдХреЛ рдкреЙрд▓рд┐рд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдвреВрдБрдв рд╕рдХрддрд╛ред
рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓ рд╣реИ? рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@ lg12170226 70
рдЖрдк рдЗрд╕реЗ рдЦреБрдж рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдХреЛ рд╕рд╛рдордЧреНрд░реА (https://github.com/nightrome/cocostuff) рдЕрдЬрдЧрд░ рдХреЛрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдХреА рдХреЛрдИ рдлрд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИред

@topcomma : рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдЪреНрдЪреА рдЫрд╡рд┐ рдФрд░ N рд▓реЗрдмрд▓ рдЪрд┐рддреНрд░ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдмрд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП N рдЫрд╡рд┐ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдорд╛рд╕реНрдХ RCNN рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ COCO рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рдХреЛрдб рдХреЛ COCO рд╢реИрд▓реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж

рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╡рд╣рд╛рдБ рд╕рдВрдХреБрдЪрд┐рдд RLE рдХреЛ рдкреЛрд▓ / рдЕрд╕рдореНрдкреАрдбрд┐рдд RLE рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

prealocots.s.ask рдХреЗ рд╕рд╛рде RLE рдХреЛ

рдХреЛрдХреЛ-рдЬреЛрд╕рди-рдХрдиреНрд╡рд░реНрдЯрд░

@ рд╣рдЬрд╝реАрд░рдмрд╛рд╕ : рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдбреЗрд╡рд┐рд╕ 2017 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЧреНрдорд┐рдиреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ? рдХреНрдпрд╛ рд╣рдо рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдбреЗрд╡рд┐рд╕ 2017 рдХреЛ рдХреЛрдХреЛ рдорд╛рд╕реНрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕ рдирдХрд╛рдмрдкреЛрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

@ John1231983 рдЖрдкрдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рд╕рд╛рде рд╣реА db_info.yml рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЛрдз рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдбреАрдПрд╡реАрдЖрдИрдПрд╕ 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" "" рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдирдХреЛрдб рдХрд░реЗрдВрдЧреЗ?

@waspinator рдЕрдкрдиреЗ рдХреЛрдб skimage рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди CV2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ @Sundrops рдХреЗ рдХреЛрдб рд╕реЗ differenct рд╣реИрдВред
рдХреНрдпрд╛ рдпреЗ рджреЛрдиреЛрдВ рдкрд░рд┐рдгрд╛рдо рджреЛрдиреЛрдВ рд╕рд╣реА рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдЗрди рджреЛрдиреЛрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯреНрд░реЙрдХреНрд░реЙрди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рд╕рд▓рд╛рд╣ рджреЗрдВ, рдзрдиреНрдпрд╡рд╛рджред @waspinator @Sundrops

рд╕реНрдХрд┐рдореЗрдЬ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдо

{ "рд╡рд┐рднрд╛рдЬрди": [[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.00196078431372, 8.0, 252.00196078431372, 9.0, 252.00196078431372, 10.0, 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.0196078431372, 252.0, 251.009607431372

Cv2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ @Sundrops рдХреЛрдб рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо:

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

@Kongsea рдореИрдВрдиреЗ @Sundrops cv2 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдХреЛрдВ рдХрд╛ рдПрдХ рдЕрдирдВрдд рд░рд╛рд╢рд┐ рд╣реИ рдЬреЛ рдЖрдк рдХрд┐рд╕реА рдЖрдХреГрддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдЕрднреА cv2 рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@Kongsea @waspinator рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╢реБрдХреНрд░рд┐рдпрд╛ @Sundrops @waspinator ред
рдореЗрд░реА рдПрдХ рдХреЛрд╢рд┐рд╢ рд╣реЛрдЧреАред

@waspinator рдХреНрдпрд╛ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдкреЙрд▓реА рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ RLE рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ccrowd = 1

@Sundrops рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЗрд╕ рднрд╛рдЧ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреНрдпреЛрдВ рдХреА?

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

рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╣реИ рдирд╛?

@ рдпреВрд▓рд┐рдЖрдВрдЧ-рдЬрд╝реВ рдЖрдкрдХреЛ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЕрдирд╕реБрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдбреЗрдЯреНрд░реЙрди рдХреЗ рд▓рд┐рдП uesd рд╣реИрдВред рдмреАрдХреЗрд╕ рдж рдбрд┐рдЯреЗрдХреНрдЯреНрд░реЙрди рдЗрд╕реЗ рдПрдХ рдЖрдпрдд рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВрдЧреЗ рдЬрдм рд▓реЗрди (рд╕рдореЛрдЪреНрдЪ) == 4ред рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдкрд┐рдЫрд▓рд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

@Sundrops рд╕рд╛рднрд╛рд░ рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА len(contour)==2 рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

@ рдпреВрд▓рд┐рдЖрдВрдЧ-рдЬрд╝реВ рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдХреЛрдб if len(contour) > 4: рдиреЗ len(contour)==2 рдФрд░ len(contour)==4 рд╕рдВрднрд╛рд▓ рд▓рд┐рдпрд╛ рд╣реИред

@Sundrops рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВрдиреЗ COCO рд╕реНрдЯрд╛рдЗрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ред

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

@Sundrops & @topcomma рдореБрдЭреЗ

@Sundrops
рд╡рд╛рд░реНрд╖рд┐рдХ: {
"рд╡рд┐рднрд╛рдЬрди": [
[312.29, 562.89, 402.25, 511.49, 400.96, 425.38, 398.39, 372.69, 388.11, 332.85, 318.71, 325.18, 295.88, 269.88, 314.86, 314.86, 258.39.99, 330.39.99, 66.39.993, 66.39.999.33ред , 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,
"рдмреАрдмреЙрдХреНрд╕": [116.95, 305.86, 285.3, 266.03],
"рдХреИрдЯреЗрдЧрд░реА_рдЖрдИрдбреА": 58,
"рдЖрдИрдбреА": 86
}
рдореИрдВ рдХреЛрдХреЛ-рдПрдкреАрдЖрдИ рдореЗрдВ рдорд╛рд╕реНрдХрд╣реЛрдо рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдзрдиреНрдпрд╡рд╛рджред
рдореЗрд░рд╛ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рд╣реИ:

рд╡рд┐рднрд╛рдЬрди = рдШреЛрд╖рдгрд╛ ['рд╡рд┐рднрд╛рдЬрди']
bimask = np.array (рд╡рд┐рднрд╛рдЬрди, dtype = np.uint8, рдЖрджреЗрд╢ = 'F')
рдкреНрд░рд┐рдВрдЯ ("рдмрд┐рдорд╛рд╕реНрдХ:", рдмрд┐рдорд╛рд╕реНрдХ)
rleObjs = mask.encode (рдмрд┐рдорд╛рд╕реНрдХ)
рдкреНрд░рд┐рдВрдЯ ("rleObjs:", rleObjs)
рдХреНрд╖реЗрддреНрд░
рдкреНрд░рд┐рдВрдЯ ("рдХреНрд╖реЗрддреНрд░:", рдХреНрд╖реЗрддреНрд░)

@manketon
рд╢рд╛рдпрдж рдЖрдк cv2 рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рдФрд░ 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()

@Sundrops @waspinator рдореЗрд░рд╛ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИред рдпрджрд┐ рдореЗрд░реЗ рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рд╕реНрдХ рдореЗрдВ рдмрдбрд╝реЗ рдЫреЗрдж рд╣реИрдВ, рдЬрдм рдЗрд╕реЗ рдкреЙрд▓реАрдЧреЙрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреЛрдХреЛ рдПрдкреАрдЖрдИ рдореЗрдВ рдбрд┐рдХреЛрдб рдФрд░ рдорд░реНрдЬ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЗрдж рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╡рд╛рдкрд╕ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЫреЗрдж рдорд╛рд╕реНрдХ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@ wangg12 рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ COCO рдореЗрдВ рдПрдирдХреЛрдбрд┐рдВрдЧ рдЫреЗрдж рдХрд╛ рдПрдХ рджреЗрд╢реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

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

рд╣рд╛рдп @Sundrops , рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдбреЗрдЯреНрд░реЙрди рдкрд░ рдПрдХ рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рднреНрд░рдо рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рдореЛрдЪреНрдЪ рдХреА рд▓рдВрдмрд╛рдИ (рдЬреЛ рдПрдХ рд╕реВрдЪреА рд╣реИ) 4 рд╕реЗ рдмрдбрд╝реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЬрдм рд▓рдВрдмрд╛рдИ 4 рд╕реЗ рдЫреЛрдЯреА рд╣реЛред рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдбреЗрдЯреНрд░рд╛рдпрдЯрди рдЗрд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдЧрд╛ рдЖрдпрддред рдореЗрд░реЗ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореЗрдВ, рдЖрдпрдд рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рджреЛ рдмрд╛рд░ рд╕рдореЛрдЪреНрдЪ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЖрдкрдХреЛ рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@ рдЧреЛрдмреНрдЭрд╛рдВрда рд╣рд╛рдБ, рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рд╕рдореЛрдЪреНрдЪ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ len (ann ['рд╡рд┐рднрд╛рдЬрди'] [0]) == рек, рдХреЛрдХреЛрдкреА рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рд╕рднреА рдЖрдпрдд рд╣реИрдВред

# 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 рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдкрд╛рд▓реА рдХреЛ рдмрд╣реБрднреБрдЬ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ [[X1, y1, x2, y2тАж xN, yN],тАж [X1, y1, x2, y2тАж xN, yN]], рдЬрд╣рд╛рдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВ рдЫрд╡рд┐ рдХреЗ рд╕рдорд╛рди рдкреИрдорд╛рдиреЗред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдирдХреЛрдб рдХрд┐рдП рдЧрдП рдореБрдЦреМрдЯреЛрдВ рдХреЛ рдХреЛрдХреЛрдкреАрдЖрдИ [1] рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред [1] https://github.com/cocodataset/cocoapi https://github.com/cocodataset/cocoapi
тАж
2. рдлрд░рд╡рд░реА 2018 рдХреЛ, 09:18 рдмрдЬреЗ, рд╣реВ рдЬрд┐рдВрдЧреБрдИ @ ред * * рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛: https://github.com/amokeev , рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ (x, y) рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "66916", рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛! рдПрдХ рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ "iscrowd" рдХреЛ RLE рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП "1" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдбреЗрдЯреНрд░реЙрди рдкрд░ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрд╛ред - рдЖрдк рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub < # 100 (рдЯрд┐рдкреНрдкрдгреА) > рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ https://github.com/notifications/unsubscribe-auth/AFlh63ObnXg-DcaDKwi3pB4Ppig464Hks5tTsgaJpZMR4N2N2N2 рдкрд░ рджреЗрдЦреЗрдВ ред

рдЬрдм "iscrowd" "1" рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ RLE рдХреЛ рдмрд╣реБрднреБрдЬ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреЙрд▓реАрдкреЛрд░реНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╣реА рд╕реНрдкреЙрд░реНрдЯрдкреЛрд░реНрдЯ / MaskRCNN рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред @amokeev рдореИрдВ pycococreator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдХреЛрдХреЛ рдХреЛрдХреЛрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдорд╛рд╕реНрдХрдЖрд░рд╕реАрдПрдирдПрди рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

pacelu picture pacelu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

partnercloudsupport picture partnercloudsupport  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fangpengcheng95 picture fangpengcheng95  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Emma0928 picture Emma0928  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

743341 picture 743341  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ