MMPose训练流程

本文介绍了如何使用mmpose进行人体关键点检测,包括按照官方教程搭建环境,利用labelme工具进行数据集标注,将标注文件转换为COCO格式,并详细说明了转换过程。接着,文章讲解了修改mmpose的config文件以适应自建数据集,特别是调整epochs、num_output_channels等参数,并对coco.py和default_runtime.py进行相应修改。最后,文章提到了使用HRNet模型进行训练,并提供了训练命令。

1.环境搭建

按照官网教程安装完成后运行给出的demo检查是否安装正确, 我的配置如图:

在这里插入图片描述
在这里插入图片描述

2.数据集标注

mmpose支持多种数据集格式,以自建数据集标注的4个关键点coco数据集格式为例:
首先下载labelme,运行labelme/main.py:
请添加图片描述
其中标注目标矩形框(矩形框是必要的)与关键点,其中标签尽量采用英文。标注完成后得到一张图片一个json文件。
采用以下代码将所有的json文件合并并划分训练集与测试集:

import os
import sys
import glob
import json
import shutil
import argparse
import numpy as np
import PIL.Image
import os.path as osp
from tqdm import tqdm
from labelme import utils
from sklearn.model_selection import train_test_split


class Labelme2coco_keypoints():
    def __init__(self, args):
        """
        Lableme 关键点数据集转 COCO 数据集的构造函数:

        Args
            args:命令行输入的参数
                - class_name 根类名字

        """

        self.classname_to_id = {
   
   args.class_name: 1}
        self.images = []
        self.annotations = []
        self.categories = []
        self.ann_id = 0
        self.img_id = 0

    def save_coco_json(self, instance, save_path):
        json.dump(instance, open(save_path, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)

    def read_jsonfile(self, path):
        with open(path, "r", encoding='utf-8') as f:
            return json.load(f)

    def _get_box(self, points):
        min_x = min_y = np.inf
        max_x = max_y = 0
        for x, y in points:
            min_x = min(min_x, x)
            min_y = min(min_y, y)
            max_x = max(max_x, x)
            max_y = max(max_y, y)
        return [min_x, min_y, max_x - min_x, max_y - min_y]

    def _get_keypoints(self, points, keypoints, num_keypoints):
        """
        解析 labelme 的原始数据, 生成 coco 标注的 关键点对象

        例如:
            "keypoints": [
                67.06149888292556,  # x 的值
                122.5043507571318,  # y 的值
                1,                  # 相当于 Z 值,如果是2D关键点 0:不可见 1:表示可见。
                82.42582269256718,
                109.95672933232304,
                1,
                ...,
            ],

        """

        if points[0] == 0 and points[1] == 0:
            visable = 0
        else:
            visable = 1
            num_keypoints += 1
        keypoints.extend([points[0], points[1]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值