YOLOX 训练自定义数据及海思平台适配
494
YOLOX 训练自定义数据及海思平台适配 一休摸鱼 2023-09-07 09:50:10

1.dataSet

1.folder

datasets|
  VOCdevkit|
    VOC2007|
      Annotations|
      ImageSets|
      JPEGImages|

2.split dataSet

import os
import random

trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets/Main'
total_xml = os.listdir(xmlfilepath)


num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        fval.write(name)
        ftest.write(name)
    else:
        ftrain.write(name)
ftrain.close()
fval.close()
ftest.close()

3.dataSet config

  1. yolox/data/datasets/voc_classes.py,类别名
  2. yolox/data/datasets/voc.py
    def __init__(
        self,
        data_dir,
        image_sets=[('2007', 'train')],
        img_size=(416,416), #修改为自己的size
        preproc=None,
        target_transform=AnnotationTransform(),
        dataset_name="VOC2007

2.model config

1.exp

模型中涉及的所有内容都放在一个单独的 Exp 文件中,包括模型设置、训练设置和测试设置。完整的 Exp 文件位于yolox_base.py。可能每个exp都写太长,但是你可以继承基础exp文件,只覆盖改变的部分。

我们还是以VOC Exp文件为例。

我们这里选择YOLOX-S模型,所以我们应该改变网络深度和宽度。VOC 只有 20 个类,因此我们也应该更改 num_classes。

这些配置在 init() 方法中更改:


class Exp(MyExp):
    def __init__(self):
        super(Exp, self).__init__()
        self.num_classes = 4
        self.depth = 0.33
        self.width = 0.375
        self.data_num_workers = 8
        self.input_size = (608, 608)
        self.scale = (0.5, 1.5)
        self.random_size = (10, 20)
        self.test_size = (608, 608)
        self.exp_name = os.path.split(os.path.realpath(__file__))[1].split(".")[0]
        self.enable_mixup = False

2.NNIE

主要修改3个方面:

  1. act loss
  2. upsample
  3. (optional)focus -> conv/reorg

此处主要针对act和updample进行修改:

backbone


backbone = YOLOPAFPN(self.depth, self.width, in_channels=in_channels, depthwise=True,act="lrelu")
  • network_blocks.py
class DWConv(nn.Module):
    """Depthwise Conv + Conv"""
    def __init__(self, in_channels, out_channels, ksize, stride=1, act="lrelu"):
  • yolo_pafpn.py

 # self.upsample = nn.Upsample(scale_factor=2, mode="nearest")
self.upsample0 = nn.ConvTranspose2d(int(in_channels[1] * width),int(in_channels[1] * width),kernel_size=2, stride=2)
self.upsample1 = nn.ConvTranspose2d(int(in_channels[0] * width),int(in_channels[0] * width),kernel_size=2, stride=2)

head


head = YOLOXHead(self.num_classes, self.width, in_channels=in_channels, depthwise=True,act="lrelu")
  • network_blocks.py
class DWConv(nn.Module):
    """Depthwise Conv + Conv"""
    def __init__(self, in_channels, out_channels, ksize, stride=1, act="lrelu"):

3.train

requirements


git clone git@github.com:Megvii-BaseDetection/YOLOX.git
cd YOLOX
pip3 install -U pip && pip3 install -r requirements.txt
pip3 install -v -e .  # or  python3 setup.py develop

#pycocotools
pip3 install cython; pip3 install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'

#apex 加速torch训练
git clone https://github.com.cnpmjs.org/NVIDIA/apex.git
cd apex
pip3 install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

#apex错误,则:
cd apex
python setup.py install

单卡训练


python tools/train.py -f ./exps/electric/elect_tiny.py -d 1 -b 64 --fp16 -o -c /path/to/the/pretrained/weights

4.onnx


python tools/export_onnx.py --output-name yolox_s.onnx -n yolox-s -f exps/electric/elect_s.py -c YOLOX_outputs/elect_s/best_ckpt.pth.tar


声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
时间排序
内容存在敏感词
手气红包
    0 条记录 第 0 /
    相关专栏
    置顶时间设置
    结束时间
    删除原因
    • 广告/SPAM
    • 恶意灌水
    • 违规内容
    • 文不对题
    • 重复发帖
    打赏作者
    易百纳技术社区
    一休摸鱼
    您的支持将鼓励我继续创作!
    打赏金额:
    ¥1 易百纳技术社区
    ¥5 易百纳技术社区
    ¥10 易百纳技术社区
    ¥50 易百纳技术社区
    ¥100 易百纳技术社区
    支付方式:
    微信支付
    支付宝支付
    易百纳技术社区 微信支付
    易百纳技术社区
    打赏成功!

    感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

    举报反馈

    举报类型

    • 内容涉黄/赌/毒
    • 内容侵权/抄袭
    • 政治相关
    • 涉嫌广告
    • 侮辱谩骂
    • 其他

    详细说明

    审核成功

    发布时间设置
    发布时间:
    是否关联周任务-专栏模块

    审核失败

    失败原因
    备注
    Loading...
    易百纳技术社区
    确定要删除此文章、专栏、评论吗?
    确定
    取消
    易百纳技术社区
    每周任务
      去完成
      活动规则
      易百纳技术社区
      升级提醒
      升级

      恭喜您的社区称号由 升级为 “社区游民”

      同时为了感谢您对社区的支持,我们将送出xxx礼品一份, 记得领取哦~

      升级提醒
      易百纳技术社区

      惊喜礼包

      拼手气红包 红包规则
      祝福语
      恭喜发财,大吉大利!
      红包金额
      红包最小金额不能低于5元
      红包数量
      红包数量范围10~50个
      余额支付
      当前余额:
      可前往问答、专栏板块获取收益 去获取
      取 消 确 定

      小包子的红包

      恭喜发财,大吉大利

      已领取20/40,共1.6元 红包规则

        avatar