YOLOv8-Pose NCNN安卓部署

YOLOv8-Pose NCNN安卓部署

前言

YOLOv8-Pose NCNN安卓部署
在这里插入图片描述

目前的帧率可以稳定在30帧左右,下面是这个项目的github地址:https://github.com/gaoxumustwin/ncnn-android-yolov8-pose

介绍

在做YOLOv8-Pose NCNN安卓部署的时候,在github上发现了https://github.com/eecn/ncnn-android-yolov8-pose已经有大佬实现了这一操,并且也给出了它是如何导出ncnn模型的;

该作者是使用YOLOv8的官方给出的NCNN模型导出的方式,我按照这个方式导出ncnn模型,并观察其网络结构如下:

在这里插入图片描述

这个网络结构有一些错综复杂,感觉是有大量的计算图追踪,但是其安卓部署的时候速度在20帧左右也还可以接受,并且YOLOv8的官方给出了NCNN推理的python代码

https://github.com/ultralytics/ultralytics/tree/a007668e1fa8d5d586e6daa3924d65cfb139b8ac/examples/YOLOv8-NCNN-Python-Det-Pose-Cls-Seg-Obb

由于之前看到了三木君大佬,在23年的时候在知乎发布的一篇文章,只导出模型的Backbone + Neck,这种思路在玩瑞芯微设备的时候多次接触,三木君大佬也给出了原因:

  • 只导出模型,不导出后处理方便对模型进行公平的测速,MMYOLO 里面的算法多种多样,而且大多是 Backbone + Neck 结构,这样测速才能较为公平体现模型的速度差异。
  • 有些模型需要部署到嵌入式设备,导出后处理的话相当与会有海量的加减乘除要计算,由于模型应用会通过置信度过滤很多检测结果,会导致大多计算都是多余的。
  • 有些推理后端对后处理算子支持很差,可能会无法转换到对应后端的模型,或者转换后的模型无法充分利用 BPU/TPU/NPU/GPU 加速等等问题存在。
  • 很多要部署的模型都会用 c/c++ 重写后处理加速,后处理代码可以多线程计算,异步计算效率会更高。

同时在CSDN上发现了有佬根据上面的思路编写了NCNN代码并且给出了NCNN代码的github地址

此时只需要参照前面的yolov8安卓部署实现把这个只导出模型的Backbone + Neck的YOLOv8-Pose NCNN代码进行简单改写就可以实现

环境

我使用的ultralytics版本如下:

pip install ultralytics==8.2.98

安装好ultralytics后,后面的操纵需要更改源码,所以需要知道ultralytics安装的路径,可以使用下面的方式进行查询

>>> import ultralytics
>>> ultralytics.__version__
'8.2.98'
>>> ultralytics.__path__
pathto\ultralytics

修改

模型导出时的网络修改

修改pathto\ultralytics\nn\modules\head.py文件中的POSE类,在其forward函数中加如下代码

if self.export or torch.onnx.is_in_onnx_export():
    results = self.forward_pose_export(x)
    return tuple(results)

同时在POSE类加上新如下函数

def forward_pose_export(self, x):
    results = []
    for i in range(self.nl):
        dfl = self.cv2[i](x[i]).permute(0, 2, 3, 1).contiguous()
        cls = self.cv3[i](x[i]).permute(0, 2, 3, 1).contiguous()
        kpt = self.cv4
<think>好的,我现在需要帮助用户了解如何使用YOLOv8s-pose进行训练,包括教程和配置方法。首先,我应该回忆一下YOLOv8的相关知识,尤其是关于姿态估计的部分。根据用户提供的引用内容,他们提到了YOLOv8-Pose的训练步骤和NCNN安卓部署的代码片段,这可能涉及数据准备、模型配置、训练参数设置等。 首先,用户可能需要了解数据集的准备。YOLOv8-Pose需要的数据集格式应该是YOLO格式的,每个图像对应一个标注文件,包含关键点的坐标。引用中提到了`myposedata.yaml`和`coco-pose.yaml`,这说明用户需要配置自己的数据YAML文件,指定路径、类别和关键点信息。 接下来是模型配置。用户提到的`yolov8s-pose.yaml`文件应该定义了模型的结构,比如网络深度、宽度、锚点等。s版本代表较小型的模型,可能需要在速度和精度之间平衡。用户可能需要根据任务调整这些参数,或者使用预训练权重。 然后是训练脚本的编写。引用中的代码示例显示,用户需要导入YOLO模型,加载配置文件或预训练模型,然后调用`train`方法。关键参数包括数据配置、训练轮数(epochs)、批量大小(batch)、图像尺寸(imgsz)等。用户可能需要注意这些参数如何影响训练效果和速度。 另外,用户可能关心如何监控训练过程,比如使用TensorBoard或Ultralytics提供的日志工具。训练后的模型保存和评估也是重要步骤,比如验证集上的指标分析,模型导出为不同格式(如ONNX)以便后续部署。 用户可能遇到的问题包括数据标注格式不正确、路径配置错误、训练参数设置不当导致的资源不足(如显存溢出),或者模型收敛不佳。需要提醒用户检查数据集路径、确保标注正确,并根据硬件调整批量大小等参数。 最后,用户的应用场景可能涉及实时姿态估计,比如运动分析、人机交互等,需要根据实际需求调整模型大小和推理速度。引用中的安卓部署示例说明用户可能有移动端部署的需求,因此训练时可能需要考虑模型轻量化。</think>以下是使用$YOLOv8s\text{-}pose$进行模型训练的详细步骤及配置说明: ### 一、环境准备 1. 安装Ultralytics框架: ```bash pip install ultralytics ``` ### 二、数据准备 1. 创建数据集配置文件`myposedata.yaml`: ```yaml path: ./datasets/mypose train: images/train val: images/val test: images/test # 关键点定义 kpt_shape: [17, 3] # 17个关键点,每个点包含(x,y,visible)三个值 names: 0: person ``` 2. 数据集目录结构示例: ``` datasets/ └── mypose/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ └── labels/ ├── train/ ├── val/ └── test/ ``` ### 三、模型配置 1. 使用官方提供的$yolov8s\text{-}pose.yaml$配置文件: ```yaml # 参数来自Ultralytics官方配置 nc: 1 # 类别数 kpt_shape: [17, 3] # COCO格式关键点 depth_multiple: 0.33 # 深度缩放因子 width_multiple: 0.50 # 宽度缩放因子 ``` ### 四、训练代码示例 ```python from ultralytics import YOLO if __name__ == '__main__': # 加载预训练模型 model = YOLO('yolov8s-pose.pt') # 开始训练 results = model.train( data='myposedata.yaml', epochs=100, imgsz=640, batch=32, # 根据GPU显存调整 workers=4, optimizer='AdamW', lr0=0.001, cos_lr=True, # 使用余弦学习率调度 label_smoothing=0.1, project='pose_train', name='exp1' ) ``` ### 五、关键参数说明 | 参数 | 说明 | 推荐值 | |------|------|--------| | `epochs` | 训练轮次 | 100-300 | | `imgsz` | 输入图像尺寸 | 640 | | `batch` | 批量大小 | 16-64(根据显存调整) | | `workers` | 数据加载线程数 | CPU核心数的70% | | `optimizer` | 优化器 | 'AdamW'/'SGD' | | `lr0` | 初始学习率 | 0.001-0.01 | | `cos_lr` | 余弦退火调度 | True效果更佳[^1] | ### 六、训练监控 1. 实时查看训练指标: ```bash tensorboard --logdir pose_train/exp1 ``` 2. 主要监控指标: - 目标检测损失:`box_loss` - 关键点回归损失:`pose_loss` - 验证集精度:`mAP@50-95` ### 七、常见问题解决 1. **显存不足**:减小`batch`值或降低`imgsz` 2. **关键点定位不准**:检查标注可见性标记(visible=0/1) 3. **过拟合**:增加数据增强参数: ```python model.train(... flipud=0.5, # 上下翻转概率 fliplr=0.5, # 左右翻转概率 mosaic=1.0, # 马赛克增强 ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值