본문 바로가기
공부공부/2023 쌓여가는 나의 지식~

이미지 인식 라벨링을 위한 Labelme Tool 사용 및 수정(1)

by Lee_story_.. 2023. 9. 9.
728x90

 

특정 이미지에 대해서 학습을 시키기 위해선

모델도 중요하지만 정확히 라벨링 된 이미지파일들도 매우 중요하기에 

 

직접 제작 해보려 했으나 구현해야할 기능들이 너무 많아.... 포기..

 

그래서 이미 개발된 툴들을 찾아보고 가장 적합한 툴을 커스터마이징 하기로 하였습니다!

 

 

 

 

처음에는 Lableimg라는 툴을 사용해보고 있었는데 

 

GitHub - HumanSignal/labelImg: LabelImg is now part of the Label Studio community. The popular image annotation tool created by

LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out Label Studio, the open source ...

github.com

다각형, 세그멘테이션 라벨링을 위한 기능을 찾지못해

 

 

 

 

 

 

Labelme라는 툴을 이용하여 필요한 기능은 만들고, 불필요한 부분을 제외하여 저만의 툴을 만들어 보기로 하였습니다.

 

 

GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag

Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). - GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, recta...

github.com

 

 

미리 있는 기능들도 매우많았기에 제가 추가할 부분은 그렇게 많지 않았지만

 

비디오 영상에 대해서 이미지로 변환하여 라벨링 할 수 있도록 변경하는데에 중점을 두고 수정해 보았습니다. 

 

 

 

이번 글에서는 이 툴을 어떻게 사용하는지 부터 알아보도록 하겠습니다. 

 

 

 

 

 

Labelme

 

conda 환경은

 

labelme 만 install 해주시면 됩니다

pip install labelme

 

 

안된다면..? 추가적으로 pyqt5를 설치해줍시다. 버전때문에 안맞는 경우가 있다네요

pip install pyqt5

 

다음은 실행

 

1. 막 설치한 콘다 환경 명령어 창에 labelme 입력시 실행됩니다.

 

2. 어떤 형식으로 실행되는지 알고싶다.

아래의 링크에서 git 파일을 받아와

 

GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag

Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). - GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, recta...

github.com

LABELME-MAIN / labelme / _main_.py 실행시 툴이 실행됩니다. 

 

 

기본화면은

 

위와 같습니다.

 

 

 

기능들을 살펴보면 

이미지와 디렉토리(폴더)를 열어 라벨링할 수 있고

 

 

 

 

라벨링 종류도 

다각형, 사각형, 원형, 선 ,점 등 여러가지 형태의 라벨링이 가능한 툴 입니다.

 

 

 

라벨링을 하게 되면 라벨 이름과 description을 남길수 있고

우측에 라벨리스트에 추가되게됩니다. 

 

 

기본적으로 라벨링된 데이터는 삭제,복사, 수정이 가능하고

 

 

그 외에도 확대 축소, 밝기 조절 등이 가능합니다.

 

 

 

 

 

라벨링을 끝내고 저장하게되면 사진의 위치에 json파일이 생성되는

 

 

형태는 아래와 같이

라벨 이름과 각 포인트 지점, shape_type, group 등이 기록되고, 이미지의 정보또한 저장됩니다. 

{
  "version": "5.2.1",
  "flags": {},
  "shapes": [
    {
      "label": "1",
      "points": [
        [
          319.25531914893617,
          203.49290780141843
        ],
        
        ......
        
        [
          317.12765957446805,
          211.29432624113474
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "polygon",
      "flags": {}
    },
    {
      "label": "3",
      "points": [
        [
          470.3191489361702,
          159.52127659574467
        ],
        [
          756.1347517730496,
          358.81205673758865
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "rectangle",
      "flags": {}
    }
  ],
  "imagePath": "style_6499016a4b195-930x685.webp",
  "imageData": null,
  "imageHeight": 685,
  "imageWidth": 930
}

 

 

위의 형식은 labelme의 json형식이기에

이미지 인식을 위한 학습에서는 위의 데이터를 기존 모델에 맞게 변형 시켜 사용해주면 됩니다!

 

 

 

 

여기서 만약 coco 데이터 형식으로 변환해야한다면?

 

labelme를 사용하시는 분들이 많기에 아래와 같은 라이브러리도 제공되어집니다. 

 

 

 

labelme json   >>>>  coco 

 

 

GitHub - fcakyon/labelme2coco: A lightweight package for converting your labelme annotations into COCO object detection format.

A lightweight package for converting your labelme annotations into COCO object detection format. - GitHub - fcakyon/labelme2coco: A lightweight package for converting your labelme annotations into ...

github.com

사용방법은 

 

pip 명령어로 다운로드 받고

pip install -U labelme2coco

 

사용하는 방법은 

 

명령어창에 아래와 같이 기본적으로 나눠도 되고

labelme2coco path/to/labelme/dir --train_split_rate 0.85

 

아니면 python파일을 만들어 실행해 줘도 됩니다.

 

저는 아래와 같이 구성해서 실행해 보았습니다. 

from labelme2coco import get_coco_from_labelme_folder, save_json
import json

cat_file = "./data/output.json"

train_dir = "./data/train"
val_dir = './data/val'

export_dir = './data/ret/'


cat_f = open(cat_file, 'r')
data = json.load(cat_f)

train_coco = get_coco_from_labelme_folder(train_dir, coco_category_list=data)
save_json(train_coco.json, export_dir+"train.json")
print("=============== Train is Success ===============")

val_coco = get_coco_from_labelme_folder(val_dir, coco_category_list=data)
save_json(val_coco.json, export_dir+"val.json")
print("=============== Val is Success ===============")

cat_f.close()

미리 모든 이미지를 train과 val를 나눠서 coco로 변경해 주었습니다.

 

 

 

 

 

여기까지가 끝!

 

다음글에서는 수정된 사항들을 정리 해보도록 하겠습니다.

 

 

 

 

<참고 블로그>

 

[Annotation Tool] labelme 사용해보기

https://github.com/wkentaro/labelme#windows 1. labelMe 설치하기(Windows) 설치방법은 간단하다. anac...

blog.naver.com

 

 

 

 

 

틀린점이 있다면 댓 달아주세요!

댓글