특정 이미지에 대해서 학습을 시키기 위해선
모델도 중요하지만 정확히 라벨링 된 이미지파일들도 매우 중요하기에
직접 제작 해보려 했으나 구현해야할 기능들이 너무 많아.... 포기..
그래서 이미 개발된 툴들을 찾아보고 가장 적합한 툴을 커스터마이징 하기로 하였습니다!
처음에는 Lableimg라는 툴을 사용해보고 있었는데
다각형, 세그멘테이션 라벨링을 위한 기능을 찾지못해
Labelme라는 툴을 이용하여 필요한 기능은 만들고, 불필요한 부분을 제외하여 저만의 툴을 만들어 보기로 하였습니다.
미리 있는 기능들도 매우많았기에 제가 추가할 부분은 그렇게 많지 않았지만
비디오 영상에 대해서 이미지로 변환하여 라벨링 할 수 있도록 변경하는데에 중점을 두고 수정해 보았습니다.
이번 글에서는 이 툴을 어떻게 사용하는지 부터 알아보도록 하겠습니다.
Labelme
conda 환경은
labelme 만 install 해주시면 됩니다
pip install labelme
안된다면..? 추가적으로 pyqt5를 설치해줍시다. 버전때문에 안맞는 경우가 있다네요
pip install pyqt5
다음은 실행
1. 막 설치한 콘다 환경 명령어 창에 labelme 입력시 실행됩니다.
2. 어떤 형식으로 실행되는지 알고싶다.
아래의 링크에서 git 파일을 받아와
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
사용방법은
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로 변경해 주었습니다.
여기까지가 끝!
다음글에서는 수정된 사항들을 정리 해보도록 하겠습니다.
<참고 블로그>
틀린점이 있다면 댓 달아주세요!
'공부공부 > 2023 쌓여가는 나의 지식~' 카테고리의 다른 글
ubuntu cuda toolkit 11.3 / 11.8 설치하기 (0) | 2023.09.11 |
---|---|
Ubuntu20.04에서 Docker 시작 및 사용법(1) (0) | 2023.09.10 |
wsl상에 아나콘다 환경 구축하기 (0) | 2023.09.08 |
파이썬 Pyqt를 이용한 세그멘테이션 라벨링툴(1)(다각형 그리기 / python) (0) | 2023.09.07 |
Windows에서 Linux 사용하기!(wsl) (0) | 2023.09.06 |
댓글