세그멘테이션용의 라벨(마스크)을 labelme로 작성하는 방법(semantic segmentation mask)



↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓



전제 지식



다음 지식이 있다고 가정하여 기사를 작성합니다.
  • semantic segmentation (# 시맨틱 세그멘테이션)
  • mask(#label)

  • labelme은 라벨 작성용 앱



    이런 느낌의 앱입니다.
  • labelme은 파이썬으로 만든 라벨을 만드는 응용 프로그램입니다. 이미지에 여러 개의 레이블을 지정할 수 있습니다.
  • 다른 클래스에서도 문제 없습니다. 그래서 물론 2 클래스 semantic segmentation도 할 수 있습니다.
  • 이미지에 점으로 선을 그리면 결과가 JSON 파일로 출력됩니다
  • JSON 파일이 같은 이름으로 이미지와 같은 폴더에 저장되어 있는 경우(기본적으로 같은 이름으로 저장됩니다), 이미지를 읽었을 때 마음대로 JSON도 로드되어 어노테이션된 상태로 열어준다. .
  • 작성한 포인트는 재편집 가능.

  • labelme 사용법 상세



    labelme 다운로드



    어렵지 않기 때문에 생략

    labelme으로 라벨 지정



    labelme을 열면 다음과 같은 창이 열립니다. (이미지는 google 검색 화면의 스크린 샷입니다.


    확대하면서 포인트로 선을 그립니다.
    확대와 이동은 매우 쉽게 할 수 있습니다.


    이 적당한 느낌으로 1min 정도일까.
    꽤 사용하기 쉽습니다. .


    왼쪽 SAVE에서 JSON을 저장합니다.
    이런 느낌의 데이터를 할 수 있습니다!
    {
      "version": "4.5.6",
      "flags": {},
      "shapes": [
        {
          "label": "dog",
          "points": [
            [
              104.36893203883496,
              66.99029126213593
            ],
            [
              93.44660194174757,
              71.35922330097087
            ],
            ここは省略
            [
              112.13592233009709,
              74.27184466019418
            ],
            [
              107.28155339805825,
              73.30097087378641
            ]
          ],
          "group_id": null,
          "shape_type": "polygon",
          "flags": {}
        }
      ],
      "imagePath": "スクリーンショット 2020-09-14 141400.png",
      "imageData": "省略",
      "imageHeight": 405,
      "imageWidth": 535
    }
    
    

    주의! 이 JSON 포인트는 폴리곤의 포인트이므로 그대로 마스크에는 사용할 수 없습니다. . 그래서이 포인트를 마스크로 변환해야합니다.

    labelme 파일을 JSON에서 MASK로 변환



    당초 스스로 구현하려고 했는데, 그것에 대한 함수가 준비되어 있었습니다.
    labelme은 utils 폴더에 shape.py라는 모듈을 제공하며 shape_to_mask 함수를 사용하여 JSON에서 MASK로 변환할 수 있습니다.

    다만, 미묘하게 실장하지 않으면 안 되므로, 샘플의 코드를 실어 둡니다.
    import json
    with open(path, "r",encoding="utf-8") as f:
        dj = json.load(f)
    # dj['shapes'][0]は今回一つのラベルのため。
    mask = shape_to_mask((dj['imageHeight'],dj['imageWidth']), dj['shapes'][0]['points'], shape_type=None,line_width=1, point_size=1)
    
    mask_img = mask.astype(np.int)#booleanを0,1に変換
    
    #anacondaを使っています
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    plt.imshow(mask_img)
    



    잘 라벨링 할 수있었습니다.
    이 정도의 레벨이라면, 이미지 열고 나서 보존까지로 2-3min 정도로 할 수 있는 것은 아닐까요.

    마지막으로



    labelme 이외에 추천 라벨링 도구 있으면 알려주세요.
    상당히 독자적으로 구현하거나 하고 있는 사람도 있는 것일까.

    좋은 웹페이지 즐겨찾기