[Animal Pose Dataset]动物姿态数据集转YOLO格式

数据集内容:ANIMAL-POSE 数据集主要对五大类动物进行姿态标注:狗,猫,牛,马,羊。我们总共注释了20个关键点:两只眼睛,喉咙,鼻子,两个耳底,尾巴,四个肘,四个膝盖,四个爪子。

数据集数量:

(1)关键点数据集:4000多种图像,5个类别

(2)动物检测数据集:仅带有检测框的动物数据集,共七个类别

官方下载链接:GitHub - noahcao/animal-pose-dataset

本文主要代码将原数据转换为yolo数据集(clas + box + points)格式,以及数据集使用方法:

import os
import json
from tqdm import tqdm
import argparse
from PIL import Image

parser = argparse.ArgumentParser()


#这里根据自己的json文件位置,换成自己的就行

parser.add_argument('--json_path', default='D:/work/datasetbag/test_image/keypoints.json',type=str, help="input: coco format(json)")


#这里设置.txt文件保存位置

parser.add_argument('--save_path', default='D:/work/datasetbag/test_image/animal_pose_visualized/', type=str, help="specify where to save the output dir of labels")

arg = parser.parse_args()

def convert_box(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[2]) / 2.0
    y = (box[1] + box[3]) / 2.0
    w = box[2] - box[0]
    h = box[3] - box[1]
#round函数确定(xmin, ymin, xmax, ymax)的小数位数
    x = str(round(x * dw, 6))
    w = str(round(w * dw, 6))
    y = str(round(y * dh, 6))
    h = str(round(h * dh, 6))

    return " ".join([x, y, w, h])

def convert_point(size, point):
    temp = point
    for index1 in range(len(point)):
        for index2 in range(len(point[index1])):
            if index2 != 2:
                x = min(1.000000,float(temp[index1][index2])/float(size[index2]))
                x = max(0.000000,x)
                temp[index1][index2] = str(round(x, 6))
                # 奇怪的是标记有的落在图片大小之外,所以多添加了两个比较

                # print(temp[index1][index2]) #这行注释可以查看关键点位置
            else:
                temp[index1][index2] = str(temp[index1][index2])
        temp[index1] = " ".join(temp[index1])

    return temp


if __name__ == '__main__':
    json_file =   arg.json_path # COCO Object Instance 类型的标注
    ana_txt_save_path = arg.save_path  # 保存的路径

    data = json.load(open(json_file, 'r'))
    if not os.path.exists(ana_txt_save_path):
        os.makedirs(ana_txt_save_path)

    id_map = {} 

    with open(os.path.join(ana_txt_save_path, 'classes.txt'), 'w') as f:
        # 写入classes.txt
        for i, category in enumerate(data['categories']):
            f.write(f"{category['name']}\n")
            id_map[category['id']] = i

    #这里需要根据自己的需要,更改写入图像相对路径的文件位置。
    #这个train.txt包含了训练路径,也可以不用

    list_file = open(os.path.join(ana_txt_save_path, 'train.txt'), 'w')
    for img in tqdm(data['images']):
        filename = data['images'][img]

        #file_path是图片文件夹的路径,需要先解压下载的图片
        #该数据集没有提供图片大小,所以要重新读取
        file_path = 'D:/work/datasetbag/test_image/animalpose_images'

        imge = Image.open(file_path+'/'+filename)
        img_width = imge.width  # 图片的宽
        img_height = imge.height  # 图片的高
        img_id = int(img)


        for ann in data['annotations']:
            # print(img_id)
            # print(ann)
            if ann['image_id'] == img_id:
                box = convert_box((img_width, img_height), ann["bbox"])
                points = convert_point((img_width, img_height),ann["keypoints"])
                # print(points) #查看关键点
                # print(ann["bbox"]) #查看box
                
                head, tail = os.path.splitext(filename)
                ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致
                f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')
                f_txt.write("%s %s %s\n" % (id_map[ann["category_id"]], box , " ".join(points)))
                f_txt.close()

                list_file.write('./images/train/%s.jpg\n' %(head))
    list_file.close()

运行之后在保存的文件夹目录下面可以看到对应的txt文件,并且额外包含classes.txt和train.txt两个文本。

每个txt中包含:种类,边框,关键点(x,y,可见性),共20个关键点,处理完成。

另外的train.txt和classes.txt内容如下:

还需要后续处理的话一定记得删除这两个文件。

训练问题:

原图格式不仅有jpg还有jpeg和一张png(md很烦)。

解决方案:复制图片文件夹到你的数据库下,在存储图片的目录下新建txt,输入以下内容

改后缀为.bat,运行即可。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
将Stanford Cars数据集换为YOLO格式需要进行以下步骤: 1. 下载数据集:首先,您需要从Stanford Cars数据集的官方网站下载图像和标注文件。您可以在[这里](https://ai.stanford.edu/~jkrause/cars/car_dataset.html)找到该数据集。 2. 解压文件:将下载的文件解压到一个文件夹中。 3. 创建目录结构:在解压后的文件夹中,创建以下目录结构: - images:用于存放原始图像 - labels:用于存放YOLO格式的标签文件(每个图像对应一个标签文件) 4. 换标注:打开标注文件(例如devkit/cars_train_annos.mat)并读取其中的标注信息。对于每个图像,提取其边界框的坐标、类别和颜色信息。 5. 换为YOLO格式:将提取的边界框坐标和类别换为YOLO格式YOLO格式的标签文件应包含以下信息: - 第一列:类别索引(从0开始) - 第二列:边界框中心点的x坐标(相对于图像宽度) - 第三列:边界框中心点的y坐标(相对于图像高度) - 第四列:边界框的宽度(相对于图像宽度) - 第五列:边界框的高度(相对于图像高度) 6. 保存标签文件:将换后的标签信息保存为与图像文件对应的同名txt文件,并将其放入labels目录中。 完成上述步骤后,您就可以使用YOLO框架来训练和测试换后的数据集了。请注意,这只是一种将Stanford Cars数据集换为YOLO格式的方法,您可能需要根据具体情况进行适当的修改。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值