Nanodet训练自己的轻量级目标检测模型实践

官方地址:https://github.com/RangiLyu/nanodet

一、 准备训练的数据:

数据文件目录为如下,分别存放训练集和验证集的图片和xml文件(注意图片和标签一一对应)

image.png

二、建立自己yaml文件

在config文件夹下建立自己的yaml文件,VOC格式标签参照官方的

https://github.com/RangiLyu/nanodet/blob/main/config/nanodet_custom_xml_dataset.yml

文件进行修改:

注意修改的地方有以下几点:

1.修改训练结果的保存路径

image.png

2.修改自己的训练集中的目标类别数量

image.png

3.修改类别标签

image.png

4.修改训练集和验证集的文件夹路径

image.png

5.修改训练的批次

image.png

 

三、训练

切换项目的主目录下执行

python train.py nanodet-m.yaml(注意次此处输入的是train.py路径和自己的yaml文件路径)

image.png

显示的训练过程:

image.png

注:可以使用tensorboard查看训练过程

四、测试训练结果

训练的结果保存在workspace文件夹下(如果使用官方的保存路径的话)

参考:https://github.com/RangiLyu/nanodet/blob/main/demo/demo-inference-with-pytorch.ipynb

import os
import cv2
import torch
from demo.demo import Predictor
from nanodet.util import cfg, load_config, Logger
from nanodet.util import overlay_bbox_cv
import numpy as np
from PIL import Image
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0"
device = torch.device('cuda')
torch.backends.cudnn.enabled = True
torch.backends.cudnn.benchmark = True

def cv2_imshow(a, convert_bgr_to_rgb=True):
    """A replacement for cv2.imshow() for use in Jupyter notebooks.
    Args:
        a: np.ndarray. shape (N, M) or (N, M, 1) is an NxM grayscale image. shape
            (N, M, 3) is an NxM BGR color image. shape (N, M, 4) is an NxM BGRA color
            image.
        convert_bgr_to_rgb: switch to convert BGR to RGB channel.
    """
    a = a.clip(0, 255).astype('uint8')
    # cv2 stores colors as BGR; convert to RGB
    if convert_bgr_to_rgb and a.ndim == 3:
        if a.shape[2] == 4:
            a = cv2.cvtColor(a, cv2.COLOR_BGRA2RGBA)
        else:
            a = cv2.cvtColor(a, cv2.COLOR_BGR2RGB)
    # display(Image.fromarray(a))
    # cv2.imshow("", np.uint8(Image.fromarray(a)))
    # cv2.waitKey(0)
    return np.uint8(Image.fromarray(a))


if __name__ == '__main__':
    config_path = 'config/My_nanodet-m.yml'                     #更改为自己的yml文件路径
    model_path = 'workspace/data/model_last.pth'                #更改文自己的权重路径
    image_path = 'nanodet/imgs/1.jpg'         #更改为预测图的路径
    load_config(cfg, config_path)
    logger = Logger(-1, use_tensorboard=False)

    predictor = Predictor(cfg, model_path, logger, device=device)
    meta, res = predictor.inference(image_path)
    # print(res)
    result = overlay_bbox_cv(meta['raw_img'], res, cfg.class_names, score_thresh=0.35)
    imshow_scale = 1.0
    img = cv2_imshow(cv2.resize(result, None, fx=imshow_scale, fy=imshow_scale),False)
    cv2.imshow("", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

五、导出为onnx模型

进入到tools/export.py

修改为自己的yml文件路径和自己的输出的onnx文件路径

image.png

image.png

直接运行就可以了

默认生成的onnx文件在export.py同级目录下

六、onnx转NCNN

先使用onnx-simplifier工具将onnx文件简化,没有安装的需要提前安装(此处不介绍了)

简化模型,命令行输入

python -m onnxsim nanodet.onnx nanodet_sim.onnx

 

image.png

模型简化成功。

使用NCNN工具对转化或者使用一键转换模型https://convertmodel.com/将简化后的模型转为NCNN模型即可。

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值