mmpose学习

mmpose官方文档
mmpose版本:1.0.0rc0

数据集准备

coco数据集下载官网下载地址
你可能还需要:
COCO_test-dev2017_detections_AP_H_609_person.json
COCO_val2017_detections_AP_H_56_person.json
以上两个连接来自:OneDrive
以上两个下载好后存放目录如下
在这里插入图片描述

测试一下数据集

需要先准备好配置文件和预训练权重

python tools/test.py \
xxx/config/resnetv1d50_coco_256x192.py \
xxx/checkpoints/resnetv1d50_coco_256x192-a243b840_20200727.pth \
--eval mAP

在这里插入图片描述

训练coco数据

python tools/train.py \
	xxx/my_code/config/resnetv1d50_coco_256x192.py \
	--work-dir xxx/my_code/data/train_ret/resnetv1d50_coco_256x192

训练自己的数据集

我这里用的是coco格式
数据集type:CocoDataset
注意:annotations中的 category_id == 1 这是必须的

准备bbox_file

踩坑过程中看了点源码,这个文件不是必须的,但是我还是参考已有的配置,准备了这个文件。
如果不打算准备这个配置文件,需要将bbox_file配置项设置为None。
bbox_file中记录了n个矩形框,这里面的每一个框与ann_file文件中的每一个关键点对象一一对应。
bbox_file格式如下:

[
    {
        "bbox": [
            0.9995520000000226,
            68.99987199999998,
            225.00019199999997,
            475.000128
        ],
        "category_id": 0,
        "image_id": 1,
        "score": 0.98
    },
    ... ...
]

准备metainfo

可参考:configs/base/datasets/coco.py

修改配置文件

# 继承已有的配置文件
_base_ = ['configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_mobilenetv2_8xb64-210e_coco-384x288.py']

# 调整最大epoch和模型保存间隔。
train_cfg = dict(by_epoch=True, max_epochs=210, val_interval=10)

# 加载预训练的模型,我这里直接加载了官方的模型。
load_from = "model/mmpose/mobilenetv2_coco_384x288-26be4816_20200727.pth"

# 修改模型输出的关键点数
model = dict(
    head=dict(
        out_channels=2
    ))

# 调整学习率
optim_wrapper = dict(optimizer=dict(type='Adam', lr=0.0005 / 32))

# log和Tensorboard可视化
visualizer = dict(
    type='PoseLocalVisualizer',
    vis_backends=[dict(type='LocalVisBackend'), dict(type='TensorboardVisBackend')],
    name='visualizer')

# 下面全是数据相关,要修改的地方比较多。
data_root = 'data/my_coco/'
# 这个就是事先创建好的 metainfo 文件。
metainfo: dict = dict(
    from_file='config/my_coco_point_metainfo.py')
train_dataloader = dict(
    batch_size=16,
    num_workers=2,
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        ann_file='annotations/labels_coco_pot_train.json',
        data_prefix=dict(img='images/')
    ))
val_dataloader = dict(
    batch_size=16,
    num_workers=2,
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        ann_file='annotations/labels_coco_pot_val.json',
        bbox_file='data/my_coco/annotations/labels_coco_pot_val_bbox.json',
        # bbox_file=None,
        data_prefix=dict(img='images/'),
    ))
test_dataloader = dict(
    batch_size=16,
    num_workers=2,
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        ann_file='annotations/labels_coco_pot_val.json',
        bbox_file='data/my_coco/annotations/labels_coco_pot_val_bbox.json',
        # bbox_file=None,
        data_prefix=dict(img='images/'),
    ))

val_evaluator = dict(
    ann_file=data_root + 'annotations/labels_coco_pot_val.json')
test_evaluator = dict(
    ann_file=data_root + 'annotations/labels_coco_pot_val.json')

模型训练

cd ${MMPOSE_PATH}
python tools/train.py \
    xxx/my_code/config/td-hm_mobilenetv2_8xb64-210e_coco-384x288.py \
    --work-dir xxx/data/train_ret/td-hm_mobilenetv2_8xb64-210e_coco-384x288

用训练好的模型可视化图片

cd ${MMPOSE_PATH}
python tools/test.py \
    xxx/config/td-hm_mobilenetv2_8xb64-210e_coco-384x288.py \
    xxx/data/train_ret/td-hm_mobilenetv2_8xb64-210e_coco-384x288_23031801/best_coco/AP_epoch_10.pth \
    --work-dir td-hm_mobilenetv2_8xb64-210e_coco-384x288_23031801/test \
    --show-dir td-hm_mobilenetv2_8xb64-210e_coco-384x288_23031801/test/visualize

在这里插入图片描述

训练过程遇到的一个坑

训练过程的loss下降正常,打印的acc_pose也正常,训练结束后可视化出来的图片也正常,但是在跑验证时所有结果均为0。

Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets= 20 ] =  0.000
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets= 20 ] =  0.000
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets= 20 ] =  0.000
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets= 20 ] =  0.000
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets= 20 ] =  0.000
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 20 ] =  0.000
Average Recall     (AR) @[ IoU=0.50      | area=   all | maxDets= 20 ] =  0.000
Average Recall     (AR) @[ IoU=0.75      | area=   all | maxDets= 20 ] =  0.000
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets= 20 ] =  0.000
Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets= 20 ] =  0.000

这是因为我的category_id != 1,我还特意为此改了源码,最后算ap时遇到了这个问题。

训练过程可视化

这里我选择的是Tensorboard。
只需要修改一下配置文件,可参考下面的配置。也可以配置“WandbVisBackend”,使用wandb可视化。
然后

visualizer = dict(
    type='PoseLocalVisualizer',
    vis_backends=[dict(type='LocalVisBackend'), dict(type='TensorboardVisBackend')],
    name='visualizer')

训练跑起来后在work_dir下会有tensorboard输出的文件,可参考下面的命令启动服务,再在浏览器打开即可

tensorboard --logdir work_dir/20230101_060606/vis_data
  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值