yolov8-pose,labelme关键点标注及格式转换

目录

一、代码、权重下载

二、标注规则

三、标注要求及步骤

四、json标签样式

五、json转txt格式


一、代码、权重下载

YOLOv8代码:ultralytics/ultralytics首页 - GitCode

环境安装

pip install ultralytics

 

关键点训练权重下载:

https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt

https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt

https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt

https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt

https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt

 https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt

 

二、标注规则

标签组成:类型,1个数据;目标框坐标,4个数据;关键点,n*3个数据(n为关键点个数,'3'为坐标及是否可见,点标签:0代表此点不在图像上,点标签:1   代表此点在图像上且在未遮挡处,点标签:2   代表此点在图像上但在遮挡处)

0 0.07390752032520326 0.5280939476061427 0.1384654471544715 0.22244805781391144 0.14059959349593495 0.5489837398373983 0 0.04024390243902439 0.5354336043360434 2 0.006580284552845528 0.6133468834688347 1 0.11709857723577236 0.6122177055103883 1
0 0.11709857723577234 0.30451671183378504 0.0431910569105691 0.09146341463414637 0.10312499999999998 0.3163730803974706 2 0.10566565040650407 0.32540650406504057 1 0.13678861788617885 0.3220189701897019 0 0.13678861788617885 0.3141147244805781 0
0 0.7535315040650405 0.857813911472448 0.49034552845528445 0.28116531165311665 0.8964430894308942 0.99726738934056 0 0.9967987804878048 0.9679087624209575 0 0.6404725609756097 0.8753161698283649 2 0.5108993902439024 0.9679087624209575 1
0 0.982981220657277 0.212245696400626 0.02787558685446001 0.06585811163275952 0.9807805164319249 0.220396452790819 2 0.9697769953051644 0.220396452790819 0 0.9705105633802817 0.22691705790297342 0 0.9936179577464789 0.22756911841418886 1

三、标注要求及步骤

(1)标注工具:labelme

(2)按顺序先标注车辆长方形包围拉框,再标记车辆ABCD四个顶点(备注 :若拉框顺序与标点顺序反了,请重新标注)

(3)四个车底盘顶点顺序

    逆时针:A点、B点、C点、D点

4顶点标签

    0表示没有显露出不可见,1表示可见,2表示被遮挡不可见

四、json标签样式

{
  "version": "5.0.1",
  "flags": {},
  "shapes": [
    {
      "label": "car",
      "points": [
        [
          8.97560975609756,
          450.2195121951219
        ],
        [
          274.8292682926829,
          690.4634146341463
        ]
      ],
      "group_id": null,
      "shape_type": "rectangle",
      "flags": {}
    },
    {
      "label": "0",
      "points": [
        [
          269.9512195121951,
          592.9024390243902
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "2",
      "points": [
        [
          77.26829268292683,
          578.2682926829268
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "1",
      "points": [
        [
          12.634146341463413,
          662.4146341463414
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "1",
      "points": [
        [
          224.8292682926829,
          661.1951219512194
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    }
  ],
  "imagePath": "1127_52.jpg",
  "imageData":
  "imageHeight": 1080,
  "imageWidth": 1920
}

五、json转txt格式

     要求:标注步骤必须按照先拉框,然后按逆时针标注关键点生成json文件

  转换脚本


import json
import os
import argparse
import cv2
from tqdm import tqdm
import numpy as np

#标签类别字典
  # 0: car
dictlist=['car']

def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0
    y = (box[1] + box[3]) / 2.0
    w = abs(box[2] - box[0])
    h = abs(box[3] - box[1])
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


 
def convert_label_json(json_dir, img_path, save_dir):
    json_paths = os.listdir(json_dir) 
    for json_path in tqdm(json_paths):
        path = os.path.join(json_dir,json_path)
        with open(path,'r',encoding='UTF-8') as load_f:
            json_dict = json.load(load_f)
        img_w =  json_dict['imageWidth']  # 图片的高
        img_h =  json_dict['imageHeight']  # 图片的宽
        txt_path = os.path.join(save_dir, json_path.replace('json', 'txt'))
        with open(txt_path, 'w') as txt_file:
            points_nor_list = []
            fournum=1
            for shape_dict in json_dict["shapes"]:
                if shape_dict["shape_type"]=="rectangle":

                    x1 = float(shape_dict['points'][0][0])
                    y1 = float(shape_dict['points'][0][1])
                    x2 = float(shape_dict['points'][1][0])
                    y2 = float(shape_dict['points'][1][1])
                    bb = (x1, y1, x2, y2)
                    bbox = convert((img_w, img_h), bb)
                    label1=shape_dict["label"]
                    no_0=dictlist.index(label1)
                    line=np.append(str(no_0),bbox)
                if shape_dict["shape_type"]=="point":
                    x0=float(shape_dict['points'][0][0])/img_w
                    y0=float(shape_dict['points'][0][1])/img_h
                    pointlist=[x0,y0,shape_dict["label"]]
                    line=np.append(line,pointlist)
                if fournum%5==0:
                    stringline=' '.join(line)
                    stringline=stringline+'\n'
                    txt_file.writelines(stringline)                    
                fournum+=1

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='json convert to txt params')
    parser.add_argument('--json-dir', type=str, default=r"C:xxxxxxxxxxxxx", help='json path dir')#标签路径
    parser.add_argument('--img-path', type=str, default=r"C:xxxxxxxxxxxxx", help='json path dir')#图片路径
    parser.add_argument('--save-dir', type=str, default=r"C:xxxxxxxxxxxxx", help='txt save dir')#txt保存路径
    args = parser.parse_args()
    json_dir = args.json_dir
    img_path = args.img_path
    save_dir = args.save_dir
    convert_label_json(json_dir, img_path, save_dir)

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要使用yolov8进行姿势检测和标注,您需要按照以下步骤进行操作: 1. 首先,您需要准备Pose Labelme的数据集。可以使用Labelme工具标注图片,并将结果保存为JSON文件。 2. 接下来,您需要创建一个名为pose.yaml的数据文件,该文件用于存储数据集的相关信息。您可以使用以下格式创建pose.yaml文件: ```yaml train: path/to/train/images # 训练集图片路径 val: path/to/val/images # 验证集图片路径 test: path/to/test/images # 测试集图片路径 (可选) nc: 2 # 类别数量 names: ['pose1', 'pose2'] # 类别名称 ``` 3. 确保您已经下载了yolov8s-seg.pt模型文件,并将其存储在yolov8的根目录下。您可以从以下链接中下载模型文件:[yolov8s-seg.pt](https://github.com/WongKinYiu/yolov3-pytorch/releases/download/1.1/yolov3.weights) 4. 使用以下命令训练yolov8模型,注意修改命令中的路径和参数: ```shell python train.py --data data/pose.yaml --cfg cfg/yolov8s-seg.yaml --batch-size 16 --epochs 10 --weights yolov8s-seg.pt --name yolov8-pose ``` 5. 训练过程中,模型将根据指定的数据集进行训练,并在每个epoch结束时保存权重文件。训练完成后,您将在runs/train目录下找到具有最佳权重的模型文件。 6. 您可以使用训练好的模型进行姿势检测和标注。使用以下命令运行yolov8模型进行预测: ```shell python test.py --data data/pose.yaml --weights runs/train/yolov8-pose/weights/best.pt --img-size 416 --save-txt ``` 这将使用训练好的模型对指定的数据集进行预测,并将结果保存为文本文件。 请注意,以上步骤中的路径和参数需要根据您的实际情况进行修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用yolov7训练用labelme标注的数据集](https://blog.csdn.net/a486259/article/details/127251836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [YOLOv8实例分割训练自己的数据集保姆级教程](https://blog.csdn.net/m0_51530640/article/details/129975257)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值