Giter Site home page Giter Site logo

yolov8's Introduction

Official YOLOv8 训练自己的数据集并基于NVIDIA TensorRT和华为昇腾端到端模型加速以及安卓手机端部署

说明: 本项目支持YOLOv8的对应的package的版本是:ultralytics-8.0.0

1.YOLO的一些发展历史

  • YOLOv1:2015年Joseph Redmon和 Ali Farhadi等 人(华盛顿大学)

  • YOLOv2:2016年Joseph Redmon*和**Ali Farhadi*等人*(华盛顿大学)*

  • YOLOv3:2018年Joseph Redmon*和**Ali Farhadi*等人*(华盛顿大学)*

  • YOLOv4:2020年Alexey Bochkovskiy和Chien-Yao Wang等人

  • YOLOv5:2020年Ultralytics公司

  • YOLOv6:2022年美团公司

  • YOLOv7**:2022年Alexey Bochkovskiy*和Chien-Yao Wang*等人

  • YOLOv8:2023年Ultralytics公司

上述简单罗列了 YOLOv数字系列 的发布时间和作者/单位机构,因为YOLO系列生态太猛了,比如还有知名的PP-YOLO系列、YOLOX等等工作。

2. YOLOv8的相关资源

3.YOLOv5 Vs YOLOv8

  • YOLOv5

  1. Backbone:CSPDarkNet结构,主要结构**的体现在C3模块,这里也是梯度分流的主要**所在的地方;
  2. PAN-FPN:双流的FPN,必须香,也必须快,但是量化还是有些需要图优化才可以达到最优的性能,比如cat前后的scale优化等等,这里除了上采样、CBS卷积模块,最为主要的还有C3模块(记住这个C3模块哦);
  3. Head:Coupled Head+Anchor-base,毫无疑问,YOLOv3、YOLOv4、YOLOv5、YOLOv7都是Anchor-Base的,后面会变吗?
  4. Loss:分类用BEC Loss,回归用CIoU Loss。
  • YOLOv8

具体改进如下:

  1. Backbone:使用的依旧是CSP的**,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
  2. PAN-FPN:毫无疑问YOLOv8依旧使用了PAN的**,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块;
  3. Decoupled-Head:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;
  4. Anchor-Free:YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的**;
  5. 损失函数:YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;
  6. 样本匹配:YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式。
  • SPP Vs SPPF:

  • C3 Vs C2f:

针对C3模块,其主要是借助CSPNet提取分流的**,同时结合残差结构的**,设计了所谓的C3 Block,这里的CSP主分支梯度模块为BottleNeck模块,也就是所谓的残差模块。同时堆叠的个数由参数n来进行控制,也就是说不同规模的模型,n的值是有变化的。

其实这里的梯度流主分支,可以是任何之前你学习过的模块,比如,美团提出的YOLOv6中就是用来重参模块RepVGGBlock来替换BottleNeck Block来作为主要的梯度流分支,而百度提出的PP-YOLOE则是使用了RepResNet-Block来替换BottleNeck Block来作为主要的梯度流分支。而YOLOv7则是使用了ELAN Block来替换BottleNeck Block来作为主要的梯度流分支。

C3模块的Pytorch的实现如下:

class C3(nn.Module):
    # CSP Bottleneck with 3 convolutions
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c1, c_, 1, 1)
        self.cv3 = Conv(2 * c_, c2, 1)  # optional act=FReLU(c2)
        self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))

    def forward(self, x):
        return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))

C2f模块就是参考了C3模块以及ELAN的**进行的设计,让YOLOv8可以在保证轻量化的同时获得更加丰富的梯度流信息。

C2f模块对应的Pytorch实现如下:

class C2f(nn.Module):
    # CSP Bottleneck with 2 convolutions
    def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion
        super().__init__()
        self.c = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, 2 * self.c, 1, 1)
        self.cv2 = Conv((2 + n) * self.c, c2, 1)  # optional act=FReLU(c2)
        self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=((3, 3), (3, 3)), e=1.0) for _ in range(n))

    def forward(self, x):
        y = list(self.cv1(x).split((self.c, self.c), 1))
        y.extend(m(y[-1]) for m in self.m)
        return self.cv2(torch.cat(y, 1))
  • PAN-FPN改进了什么?

YOLOv5的Neck部分的结构图如下:

YOLOv6的Neck部分的结构图如下:

YOLOv8的结构图:

可以看到,相对于YOLOv5或者YOLOv6,YOLOv8将C3模块以及RepBlock替换为了C2f,同时细心可以发现,相对于YOLOv5和YOLOv6,YOLOv8选择将上采样之前的1×1卷积去除了,将Backbone不同阶段输出的特征直接送入了上采样操作。

  • Head部分都变了什么呢?

先看一下YOLOv5本身的Head(Coupled-Head):

而YOLOv8则是使用了Decoupled-Head,回归头的通道数也变成了4*reg_max的形式:

  • 损失函数

对于YOLOv8,其分类损失为VFL Loss,其回归损失为CIOU Loss+DFL的形式,这里Reg_max默认为16。

VFL主要改进是提出了非对称的加权操作,FL和QFL都是对称的。而非对称加权的**来源于论文PISA,该论文指出首先正负样本有不平衡问题,即使在正样本中也存在不等权问题,因为mAP的计算是主正样本。

q是label,正样本时候q为bbox和gt的IoU,负样本时候q=0,当为正样本时候其实没有采用FL,而是普通的BCE,只不过多了一个自适应IoU加权,用于突出主样本。而为负样本时候就是标准的FL了。可以明显发现VFL比QFL更加简单,主要特点是正负样本非对称加权、突出正样本为主样本。

针对这里的DFL(Distribution Focal Loss),其主要是将框的位置建模成一个 general distribution,让网络快速的聚焦于和目标位置距离近的位置的分布。

  • 正负样本的匹配

标签分配是目标检测非常重要的一环,在YOLOv5的早期版本中使用了MaxIOU作为标签分配方法。然而,在实践中发现直接使用边长比也可以达到一样的效果。而YOLOv8则是抛弃了Anchor-Base方法使用Anchor-Free方法,找到了一个替代边长比例的匹配方法: TaskAligned。为与NMS搭配,训练样例的Anchor分配需要满足以下两个规则:

  1. 正常对齐的Anchor应当可以预测高分类得分,同时具有精确定位;
  2. 不对齐的Anchor应当具有低分类得分,并在NMS阶段被抑制。

基于上述两个目标,TaskAligned设计了一个新的Anchor alignment metric 来在Anchor level 衡量Task-Alignment的水平。并且,Alignment metric 被集成在了 sample 分配和 loss function里来动态的优化每个 Anchor 的预测。

Anchor alignment metric:

分类得分和 IoU表示了这两个任务的预测效果,所以,TaskAligned使用分类得分和IoU的高阶组合来衡量Task-Alignment的程度。使用下列的方式来对每个实例计算Anchor-level 的对齐程度: $$ t=s^{\alpha}+\mu^{\beta} $$ s 和 u 分别为分类得分和 IoU 值,α 和 β 为权重超参。从上边的公式可以看出来,t 可以同时控制分类得分和IoU 的优化来实现 Task-Alignment,可以引导网络动态的关注于高质量的Anchor。

Training sample Assignment:

采用一种简单的分配规则选择训练样本:对每个实例,选择m个具有最大t值的Anchor作为正样本,选择其余的Anchor作为负样本。然后,通过损失函数(针对分类与定位的对齐而设计的损失函数)进行训练。

4.YOLOv8环境安装

我们使用的是ultralytics(8.0.0) python package,其安装方式如下:

#pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ ultralytics==0.0.59
#pip install -e ultralytics
pip install ultralytics

你可以在/usr/local/lib/pythonx.x/dist-packages/ultralytics 下找到安装装宝的YOLOv8的源文件,进行魔改!

5.构建自己的训练集

YOLOv8可以进行分类,检测和分割类任务的学习,我们以检测类任务为例,并训练YOLOv8s,其数据集的准备完全和YOLOv5,YOLOv6,YOLOv7的一致,可以参考我们之前的项目

6.构建自己训练集的配置文件和模型配置文件

  • 模型配置文件:
#yolov8s.yaml
# Parameters
nc: 4  # number of classes
depth_multiple: 0.33  # scales module repeats
width_multiple: 0.50  # scales convolution channels

# YOLOv8.0s backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0s head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 13

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 17 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 20 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 23 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)
  • 数据集配置文件
#score_data.yaml

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
train: ./dataset/score/images/train # train images
val: ./dataset/score/images/val # val images
#test: ./dataset/score/images/test # test images (optional)

# Classes
names:
  0: person
  1: cat
  2: dog
  3: horse
  • 训练超参数配置文件

我们对训练的超参数进行了简单的修改,通过命令行参数传入,也可以通过配置文件进行配置。

task: "detect" # choices=['detect', 'segment', 'classify', 'init'] # init is a special case. Specify task to run.
mode: "train" # choices=['train', 'val', 'predict'] # mode to run task in.

# Train settings -------------------------------------------------------------------------------------------------------
model: null # i.e. yolov8n.pt, yolov8n.yaml. Path to model file
data: null # i.e. coco128.yaml. Path to data file
epochs: 100 # number of epochs to train for
patience: 50  # TODO: epochs to wait for no observable improvement for early stopping of training
batch: 16 # number of images per batch
imgsz: 640 # size of input images
save: True # save checkpoints
cache: False # True/ram, disk or False. Use cache for data loading
device: '' # cuda device, i.e. 0 or 0,1,2,3 or cpu. Device to run on
workers: 8 # number of worker threads for data loading
project: null # project name
name: null # experiment name
exist_ok: False # whether to overwrite existing experiment
pretrained: False # whether to use a pretrained model
optimizer: 'SGD' # optimizer to use, choices=['SGD', 'Adam', 'AdamW', 'RMSProp']
...

7.YOLOv8目标检测任务训练

yolo task=detect mode=train model=yolov8s.yaml  data=score_data.yaml epochs=100 batch=64 imgsz=640 pretrained=False optimizer=SGD 

8.YOLOv8推断Demo

# 自己实现的推断程序
python3 inference.py

9.YOLOv8端到端模TensorRT模型加速

  1. pth模型转onnx
#CLI
yolo task=detect mode=export model=./runs/detect/train/weights/last.pt format=onnx simplify=True opset=13

# python
from ultralytics import YOLO

model = YOLO("./runs/detect/train/weights/last.pt ")  # load a pretrained YOLOv8n model
model.export(format="onnx")  # export the model to ONNX format
  1. 增加NMS Plugin

执行tensorrt/下的如下代码,添加NMS到YOLOv8模型

  • 添加后处理
python3 yolov8_add_postprocess.py
  • 添加NMS plugin
python3 yolov8_add_nms.py

生成last_1_nms.onnx,打开该文件对比和原onnx文件的区别,发现增加了如下节点(完成了将NMS添加到onnx的目的):

  1. onnx转trt engine
trtexec --onnx=last_1_nms.onnx --saveEngine=yolov8s.plan --workspace=3000 --verbose

出现上述界面,onnx正常序列化为TRT engine.

  1. TRT C++推断

在win 10下基于RTX 1060 TensorRT 8.2.1进行测试,我们的开发环境是VS2017,所有C++代码已经存放在tensorrt/文件夹下。其推断结果如下图所示(可以发现我们实现了YOLOv8的TensorRT端到端的推断,其推断结果与原训练框架保持一致):

9.YOLOv8端到端华为昇腾模型推断加速

由于其他原因,该部分代码不开源。

这一部分我们将在华为昇腾下测试如何端到端实现YOLOv8的推断,华为昇腾目前支持的算子还是很有限的,onnx的NMS算子华为昇腾是支持的,因此我们需要将onnx的NMS算子添加到YOLOv8的onnx文件中,并将模型转化到昇腾架构下运行。这部分代码我们存放在Ascend/下。

  1. pth转onnx

  2. 增加onnx NMS算子结点

  3. ATC转.om模型

  4. 华为昇腾C++推断

10. QT + NCNN 小米手机端部署YOLOv8s

https://github.com/DataXujing/ncnn_android_yolov8

参考文献:

yolov8's People

Contributors

dataxujing avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

yolov8's Issues

关于训练自己的实例分割数据集和如何使用V8进行多目标跟踪的若干问题

你好,我想学习V8对自己的数据集进行实例分割,已经使用labelme完成了数据集的制作,但我不知道如何转换成YOLOV8实例分割所需的格式以及该如何进行YOLOV8实例分割的训练。
另外在完成实例分割后我想在此基础上同时使用YOLOV8所集成好的多目标跟踪功能,我是否还需要重新训练V8的目标检测模型?关于V8已经搭载的两种多目标跟踪算法,我看了这两种算法的说明,它们的预训练权重都是和行人与汽车相关,但是我的数据集并非行人和汽车而是其他物体,那么我还需要重新训练多目标跟踪算法吗?
如果多目标跟踪算法需要重新训练,那么是否意味着我还需要同时重新训练对应我的数据集的reID?在训练好之后,我是直接将对应的yaml文件替换掉就可以使用吗?
感谢你能帮我解答!

注释请求

您好,非常感谢您的工作,添加后处理和nms的那部分代码,可以帮忙补下注释嘛,不太好理解,再次感谢您的工作

关于华为昇腾系列的模型部署

您好看了您做的工作非常棒!目前实验室基于MDC系列产品研究自动驾驶相关工作,我负责视觉部分,MDC内嵌推理为昇腾310产品,但是我对昇腾系列的模型部署流程,特别是自定义的算子方面不是很了解,请问方便的话可以发份代码或相关资料给我吗,只作为参考学习使用。目前我主要是进行视觉目标和车道线检测工作,我的邮箱是[email protected],可以有偿,感谢!

修改NN\models.py 转换模型与修改前是一样的,不能用。

我将你modules_ncnns.py 替换了ultralytics\nn\modules.py转换模型与没有修改是一样的,不能用,:
1.yolo task=detect mode=export model=./last.pt format=onnx simplify=True opset=13
2.onnx2ncnn last.onnx last.param last.bin
yolov8n.param

7767517
211 256
Input images 0 1 images
MemoryData 137 0 1 137 0=2
MemoryData 157 0 1 157 0=2
Split splitncnn_0 1 2 157 157_splitncnn_0 157_splitncnn_1
MemoryData 184 0 1 184 0=2
Split splitncnn_1 1 3 184 184_splitncnn_0 184_splitncnn_1 184_splitncnn_2
MemoryData 211 0 1 211 0=2
Split splitncnn_2 1 2 211 211_splitncnn_0 211_splitncnn_1
MemoryData 398 0 1 398 0=2
MemoryData 445 0 1 445 0=8400 1=2
Split splitncnn_3 1 2 445 445_splitncnn_0 445_splitncnn_1
MemoryData 455 0 1 455 0=8400
Convolution Conv_0 1 1 images 128 0=16 1=3 11=3 2=1 12=1 3=2 13=2 4=1 14=1 15=1 16=1 5=1 6=432
Swish Mul_2 1 1 128 130
Convolution Conv_3 1 1 130 131 0=32 1=3 11=3 2=1 12=1 3=2 13=2 4=1 14=1 15=1 16=1 5=1 6=4608
Swish Mul_5 1 1 131 133
Convolution Conv_6 1 1 133 134 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=1024
Swish Mul_8 1 1 134 136
Slice Split_10 2 2 136 137 138 139 -23300=2,-233,-233 1=0
Split splitncnn_4 1 3 139 139_splitncnn_0 139_splitncnn_1 139_splitncnn_2
Convolution Conv_11 1 1 139_splitncnn_2 140 0=16 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=2304
Swish Mul_13 1 1 140 142
Convolution Conv_14 1 1 142 143 0=16 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=2304
Swish Mul_16 1 1 143 145
BinaryOp Add_17 2 1 139_splitncnn_1 145 146 0=0
Concat Concat_18 3 1 138 139_splitncnn_0 146 147 0=0
Convolution Conv_19 1 1 147 148 0=32 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=1536
Swish Mul_21 1 1 148 150
Convolution Conv_22 1 1 150 151 0=64 1=3 11=3 2=1 12=1 3=2 13=2 4=1 14=1 15=1 16=1 5=1 6=18432
Swish Mul_24 1 1 151 153
Convolution Conv_25 1 1 153 154 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096
Swish Mul_27 1 1 154 156
Slice Split_29 2 2 156 157_splitncnn_1 158 159 -23300=2,-233,-233 1=0
Split splitncnn_5 1 3 159 159_splitncnn_0 159_splitncnn_1 159_splitncnn_2
Convolution Conv_30 1 1 159_splitncnn_2 160 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=9216
Swish Mul_32 1 1 160 162
Convolution Conv_33 1 1 162 163 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=9216
Swish Mul_35 1 1 163 165
BinaryOp Add_36 2 1 159_splitncnn_1 165 166 0=0
Split splitncnn_6 1 3 166 166_splitncnn_0 166_splitncnn_1 166_splitncnn_2
Convolution Conv_37 1 1 166_splitncnn_2 167 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=9216
Swish Mul_39 1 1 167 169
Convolution Conv_40 1 1 169 170 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=9216
Swish Mul_42 1 1 170 172
BinaryOp Add_43 2 1 166_splitncnn_1 172 173 0=0
Concat Concat_44 4 1 158 159_splitncnn_0 166_splitncnn_0 173 174 0=0
Convolution Conv_45 1 1 174 175 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=8192
Swish Mul_47 1 1 175 177
Split splitncnn_7 1 2 177 177_splitncnn_0 177_splitncnn_1
Convolution Conv_48 1 1 177_splitncnn_1 178 0=128 1=3 11=3 2=1 12=1 3=2 13=2 4=1 14=1 15=1 16=1 5=1 6=73728
Swish Mul_50 1 1 178 180
Convolution Conv_51 1 1 180 181 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=16384
Swish Mul_53 1 1 181 183
Slice Split_55 2 2 183 184_splitncnn_2 185 186 -23300=2,-233,-233 1=0
Split splitncnn_8 1 3 186 186_splitncnn_0 186_splitncnn_1 186_splitncnn_2
Convolution Conv_56 1 1 186_splitncnn_2 187 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_58 1 1 187 189
Convolution Conv_59 1 1 189 190 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_61 1 1 190 192
BinaryOp Add_62 2 1 186_splitncnn_1 192 193 0=0
Split splitncnn_9 1 3 193 193_splitncnn_0 193_splitncnn_1 193_splitncnn_2
Convolution Conv_63 1 1 193_splitncnn_2 194 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_65 1 1 194 196
Convolution Conv_66 1 1 196 197 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_68 1 1 197 199
BinaryOp Add_69 2 1 193_splitncnn_1 199 200 0=0
Concat Concat_70 4 1 185 186_splitncnn_0 193_splitncnn_0 200 201 0=0
Convolution Conv_71 1 1 201 202 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=32768
Swish Mul_73 1 1 202 204
Split splitncnn_10 1 2 204 204_splitncnn_0 204_splitncnn_1
Convolution Conv_74 1 1 204_splitncnn_1 205 0=256 1=3 11=3 2=1 12=1 3=2 13=2 4=1 14=1 15=1 16=1 5=1 6=294912
Swish Mul_76 1 1 205 207
Convolution Conv_77 1 1 207 208 0=256 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=65536
Swish Mul_79 1 1 208 210
Slice Split_81 2 2 210 211_splitncnn_1 212 213 -23300=2,-233,-233 1=0
Split splitncnn_11 1 3 213 213_splitncnn_0 213_splitncnn_1 213_splitncnn_2
Convolution Conv_82 1 1 213_splitncnn_2 214 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=147456
Swish Mul_84 1 1 214 216
Convolution Conv_85 1 1 216 217 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=147456
Swish Mul_87 1 1 217 219
BinaryOp Add_88 2 1 213_splitncnn_1 219 220 0=0
Concat Concat_89 3 1 212 213_splitncnn_0 220 221 0=0
Convolution Conv_90 1 1 221 222 0=256 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=98304
Swish Mul_92 1 1 222 224
Convolution Conv_93 1 1 224 225 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=32768
Swish Mul_95 1 1 225 227
Split splitncnn_12 1 2 227 227_splitncnn_0 227_splitncnn_1
Pooling MaxPool_96 1 1 227_splitncnn_1 228 0=0 1=5 11=5 2=1 12=1 3=2 13=2 14=2 15=2 5=1
Split splitncnn_13 1 2 228 228_splitncnn_0 228_splitncnn_1
Pooling MaxPool_97 1 1 228_splitncnn_1 229 0=0 1=5 11=5 2=1 12=1 3=2 13=2 14=2 15=2 5=1
Split splitncnn_14 1 2 229 229_splitncnn_0 229_splitncnn_1
Pooling MaxPool_98 1 1 229_splitncnn_1 230 0=0 1=5 11=5 2=1 12=1 3=2 13=2 14=2 15=2 5=1
Concat Concat_99 4 1 227_splitncnn_0 228_splitncnn_0 229_splitncnn_0 230 231 0=0
Convolution Conv_100 1 1 231 232 0=256 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=131072
Swish Mul_102 1 1 232 234
Split splitncnn_15 1 2 234 234_splitncnn_0 234_splitncnn_1
Interp Resize_103 1 1 234_splitncnn_1 239 0=1 1=2.000000e+00 2=2.000000e+00 3=0 4=0 6=0
Concat Concat_104 2 1 239 204_splitncnn_0 240 0=0
Convolution Conv_105 1 1 240 241 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=49152
Swish Mul_107 1 1 241 243
Slice Split_109 2 2 243 184_splitncnn_1 245 246 -23300=2,-233,-233 1=0
Split splitncnn_16 1 2 246 246_splitncnn_0 246_splitncnn_1
Convolution Conv_110 1 1 246_splitncnn_1 247 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_112 1 1 247 249
Convolution Conv_113 1 1 249 250 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_115 1 1 250 252
Concat Concat_116 3 1 245 246_splitncnn_0 252 253 0=0
Convolution Conv_117 1 1 253 254 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=24576
Swish Mul_119 1 1 254 256
Split splitncnn_17 1 2 256 256_splitncnn_0 256_splitncnn_1
Interp Resize_120 1 1 256_splitncnn_1 261 0=1 1=2.000000e+00 2=2.000000e+00 3=0 4=0 6=0
Concat Concat_121 2 1 261 177_splitncnn_0 262 0=0
Convolution Conv_122 1 1 262 263 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=12288
Swish Mul_124 1 1 263 265
Slice Split_126 2 2 265 157_splitncnn_0 267 268 -23300=2,-233,-233 1=0
Split splitncnn_18 1 2 268 268_splitncnn_0 268_splitncnn_1
Convolution Conv_127 1 1 268_splitncnn_1 269 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=9216
Swish Mul_129 1 1 269 271
Convolution Conv_130 1 1 271 272 0=32 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=9216
Swish Mul_132 1 1 272 274
Concat Concat_133 3 1 267 268_splitncnn_0 274 275 0=0
Convolution Conv_134 1 1 275 276 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=6144
Swish Mul_136 1 1 276 278
Split splitncnn_19 1 3 278 278_splitncnn_0 278_splitncnn_1 278_splitncnn_2
Convolution Conv_137 1 1 278_splitncnn_2 279 0=64 1=3 11=3 2=1 12=1 3=2 13=2 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_139 1 1 279 281
Concat Concat_140 2 1 281 256_splitncnn_0 282 0=0
Convolution Conv_141 1 1 282 283 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=24576
Swish Mul_143 1 1 283 285
Slice Split_145 2 2 285 184_splitncnn_0 287 288 -23300=2,-233,-233 1=0
Split splitncnn_20 1 2 288 288_splitncnn_0 288_splitncnn_1
Convolution Conv_146 1 1 288_splitncnn_1 289 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_148 1 1 289 291
Convolution Conv_149 1 1 291 292 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_151 1 1 292 294
Concat Concat_152 3 1 287 288_splitncnn_0 294 295 0=0
Convolution Conv_153 1 1 295 296 0=128 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=24576
Swish Mul_155 1 1 296 298
Split splitncnn_21 1 3 298 298_splitncnn_0 298_splitncnn_1 298_splitncnn_2
Convolution Conv_156 1 1 298_splitncnn_2 299 0=128 1=3 11=3 2=1 12=1 3=2 13=2 4=1 14=1 15=1 16=1 5=1 6=147456
Swish Mul_158 1 1 299 301
Concat Concat_159 2 1 301 234_splitncnn_0 302 0=0
Convolution Conv_160 1 1 302 303 0=256 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=98304
Swish Mul_162 1 1 303 305
Slice Split_164 2 2 305 211_splitncnn_0 307 308 -23300=2,-233,-233 1=0
Split splitncnn_22 1 2 308 308_splitncnn_0 308_splitncnn_1
Convolution Conv_165 1 1 308_splitncnn_1 309 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=147456
Swish Mul_167 1 1 309 311
Convolution Conv_168 1 1 311 312 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=147456
Swish Mul_170 1 1 312 314
Concat Concat_171 3 1 307 308_splitncnn_0 314 315 0=0
Convolution Conv_172 1 1 315 316 0=256 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=98304
Swish Mul_174 1 1 316 318
Split splitncnn_23 1 2 318 318_splitncnn_0 318_splitncnn_1
Convolution Conv_178 1 1 278_splitncnn_1 322 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_180 1 1 322 324
Convolution Conv_181 1 1 324 325 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_183 1 1 325 327
Convolution Conv_184 1 1 327 328 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096
Convolution Conv_185 1 1 278_splitncnn_0 329 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_187 1 1 329 331
Convolution Conv_188 1 1 331 332 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_190 1 1 332 334
Convolution Conv_191 1 1 334 335 0=3 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=192
Concat Concat_192 2 1 328 335 336 0=0
Convolution Conv_193 1 1 298_splitncnn_1 337 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=73728
Swish Mul_195 1 1 337 339
Convolution Conv_196 1 1 339 340 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_198 1 1 340 342
Convolution Conv_199 1 1 342 343 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096
Convolution Conv_200 1 1 298_splitncnn_0 344 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=73728
Swish Mul_202 1 1 344 346
Convolution Conv_203 1 1 346 347 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_205 1 1 347 349
Convolution Conv_206 1 1 349 350 0=3 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=192
Concat Concat_207 2 1 343 350 351 0=0
Convolution Conv_208 1 1 318_splitncnn_1 352 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=147456
Swish Mul_210 1 1 352 354
Convolution Conv_211 1 1 354 355 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_213 1 1 355 357
Convolution Conv_214 1 1 357 358 0=64 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=4096
Convolution Conv_215 1 1 318_splitncnn_0 359 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=147456
Swish Mul_217 1 1 359 361
Convolution Conv_218 1 1 361 362 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=36864
Swish Mul_220 1 1 362 364
Convolution Conv_221 1 1 364 365 0=3 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=192
Concat Concat_222 2 1 358 365 366 0=0
Reshape Reshape_226 1 1 336 376 0=-1 1=67
Reshape Reshape_230 1 1 351 386 0=-1 1=67
Reshape Reshape_234 1 1 366 396 0=-1 1=67
Concat Concat_235 3 1 376 386 396 397 0=1
Slice Split_237 2 2 397 398 399 400 -23300=2,-233,-233 1=0
Reshape Reshape_249 1 1 399 418 0=8400 1=16 2=4
Permute Transpose_250 1 1 418 419 0=2
Softmax Softmax_251 1 1 419 420 0=0 1=1
Convolution Conv_252 1 1 420 421 0=1 1=1 11=1 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=0 6=16
Reshape Reshape_258 1 1 421 430 0=8400 1=4
Split splitncnn_24 1 2 430 430_splitncnn_0 430_splitncnn_1
Crop Slice_269 1 1 430_splitncnn_1 441 -23309=1,0 -23310=1,2 -23311=1,0
Crop Slice_272 1 1 430_splitncnn_0 444 -23309=1,2 -23310=1,4 -23311=1,0
BinaryOp Sub_274 2 1 445_splitncnn_1 441 446 0=1
Split splitncnn_25 1 2 446 446_splitncnn_0 446_splitncnn_1
BinaryOp Add_276 2 1 445_splitncnn_0 444 448 0=0
Split splitncnn_26 1 2 448 448_splitncnn_0 448_splitncnn_1
BinaryOp Add_277 2 1 446_splitncnn_1 448_splitncnn_1 449 0=0
BinaryOp Div_278 1 1 449 452 0=3 1=1 2=2.000000e+00
BinaryOp Sub_279 2 1 448_splitncnn_0 446_splitncnn_0 453 0=1
Concat Concat_280 2 1 452 453 454 0=0
BinaryOp Mul_282 2 1 454 455 456 0=2
Sigmoid Sigmoid_283 1 1 400 457
Concat Concat_284 2 1 456 457 output 0=0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.