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/
회원가입 후에 workspace를 만듭니다.
create new project를 클릭합니다
동그라미 친곳에 파일 변환할 이미지와 라벨 파일을 넣어줍니다.
저는 이미지 파일과 json, xml파일을 넣고 상단에 save and continue를 클릭합니다.
train과 valid,test폴더 비율을 설정합니다.
그후에 argumentation과 몇개의 이미지를 만들지 옵션을 정해주고 생성버튼을 누릅니다.
로딩이 완료되면 이 창을 볼수 있습니다.
Export dataset을 누르면
다양한 포맷으로 데이터를 다운받을 수 있습니다.