Giter VIP home page Giter VIP logo

gumpest / yolov5-multibackbone-compression Goto Github PK

View Code? Open in Web Editor NEW
968.0 11.0 199.0 2.83 MB

YOLOv5 Series Multi-backbone(TPH-YOLOv5, Ghostnet, ShuffleNetv2, Mobilenetv3Small, EfficientNetLite, PP-LCNet, SwinTransformer YOLO), Module(CBAM, DCN), Pruning (EagleEye, Network Slimming), Quantization (MQBench) and Deployment (TensorRT, ncnn) Compression Tool Box.

Shell 1.86% Python 95.24% Dockerfile 0.17% C++ 2.73%
tph-yolov5 ghostnet-yolov5 shufflenetv2-yolov5 mobilenetv3small-yolov5 efficientnetlite-yolov5 eagleeye mqbench pplcnet swin-transformer network-slimming

yolov5-multibackbone-compression's Introduction

YOLOv5-Compression

2021.10.30 复现TPH-YOLOv5

2021.10.31 完成替换backbone为Ghostnet

2021.11.02 完成替换backbone为Shufflenetv2

2021.11.05 完成替换backbone为Mobilenetv3Small

2021.11.10 完成EagleEye对YOLOv5系列剪枝支持

2021.11.14 完成MQBench对YOLOv5系列量化支持

2021.11.16 完成替换backbone为EfficientNetLite-0

2021.11.26 完成替换backbone为PP-LCNet-1x

2021.12.12 完成SwinTrans-YOLOv5(C3STR)

2021.12.15 完成Slimming对YOLOv5系列剪枝支持

Requirements

pip install -r requirements.txt

Multi-Backbone Substitution for YOLOs

1、Base Model

Train on Visdrone DataSet (Input size is 608)

No. Model mAP mAP@50 Parameters(M) GFLOPs
1 YOLOv5n 13.0 26.20 1.78 4.2
2 YOLOv5s 18.4 34.00 7.05 15.9
3 YOLOv5m 21.6 37.80 20.91 48.2
4 YOLOv5l 23.2 39.70 46.19 108.1
5 YOLOv5x 24.3 40.80 86.28 204.4

2、Higher Precision Model

A、TPH-YOLOv5

Train on Visdrone DataSet (6-7 size is 640,8 size is 1536)

No. Model mAP mAP@50 Parameters(M) GFLOPs
6 YOLOv5xP2 30.0 49.29 90.96 314.2
7 YOLOv5xP2 CBAM 30.1 49.40 91.31 315.1
8 YOLOv5x-TPH 40.7 63.00 112.97 270.8
Usage:
nohup python train.py --data VisDrone.yaml --weights yolov5n.pt --cfg models/yolov5n.yaml --epochs 300 --batch-size 8 --img 608 --device 0,1 --sync-bn >> yolov5n.txt &
Composition:

P2 Head、CBAM、TPH、BiFPN、SPP

TPH-YOLOv5

1、TransBlock的数量会根据YOLO规模的不同而改变,标准结构作用于YOLOv5m

2、当YOLOv5x为主体与标准结构的区别是:(1)首先去掉14和19的CBAM模块(2)降低与P2关联的通道数(128)(3)在输出头之前会添加SPP模块,注意SPP的kernel随着P的像素减小而减小(4)在CBAM之后进行输出(5)只保留backbone以及最后一层输出的TransBlock(6)采用BiFPN作为neck

3、更改不同Loss分支的权重:如下图,当训练集的分类与置信度损失还在下降时,验证集的分类与置信度损失开始反弹,说明出现了过拟合,需要降低这两个任务的权重

消融实验如下:

box cls obj acc
0.05 0.5 1.0 37.90
0.05 0.3 0.7 38.00
0.05 0.2 0.4 37.5

loss

B、SwinTrans-YOLOv5

pip install timm
Usage:
python train.py --data VisDrone.yaml --weights yolov5x.pt --cfg models/accModels/yolov5xP2CBAM-Swin-BiFPN-SPP.yaml --hyp data/hyps/hyp.visdrone.yaml --epochs 60 --batch-size 4 --img 1536 --nohalf

(1)Window size由7替换为检测任务常用分辨率的公约数8

(2)create_mask封装为函数,由在init函数执行变为在forward函数执行

(3)若分辨率小于window size或不是其公倍数时,在其右侧和底部Padding

debug:在计算完之后需要反padding回去,否则与cv2支路的img_size无法对齐

(4)forward函数前后对输入输出reshape

(5)验证C3STR时,需要手动关闭默认模型在half精度下验证(--nohalf

3、Slighter Model

Train on Visdrone DataSet (1 size is 608,2-6 size is 640)

No Model mAP mAP@50 Parameters(M) GFLOPs TrainCost(h) Memory Cost(G) PT File FPS@CPU
1 YOLOv5l 23.2 39.7 46.19 108.1
2 YOLOv5l-GhostNet 18.4 33.8 24.27 42.4 27.44 4.97 PekingUni Cloud
3 YOLOv5l-ShuffleNetV2 16.48 31.1 21.27 40.5 10.98 2.41 PekingUni Cloud
4 YOLOv5l-MobileNetv3Small 16.55 31.2 20.38 38.4 10.19 5.30 PekingUni Cloud
5 YOLOv5l-EfficientNetLite0 19.12 35 23.01 43.9 13.94 2.04 PekingUni Cloud
6 YOLOv5l-PP-LCNet 17.63 32.8 21.64 41.7 18.52 1.66 PekingUni Cloud

A、GhostNet-YOLOv5

GhostNet

(1)为保持一致性,下采样的DW的kernel_size均等于3

(2)neck部分与head部分沿用YOLOv5l原结构

(3)中间通道人为设定(expand)

B、ShuffleNetV2-YOLOv5

Shffulenet

(1)Focus Layer不利于芯片部署,频繁的slice操作会让缓存占用严重

(2)避免多次使用C3 Leyer以及高通道的C3 Layer(违背G1与G3准则)

(3)中间通道不变

C、MobileNetv3Small-YOLOv5

Mobilenetv3s

(1)原文结构,部分使用Hard-Swish激活函数以及SE模块

(2)Neck与head部分嫁接YOLOv5l原结构

(3)中间通道人为设定(expand)

D、EfficientNetLite0-YOLOv5

efficientlite

(1)使用Lite0结构,且不使用SE模块

(2)针对dropout_connect_rate,手动赋值(随着idx_stage变大而变大)

(3)中间通道一律*6(expand)

E、PP-LCNet-YOLOv5

PP-LCNet

(1)使用PP-LCNet-1x结构,在网络末端使用SE以及5*5卷积核

(2)SeBlock压缩维度为原1/16

(3)中间通道不变

Pruning for YOLOs

Model mAP mAP@50 Parameters(M) GFLOPs FPS@CPU
YOLOv5s 18.4 34 7.05 15.9
YOLOv5n 13 26.2 1.78 4.2
[email protected] 14.3 27.9 4.59 9.6

1、Prune Strategy

(1)基于YOLOv5块状结构设计,对Conv、C3、SPP(F)模块进行剪枝,具体来说有以下:

  • Conv模块的输出通道数
  • C3模块中cv2块和cv3块的输出通道数
  • C3模块中若干个bottleneck中的cv1块的输出通道数

(2)八倍通道剪枝(outchannel = 8*n)

(3)ShortCut、concat皆合并剪枝

2、Prune Tools

(1)EagleEye

EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning

基于搜索的通道剪枝方法,核心**是随机搜索到大量符合目标约束的子网,然后快速更新校准BN层的均值与方差参数,并在验证集上测试校准后全部子网的精度。精度最高的子网拥有最好的架构,经微调恢复后能达到较高的精度。

eagleeye

Usage
  1. 正常训练模型
python train.py --data data/VisDrone.yaml --imgsz 640 --weights yolov5s.pt --cfg models/prunModels/yolov5s-pruning.yaml --device 0

(注意训练其他模型,参考/prunModels/yolov5s-pruning.yaml进行修改,目前已支持v6架构)

  1. 搜索最优子网
python pruneEagleEye.py --weights path_to_trained_yolov5_model --cfg models/prunModels/yolov5s-pruning.yaml --data data/VisDrone.yaml --path path_to_pruned_yolov5_yaml --max_iter maximum number of arch search --remain_ratio the whole FLOPs remain ratio --delta 0.02
  1. 微调恢复精度
python train.py --data data/VisDrone.yaml --imgsz 640 --weights path_to_Eaglepruned_yolov5_model --cfg path_to_pruned_yolov5_yaml --device 0

(2)Network Slimming

Learning Efficient Convolutional Networks through Network Slimming

Usage
  1. 模型BatchNorm Layer \gamma 稀疏化训练
python train.py --data data/VisDrone.yaml --imgsz 640 --weights yolov5s.pt --cfg models/prunModels/yolov5s-pruning.yaml --device 0 --sparse

(注意训练其他模型,参考/prunModels/yolov5s-pruning.yaml进行修改,目前已支持v6架构)

  1. BatchNorm Layer剪枝
python pruneSlim.py --weights path_to_sparsed_yolov5_model --cfg models/prunModels/yolov5s-pruning.yaml --data data/VisDrone.yaml --path path_to_pruned_yolov5_yaml --global_percent 0.6 --device 3
  1. 微调恢复精度
python train.py --data data/VisDrone.yaml --imgsz 640 --weights path_to_Slimpruned_yolov5_model --cfg path_to_pruned_yolov5_yaml --device 0

Quantize Aware Training for YOLOs

MQBench是实际硬件部署下评估量化算法的框架,进行各种适合于硬件部署的量化训练(QAT)

Requirements

  • PyTorch == 1.8.1

Install MQBench Lib

由于MQBench目前还在不断更新,选择0.0.2稳定版本作为本仓库的量化库。

git clone https://github.com/ZLkanyo009/MQBench.git
cd MQBench
python setup.py build
python setup.py install

Usage

训练脚本实例:

python train.py --data VisDrone.yaml --weights yolov5n.pt --cfg models/yolov5n.yaml --epochs 300 --batch-size 8 --img 608 --nosave --device 0,1 --sync-bn --quantize --BackendType NNIE

Deploy

目前已支持TensorRT及NCNN部署,详见YOLOv5-Multibackbone-Compression/deploy

To do

  • Multibackbone: MobileNetV3-small
  • Multibackbone: ShuffleNetV2
  • Multibackbone: GhostNet
  • Multibackbone: EfficientNet-Lite0
  • Multibackbone: PP-LCNet
  • Multibackbone: TPH-YOLOv5
  • Module: SwinTrans(C3STR)
  • Module: Deformable Convolution
  • Pruner: Network Slimming
  • Pruner: EagleEye
  • Pruner: OneShot (L1, L2, FPGM), ADMM, NetAdapt, Gradual, End2End
  • Quantization: MQBench
  • Knowledge Distillation

Acknowledge

感谢TPH-YOLOv5作者Xingkui Zhu

官方实现cv516Buaa/tph-yolov5 (github.com)

感谢ZJU-lishuang/yolov5_prune: yolov5剪枝,支持v2,v3,v4,v6版本的yolov5 (github.com)

yolov5-multibackbone-compression's People

Contributors

cydia2018 avatar gumpest avatar lingffff avatar zlkanyo009 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  avatar  avatar  avatar  avatar  avatar

yolov5-multibackbone-compression's Issues

Transformer模块问题

您好,我想问一下在common.py下的C3TR、TransformerBlock和TransformerLayer类是简化了吗?我在您的debug.py看到了您注释一个Transformer模块,两者之间好像不一样

如何与swin结合

您好,想请问一下您,如果使用swin transfomer的网络作为检测的主干特征提取网络,您认为会优于目前大部分的主干设计吗?

剪枝后通过tensorrt转engine,精度下降明显

yolov5通过作者介绍的方法和代码,进行剪枝后,精度下降在百分之一个点左右,这是可以接受的,效果还可以,转成onnx后,也略有下降,勉强还可以使用,偶尔有误检。再将onnx转成tensorrt的engine,召回率下降更明显,基本不可用了。
请教,剪枝是导致这个的根本原因吗?

输入图片大小

您好,请问您base model输入图片大小和Higher Precision Model输入图片大小不一样,没有用到控制变量法,这在我们后续写论文中可以这样做嘛

yolov5mTPH_std运行错误

Traceback (most recent call last):
File "/wangjun/TPH_yolo/train.py", line 655, in
main(opt)
File "/wangjun/TPH_yolo/train.py", line 552, in main
train(opt.hyp, opt, device, callbacks)
File "/wangjun/TPH_yolo/train.py", line 132, in train
model = Model(cfg, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create
File "/wangjun/TPH_yolo/models/yolo.py", line 103, in init
self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch], pruning=pruning) # model, savelist
File "/wangjun/TPH_yolo/models/yolo.py", line 305, in parse_model
m_ = nn.Sequential(*[m(*args) for _ in range(n)]) if n > 1 else m(*args) # module
File "/wangjun/TPH_yolo/models/common.py", line 429, in init
super().init(c1, c2, n, shortcut, g, e)
File "/wangjun/TPH_yolo/models/common.py", line 416, in init
self.cv1 = Conv(c1, c1_, 1, 1)
File "/wangjun/TPH_yolo/models/common.py", line 325, in init
self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False)
File "/root/anaconda3/envs/tph/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 410, in init
super(Conv2d, self).init(
File "/root/anaconda3/envs/tph/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 83, in init
self.reset_parameters()
File "/root/anaconda3/envs/tph/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 86, in reset_parameters
init.kaiming_uniform_(self.weight, a=math.sqrt(5))
File "/root/anaconda3/envs/tph/lib/python3.8/site-packages/torch/nn/init.py", line 379, in kaiming_uniform_
fan = _calculate_correct_fan(tensor, mode)
File "/root/anaconda3/envs/tph/lib/python3.8/site-packages/torch/nn/init.py", line 348, in _calculate_correct_fan
fan_in, fan_out = _calculate_fan_in_and_fan_out(tensor)
File "/root/anaconda3/envs/tph/lib/python3.8/site-packages/torch/nn/init.py", line 280, in _calculate_fan_in_and_fan_out
receptive_field_size = tensor[0][0].numel()
IndexError: index 0 is out of bounds for dimension 0 with size 0

您好,大佬,训练自己的数据集该如何进行调参呢?

您好,大佬,我现在非常困惑该如何进行调参,有没有调参的经验或者指南可以借鉴下?
我看一篇论文训练DIOR数据集9个类别,能达到0.807的mAP,而我使用默认的hyps.scratch.yaml才只达到了0.745的mAP.
image
image
对于 桥 这种我觉得很长很大的目标反而最终的mAP不太高。
image

EagleEye搜索最优子网不是很清楚

EagleEye搜索最优子网不是很清楚,可以分享一下经验吗?我迁移到其他模块不能运行,比如MobileNetv2,MobileNetv3等模型,希望你能指导,非常感谢。

Code related issues

Hello author, if you run standard models such as yolov5m with your code, will the effect be exactly the same as running yolov5m with the official code? Or does your code have other optimizations besides the model structure?

太强了!!!!!

太强了!!!!!太强了!!!!!太强了!!!!!太强了!!!!!太强了!!!!!太强了!!!!!

TPH-YOLOV5的训练结果

您好,请问为什么我使用yolov5x-TPH训练小目标数据集的最终map只有95.5,而使用yolov5x训练同样的数据集最终map有99,请问这是什么原因呢?

论文中提到的TPH的疑问

论文中提到
Based on YOLOv5, we only apply transformer encoder blocks in the head part to form Transformer Prediction Head (TPH) and the end of backbone.

但是我看TPH更多是用在了neck层上面,backbones上面增加了一个,而head上面是没有增加TPH。head层上面改变更多的是增加了一个头。

不知道我理解的是否有问题。
谢谢了

在update_yaml中的疑惑

image

image
您好,请问在获取SPPF中的e参数时,为什么要在name等于cv1时乘以0.5,再除以cv2的输出通道c2呢?
而不是以下这种呢?
image

数据集问题

AssertionError: train: No labels in /home/xxx/xxx/xxx/VisDrone2019-DET/VisDrone2019-DET-train/labels.cache.

From YOLOv5TPH, export to ONNX/pb failed.

Thanks a lot for this awesome repos.
It seems that export.py is the same as ultralytics's yolov5 repo, which is suitable for standard yolov5 models.
However, when exporting TPH model to ONNX or pb, it cannot work. The error msg of ONNX is too long and no useful info, but the pb convertor just gave us a simple message,
TensorFlow saved_model: export failure: name 'C3TR' is not defined
Seem to be a custom layer/module issue.
Any plan to add onnx/pb convert support for yolov5TPH? Thanks you!

谢谢!这是一个极好的项目。
我观察到export.py和ultralytics的yolov5代码仓库里的一致,而这个export.py适用于标准的yolov5模型。
不过,试图将TPH模型转为ONNX或pb时,这个export脚本不能工作。关于ONNX转换的错误信息很长,而且没有有用的信息,但是转换为pb时弹出一条简单的错误信息:TensorFlow saved_model: export failure: name 'C3TR' is not defined
似乎是自定义层的问题。
不知作者有无任何计划添加关于TPH模型转换到onnx的支持呢?谢谢!

CBAM注意力模块问题

您好,我想问一下,在加了第四层预测头部之后,您是在head的前三个C3之后增加了CBAM模块,但是为什么在预测的时候我们的预测输出是C3之后就进行预测了呢,不应该在CBAM模块之后进行预测吗? [[23, 27, 31, 35], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)``,是不是 应该改为 [[24, 28, 32, 35], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5),

mqbench

您好,请问train.py的68-70行调用了mqbench这个文件,工程中好像不存在呀。
方便加个微信吗 17802595956 目前在做这方面的研究,希望向您学习一下。

yolov5-TPH运行错误

您好,我运行yolov5n,s,m,l都没问题,但是运行yolov5x-TPH,yolov5m-TPH-std,yolov5x时出现错误如下:
File "/wangjun/TPH_yolo/train.py", line 656, in
main(opt)
File "/wangjun/TPH_yolo/train.py", line 553, in main
train(opt.hyp, opt, device, callbacks)
File "/wangjun/TPH_yolo/train.py", line 132, in train
model = Model(cfg, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create
File "/wangjun/TPH_yolo/models/yolo.py", line 103, in init
self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch], pruning=pruning) # model, savelist
File "/wangjun/TPH_yolo/models/yolo.py", line 305, in parse_model
m_ = nn.Sequential(*[m(args) for _ in range(n)]) if n > 1 else m(args) # module
File "/wangjun/TPH_yolo/models/common.py", line 419, in init
self.m = nn.Sequential(
[Bottleneck(c1_, c1_, shortcut, g, e=rate[i]) for i in range(n)])
File "/wangjun/TPH_yolo/models/common.py", line 419, in
self.m = nn.Sequential(
[Bottleneck(c1_, c1_, shortcut, g, e=rate[i]) for i in range(n)])
IndexError: list index out of range

yolov5lEfficientLite出错

运行EfficientLite 时出错 错误信息:
Traceback (most recent call last):
File "E://YOLOv5-Multibackbone-Compression-main/train.py", line 656, in
main(opt)
File "E:/YOLOv5-Multibackbone-Compression-main/train.py", line 553, in main
train(opt.hyp, opt, device, callbacks)
File "E:/cYOLOv5-Multibackbone-Compression-main/train.py", line 125, in train
model = Model(cfg or ckpt['model'].yaml, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create
File "E:\YOLOv5-Multibackbone-Compression-main\models\yolo.py", line 103, in init
self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch], pruning=pruning) # model, savelist
File "E:\YOLOv5-Multibackbone-Compression-main\models\yolo.py", line 305, in parse_model
m_ = nn.Sequential(*[m(*args) for _ in range(n)]) if n > 1 else m(*args) # module
TypeError: init() missing 1 required positional argument: 'drop_connect_rate'

自定义网络剪枝问题请教

作者现有的剪枝,经过测试非常有效,现有对网络修改后,再运行剪枝失败,请指教:# parameters
nc: 1 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple

anchors

anchors:

  • [4,4, 5,5, 5,5] # P2/4
  • [5,5, 5,5, 6,6] # P3/8
  • [6,6, 7,7, 8,8] # P4/16
    #- [116,90, 156,198, 373,326] # P5/16
    #- 4,4, 5,5, 5,5, 5,5, 5,5, 6,6, 6,6, 7,7, 8,8

YOLOv5 backbone

backbone:

[from, number, module, args]

[from, number, module, args]

[ [ -1, 1, Conv, [ 64, 6, 2, 2, 1, True, 1.0 ] ], # 0-P1/2
[ -1, 1, Conv, [ 128, 3, 2, None, 1, True, 1.0 ] ], # 1-P2/4
[ -1, 3, C3, [ 128, True, 1, [ 0.5, 0.5 ], [ 1.0, 1.0, 1.0 ], 1.0 ] ],
[ -1, 1, Conv, [ 256, 3, 2, None, 1, True, 1.0 ] ], # 3-P3/8
[ -1, 6, C3, [ 256, True, 1, [ 0.5, 0.5 ], [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], 1.0 ] ],
[ -1, 1, Conv, [ 512, 3, 2, None, 1, True, 1.0 ] ], # 5-P4/16
[ -1, 9, C3, [ 512, True, 1, [ 0.5, 0.5 ], [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], 1.0 ] ],

[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 去掉32倍特征图输出

[ -1, 3, C3, [ 512, True, 1, [ 0.5, 0.5 ], [ 1.0, 1.0, 1.0 ], 1.0 ] ],
[ -1, 1, SPPF, [ 512, 5, 0.5 ] ],  # 9

]

YOLOv5 v6.0 head

head:
[[-1, 1, Conv, [512, 1, 1, None, 1, True, 1.0]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, C3, [512, False, 1, [0.5, 0.5], [1.0, 1.0, 1.0], 1.0]], # 17 (P3/8-small)

[ -1, 1, Conv, [256, 1, 1, None, 1, True, 1.0]],
[ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ],
[ [ -1, 2 ], 1, Concat, [ 1 ] ], # cat backbone P2 160*160
[ -1, 3, C3, [256, False, 1, [0.5, 0.5], [1.0, 1.0, 1.0], 1.0]], # 16 (P2/4-small)

[-1, 1, Conv, [256, 3, 2, None, 1, True, 1.0]],
[[-1, 13], 1, Concat, [1]], # cat head P2
[-1, 3, C3, [256, False, 1, [0.5, 0.5], [1.0, 1.0, 1.0], 1.0]], # 20 (P3/16-medium)

[-1, 1, Conv, [256, 3, 2, None, 1, True, 1.0]],
[[-1, 9], 1, Concat, [1]], # cat head P4
[-1, 3, C3, [512, False, 1, [0.5, 0.5], [1.0, 1.0, 1.0], 1.0]], # 22 (P4/16-large)

[[16, 19, 22], 1, Detect, [nc, anchors]], # Detect(P2, P3, P4)
]

模型改善

学长,会有efficientnetV2-yolov5的网络更新吗?我用FusedMBConv来替换Efficientlite-yolov5里的MBConv出现了下面的报错,您可以看看我该怎么做嘛?
TypeError:init() missing 7 required positional arguments: 'input_c', 'out_c', 'expand_ratio', 'stride', 'se_ratio', 'drop_rate', and 'norm_layer'
这7个参数是FusedMBConv输入的参数,然后在yaml文件里更改模型就出现了这种情况

您好,使用yolov5mTPH_Standard.yaml的显存溢出报错

参数设置,官方预训练模型,batchsize=2,图片大小608
监控了显卡显存是一直积累的。但是使用yolox等训练是没问题的。
大佬,能否看一下报错
autoanchor: Analyzing anchors... anchors/target = 5.85, Best Possible Recall (BPR) = 0.9984
Image sizes 608 train, 608 val
Using 2 dataloader workers
Logging results to runs/train/exp8
Starting training for 10 epochs...

Epoch gpu_mem box obj cls labels img_size
0%| | 0/1834 [00:00<?, ?it/s]

Traceback (most recent call last):
File "train.py", line 660, in
main(opt)
File "train.py", line 557, in main
train(opt.hyp, opt, device, callbacks)
File "train.py", line 360, in train
scaler.scale(loss).backward()
File "/root/miniconda3/lib/python3.8/site-packages/torch/tensor.py", line 221, in backward
torch.autograd.backward(self, gradient, retain_graph, create_graph)
File "/root/miniconda3/lib/python3.8/site-packages/torch/autograd/init.py", line 130, in backward
Variable._execution_engine.run_backward(
RuntimeError: CUDA out of memory. Tried to allocate 7.96 GiB (GPU 0; 44.56 GiB total capacity; 32.76 GiB already allocated; 6.46 GiB free; 36.71 GiB reserved in total by PyTorch)

超参数选择问题

大佬您好,请问hyp.visdrone.yaml里面的超参数是用yolov5的超参数进化来设置的吗?能否适用于其它网络模型?谢谢

使用yolov5xTPH,显存占用过大

runtimeerror:cuda out of memory.tried to allocate 198.75GiB

这个要用这样大的显存才能跑起来,我有4张v100 32G都不行,请问是什么原因。

预训练权重

您好,请问修改了网络结构之后(例如YOLOv5s-ghost),用原来的权重文件(例如yolov5s.pt)效果会不理想,这种情况该怎么办呀?非常感谢您能答复!

您好,使用SwimTransformer出错

from models.SwinTransformer import SwinTransformerLayer出错,
Traceback (most recent call last):
File "train.py", line 24, in
import test # import test.py to get mAP after each epoch
File "/content/drive/My Drive/yolov5-5.0/test.py", line 12, in
from models.experimental import attempt_load
File "/content/drive/My Drive/yolov5-5.0/models/experimental.py", line 7, in
from models.common import Conv, DWConv
File "/content/drive/My Drive/yolov5-5.0/models/common.py", line 20, in
from models.SwinTransformer import SwinTransformerLayer
File "/content/drive/My Drive/yolov5-5.0/models/SwinTransformer.py", line 9, in
from timm.models.layers import DropPath, to_2tuple, trunc_normal_
ModuleNotFoundError: No module named 'timm'
请问怎么解决呢?

指标测试问题

请问一下,你的表格中的指标是在几百张的val集上测的,还是一千多张的那个test-dev集上测的

大佬如果改动使用MBConvBlock的se模块呢 设置True,会报错

File "F:/999yolo/YOLOv5-Multibackbone-Compression-main/models/yolo.py", line 331, in
model = Model(opt.cfg).to(device)
File "F:/999yolo/YOLOv5-Multibackbone-Compression-main/models/yolo.py", line 112, in init
m.stride = torch.tensor([s / x.shape[-2] for x in self.forward(torch.zeros(1, ch, s, s))]) # forward
File "F:/999yolo/YOLOv5-Multibackbone-Compression-main/models/yolo.py", line 128, in forward
return self._forward_once(x, profile, visualize) # single-scale inference, train
File "F:/999yolo/YOLOv5-Multibackbone-Compression-main/models/yolo.py", line 152, in _forward_once
x = m(x) # run
File "D:\Anaconda3\envs\y55\lib\site-packages\torch\nn\modules\module.py", line 889, in _call_impl
result = self.forward(*input, **kwargs)
File "F:\999yolo\YOLOv5-Multibackbone-Compression-main\models\common.py", line 142, in forward
x_squeezed = nn.AdaptiveAvgPool2d(x, 1)
TypeError: init() takes 2 positional arguments but 3 were given

为什么不能使用更高的分辨率输入训练

默认训练的输入图片分辨率大小为608,当我采用1280he 1536训练时,都是CUDA out of memory,batch_size 我已经调到最低了,多GPU的batch_size=2,还是bu行,怎么回事啊

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.