ããã«ã¡ã¯Detectronã
æè¿ãã«ã¹ã¿ã cocoããŒã¿ãè¿œå ããŠDetectronãå®è¡ããããšããŸãããã次ã®åé¡ãçºçããŸããã
ïŒ1ïŒä»¥äžã®ãããªã³ã³ããŒã¿ã®ãã»ã°ã¡ã³ããŒã·ã§ã³ãã
{"ã»ã°ã¡ã³ããŒã·ã§ã³"ïŒ [[ 499.71ã397.28ã...... 342.71ã172.31 ]] ã "area"ïŒ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}ã
ãã»ã°ã¡ã³ããŒã·ã§ã³ãã®æåã®åœ¢åŒã¯ããªãŽã³ã§ããã2çªç®ã®åœ¢åŒã¯RLE圢åŒã®ãšã³ã³ãŒã/ãã³ãŒããå¿
èŠã§ãã
äžèšã®ãã©ãŒãããã¯Detectronã§å®è¡ã§ããŸãã
ïŒ2ïŒæ°ããã«ããŽãªãè¿œå ããcoco api encodeïŒïŒ/ decodeïŒïŒãã¹ã¯ãä»ããŠãã»ã°ã¡ã³ããŒã·ã§ã³ããã£ãŒã«ãã®æ°ããRLE圢åŒãçæããŸããã
ãã®ãããªããŒã¿ãçæããŸããã
"åå²"ïŒ[{ "ã«ãŠã³ã"ïŒ "MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ OQ ^ O9Pb0EQ ^ O; Wb0OO01O1O1O001O1N2N`jT3ïŒ"ã"ãµã€ãº"ïŒ[600,1000]}]
倪åã®æåã¯ãMatterPortã®Mask-RCNNãžã®å®è£ ã§å®è¡ã§ããŸãããå ã®cocoãã»ã°ã¡ã³ããŒã·ã§ã³ãjson圢åŒãšã¯ç°ãªãããšãããããŸããã
ãŸããèŠä»¶ãæºããããã«ããã€ãã®Detectronã®ã³ãŒããå€æŽããããšããŸããããå€ãã®ã³ãŒããå€æŽããå¿ èŠããããããéåžžã«å°é£ã§ããã
ã«ã¹ã¿ã ããŒã¿ãå®è¡ããããã®ææ¡ããé¡ãããŸãã
ããããšãã
åæ§ã®åé¡ããããŸãããlib/ utils / segms.pyã®äžéšã®é¢æ°ã¯ãã»ã°ã¡ã³ããŒã·ã§ã³ããããªã圢åŒã§ãããRLEã§æäŸããããšå£ããããšãæ³å®ããŠããŸãã
äžäŸ¿ã§ãããæ··éããŠããªãå°åïŒiscrowd = 0ïŒã®ä»æ§ã«æ²¿ã£ãŠããããã§ãã
ã»ã°ã¡ã³ããŒã·ã§ã³åœ¢åŒã¯ãã€ã³ã¹ã¿ã³ã¹ãåäžã®ãªããžã§ã¯ããè¡šããïŒiscrowd = 0ã®å Žåã¯ããªãŽã³ã䜿çšãããŸãïŒããªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ãè¡šããïŒiscrowd = 1ã®å Žåã¯RLEã䜿çšãããŸãïŒã«ãã£ãŠç°ãªããŸãã
[1] http://cocodataset.org/#download ãã»ã¯ã·ã§ã³ã4.1ããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã®æ³šéã
ç§ã«ãšã£ãŠã®åé¿çã¯ãæ¬è³ªçã«ïŒxãyïŒé ç¹ã®ãªã¹ãã§ãããããªã圢åŒã«å€æããããšã§ããã
-ãªãŒã·ã£ã
2. 2018幎2æã«ã¯ã6æ41åã§ãè¡Xinguiã®[email protected]ã¯æžããŸããïŒ
ããã«ã¡ã¯Detectronã
æè¿ãã«ã¹ã¿ã cocoããŒã¿ãè¿œå ããŠDetectronãå®è¡ããããšããŸãããã次ã®åé¡ãçºçããŸããã
ïŒ1ïŒä»¥äžã®ãããªã³ã³ããŒã¿ã®ãã»ã°ã¡ã³ããŒã·ã§ã³ãã{"ã»ã°ã¡ã³ããŒã·ã§ã³"ïŒ[[499.71ã397.28ã...... 342.71ã172.31]]ã "area"ïŒ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}ã
ãã»ã°ã¡ã³ããŒã·ã§ã³ãã®æåã®åœ¢åŒã¯ããªãŽã³ã§ããã2çªç®ã®åœ¢åŒã¯RLE圢åŒã®ãšã³ã³ãŒã/ãã³ãŒããå¿ èŠã§ããäžèšã®ãã©ãŒãããã¯Detectronã§å®è¡ã§ããŸãã
ïŒ2ïŒæ°ããã«ããŽãªãè¿œå ããcoco api encodeïŒïŒ/ decodeïŒïŒãã¹ã¯ãä»ããŠãã»ã°ã¡ã³ããŒã·ã§ã³ããã£ãŒã«ãã®æ°ããRLE圢åŒãçæããŸããã
ãã®ãããªããŒã¿ãçæããŸããã"åå²"ïŒ[{ "ã«ãŠã³ã"ïŒ "MNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ OQ ^ O9Pb0EQ ^ O; Wb0OO01O1O1O001O1N2N`jT3ïŒ"ã "ãµã€ãº"ïŒ[600,1000]}]
倪åã®æåã¯ãMatterPortã®Mask-RCNNãžã®å®è£ ã§å®è¡ã§ããŸãããå ã®cocoãã»ã°ã¡ã³ããŒã·ã§ã³ãjson圢åŒãšã¯ç°ãªãããšãããããŸããã
ãŸããèŠä»¶ãæºããããã«ããã€ãã®Detectronã®ã³ãŒããå€æŽããããšããŸããããå€ãã®ã³ãŒããå€æŽããå¿ èŠããããããéåžžã«å°é£ã§ããã
ã«ã¹ã¿ã ããŒã¿ãå®è¡ããããã®ææ¡ããé¡ãããŸãã
ããããšãã
â
ãã®ã¹ã¬ããã«ãµãã¹ã¯ã©ã€ãããŠããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŠãã ããã
@amokeev ãåé¿çãšããŠãRLEãããpolyã圢åŒã«å€æããæ¹æ³ã¯ïŒ
@amokeev ãã»ã°ã¡ã³ããŒã·ã§ã³ã®æ°ã¯ïŒxãyïŒé ç¹ã§ããïŒ äŸãã°ã66916ããå€æ°ïŒ ãã1ã€ã¯ãRLE圢åŒã§ãiscrowdããã1ãã«èšå®ããã«ããããããã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幎2æã«ã¯ãåå9æ18åã§ãè¡Xinguiã®[email protected]ã¯æžããŸããïŒ
@amokeev https://github.com/amokeev ãã»ã°ã¡ã³ããŒã·ã§ã³ã®æ°ã¯ïŒxãyïŒé ç¹ã§ããïŒ äŸãã°ã66916ããå€æ°ïŒ ãã1ã€ã¯ãRLE圢åŒã§ãiscrowdããã1ãã«èšå®ããã«ãããããããDetectronã§å®è¡ã§ããªãã£ãããšã§ãã
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub https://github.com/facebookresearch/Detectron/issues/100#issuecomment-362516928ã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŸãhttps://github.com/notifications/unsubscribe-auth/AFlh63ObnXg- DcaDKwIi3pB4Ppig464Hks5tQsTkgaJpZM4R2tN3 ã
@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 ãå€æããæ¹æ³ãšããŠããããªããªã¹ãã®çµæãååŸã§ããŸãã ã©ããããããšãããããŸããïŒã§ããCOCO jsonãã¡ã€ã«ã®åº§æšãã66916ããã1ãã®ããã«å€§ãã/å°ããçç±ããŸã ããããŸããã
@topcomma COCOã¢ãããŒã·ã§ã³ã«ã¯ã2çš®é¡ã®ã»ã°ã¡ã³ããŒã·ã§ã³ã¢ãããŒã·ã§ã³ããããŸã
ããªãŽã³ãšéå§çž®RLEã¯ãMaskApiã䜿çšããŠã³ã³ãã¯ãRLE圢åŒã«å€æãããŸãã
ã³ã³ãã¯ããªRLEãã©ãŒãããïŒ
ã»ã°ã¡ã³ããŒã·ã§ã³ "ïŒ[{" ã«ãŠã³ã "ïŒ "ïŒMNG = 1fb02O1O1O001N2O001O1O0O2O1O1O001N2O001O1O0O2O1O001O1O1O010000O01000O010000O01000O01000O01000O01N2N2M2O2N2N1O2N2O001O10O B000O10O1O001 ^ OQ ^ O9Pb0EQ ^ O; Wb0OO01O1O1O001O1N2N`jT3"ã" ãµã€ãºãïŒ[600,1000]}]
@Sundrops ã
å€å€§ãªããååãããããšãããããŸãã
ç§ã®ã«ã¹ã¿ã ã³ã³ã®ãããªããŒã¿ã¯ãDetectronã§ãã¬ãŒãã³ã°ã§ããããã«ãªããŸããã
@topcomma ã
ç§ã¯ããªããšåãåé¡ãæ±ããŠããŸãã
Sundropsã®æ¹æ³ãšããŠããã¹ã¯ãããªãŽã³ã«å€æãããã¡ã€ã«ãèŠã€ãããŸããã
ã©ã®ãã¡ã€ã«ãæããŠããã ããŸããïŒããããšãããããŸãïŒ
@ lg12170226 ã
coco stuffïŒhttps://github.com/nightrome/cocostuffïŒpythonã³ãŒããåç
§ããŠãèªåã§å®è£
ããããšãã§ããŸãã
ã³ãŒãããŒã¹ã«ã¯ãé¢é£ãã泚éã®ãã¡ã€ã«ã¯ãããŸããã
@topcomma ïŒçã®ç»åãšN
ã©ãã«ç»åããããŸãã åã©ãã«ã¯1ã€ã®ãã¡ã€ã«ã«ä¿åãããŠããã®ã§ãã©ãã«çšã«N
ç»åããããŸãã èªåã®ããŒã¿ã»ããã§MaskRCNNããã¬ãŒãã³ã°ãããã®ã§ãæåã«COCO圢åŒã«å€æããå¿
èŠããããŸãã ã³ãŒããCOCOã¹ã¿ã€ã«ã«å€æããæ¹æ³ãæããŠãã ããã ããããšã
å§çž®ãããRLEãããª/éå§çž®ã®RLEã«å€æããæ¹æ³ããããã©ããçåã«æã£ãŠããŸããïŒ
@realwecan pycocotools.mask.decodeã䜿çšããŠRLEããã³ãŒãããåŸãopencvã䜿çšããŠããªãŽã³ãçæããããã®å®è£ ã確èªã§ããŸãã
@hazirbas ïŒã³ãŒããããããšãã ã€ã³ã¹ã¿ã³ã¹ã®ã»ã°ã¡ã³ãåãå«ãDavis2017ã䜿çšããŠã¿ãŸãããïŒ ãã®maskrcnnå®è£ ã䜿çšããããã«ãã³ãŒãã䜿çšããŠDavis 2017ãcoco圢åŒã«å€æã§ããŸããïŒ
@ John1231983åå²ãã¡ã€ã«ãšãdb_info.ymlãã¡ã€ã«ãèªã¿åãããã«ãããã«å¿ããŠã¹ã¯ãªãããå€æŽããå¿ èŠããããŸãã ç§èªèº«ã®ç 究ã®ããã«ãDAVIS2016ã§å¿ èŠã§ããã
ããªãŽã³ãçæããããã®å¥ã®ãœãªã¥ãŒã·ã§ã³ã§ããã skimage
代ããã«opencv
skimage
䜿çšããŸãã
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))
ãiscrowdïŒ1ããcountsããã£ãŒã«ãã§äœ¿çšããããã«ããã€ããªãã¹ã¯ãŸãã¯ãšã³ã³ãŒããããRLEãéå§çž®RLEã«ã©ã®ããã«å€æããŸããïŒ
skimageã䜿çšããã³ãŒãã§ã®@waspinatorã»ã°ã¡ã³ããŒã·ã§ã³ã¯ã
ãããã®2ã€ã®çµæã¯äž¡æ¹ãšãæ£ããã§ãããããã2ã€ã®çµæã¯äž¡æ¹ãšãDetectronã§äœ¿çšã§ããŸããïŒ ã¢ããã€ã¹ããé¡ãããŸããããããšãããããŸãã @waspinator @Sundrops
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.00196078431372ã8.0ã252.00196078431 ã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.001960 ã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.00196078431 ã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.00196078431 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ã 63.0ã252.00196078431372ã64.0ã252.00196078431372ã65.0ã252.00196078431372ã66.0ã252.00196078431372ã67.0ã252.0019607431372ã68.0ã252.00196078431372ã69.0ã252.00196078431372ã70.0ã252.00196078431372ã71.0ã252.00196078 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ã 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.0019607431372ã95.0ã251.00196078431372ã96.0 ..
cv2ã䜿çšãã
[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ã«å€æããæ¹æ³ã¯ãããŸããïŒ ç§ã®ã¿ãŒã²ããã¯iscrowd = 1ã«ãªããŸã
@Sundropsãªãã³ãŒãã®ãã®éšåã«ã³ã¡ã³ãããã®ã§ããïŒ
# if len(contour) > 4:
# segmentation.append(contour)
# if len(segmentation) == 0:
# continue
ç§ãã¡ã¯ç¢ºãã«ãã®ãããªå Žåã«å¯ŸåŠããå¿ èŠããããŸãããïŒ
@ Yuliang-Zou Detectronã®èŒªéã䜿çšãããŠããå Žåã¯ããã®éšåã®ã³ã¡ã³ãã解é€ããå¿ èŠããããŸãã lenïŒcontourïŒ== 4ã®å ŽåãDetectronã¯ãããé·æ¹åœ¢ãšããŠæ±ãããã§ãã 以åã®ã³ãŒããæŽæ°ããŸããã
@Sundropsããããšãã ããããããã§ãlen(contour)==2
ãåŠçããå¿
èŠããããŸãããïŒ
@ Yuliang-Zouã¯ãããã ããã³ãŒãif len(contour) > 4:
ã¯ãã³ãã«len(contour)==2
ãšlen(contour)==4
ãŸãã
@Sundropsãªãã»ã©ãããããšãïŒ
COCOã¹ã¿ã€ã«ã®ããŒã¿ã»ããã®äœæã«åœ¹ç«ã€ã©ã€ãã©ãªãšèšäºãäœæããŸããã
@ Sundrops ïŒ @ topcomma泚éããã¹ã¯ãªãã®ã»ã°ã¡ã³ããŒã·ã§ã³ã«å«ãŸããŠããããã泚éä»ãããŒã¿ãpycocotolsã«ããŒãããã®ã«åé¡ããããŸãã pycocotoolsã§ãã¹ã¯ãªãã§æ³šéãèŠèŠåããæ¹æ³ã¯ãããŸããïŒ
@Sundrops
ã¢ã³ïŒ{
ãã»ã°ã¡ã³ããŒã·ã§ã³ãïŒ[
[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ã ã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ã
ãidãïŒ86
}
coco-apiã®mask.pyã§é¢ç©ãèšç®ããã«ã¯ã©ãããã°ããã§ããïŒ ããããšãããããŸããã
ç§ã®ã³ãŒãã¯æ¬¡ã®ãšããã§ããããšã©ãŒãçºçããŸãïŒ
ã»ã°ã¡ã³ããŒã·ã§ã³= ann ['ã»ã°ã¡ã³ããŒã·ã§ã³']
bimask = np.arrayïŒã»ã°ã¡ã³ããŒã·ã§ã³ãdtype = np.uint8ãorder = 'F'ïŒ
printïŒ "bimaskïŒ"ãbimaskïŒ
rleObjs = mask.encodeïŒbimaskïŒ
printïŒ "rleObjsïŒ"ãrleObjsïŒ
area = mask.areaïŒrleObjsïŒ
printïŒ "areaïŒ"ãareaïŒ
@manketon
ãã¶ãããªãã¯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()
@ Sundrops @ waspinator質åããããŸãã å ã®ãªããžã§ã¯ããã¹ã¯ã«å€§ããªç©Žãããå ŽåãããªãŽã³ã«å€æãããšãã«ãã©ã®ããã«æ£ããå€æãçŽãå¿ èŠããããŸããïŒ coco APIã®ãã³ãŒãããã³ããŒãžé¢æ°ã¯ãç©Žããªããžã§ã¯ãã®äžéšãšããŠæ±ããããå€æããŠæ»ããšãç©Žã¯ãã¹ã¯ã«ãªããŸãã ãã®å Žåã¯ã©ãããã°ããã§ããïŒ
@ wangg12ç§ãç¥ãéããCOCOã«ã¯ããŒã«ããšã³ã³ãŒããããã€ãã£ããªæ¹æ³ããããŸããã
for contour in contours:
contour = contour.flatten().tolist()
segmentation.append(contour)
if len(contour) > 4:
segmentation.append(contour)
ããã«ã¡ã¯@Sundrops ãã³ãŒãã«å¿ããæè¬ããŸãã ç§ã¯Detectronã®åå¿è ã§ãã çé«ç·ïŒãªã¹ãïŒã®é·ãã4ãã倧ããå¿ èŠãããçç±ãã€ãŸããé·ãã4ããå°ããå Žåã«ã¢ãã«ãã©ããªãã®ããæ··ä¹±ããŸããããåçã§ã¯ãDetectronã¯ãããç©åœ¢ã ç§ã®èãã§ã¯ãé·æ¹åœ¢ã®ãªããžã§ã¯ãããããããããªãã®ã§ãããã§ãããšæããŸãã ãŸãã1åã®å埩ã§2å茪éãè¿œå ããã®ã§ã¯ãªãããšæããŸãã æ£ããã³ãŒããå¿ èŠã ãšæããŸãã
for contour in contours:
contour = contour.flatten().tolist()
if len(contour) > 4:
segmentation.append(contour)
äœãææ¡ãããã ããã°å¹žãã§ãã ã©ããããããšãããããŸãïŒ
@BobZhangHTã¯ãã1åã®å埩ã§1å茪éãè¿œå ããå¿
èŠããããŸãã
æåã®è³ªåã§ã¯ãlenïŒann ['segmentation'] [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
âŠ
2018幎2æ2æ¥ã09ïŒ18ãHu Xingui @ ã * >æžã蟌ã¿ïŒ @amokeev https://github.com/amokeev ãã»ã°ã¡ã³ããŒã·ã§ã³ã®æ°ã¯ïŒxãyïŒé ç¹ã§ããïŒ äŸãã°ã66916ããå€æ°ïŒ ãã1ã€ã¯ãRLE圢åŒã§ãiscrowdããã1ãã«èšå®ããã«ãããããããDetectronã§å®è¡ã§ããªãã£ãããšã§ãã âããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub < ïŒ100ïŒã³ã¡ã³ãïŒ >ã§è¡šç€ºããããã¹ã¬ããhttps://github.com/notifications/unsubscribe-auth/AFlh63ObnXg-DcaDKwIi3pB4Ppig464Hks5tQsTkgaJpZM4R2tN3ããã¥ãŒãã
ãiscrowdããã1ãã®å Žåãmatterport / MaskRCNNã¯ããªãŽã³ã§ã®ã¿æ©èœãããããRLEãããªãŽã³ã«å€æããã«ã¯ã©ãããã°ããã§ããã @amokeevã pycococreatorã䜿çšããŠäœæãããcocoããŒã¿ã»ããã§maskRCNNã®matterportå®è£ ã䜿çšããããšæããŸãã
æãåèã«ãªãã³ã¡ã³ã
@topcomma
ãã¶ãããã¹ã¯ãããªãŽã³ã«å€æããŠã¿ãããšãã§ããŸãã