pt->onnx->ncnn(pytorch部署自己训练的模型)

pt->onnx->ncnn(pytorch部署自己训练的模型)

yolov6似乎有部分操作ncnn不支持,需要改一下网络结构,所以这里使用 yolov7-tiny

首先,找一个目标检测的安卓的demo跑通再换模型【替换assest文件夹中的bin和param文件】
yolov7[AS]:https://github.com/xiang-wuu/ncnn-android-yolov7
然后,用自己的数据集重新训练模型,如果使用远程服务器,记得换与写路径有关的txt文件,这是我从网上找的一段生成文件路径的代码,感觉很好用。另外,有一个存疑的问题【数据集划分需不需要打乱?其实随机梯度下降的时候还是打乱了来着】

import os
from tqdm import tqdm
if __name__ == '__main__':
    rootdir = 'D:\myhome\process_fishdataset\\front'
    rootimagesdir = os.path.join(rootdir, 'images')
    rootlabelsdir = os.path.join(rootdir, 'labels')
    assert os.path.exists(rootimagesdir), f'{rootimagesdir} not exists.'
    assert os.path.exists(rootlabelsdir), f'{rootlabelsdir} not exists.'

    imagesets = ['train', 'val', 'test']    # 将images/train val test中的图像的绝对地址分别写入txt中

    for sets in imagesets:
        imagesdir = os.path.join(rootimagesdir, sets)
        with open(os.path.join(rootdir, f'{sets}.txt'), 'w') as f:
            filelist = os.listdir(imagesdir)
            for images in tqdm(filelist):
                f.write(os.path.join(imagesdir, images) + '\n')

训练完成之后,用yolo官方代码中的export文件导出成onnx格式,然后再转ncnn【命令行和封装好的网站都行】
接下来,是我在安卓部署遇到的问题,替换assest文件夹中的bin和param文件后,出现了不显示锚框的问题。打开安卓项目中的yolo.cpp文件,发现代码里输入输出的name中写的是in0,out0,out1和out2这种,和原项目中的模型对应,但是和我们自己训练出的模型大概率是不对应的。所以,用Netron打开自己转换出的param文件,查看输入的name和最后三个卷积层的输出name。对应看出自己的输入输出name,最后替换掉yolo.cpp中原来是in0,out0,out1和out2的地方,就可以显示锚框啦。另外,想改变锚框的显示大小,颜色,文字也是在这个文件里改,用opencv提供的函数就可以。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值