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

  • 荣耀magic3pro怎么截屏(荣耀magic3pro怎么取手机卡)

    荣耀magic3pro怎么截屏(荣耀magic3pro怎么取手机卡)

  • win10资讯和兴趣怎么关闭(win10资讯和兴趣删除)

    win10资讯和兴趣怎么关闭(win10资讯和兴趣删除)

  • 微信怎么添加附近的人(微信怎么添加附近人)

    微信怎么添加附近的人(微信怎么添加附近人)

  • 华为手环4pro几种颜色(华为手环4pro多少钱?)

    华为手环4pro几种颜色(华为手环4pro多少钱?)

  • 小米手表能量什么意思(小米手表上的能量)

    小米手表能量什么意思(小米手表上的能量)

  • 电视可以连接蓝牙耳机吗(电视可以连接蓝牙手柄吗)

    电视可以连接蓝牙耳机吗(电视可以连接蓝牙手柄吗)

  • qq音乐买一张专辑可以送人吗(qq音乐一张专辑买一首歌)

    qq音乐买一张专辑可以送人吗(qq音乐一张专辑买一首歌)

  • oppoace2是曲面屏吗(opporenoace2是曲面屏吗)

    oppoace2是曲面屏吗(opporenoace2是曲面屏吗)

  • 激萌怎样用照片制作漫画头像(激萌怎么照相好看)

    激萌怎样用照片制作漫画头像(激萌怎么照相好看)

  • 官方applecare+版是什么意思(官方apple care+版啥意思)

    官方applecare+版是什么意思(官方apple care+版啥意思)

  • 微信视频聊天会泄露视频内容吗(微信视频聊天会被记录吗)

    微信视频聊天会泄露视频内容吗(微信视频聊天会被记录吗)

  • 台式电脑鼠标没反应了怎么办(台式电脑鼠标没反应了怎么关机)

    台式电脑鼠标没反应了怎么办(台式电脑鼠标没反应了怎么关机)

  • 多媒体的层次结构由什么构成(多媒体的层次结构有五层什么与用户有直接接口)

    多媒体的层次结构由什么构成(多媒体的层次结构有五层什么与用户有直接接口)

  • class10以上的内存卡是什么意思(class10以上的内存卡是快还是慢)

    class10以上的内存卡是什么意思(class10以上的内存卡是快还是慢)

  • 猫耳fm下载的音频在哪(猫耳fm下载的音频在哪个文件夹)

    猫耳fm下载的音频在哪(猫耳fm下载的音频在哪个文件夹)

  • 数据库保护分为哪四种(数据库保护分为哪几种方式)

    数据库保护分为哪四种(数据库保护分为哪几种方式)

  • 苹果手机怎么看热点人数(苹果手机怎么看是不是正品新机)

    苹果手机怎么看热点人数(苹果手机怎么看是不是正品新机)

  • 快手戳一下怎么删除(快手戳一下怎么删除记录)

    快手戳一下怎么删除(快手戳一下怎么删除记录)

  • 趣步糖果怎么没置换(趣步糖果怎么不能卖)

    趣步糖果怎么没置换(趣步糖果怎么不能卖)

  • 原装7p后摄镜头玻璃片怎么拆(原装7p后摄像头多少钱)

    原装7p后摄镜头玻璃片怎么拆(原装7p后摄像头多少钱)

  • 苹果11能显示电量百分比吗(苹果11显示电量)

    苹果11能显示电量百分比吗(苹果11显示电量)

  • 华为stk-l22是什么型号(华为stk一l22多少钱)

    华为stk-l22是什么型号(华为stk一l22多少钱)

  • 数据预处理方法主要有(数据预处理方法的对比)

    数据预处理方法主要有(数据预处理方法的对比)

  • 苹果怎么设置生日倒数(苹果怎么设置生日提醒功能)

    苹果怎么设置生日倒数(苹果怎么设置生日提醒功能)

  • 电脑主板怎么设置(电脑主板怎么设置密码)

    电脑主板怎么设置(电脑主板怎么设置密码)

  • 联通语音信箱怎么关闭(联通语音信箱怎么收费)

    联通语音信箱怎么关闭(联通语音信箱怎么收费)

  • 抖音变美特效是哪个(抖音特效真是越来越美)

    抖音变美特效是哪个(抖音特效真是越来越美)

  • 认证不过的进项税是怎么调出分录?
  • 个人开不动产租赁发票税率
  • 加油票抬头开错可以更换吗
  • 没有社保的临时工值得干吗
  • 转让企业全部产权属于增值税征税范围。A对B错
  • 存货成本包括消费吗
  • 工程节点奖金
  • 税控设备维护费怎么填申报表
  • 一次性工伤医疗补助金和一次性伤残补助金
  • 子公司可否将母公司注销
  • 出口退税操作明细表格
  • 投资收益是否缴纳印花税
  • 个税申报异常怎么办
  • 居间合同怎么签才算有效
  • 外汇风险怎么规避
  • 关联企业之间借款的处理
  • 股权变更之后税务变更
  • 运费的发票
  • 暂估冲红的分录怎么写
  • 电脑有些进程关不掉
  • 电脑玩游戏卡怎么弄
  • 搜索特定
  • 苹果专用win10镜像下载
  • 分公司特征表述正确的是
  • php抓取网页指定内容
  • 差额部分 扣除部分
  • 应用程序无法正常启动0xc000007b
  • 境外租赁要交什么税
  • 工资储备金制度
  • phpstorm配置php环境 mac os
  • thinkphp登录
  • 资产负债表中其他应付款根据什么填列
  • arc架构
  • 持有至到期投资账务处理
  • uniapp 手写识别
  • 代开的普通发票如何盖章
  • 垃圾清运费进入会计什么科目
  • 在建工程怎么填
  • 资本公积的项目有哪些
  • 付了工资的资产负债表怎么填
  • 个人所得税汇算清缴
  • 将资本公积转为资本会计科目
  • 承典人是什么意思
  • 核定征收的三种方式
  • 营业执照备案登记表
  • 车间购买劳保费用会计分录
  • 外经证适用范围
  • 银行印鉴变更申请书范本
  • 广告公司收到广告收入会计分录
  • 公司法人转账到公司账户
  • 公司账户转账转错了能退回来吗
  • 社保缴纳的时候可以用吗
  • 发票报销可以跨月报销吗
  • 电子承兑汇票的风险有哪些
  • 固定资产报废会计
  • 企业申请支付宝账号步骤
  • 给员工家人报销会计分录
  • 农业机耕开发票税收分类编码是什么?
  • 医院财务核算制度
  • 哪些发票必须注销
  • 收到政策性搬迁短信
  • 如何设置营业费支付
  • 应付账款核算的项目
  • 调整后视镜
  • java连接mysql数据库教程
  • windows vista X86 RTM/OEM 中文正式版下载地址
  • windows10预览版安装
  • win7卸载软件提示停止工作
  • windows server 2016 域控
  • OS X 10.10 Yosemite的新特性与iOS联系更紧密
  • 怎么清空mac用户数据
  • linux中压缩文件
  • find按照文件大小查找
  • win7系统启动不起来什么原因
  • iphone手机文件怎么传到电脑
  • html用法
  • jquery点击切换背景颜色
  • django应用开发实战
  • vue中的计算属性forEach函数的使用
  • python django orm
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设