位置: IT常识 - 正文

Yolov5/Yolov7加入Yolov8 c2f模块,涨点(yolov教程)

编辑:rootadmin
Yolov5/Yolov7加入Yolov8 c2f模块,涨点 1.Yolov8简介

推荐整理分享Yolov5/Yolov7加入Yolov8 c2f模块,涨点(yolov教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov4使用教程,yolov5讲解,yolov教程,yolov5搭建,yolov5怎么用,yolov1到yolov5,yolov5怎么用,yolov5怎么用,内容如对您有帮助,希望把文章链接给更多的朋友!

        Ultralytics YOLOv8 是由 Ultralytics 开发的一个前沿的 SOTA 模型。它在以前成功的 YOLO 版本基础上,引入了新的功能和改进,进一步提升了其性能和灵活性。YOLOv8 基于快速、准确和易于使用的设计理念,使其成为广泛的目标检测、图像分割和图像分类任务的绝佳选择。

下表为官方在 COCO Val 2017 数据集上测试的 mAP、参数量和 FLOPs 结果。可以看出 YOLOv8 相比 YOLOv5 精度提升非常多,但是 N/S/M 模型相应的参数量和 FLOPs 都增加了不少;

模型尺寸 (像素)mAPval 50-95推理速度 CPU ONNX (ms)推理速度 A100 TensorRT (ms)参数量 (M)FLOPs (B)YOLOv8n64037.380.40.993.28.7YOLOv8s64044.9128.41.2011.228.6YOLOv8m64050.2234.71.8325.978.9YOLOv8l64052.9375.22.3943.7165.2YOLOv8x64053.9479.13.5368.2257.81.1 Yolov8优化点:

      将 YOLOv5 的C3结构换成了梯度流更丰富的 C2f结构,并对不同尺度模型调整了不同的通道数

C3模块的结构图,然后再对比与C2f的具体的区别。针对C3模块,其主要是借助CSPNet提取分流的思想,同时结合残差结构的思想,设计了C3 Block,CSP主分支梯度模块为BottleNeck模块。同时堆叠的个数由参数n来进行控制,也就是说不同规模的模型,n的值是有变化的。

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)) Yolov5/Yolov7加入Yolov8 c2f模块,涨点(yolov教程)

C2f模块的结构图如下:

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

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))  2.涨点技巧:Yolov5加入C2F提升小目标检测精度2.1 Yolov5网络结构图2.2 加入C2f代码修改位置

1)将如下代码添加到common.py中:

class v8_C2fBottleneck(nn.Module): # Standard bottleneck def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5): # ch_in, ch_out, shortcut, groups, kernels, expand super().__init__() c_ = int(c2 * e) # hidden channels self.cv1 = Conv(c1, c_, k[0], 1) self.cv2 = Conv(c_, c2, k[1], 1, g=g) self.add = shortcut and c1 == c2 def forward(self, x): return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))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(v8_C2fBottleneck(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))

 2)在yolo.py中添加C2f(PS:快速搜索C3对应位置)

 2.3 修改配置文件yolov8s.yaml

1)加入backbone

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parametersnc: 80 # number of classesdepth_multiple: 0.33 # model depth multiplewidth_multiple: 0.50 # layer channel multipleanchors: - [10,13, 16,30, 33,23] # P3/8 - [30,61, 62,45, 59,119] # P4/16 - [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbonebackbone: # [from, number, 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]] ]# YOLOv5 v6.0 headhead: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, C3, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, C3, [256, False]], # 17 (P3/8-small) [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ]

改进后的网络图

2) 加入head

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parametersnc: 80 # number of classesdepth_multiple: 0.33 # model depth multiplewidth_multiple: 0.50 # layer channel multipleanchors: - [10,13, 16,30, 33,23] # P3/8 - [30,61, 62,45, 59,119] # P4/16 - [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbonebackbone: # [from, number, module, args] [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, C3, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 6, C3, [256]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 3, C3, [1024]], [-1, 1, SPPF, [1024, 5]], # 9 ]# YOLOv5 v6.0 headhead: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, C2f, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, C2f, [256, False]], # 17 (P3/8-small) [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C2f, [512, False]], # 20 (P4/16-medium) [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C2f, [1024, False]], # 23 (P5/32-large) [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ]3.总结

针对小目标等提升精度较显著

本文链接地址:https://www.jiuchutong.com/zhishi/288824.html 转载请保留说明!

上一篇:mapbox使用教程(mapbox wms)

下一篇:【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测(yolov5m)

  • IQOO如何关闭锁屏原子随身听(iQOO如何关闭锁屏壁纸的锁屏)

    IQOO如何关闭锁屏原子随身听(iQOO如何关闭锁屏壁纸的锁屏)

  • 苹果13mini怎么返回(iphone13如何设置返回键)

    苹果13mini怎么返回(iphone13如何设置返回键)

  • wps怎么做柱状图表(wps怎么做柱状图和折线图的合成图)

    wps怎么做柱状图表(wps怎么做柱状图和折线图的合成图)

  • 怎么设置电脑默认存储到D盘(怎么设置电脑默认输入法)

    怎么设置电脑默认存储到D盘(怎么设置电脑默认输入法)

  • 荣耀play3如何隐藏应用(荣耀play3如何隐藏应用软件)

    荣耀play3如何隐藏应用(荣耀play3如何隐藏应用软件)

  • 苹果全面屏怎么截屏(苹果全面屏怎么打开控制中心)

    苹果全面屏怎么截屏(苹果全面屏怎么打开控制中心)

  • 为什么安卓转移到ios连不上(为什么安卓转移数据后不显示)

    为什么安卓转移到ios连不上(为什么安卓转移数据后不显示)

  • 一个身份证可以注册几个拼多多店铺(一个身份证可以办几个手机卡)

    一个身份证可以注册几个拼多多店铺(一个身份证可以办几个手机卡)

  • 高通730g相当于骁龙多少(高通730g相当于什么处理器)

    高通730g相当于骁龙多少(高通730g相当于什么处理器)

  • 抖音音量大小怎么调(抖音音量大小怎么找到)

    抖音音量大小怎么调(抖音音量大小怎么找到)

  • 老人机收不到验证码吗(老人机收不到验证码怎么办?)

    老人机收不到验证码吗(老人机收不到验证码怎么办?)

  • 如何将爱奇艺视频保存到手机相册(如何将爱奇艺视频转为本地视频)

    如何将爱奇艺视频保存到手机相册(如何将爱奇艺视频转为本地视频)

  • 虚拟现实系统分为哪几类

    虚拟现实系统分为哪几类

  • iphonex怎么改闹钟铃声(iphonex怎么改闹钟的音乐)

    iphonex怎么改闹钟铃声(iphonex怎么改闹钟的音乐)

  • 小米9pro怎么隐藏刘海(小米9如何隐藏手机应用)

    小米9pro怎么隐藏刘海(小米9如何隐藏手机应用)

  • 微信加人显示操作频繁怎么办(微信加人显示操作频繁怎么申诉)

    微信加人显示操作频繁怎么办(微信加人显示操作频繁怎么申诉)

  • 魅族手机开不了机显示魅族标志(魅族手机开不了机怎么办一直黑屏)

    魅族手机开不了机显示魅族标志(魅族手机开不了机怎么办一直黑屏)

  • 已删除为什么还3天可见(删了之后为什么还有好友)

    已删除为什么还3天可见(删了之后为什么还有好友)

  • vivoy93按键怎么弄出来(vivoy93如何设置按键)

    vivoy93按键怎么弄出来(vivoy93如何设置按键)

  • QQ音乐绿钻有什么用(qq音乐绿钻有什么好处)

    QQ音乐绿钻有什么用(qq音乐绿钻有什么好处)

  • u盘删除不了文件(u盘删除不了文件写有保护)

    u盘删除不了文件(u盘删除不了文件写有保护)

  • js字符串转换为对象格式的3种方法(js字符串转换为数字类型)

    js字符串转换为对象格式的3种方法(js字符串转换为数字类型)

  • 20 多个好用的 Vue 组件库(推荐几个比较好用的)

    20 多个好用的 Vue 组件库(推荐几个比较好用的)

  • 如何为WordPress添加动态侧边栏(如何用wordpress)

    如何为WordPress添加动态侧边栏(如何用wordpress)

  • 计提应交个人所得税分录怎么做
  • 出租房屋转为投资房屋
  • 进项认证以后如何开具红字信息表
  • 异常凭证进项税额转出
  • 用友财务软件怎么设置二级科目
  • 小规模免税销售额是含税还是不含税
  • 技术转让成本包括什么
  • 以房抵顶工程款有效吗
  • 无营业执照是否可以先办场所码
  • 土地转让收入怎么交所得税?
  • 小微企业企业所得税怎么征收2023
  • 货物抵扣如何入账
  • 广告费发票的税率
  • 提供物业管理服务的纳税人如何认定
  • 药用植物所
  • 报个税系统叫啥
  • 维修税控设备分录
  • 没进项发票要交多少税
  • 应付股利会计分录例题
  • 企业增值税征收时间
  • 固定资产进项发票
  • 怎么删除win10开机多余选项
  • 盈余 盈利
  • php的缓存文件是什么格式
  • 注册造价师挂靠费怎么缴纳个税
  • 财政返还土地奖金的规定
  • 资产负债表日后期间是指
  • 存货成本在哪个表里
  • 高新企业技术服务成本核算
  • 报废汽车残值收入如何计税
  • vue2 vue-router 不显示页面问题
  • php模板教程
  • 办公用品属于会计科目中的什么
  • thinkphp+vue
  • 其他综合收益的借贷方向
  • webform前端
  • php多文件上传代码
  • uni-app ——使用uploadFile上传多张图片
  • 真实世界人工智能
  • chatteing
  • 用pullout造句
  • 提取公益金会计怎么做账
  • 国家对国有企业采取的政策是怎样的
  • 金融企业往来支出属于费用吗
  • python解释器的多种使用
  • mongodb聚合函数mapreduce
  • 债券回售手续费是多少
  • 应收款需要平行公司吗
  • 收到生育津贴入什么科目
  • 企业未分配利润长期不分配
  • 税务实名认证是法人还是办税人
  • mysql如何开启
  • 辞退补偿金的标准
  • 小规模购进商品怎么做账
  • 公司注销应付款如何办理
  • 职工教育经费超过扣除限额的时候调增还是调减
  • 进项转出的原因是什么
  • 小企业核算方式选独立核算
  • 收到免税发票会计分录
  • 收到保险公司保险费会计分录
  • 企业采用公允价值进行会计核算,所体现的会计质量要求
  • 记账凭证是什么填制的?A.由经办人
  • 一些有用的sql语句是什么
  • mysql 注入漏洞
  • win7系统默认输入法
  • ubuntu系统管理
  • java调用so库文件
  • xp光盘安装教程
  • 拖放文件到此处来添加文件是什么意思
  • os x10.11el capitan公测版下载地址(公测版计划注册教程)
  • redhat linux enterprise 5 输入ifconfig无效的解决方法
  • win8能装pr2017吗
  • 游戏开发unity3d
  • javascript基于
  • js 字符编码
  • 在centos上安装pycharm
  • javascript学习指南
  • linux jhat
  • 广东增值税电子普通发票图片
  • 梨树烧烤一条街打人
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设