Hồ Chí Minh, 03-11-2023
[Võ Duy Nguyên](https://nguyenvd-uit.github.io/), [UIT-Together Research Group](https://uit-together.github.io/)
Convert dataset
===
<!-- 

 -->
## Mục lục
[TOC]
Định dạng Pascal VOC
---
```
[x1, y1, x2, y2]
```
*x1* và *y1* là tọa độ của góc trên bên trái và *x2* và *y2* là tọa độ của góc dưới bên phải của hộp giới hạn. Xem thêm ở đây: https://host.robots.ox.ac.uk/pascal/VOC/
Định dạng MS-COCO
---
```
[x,y,width,height]
```
Các tọa độ *(x, y)* là góc trái trên cùng, với *width* và *height* của hộp giới hạn. Xem thêm ở đây: https://cocodataset.org/#format-results
Định dạng YOLO
---
```
[x_center, y_center, width, height]
```
*x_center* và *y_center* là tọa độ chuẩn hóa của trung tâm của hộp giới hạn.
Chiều rộng (*width*) và chiều cao (*height*) là độ dài được chuẩn hóa.
Để chuyển đổi sang giữa YOLO phải có kích thước của hình ảnh để tính toán việc chuẩn hóa. Xem thêm ở đây: https://pjreddie.com/darknet/yolo/
## Trực quan hoá

> Nguồn https://albumentations.ai/docs/getting_started/bounding_boxes_augmentation/
```
PASCAL VOC: [x1, y1, x2, y2]
[98, 345, 420, 462]
MS-COCO : [x,y,width,height]
[98, 345, 322, 117].
YOLO : [x_center, y_center, width, height]
[0.4046875, 0.840625, 0.503125, 0.24375].
cách tính [((420 + 98) / 2) / 640, ((462 + 345) / 2) / 480, 322 / 640, 117 / 480]
```
Chuyển từ định dạng COCO sang Pascal VOC
---
```
def coco_to_pascal_voc(x1, y1, w, h):
return [x1,y1, x1 + w, y1 + h]
```
Chuyển từ định dạng MS-COCO sang YOLO
---
```
def coco_to_yolo(x1, y1, w, h, image_w, image_h):
return [((2*x1 + w)/(2*image_w)) , ((2*y1 + h)/(2*image_h)), w/image_w, h/image_h]
```
Chuyển từ định dạng Pascal VOC sang MS-COCO
---
```
def pascal_voc_to_coco(x1, y1, x2, y2):
return [x1,y1, x2 - x1, y2 - y1]
```
Chuyển từ định dạng Pascal VOC sang YOLO
---
```
def pascal_voc_to_yolo(x1, y1, x2, y2, image_w, image_h):
return [((x2 + x1)/(2*image_w)), ((y2 + y1)/(2*image_h)), (x2 - x1)/image_w, (y2 - y1)/image_h]
```
Chuyển từ định dạng YOLO sang MS-COCO
---
```
def yolo_to_coco(x_center, y_center, w, h, image_w, image_h):
w = w * image_w
h = h * image_h
x1 = ((2 * x_center * image_w) - w)/2
y1 = ((2 * y_center * image_h) - h)/2
return [x1, y1, w, h]
```
Chuyển từ định dạng YOLO sang Pascal
---
```
def yolo_to_pascal_voc(x_center, y_center, w, h, image_w, image_h):
w = w * image_w
h = h * image_h
x1 = ((2 * x_center * image_w) - w)/2
y1 = ((2 * y_center * image_h) - h)/2
x2 = x1 + w
y2 = y1 + h
return [x1, y1, x2, y2]
```
Github:
https://github.com/UIT-Together-Research-Group/OD_ConvertDataset
Tài liệu hướng dẫn dùng cho nhóm [UIT-Together Research Group](https://uit-together.github.io/)