相关文章推荐
留胡子的消炎药  ·  百果园:半年付费会员少10万、加盟店少111 ...·  10 月前    · 
豁达的帽子  ·  我院一行到广财会计学院交流学习-广东金融学院 ...·  1 年前    · 
飘逸的香蕉  ·  长城汽车2023年1-6月销售52万辆 ...·  2 年前    · 
性感的镜子  ·  义翘神州企业专业实践信息·  2 年前    · 
玩足球的大蒜  ·  今日影评 | ...·  2 年前    · 
小百科  ›  轻量化AlphaPose_alphapose 训练
慈祥的鸵鸟
1 年前
  • 前言
    • AlphaPose介绍
    • 这里强调一下
    • 轻量化什么
  • yolo目标检测的轻量化
  • 单人姿态估计网络的轻量化
    • 训练轻量化的单人姿态估计模型
      • 下载数据集
      • 创建FastPoseMobile
      • 创建训练文件
      • 开始训练
      • 训练结果
    • 训练项目和数据集

    AlphaPose介绍

    AlphaPose是一个精确的多人姿态估计器,是第一个在COCO数据集上实现70+ mAP (75 mAP),在MPII数据集上实现80+ mAP (82.1 mAP)的开源系统。为了匹配跨帧对应于同一个人的姿势,我们还提供了一个名为“姿势流”的高效在线姿势跟踪器。它是首个在PoseTrack Challenge数据集上同时实现60+ mAP (66.5 mAP)和50+ MOTA (58.3 MOTA)的开源在线姿势跟踪器。

    这里强调一下

    大部分Alphapose的文章都会介绍Alphapose和RMPE等论文有关。但事实上发展到今天,Alphapose其实更接近一个纯粹的基于自上而下的多人姿态估计项目,里面的模型也是集众家之所长,像RMPE论文里提到的SSTN在新版的项目里甚至都被去除了。

    轻量化什么

    目前的Alphapose实际上是yolov3-spp行人检测+姿态关键点检测+行人重识别算法的组合,对应 多目标检测 、 单人姿态估计 、 行人重识别 三个任务,本文主要介绍的是在Alphapose原项目中轻量化 单人姿态估计模型 的方法。

    yolo目标检测的轻量化

    Alphapose里使用的yolov3实际上是yolov4项目下的一个版本,加入了空间金字塔池化(Spatial Pyramid Pooling, SPP),目标检测效果会比原版的yolov3好一点。

    这里有大佬使用Yolov4优化了一下目标检测部分: https://github.com/WildflowerSchools/pytorch-YOLOv4

    csdn里的另一个大佬完成了使用任意yolo替换Alphapose的目标检测网络的项目: https://blog.csdn.net/qq_35975447/article/details/114940943

    本人的做法是将所有模型转换成torchscript模型,然后自己重写中间的衔接(主要是中间的图像处理和多线程流水线),有兴趣的可以关注一下我的项目,里面能找到相应的处理: https://github.com/hongyaohongyao/smart_classroom_demo

    • 我在项目里用的是yolov5s模型,姑且算是使用了比较轻量的目标检测模型吧。

    单人姿态估计网络的轻量化

    Alphapose的自上而下的多人姿态估计的步骤

    1. 先做多人目标检测
    2. 将检测到的目标裁剪下来,通过仿射变换转换成大小为固定大小的图像
    3. 使用单人姿态估计网络预测所有图像中的关键点,关键点回归用的是热图法
    4. 将检测到的关键点通过仿射变换的逆变换还原成原图像中的坐标。

    Alphapose的单人姿态估计网络主要有三种输出格式:coco 17关键点,Halpe 26关键点和Halpe 136关键点。

    coco17关键点比较常见,其实可以用其他单人姿态估计模型替代,比如这个南京大学做的SimpleBaseline的轻量化: https://github.com/zhang943/lpn-pytorch

    Halpe是Alphapose自己的数据集,需要自己重新训练模型。

    训练轻量化的单人姿态估计模型

    下载数据集

    到Alphapose的这个子项目 Fang-Haoshu/Halpe-FullBody 下载数据集
    在这里插入图片描述

    在data文件夹下按照下面的目录结构进行组织,这里我应该改过一些文件名称,需要和下面创建的训练文件进行对应
    在这里插入图片描述

    • 其实完整的模型应该要在:300wLP(脸部)、Halpe数据集(全身)和frei(手部)三个数据集训练,否则至训练Halpe数据集的化手部和脸部的效果会比较差,不过因为设备和时间的问题,我只训练了Halpe数据集的136个关键点,虽然map有下降,不过实际效果也基本能满足项目需求。

    创建FastPoseMobile

    在 alphapose/models 目录下创建自己的轻量化模型。我命名叫FastPoseMobile

    这里使用torchvision的mobilenetv3轻量化了fastpose的骨干网络

    • 这里提一嘴,貌似Alphapose里的Alphapose和fastpose的论文没啥关系,可能就是个模型结构吧。
    • 创建好的模型需要添加`@SPPE.registe在这里插入图片描述

    r_module`注解

    • 在 alphapose/models/__init__.py 文件的 __all__ 字典里添加 FastPoseMobile
    • mobilenet_v3是我从torchvision里面改的,内容比较多,这里就不放出来了
    # -----------------------------------------------------
    # Written by Jiefeng Li (jeff.lee.sjtu@gmail.com)
    # -----------------------------------------------------
    import torch.nn as nn
    from .builder import SPPE
    from .layers.DUC import DUC
    from .layers.mobilenet_v3 import mobilenet_v3
    @SPPE.register_module
    class FastPoseMobile(nn.Module):
        def __init__(self, norm_layer=nn.BatchNorm2d, **cfg):
            super(FastPoseMobile, self).__init__()
            self._preset_cfg = cfg['PRESET']
            if 'CONV_DIM' in cfg.keys():
                self.conv_dim = cfg['CONV_DIM']
            else:
                self.conv_dim = 128
            assert cfg['MODEL_SIZE'] in ['large', 'small']
            self.preact = mobilenet_v3(cfg['MODEL_SIZE'])
            output_num = 960 // 4 if cfg['MODEL_SIZE'] == 'large' else 576 // 4
            self.suffle1 = nn.PixelShuffle(2)
            self.duc1 = DUC(output_num, 1024, upscale_factor=2, norm_layer=norm_layer)
            if self.conv_dim == 256:
                self.duc2 = DUC(256, 1024, upscale_factor=2, norm_layer=norm_layer)
            else:
                self.duc2 = DUC(256, self.conv_dim * 4, upscale_factor=2, norm_layer=norm_layer)
            self.conv_out = nn.Conv2d(
                self.conv_dim, self._preset_cfg['NUM_JOINTS'], kernel_size=3, stride=1, padding=1)
        def forward(self, x):
            out = self.preact(x)
            out = self.suffle1(out)
            out = self.duc1(out)
            out = self.duc2(out)
            out = self.conv_out(out)
            return out
        def _initialize(self):
            for m in self.conv_out.modules():
                if isinstance(m, nn.Conv2d):
                    # nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
                    # logger.info('=> init {}.weight as normal(0, 0.001)'.format(name))
                    # logger.info('=> init {}.bias as 0'.format(name))
                    nn.init.normal_(m.weight, std=0.001)
                    nn.init.constant_(m.bias, 0)
    

    创建训练文件

    创建训练文件configs/halpe_136/mobilenet/256x192_mobilenet_lr1e-3_2x-regression.yaml

    • 要训练其他数据集可以参考这个格式编写一下其他训练文件,主要是改一下DATASET下面的文件地址。
    DATASET:
      TRAIN:
        TYPE: 'Halpe_136'
        ROOT: './data/halpe/'
        IMG_PREFIX: 'train2017'
        ANN: 'halpe_train_v1.json'
        AUG:
          FLIP: true
          ROT_FACTOR: 45
          SCALE_FACTOR: 0.35
          NUM_JOINTS_HALF_BODY: 8
          PROB_HALF_BODY: 0.3
      VAL:
        TYPE: 'Halpe_136'
        ROOT: './data/coco/'
        IMG_PREFIX: 'val2017'
        ANN: 'halpe_val_v1.json'
      TEST:
        TYPE: 'Halpe_136_det'
        ROOT: './data/coco/'
        IMG_PREFIX: 'val2017'
        DET_FILE: './exp/json/test_det_yolo.json'
        ANN: 'halpe_val_v1.json'
    DATA_PRESET:
      TYPE: 'simple'
      LOSS_TYPE: 'L1JointRegression'
      SIGMA: 2
      NUM_JOINTS: 136
      IMAGE_SIZE:
        - 256
        - 192
      HEATMAP_SIZE:
        - 64
        - 48
    MODEL:
      TYPE: 'FastPoseMobile'
      PRETRAINED: ''
      TRY_LOAD: ''
      NUM_DECONV_FILTERS:
        - 256
        - 256
        - 256
      MODEL_SIZE: 'large'
      CONV_DIM: 256
    LOSS:
      TYPE: 'L1JointRegression'
      NORM_TYPE: 'sigmoid'
      OUTPUT_3D: False
    DETECTOR:
      NAME: 'yolo'
      CONFIG: 'detector/yolo/cfg/yolov3-spp.cfg'
      WEIGHTS: 'detector/yolo/data/yolov3-spp.weights'
      NMS_THRES: 0.6
      CONFIDENCE: 0.05
    TRAIN:
      WORLD_SIZE: 4
      BATCH_SIZE: 48
      BEGIN_EPOCH: 0
      END_EPOCH: 270
      OPTIMIZER: 'adam'
      LR: 0.001
      LR_FACTOR: 0.1
      LR_STEP:
        - 170
        - 200
      DPG_MILESTONE: 210
      DPG_STEP:
        - 230
        - 250
    

    修改train.py文件的配置,将–cfg的默认值修改成刚才的训练文件。

    parser.add_argument('--cfg', default="configs/halpe_136/mobilenet/256x192_mobilenet_lr1e-3_2x-regression.yaml",
                        help='experiment configure file name',
                        type=str)
    

    然后就可以把项目部署到gpu服务器上训练了。

    用八张卡的rtx3090训练了大概6天,模型在209轮达到了最好的效果,准确率大概90%多,之后就过拟合了。
    在这里插入图片描述
    识别效果其实还是不错的,面部的关键点回归会稍微有点扭曲,勉强可以使用,手部的基本没法用,需要用另外两个数据集进一步训练,不过这边也用不上。
    在这里插入图片描述

    训练项目和数据集

    训练项目代码

    • 在.tensorboard文件夹里包含我之前训练好的权重

    打包好的数据集,有需要可以自己下载,提取码:uk26
    百度云链接好像不是很好使,大家到github上下载数据集

    目录前言AlphaPose介绍这里强调一下轻量化什么yolo目标检测的轻量化单人姿态估计网络的轻量化训练轻量化的单人姿态估计模型下载数据集创建FastPoseMobile创建训练文件开始训练训练结果训练项目和数据集前言AlphaPose介绍AlphaPose是一个精确的多人姿态估计器,是第一个在COCO数据集上实现70+ mAP (75 mAP),在MPII数据集上实现80+ mAP (82.1 mAP)的开源系统。为了匹配跨帧对应于同一个人的姿势,我们还提供了一个名为“姿势流”的高效在线姿势跟踪器。
    AlphaPose最新配置教程(2021.04.01)环境下载源代码INSTALL编译完成之后训练自己的模型 本地服务器Ubuntu18.04+cuda10+pytorch1.1.0+torchversion0.3.0+python3.7 注意:下载的如果是最新的alphapose一定要使用python3.7,实测3.6版本过低(不能下载一些库),3.8版本过高(同样编译不成功)。 下载源代码 由于最近不知为何,校园网访问GitHub时而可以时而不行,有时不能够直接clone到服务器,需要手动下载在本
    因为要做毕业设计,所以看了RMPE: Regional Multi-person Pose Estimation的论文,感觉相关的博客非常的多,但是总是get不到我不理解的点,还是记录下来,以免以后又不懂了。 单人姿态估计中遇到的错误有两个:定位错误(SPPE认定IoU>0.5就是边界框正确的),姿势冗余(一个人可能会产生多个谷歌模型) 针对这...
    第3节:环境配置 3.1创建Alphapose环境 Alphapose有一些调用的函数和可视化代码,需要用到一些外部框架和依赖包,为了正常运行Alphapose,我们需要创建一个包含这些框架和依赖包的运行环境。在实验过程中,我们除了运行Alphapose,还会运行其他项目,因此创建单独的环境方便对项目进行分开管理,如果以后不需要运行此环境,就可以直接删除此环境,项目所需要的依赖和框架就会一起被删除,非常方便,因此我们要养成创建环境的好习惯。 1.找到开始菜单,打开 anaconda prompt,如图3.1
    github地址(Alphapose):Machine Vision and Intelligence Group @ SJTU · GitHub 由于版权问题,点击第一项Alphapose: 第二步:点击图示图标复制地址 第三步:自己选择一个没有中文的项目路径右键-git bash here(没有git的同学参考Git 安装配置全流程_上岸鱼见到了码农的博客-CSDN博客_git配置) 第四步:git clone +复制的链接-回车执行 第五步:如...
    1 Alphapose中使用yolov3-tiny检测器的应用场景 Alphapose的官方仓库中默认使用的是yolov3-spp,根据官网公布的数据,其mAP为60.6,FPS能到20FPS。但是如果我们面临的是一个不复杂的场景,场景中人数较少,而我们有需要其性能够好,实时性能达到应用的要求或者更好,那我们为什么不适用yolov3-tiny检测器,由于简化了网络结构,根据官网的公布的数据,其FPS能达到220FPS,而mAP也有33.1,对于普通场景这种精度完全够用。 2 在Alphapose中使用yo
    论文复现--AlphaPose: Whole-Body Regional Multi-Person Pose Estimation and Tracking in Real-Time
    对于人体骨架数据提取,从Openpose到Alphapose,对人少的场景都做出了很好的性能,港中文AAA12018的ST-GCN(https://arxiv.org/abs/1801.07455) 在Openpose的基础上,使用时空图卷积网络进行了简单动作识别,准确率有待提高。在Kinetics (7.5G)and NTU-RGBD(5.8G)数据上进行了相关测试。最近遇到了行人匹配的问题,由...
    一、将从网上下载的文件中 ,xml文件全部放在新建的annotations中,png或jpg全部放在images中。 二、新建一个脚本文件split_train_val.py,用于划分训练集、测试集和验证集。具体代码如下 # coding:utf-8 import os import random import argparse parser = argparse.ArgumentParser() #xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下 parser.
    通过maven配置hive-jdbc 3.1.2遇到Could not find artifact org.glassfish:javax.el:pom:3.0.1-b06-SNAPSHOT问题 求助博主,ai.djl.translate.TranslateException: ai.djl.engine.EngineException: isTuple() INTERNAL ASSERT FAILED at "..\\..\\aten\\src\\ATen/core/ivalue_inl.h":1101, please report a bug to PyTorch. Expected Tuple but got String at ai.djl.inference.Predictor.batchPredict(Predictor.java:170) at ai.djl.inference.Predictor.predict(Predictor.java:118) at triShpere_YOLO.YOLOv5.detect(YOLOv5.java:90) at triShpere_YOLO.YOLOv5.main(YOLOv5.java:71)。报这个错是为什么啊 轻量化AlphaPose m0_46346901: 修改yaml路径为啥我的不在train.py里,我只在opt.py找到了相关的代码 轻量化AlphaPose WangYx-: 你好 请问在alphapose中如何更改检测头呢 为vscode配置clangd zhz906575052: 请问怎么处理预处理定义 yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo MKDLFDKFL: java.io.FileNotFoundException: https://publish.djl.ai/pytorch/1.8.1/jnilib/0.21.0/win-x86_64/cu111/djl_torch.dll有人遇到过吗?
 
推荐文章
留胡子的消炎药  ·  百果园:半年付费会员少10万、加盟店少111家,负债率创新高、现金难以覆盖短债_新浪财经_新浪网
10 月前
豁达的帽子  ·  我院一行到广财会计学院交流学习-广东金融学院会计学院
1 年前
飘逸的香蕉  ·  长城汽车2023年1-6月销售52万辆 新能源销量及占比屡创新高- 车市快报 -华龙网
2 年前
性感的镜子  ·  义翘神州企业专业实践信息
2 年前
玩足球的大蒜  ·  今日影评 | 影评人史航解读《尼罗河上的惨案》_电影策划_电影网_1905.com
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号