瀏覽代碼

Export original VOC format in labelme2voc.py

Kentaro Wada 1 年之前
父節點
當前提交
aa91168e4c
共有 38 個文件被更改,包括 64 次插入157 次删除
  1. 4 2
      examples/instance_segmentation/README.md
  2. 二進制
      examples/instance_segmentation/data_dataset_voc/JPEGImages/2011_000003.jpg
  3. 二進制
      examples/instance_segmentation/data_dataset_voc/JPEGImages/2011_000006.jpg
  4. 二進制
      examples/instance_segmentation/data_dataset_voc/JPEGImages/2011_000025.jpg
  5. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000003.png
  6. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000006.png
  7. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000025.png
  8. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000003.npy
  9. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000006.npy
  10. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000025.npy
  11. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000003.jpg
  12. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000006.jpg
  13. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000025.jpg
  14. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000003.png
  15. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000006.png
  16. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000025.png
  17. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationObjectNpy/2011_000003.npy
  18. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationObjectNpy/2011_000006.npy
  19. 0 0
      examples/instance_segmentation/data_dataset_voc/SegmentationObjectNpy/2011_000025.npy
  20. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationObjectVisualization/2011_000003.jpg
  21. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationObjectVisualization/2011_000006.jpg
  22. 二進制
      examples/instance_segmentation/data_dataset_voc/SegmentationObjectVisualization/2011_000025.jpg
  23. 55 46
      examples/instance_segmentation/labelme2voc.py
  24. 4 3
      examples/semantic_segmentation/README.md
  25. 二進制
      examples/semantic_segmentation/data_dataset_voc/JPEGImages/2011_000003.jpg
  26. 二進制
      examples/semantic_segmentation/data_dataset_voc/JPEGImages/2011_000006.jpg
  27. 二進制
      examples/semantic_segmentation/data_dataset_voc/JPEGImages/2011_000025.jpg
  28. 0 0
      examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000003.png
  29. 二進制
      examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000006.png
  30. 0 0
      examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000025.png
  31. 0 0
      examples/semantic_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000003.npy
  32. 二進制
      examples/semantic_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000006.npy
  33. 0 0
      examples/semantic_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000025.npy
  34. 二進制
      examples/semantic_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000003.jpg
  35. 二進制
      examples/semantic_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000006.jpg
  36. 二進制
      examples/semantic_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000025.jpg
  37. 0 106
      examples/semantic_segmentation/labelme2voc.py
  38. 1 0
      examples/semantic_segmentation/labelme2voc.py

+ 4 - 2
examples/instance_segmentation/README.md

@@ -15,8 +15,10 @@ labelme data_annotated --labels labels.txt --nodata --labelflags '{.*: [occluded
 # It generates:
 #   - data_dataset_voc/JPEGImages
 #   - data_dataset_voc/SegmentationClass
+#   - data_dataset_voc/SegmentationClassNpy
 #   - data_dataset_voc/SegmentationClassVisualization
 #   - data_dataset_voc/SegmentationObject
+#   - data_dataset_voc/SegmentationObjectNpy
 #   - data_dataset_voc/SegmentationObjectVisualization
 ./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt
 ```
@@ -30,8 +32,8 @@ Note that the label file contains only very low label values (ex. `0, 4, 14`), a
 You can see the label PNG file by following.
 
 ```bash
-labelme_draw_label_png data_dataset_voc/SegmentationClassPNG/2011_000003.png   # left
-labelme_draw_label_png data_dataset_voc/SegmentationObjectPNG/2011_000003.png  # right
+labelme_draw_label_png data_dataset_voc/SegmentationClass/2011_000003.png   # left
+labelme_draw_label_png data_dataset_voc/SegmentationObject/2011_000003.png  # right
 ```
 
 <img src=".readme/draw_label_png_class.jpg" width="33%" /> <img src=".readme/draw_label_png_object.jpg" width="33%" />

二進制
examples/instance_segmentation/data_dataset_voc/JPEGImages/2011_000003.jpg


二進制
examples/instance_segmentation/data_dataset_voc/JPEGImages/2011_000006.jpg


二進制
examples/instance_segmentation/data_dataset_voc/JPEGImages/2011_000025.jpg


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationClassPNG/2011_000003.png → examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000003.png


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationClassPNG/2011_000006.png → examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000006.png


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationClassPNG/2011_000025.png → examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000025.png


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000003.npy → examples/instance_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000003.npy


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000006.npy → examples/instance_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000006.npy


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationClass/2011_000025.npy → examples/instance_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000025.npy


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000003.jpg


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000006.jpg


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000025.jpg


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationObjectPNG/2011_000003.png → examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000003.png


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationObjectPNG/2011_000006.png → examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000006.png


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationObjectPNG/2011_000025.png → examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000025.png


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000003.npy → examples/instance_segmentation/data_dataset_voc/SegmentationObjectNpy/2011_000003.npy


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000006.npy → examples/instance_segmentation/data_dataset_voc/SegmentationObjectNpy/2011_000006.npy


+ 0 - 0
examples/instance_segmentation/data_dataset_voc/SegmentationObject/2011_000025.npy → examples/instance_segmentation/data_dataset_voc/SegmentationObjectNpy/2011_000025.npy


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationObjectVisualization/2011_000003.jpg


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationObjectVisualization/2011_000006.jpg


二進制
examples/instance_segmentation/data_dataset_voc/SegmentationObjectVisualization/2011_000025.jpg


+ 55 - 46
examples/instance_segmentation/labelme2voc.py

@@ -18,11 +18,17 @@ def main():
     parser = argparse.ArgumentParser(
         formatter_class=argparse.ArgumentDefaultsHelpFormatter
     )
-    parser.add_argument("input_dir", help="input annotated directory")
-    parser.add_argument("output_dir", help="output dataset directory")
-    parser.add_argument("--labels", help="labels file", required=True)
+    parser.add_argument("input_dir", help="Input annotated directory")
+    parser.add_argument("output_dir", help="Output dataset directory")
+    parser.add_argument("--labels", help="Labels file", required=True)
     parser.add_argument(
-        "--noviz", help="no visualization", action="store_true"
+        "--noobject", help="Flag not to generate object label", action="store_true"
+    )
+    parser.add_argument(
+        "--nonpy", help="Flag not to generate .npy files", action="store_true"
+    )
+    parser.add_argument(
+        "--noviz", help="Flag to disable visualization", action="store_true"
     )
     args = parser.parse_args()
 
@@ -32,17 +38,16 @@ def main():
     os.makedirs(args.output_dir)
     os.makedirs(osp.join(args.output_dir, "JPEGImages"))
     os.makedirs(osp.join(args.output_dir, "SegmentationClass"))
-    os.makedirs(osp.join(args.output_dir, "SegmentationClassPNG"))
-    if not args.noviz:
-        os.makedirs(
-            osp.join(args.output_dir, "SegmentationClassVisualization")
-        )
-    os.makedirs(osp.join(args.output_dir, "SegmentationObject"))
-    os.makedirs(osp.join(args.output_dir, "SegmentationObjectPNG"))
+    if not args.nonpy:
+        os.makedirs(osp.join(args.output_dir, "SegmentationClassNpy"))
     if not args.noviz:
-        os.makedirs(
-            osp.join(args.output_dir, "SegmentationObjectVisualization")
-        )
+        os.makedirs(osp.join(args.output_dir, "SegmentationClassVisualization"))
+    if not args.noobject:
+        os.makedirs(osp.join(args.output_dir, "SegmentationObject"))
+        if not args.nonpy:
+            os.makedirs(osp.join(args.output_dir, "SegmentationObjectNpy"))
+        if not args.noviz:
+            os.makedirs(osp.join(args.output_dir, "SegmentationObjectVisualization"))
     print("Creating dataset:", args.output_dir)
 
     class_names = []
@@ -71,30 +76,31 @@ def main():
 
         base = osp.splitext(osp.basename(filename))[0]
         out_img_file = osp.join(args.output_dir, "JPEGImages", base + ".jpg")
-        out_cls_file = osp.join(
-            args.output_dir, "SegmentationClass", base + ".npy"
-        )
-        out_clsp_file = osp.join(
-            args.output_dir, "SegmentationClassPNG", base + ".png"
-        )
+        out_clsp_file = osp.join(args.output_dir, "SegmentationClass", base + ".png")
+        if not args.nonpy:
+            out_cls_file = osp.join(
+                args.output_dir, "SegmentationClassNpy", base + ".npy"
+            )
         if not args.noviz:
             out_clsv_file = osp.join(
                 args.output_dir,
                 "SegmentationClassVisualization",
                 base + ".jpg",
             )
-        out_ins_file = osp.join(
-            args.output_dir, "SegmentationObject", base + ".npy"
-        )
-        out_insp_file = osp.join(
-            args.output_dir, "SegmentationObjectPNG", base + ".png"
-        )
-        if not args.noviz:
-            out_insv_file = osp.join(
-                args.output_dir,
-                "SegmentationObjectVisualization",
-                base + ".jpg",
+        if not args.noobject:
+            out_insp_file = osp.join(
+                args.output_dir, "SegmentationObject", base + ".png"
             )
+            if not args.nonpy:
+                out_ins_file = osp.join(
+                    args.output_dir, "SegmentationObjectNpy", base + ".npy"
+                )
+            if not args.noviz:
+                out_insv_file = osp.join(
+                    args.output_dir,
+                    "SegmentationObjectVisualization",
+                    base + ".jpg",
+                )
 
         img = labelme.utils.img_data_to_arr(label_file.imageData)
         imgviz.io.imsave(out_img_file, img)
@@ -108,7 +114,8 @@ def main():
 
         # class label
         labelme.utils.lblsave(out_clsp_file, cls)
-        np.save(out_cls_file, cls)
+        if not args.nonpy:
+            np.save(out_cls_file, cls)
         if not args.noviz:
             clsv = imgviz.label2rgb(
                 cls,
@@ -119,20 +126,22 @@ def main():
             )
             imgviz.io.imsave(out_clsv_file, clsv)
 
-        # instance label
-        labelme.utils.lblsave(out_insp_file, ins)
-        np.save(out_ins_file, ins)
-        if not args.noviz:
-            instance_ids = np.unique(ins)
-            instance_names = [str(i) for i in range(max(instance_ids) + 1)]
-            insv = imgviz.label2rgb(
-                ins,
-                imgviz.rgb2gray(img),
-                label_names=instance_names,
-                font_size=15,
-                loc="rb",
-            )
-            imgviz.io.imsave(out_insv_file, insv)
+        if not args.noobject:
+            # instance label
+            labelme.utils.lblsave(out_insp_file, ins)
+            if not args.nonpy:
+                np.save(out_ins_file, ins)
+            if not args.noviz:
+                instance_ids = np.unique(ins)
+                instance_names = [str(i) for i in range(max(instance_ids) + 1)]
+                insv = imgviz.label2rgb(
+                    ins,
+                    imgviz.rgb2gray(img),
+                    label_names=instance_names,
+                    font_size=15,
+                    loc="rb",
+                )
+                imgviz.io.imsave(out_insv_file, insv)
 
 
 if __name__ == "__main__":

+ 4 - 3
examples/semantic_segmentation/README.md

@@ -15,11 +15,12 @@ labelme data_annotated --labels labels.txt --nodata --validatelabel exact --conf
 # It generates:
 #   - data_dataset_voc/JPEGImages
 #   - data_dataset_voc/SegmentationClass
+#   - data_dataset_voc/SegmentationClassNpy
 #   - data_dataset_voc/SegmentationClassVisualization
-./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt
+./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt --noobject
 ```
 
-<img src="data_dataset_voc/JPEGImages/2011_000003.jpg" width="33%" /> <img src="data_dataset_voc/SegmentationClassPNG/2011_000003.png" width="33%" /> <img src="data_dataset_voc/SegmentationClassVisualization/2011_000003.jpg" width="33%" />
+<img src="data_dataset_voc/JPEGImages/2011_000003.jpg" width="33%" /> <img src="data_dataset_voc/SegmentationClass/2011_000003.png" width="33%" /> <img src="data_dataset_voc/SegmentationClassVisualization/2011_000003.jpg" width="33%" />
 
 Fig 1. JPEG image (left), PNG label (center), JPEG label visualization (right)  
 
@@ -29,7 +30,7 @@ Note that the label file contains only very low label values (ex. `0, 4, 14`), a
 You can see the label PNG file by following.
 
 ```bash
-labelme_draw_label_png data_dataset_voc/SegmentationClassPNG/2011_000003.png
+labelme_draw_label_png data_dataset_voc/SegmentationClass/2011_000003.png
 ```
 
 <img src=".readme/draw_label_png.jpg" width="33%" />

二進制
examples/semantic_segmentation/data_dataset_voc/JPEGImages/2011_000003.jpg


二進制
examples/semantic_segmentation/data_dataset_voc/JPEGImages/2011_000006.jpg


二進制
examples/semantic_segmentation/data_dataset_voc/JPEGImages/2011_000025.jpg


+ 0 - 0
examples/semantic_segmentation/data_dataset_voc/SegmentationClassPNG/2011_000003.png → examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000003.png


二進制
examples/semantic_segmentation/data_dataset_voc/SegmentationClassPNG/2011_000006.png → examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000006.png


+ 0 - 0
examples/semantic_segmentation/data_dataset_voc/SegmentationClassPNG/2011_000025.png → examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000025.png


+ 0 - 0
examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000003.npy → examples/semantic_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000003.npy


二進制
examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000006.npy → examples/semantic_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000006.npy


+ 0 - 0
examples/semantic_segmentation/data_dataset_voc/SegmentationClass/2011_000025.npy → examples/semantic_segmentation/data_dataset_voc/SegmentationClassNpy/2011_000025.npy


二進制
examples/semantic_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000003.jpg


二進制
examples/semantic_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000006.jpg


二進制
examples/semantic_segmentation/data_dataset_voc/SegmentationClassVisualization/2011_000025.jpg


+ 0 - 106
examples/semantic_segmentation/labelme2voc.py

@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-
-from __future__ import print_function
-
-import argparse
-import glob
-import os
-import os.path as osp
-import sys
-
-import imgviz
-import numpy as np
-
-import labelme
-
-
-def main():
-    parser = argparse.ArgumentParser(
-        formatter_class=argparse.ArgumentDefaultsHelpFormatter
-    )
-    parser.add_argument("input_dir", help="input annotated directory")
-    parser.add_argument("output_dir", help="output dataset directory")
-    parser.add_argument("--labels", help="labels file", required=True)
-    parser.add_argument(
-        "--noviz", help="no visualization", action="store_true"
-    )
-    args = parser.parse_args()
-
-    if osp.exists(args.output_dir):
-        print("Output directory already exists:", args.output_dir)
-        sys.exit(1)
-    os.makedirs(args.output_dir)
-    os.makedirs(osp.join(args.output_dir, "JPEGImages"))
-    os.makedirs(osp.join(args.output_dir, "SegmentationClass"))
-    os.makedirs(osp.join(args.output_dir, "SegmentationClassPNG"))
-    if not args.noviz:
-        os.makedirs(
-            osp.join(args.output_dir, "SegmentationClassVisualization")
-        )
-    print("Creating dataset:", args.output_dir)
-
-    class_names = []
-    class_name_to_id = {}
-    for i, line in enumerate(open(args.labels).readlines()):
-        class_id = i - 1  # starts with -1
-        class_name = line.strip()
-        class_name_to_id[class_name] = class_id
-        if class_id == -1:
-            assert class_name == "__ignore__"
-            continue
-        elif class_id == 0:
-            assert class_name == "_background_"
-        class_names.append(class_name)
-    class_names = tuple(class_names)
-    print("class_names:", class_names)
-    out_class_names_file = osp.join(args.output_dir, "class_names.txt")
-    with open(out_class_names_file, "w") as f:
-        f.writelines("\n".join(class_names))
-    print("Saved class_names:", out_class_names_file)
-
-    for filename in glob.glob(osp.join(args.input_dir, "*.json")):
-        print("Generating dataset from:", filename)
-
-        label_file = labelme.LabelFile(filename=filename)
-
-        base = osp.splitext(osp.basename(filename))[0]
-        out_img_file = osp.join(args.output_dir, "JPEGImages", base + ".jpg")
-        out_lbl_file = osp.join(
-            args.output_dir, "SegmentationClass", base + ".npy"
-        )
-        out_png_file = osp.join(
-            args.output_dir, "SegmentationClassPNG", base + ".png"
-        )
-        if not args.noviz:
-            out_viz_file = osp.join(
-                args.output_dir,
-                "SegmentationClassVisualization",
-                base + ".jpg",
-            )
-
-        with open(out_img_file, "wb") as f:
-            f.write(label_file.imageData)
-        img = labelme.utils.img_data_to_arr(label_file.imageData)
-
-        lbl, _ = labelme.utils.shapes_to_label(
-            img_shape=img.shape,
-            shapes=label_file.shapes,
-            label_name_to_value=class_name_to_id,
-        )
-        labelme.utils.lblsave(out_png_file, lbl)
-
-        np.save(out_lbl_file, lbl)
-
-        if not args.noviz:
-            viz = imgviz.label2rgb(
-                lbl,
-                imgviz.rgb2gray(img),
-                font_size=15,
-                label_names=class_names,
-                loc="rb",
-            )
-            imgviz.io.imsave(out_viz_file, viz)
-
-
-if __name__ == "__main__":
-    main()

+ 1 - 0
examples/semantic_segmentation/labelme2voc.py

@@ -0,0 +1 @@
+../instance_segmentation/labelme2voc.py