位置: 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)

  • 淘宝一般默认几天自动收货(淘宝一般默认几天自动付款)

    淘宝一般默认几天自动收货(淘宝一般默认几天自动付款)

  • ipad如何截图(平板ipad如何截图)

    ipad如何截图(平板ipad如何截图)

  • ipad购买日期未验证是什么意思(ipad购买日期未验证手机里却显示了保修时间)

    ipad购买日期未验证是什么意思(ipad购买日期未验证手机里却显示了保修时间)

  • ai原地复制快捷键(ai怎么原地复制图案)

    ai原地复制快捷键(ai怎么原地复制图案)

  • 苹果xsmax电量显示百分比在哪里找(苹果xsmax电量显示颜色怎么调)

    苹果xsmax电量显示百分比在哪里找(苹果xsmax电量显示颜色怎么调)

  • 在开始选项卡的哪个组中可以设置条件格式(在开始选项卡的字体工具栏中u表示的含义是)

    在开始选项卡的哪个组中可以设置条件格式(在开始选项卡的字体工具栏中u表示的含义是)

  • 通话音量怎么关掉(通话音量怎么关掉oppo)

    通话音量怎么关掉(通话音量怎么关掉oppo)

  • 淘宝店铺关闭后重开还是原来的等级吗(淘宝店铺关闭后怎么重新开店)

    淘宝店铺关闭后重开还是原来的等级吗(淘宝店铺关闭后怎么重新开店)

  • 天猫保价15天规则(天猫保价15天是从哪天算起)

    天猫保价15天规则(天猫保价15天是从哪天算起)

  • ufs3.1手机有哪些(ufs 3.1的手机)

    ufs3.1手机有哪些(ufs 3.1的手机)

  • 笔记本电脑给手机充电有危害吗(笔记本电脑给手机充电慢怎么办)

    笔记本电脑给手机充电有危害吗(笔记本电脑给手机充电慢怎么办)

  • typeb接口是什么意思(type b 接口)

    typeb接口是什么意思(type b 接口)

  • 家里的wifi怎么缴费(家里的wifi怎么关闭网络)

    家里的wifi怎么缴费(家里的wifi怎么关闭网络)

  • 微信发起群聊别人会不会知道(发起群聊别人有提示么)

    微信发起群聊别人会不会知道(发起群聊别人有提示么)

  • 微信中的浮窗是啥意思(微信的浮窗是干什么用的)

    微信中的浮窗是啥意思(微信的浮窗是干什么用的)

  • 小米m1904f3bc是什么型号(小米型号m1903f11a)

    小米m1904f3bc是什么型号(小米型号m1903f11a)

  • 荣耀手环5什么时候出(荣耀手环5什么时候发布的)

    荣耀手环5什么时候出(荣耀手环5什么时候发布的)

  • 如何查看QQ登录记录(如何查看QQ登录设备记录)

    如何查看QQ登录记录(如何查看QQ登录设备记录)

  • 小米如何恢复通话记录(小米恢复通讯录)

    小米如何恢复通话记录(小米恢复通讯录)

  • 微信服务通知怎么恢复(微信服务通知怎么关闭)

    微信服务通知怎么恢复(微信服务通知怎么关闭)

  • 受限用户怎样重装系统?重装win7系统提示当前用户是受限用户的解决方法(受限制用户怎么解决)

    受限用户怎样重装系统?重装win7系统提示当前用户是受限用户的解决方法(受限制用户怎么解决)

  • 前端笔记(11) Vue3 Router 编程式导航 router.push router.replace(前端笔记软件)

    前端笔记(11) Vue3 Router 编程式导航 router.push router.replace(前端笔记软件)

  • 首个ChatGPT开发的应用上线;ChatMind思维导图工具;中文提示词大全;Copilot平替 | ShowMeAI日报

    首个ChatGPT开发的应用上线;ChatMind思维导图工具;中文提示词大全;Copilot平替 | ShowMeAI日报

  • 债务重组无形资产的评估费
  • 小规模减免增值税要交企业所得税吗
  • 企业贷款合同签订后多久放款
  • 以前年度损益调整结转到哪里
  • 弃置费用的现值p/f
  • 企业入统的利弊
  • 非营利组织需要纳税吗
  • 进料加工委托 加工费发票怎么开
  • 人力资源外包服务增值税税率
  • 企业购买饮水机滤芯会计分录
  • 税号开错了
  • 增值税专用发票开错了咋办
  • 银行手续费要发票什么时候开始的
  • 长期投资项目包括哪些
  • 事业单位固定资产报废处置流程
  • 出纳如何审核报销发票
  • 办公家具可以一次性抵扣吗?
  • 自然报废产生的固定资产净损失计入什么科目
  • 公司装修费用如何入账
  • php干啥用
  • 初识年岁尚温柔 小说 免费
  • 买车的收费项目详细清单
  • 苹果a1586是什么配置
  • win10修改hosts文件权限
  • 如果退货卖家拒绝会把货退回来么
  • 发生额怎么算
  • 固定资产残料收税吗
  • 固定资产一览表
  • html怎么嵌套php
  • 自己买材料自己装修
  • php自带的加密解密函数
  • 安卓京东抢购
  • 蓝桥杯c题库及答案
  • 已经申报过的个税在哪里查看
  • 外商投资企业wofe
  • mongodb聚合函数详解
  • Discus X 3 门户改造熊掌号网页教程
  • 资产减值损失是费用吗
  • 电子发票与纸质发票具有不同的法律效力
  • 无进项可以开票么
  • 对公账户的钱都可以取吗
  • 房地产卖房需要交契税吗现在
  • 收到以前年度退回的企业所得税怎么做账
  • 生物资产包括哪两类
  • 如何核算小企业成本
  • 小规模公司销项发票税额记到哪里了
  • 出口报关金额怎么算
  • 电子商务会计科目有哪些
  • 房屋租赁合同印花税怎么计算
  • 未交增值税不用交了
  • 当月发票未作废
  • 医疗器械行业进货未取得发票怎么做会计分录的
  • 设置会计账簿应当遵循的基本原则有
  • fedora31安装教程
  • ubuntu20设置wifi
  • centos下载与安装
  • win8怎么停止自动更新
  • thinkpad8装系统
  • windows8开机慢怎么办
  • Linux Mint 5 XFCE Community Edition RC1 (BETA 025) 本月17日开始发布
  • win7共享设置(详细图文步骤)
  • win10右下角的图标点不开
  • windows8图片
  • win10任务栏跳来跳去
  • microsoft build
  • linux运维是必死之路
  • 电脑自动重启命令
  • node.js中的http.response.write方法使用说明
  • angular页面加载完后执行方法
  • android基本控件使用方法
  • js实现框选
  • python和微信交互
  • django for
  • js能写贪吃蛇游戏是什么水平
  • 税收预测的内容
  • 如何推进税务系统建设
  • 纳税申报期过了怎么申报
  • 广东etc扣费异常打哪个电话
  • 盐城国税电话
  • 税法难吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设