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提供的函数就可以。
pt->onnx->ncnn(pytorch部署自己训练的模型)_第1张图片

你可能感兴趣的:(深度学习踩坑记录,pytorch,深度学习,android,计算机视觉)