DataScience
article thumbnail
728x90

YOLOv8모델을 학습시키기 위해 다양한 데이터셋을 찾았으나 형식이 전부 달라 사용할 수 없거나 강제로 변환을 했었습니다. 

폴더 구조를 변경하고, Json을 txt파일 형식으로 강제로 변경합니다

 

Json형식의 파일 구조는 아래와 같습니다.

`── data
    │── crowdpose
        │-- annotations
        │   │-- mmpose_crowdpose_train.json
        │   │-- mmpose_crowdpose_val.json
        │   │-- mmpose_crowdpose_trainval.json
        │   │-- mmpose_crowdpose_test.json
        │   │-- det_for_crowd_test_0.1_0.5.json
        │-- images
            │-- 100000.jpg
            │-- 100001.jpg
            │-- 100002.jpg
            │-- ...

 

YOLO모델의 txt형식의 파일 구조는 아래와 같습니다

Dataset
 ├── images
 │     ├── train
 │     │    └── 00036.jpg
 │     │    └── 00049.jpg
 │     │    └──....
 │     └── val
 │          └── 00091.jpg
 │          └── 00095.jpg
 │          └──....
 └── label
        ├── train
        │   └── 00036.txt
        │   └── 00049.txt
        │   └──....
        └── val
            └── 00091.txt
            └── 00095.txt
            └──....

 

Json내용은 아래와 같습니다.

{
“info”:{ 
      “description”: “coco .. ”,
      ”url”:”http://..”,
      ”version”:”1.0”,
      ’year”:2017,
      ”contributor”:”coco..”,
      date_created”:”2017/09/01”
      },
“license“:[{
      “url”:”http://”,
      ”id”:1,
      ”name”:””
      },..],
“images”:[{
      “license”:4,
      ”file_name”:00000397133.jpg”,
      ”coco_url”:”http://images.coco…”,
      ”height”:427,
      ”width”:640, 
      “date_captured”:”2013-11-14 17:02:52”,
      "flickr_url": "http://farm9.st…..jpg",
      "id": 37777
      },...],
annotations": [{
      "segmentation": [[125.12,539.69,140.94,522.43,100.67,496.54,84.85,469.21,73.35,450.52,104.99,342.65,168.27,290.88,179.78,288,189.84,286.56,191.28,260.67,202.79,240.54,221.48,237.66,248.81,243.42,257.44,256.36,253.12,262.11,253.12,275.06,299.15,233.35,329.35,207.46,355.24,206.02,363.87,206.02,365.3,210.34,373.93,221.84,363.87,226.16,363.87,237.66,350.92,237.66,332.22,234.79,314.97,249.17,271.82,313.89,253.12,326.83,227.24,352.72,214.29,357.03,212.85,372.85,208.54,395.87,228.67,414.56,245.93,421.75,266.07,424.63,276.13,437.57,266.07,450.52,284.76,464.9,286.2,479.28,291.96,489.35,310.65,512.36,284.76,549.75,244.49,522.43,215.73,546.88,199.91,558.38,204.22,565.57,189.84,568.45,184.09,575.64,172.58,578.52,145.26,567.01,117.93,551.19,133.75,532.49]],
      "num_keypoints": 10,
      "area": 47803.27955,
      "iscrowd": 0,
      "keypoints": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142,309,1,177,320,2,191,398,2,237,317,2,233,426,2,306,233,2,92,452,2,123,468,2,0,0,0,251,469,2,0,0,0,162,551,2],
      "image_id": 425226,
      "bbox": [73.35,206.02,300.58,372.5],
      "category_id": 1,
      "id": 183126
      },...}],
"categories": [{
      "supercategory": "person",
      "id": 1,
      "name": "person",
      "keypoints": ["nose","left_eye","right_eye","left_ear","right_ear","left_shoulder","right_shoulder","left_elbow","right_elbow","left_wrist","right_wrist","left_hip","right_hip","left_knee","right_knee","left_ankle","right_ankle"
      ],
      "skeleton": [[16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13],[6,7],[6,8],[7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]]}]
}

대단히 복잡합니다.

 

txt파일의 내용은 아래와 같습니다

ClassID,
Bbox : (x,y,w,h) 중심좌표, 박스 가로길이, 세로길이
Keypoint : (x,y,visible) [nose, l_eye, r_eye, l_ear, l_ear, l_shoulder, r_shoulder, l_elbow, r_elbow, l_wrist, r_wrist,l _hip, r_hip, l_knee, r_knee, l_ankle, r_ankle]
x, y 각 포인트는 이미지의 w,h으로 나눠서 최대 1로 스케일링 된 상태입니다.

위 Json에서 필요한부분만 추출해서 txt파일로 각각 파일명으로 저장해야 합니다.

 

변환하는 소스를 구해서 작업하려해도 복잡하고 번거롭습니다. 

 

이 작업을 편하게 할 수 있는 사이트가 있습니다. https://roboflow.com/

 

Roboflow: Give your software the power to see objects in images and video

With just a few dozen example images, you can train a working, state-of-the-art computer vision model in less than 24 hours.

roboflow.com

 

회원가입 후에 workspace를 만듭니다.

 

create new project를 클릭합니다

 

동그라미 친곳에 파일 변환할 이미지와 라벨 파일을 넣어줍니다. 

저는 이미지 파일과 json, xml파일을 넣고 상단에 save and continue를 클릭합니다. 

train과 valid,test폴더 비율을 설정합니다.

 

그후에 argumentation과 몇개의 이미지를 만들지 옵션을 정해주고 생성버튼을 누릅니다.

 

 

로딩이 완료되면 이 창을 볼수 있습니다. 

Export dataset을 누르면 

 

다양한 포맷으로 데이터를 다운받을 수 있습니다.

profile

DataScience

@Ninestar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!