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

  • 得物支持7天无理由退货吗(得物支持7天无理由吗)

    得物支持7天无理由退货吗(得物支持7天无理由吗)

  • oppoa55处理器是多少(oppoa55处理器是骁龙什么型号)

    oppoa55处理器是多少(oppoa55处理器是骁龙什么型号)

  • 苹果11屏幕暗调不亮怎么办(苹果手机屏幕暗调不亮怎么办)

    苹果11屏幕暗调不亮怎么办(苹果手机屏幕暗调不亮怎么办)

  • 文档正在转码是什么意思(上传文件预览显示正在转码)

    文档正在转码是什么意思(上传文件预览显示正在转码)

  • 小米换机有什么用(小米换机有什么危害和好处)

    小米换机有什么用(小米换机有什么危害和好处)

  • 微信验证身份证格式有误(微信验证身份证x怎么输入)

    微信验证身份证格式有误(微信验证身份证x怎么输入)

  • 电脑背景变成黑色的了是为什么(电脑背景变成黑色了如何调回正常)

    电脑背景变成黑色的了是为什么(电脑背景变成黑色了如何调回正常)

  • 禁用查找我的iphone是什么意思(禁用查找我的iphone怎么关闭)

    禁用查找我的iphone是什么意思(禁用查找我的iphone怎么关闭)

  • 怎么发送文档(怎么发送文档到别人邮箱)

    怎么发送文档(怎么发送文档到别人邮箱)

  • qq花样赞有哪些是免费的(qq花样赞图标以及名称)

    qq花样赞有哪些是免费的(qq花样赞图标以及名称)

  • mate30nfc在哪(华为手机mate30nfc功能怎么用)

    mate30nfc在哪(华为手机mate30nfc功能怎么用)

  • ipadair2019可以插u盘吗(ipadair能插u盘吗)

    ipadair2019可以插u盘吗(ipadair能插u盘吗)

  • 电脑设置pin是什么意思(电脑设置pin是什么意思为啥突然不可用)

    电脑设置pin是什么意思(电脑设置pin是什么意思为啥突然不可用)

  • 车载蓝牙忽略怎么还原(车载蓝牙忽略设备后怎么重新连接)

    车载蓝牙忽略怎么还原(车载蓝牙忽略设备后怎么重新连接)

  • word怎样自动生成目录(word怎样自动生成目录索引)

    word怎样自动生成目录(word怎样自动生成目录索引)

  • 什么是刘海屏和水滴屏(什么是刘海屏和圆角屏照片)

    什么是刘海屏和水滴屏(什么是刘海屏和圆角屏照片)

  • 淘宝钉钉是干什么的(淘宝钉钉在哪里)

    淘宝钉钉是干什么的(淘宝钉钉在哪里)

  • nec手机是什么牌子(nec是啥手机)

    nec手机是什么牌子(nec是啥手机)

  • 故事锁屏为啥卸载不了(故事锁屏是什么意思)

    故事锁屏为啥卸载不了(故事锁屏是什么意思)

  • p站官网怎么登进去(p站怎样登录)

    p站官网怎么登进去(p站怎样登录)

  • 安卓微信m4a怎么打开(手机微信m4a文件怎么打开)

    安卓微信m4a怎么打开(手机微信m4a文件怎么打开)

  • 电脑怎么用手机网络(电脑怎么用手机热点上网)

    电脑怎么用手机网络(电脑怎么用手机热点上网)

  • 小米max4发布时间(小米max4发布价格)

    小米max4发布时间(小米max4发布价格)

  • cad怎么输入数字(cad怎么输入数字画矩形)

    cad怎么输入数字(cad怎么输入数字画矩形)

  • Windows Server 2019 服务器系统安装图文教程(windowsserver2019安装教程)

    Windows Server 2019 服务器系统安装图文教程(windowsserver2019安装教程)

  • 使用python中的pymrmr模块来进行特征提取,深入学习mRMR(最大相关最小冗余准则)(python pymongo)

    使用python中的pymrmr模块来进行特征提取,深入学习mRMR(最大相关最小冗余准则)(python pymongo)

  • 分公司可以计提安全生产费吗
  • 发票行业税目怎么选择
  • 所有者权益变动表是什么报表
  • 城建税有没减半
  • 应付职工薪酬代扣款项账务处理
  • 应税服务增值税抵免
  • 土地使用税什么意思
  • 会计录入凭证怎么录入
  • 购销行为的帐务处理如何做?
  • 人防工程被出售,谁承担责任
  • 前程无忧靠什么赚钱
  • 基本电费等于
  • 收到对方的预付款,需要多久开发票
  • 增值税专用发票抵扣期限
  • 案例分析房租完税证明怎么入账?
  • 购入厂房时缴的土地增值税如何入账?
  • 设计服务发票怎么入账
  • 个人所得税申报方式选哪个比较好
  • 营改增的会计分录
  • 会计员如何处理21种差额计税?
  • 生产企业出口货物收不到款怎么处理
  • 增值税减免了,附加税申报表还用填吗
  • 个税按计提申报还是按发放申报
  • 公司内部培训师试讲开场白
  • 应收账款出售给银行
  • 核定征收的企业利润怎么处理
  • 电脑管家如何深度访问
  • 联想Lenovo ThinkPad X13 Gen1
  • 转账如何退还一部分钱
  • 怎么写会计凭证
  • 在win7系统中,添加打印机驱动程序
  • 购买交易性金融资产时,支付的交易费用应计入
  • 巴蒂斯塔卡里
  • win11触摸板不能用
  • 免抵退税的具体计算方法
  • Linux Kernel 4.5在3月15日发布最终版
  • 其他业务收入怎么申报增值税
  • win10电脑记事本在哪
  • 短期借贷属于负债类科目
  • php 定时执行文件脚本
  • yolov3训练自己的数据超详细
  • 信用减值损失会影响所有者权益吗
  • 微信小程序开发零基础入门
  • vue3.0项目实战视频
  • ai的工具介绍
  • 利用python实现Apriori关联规则算法
  • 企业以前年度亏损不可以用什么弥补
  • 客户不要的专票我们可以不作废吗
  • 支付货款没有收据怎么办
  • 电子承兑汇票贴现怎么操作
  • 税费退库怎么做账
  • 税控盘和维护费440元抵减增值税吗
  • 认缴制下实收资本需要验资吗
  • 固定资产台账具体做什么
  • 银行贷款信用贷
  • 收回理财款会计分录
  • 专票不报销公司查得到吗
  • mysql5.0安装
  • sqlserver中with(nolock)深入分析
  • sql多行合并成一行 oracle
  • 如何修改windows注册表
  • docker基础教程
  • xp系统有什么用
  • ubuntu中no such file or directory
  • windows 8
  • onetouch.exe - onetouch是什么进程 有什么用
  • win7旗舰版安装教程u盘
  • win8怎样设置禁止弹出广告
  • honey contil
  • androidstudio调用so文件
  • Android startActivities()的使用
  • 简易最新版本
  • unity shader视频教程
  • 遍历字符串python
  • javascript总结
  • ADB not responding. You can wait more,or kill"abd.exe" process manually and click 'Restar
  • 地税发票怎么开 步骤
  • 企业登录密码是几位数
  • 上海各区财政收入排名
  • 湖北省叉车考试题库
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设