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

  • 华为gt3怎么测量体温(华为gt3怎么测量血糖)

    华为gt3怎么测量体温(华为gt3怎么测量血糖)

  • 微信怎么拉黑好友(微信怎么拉黑好友苹果手机)

    微信怎么拉黑好友(微信怎么拉黑好友苹果手机)

  • 天玑800相当于高通骁龙什么处理器(天玑800相当于高端手机吗)

    天玑800相当于高通骁龙什么处理器(天玑800相当于高端手机吗)

  • 手机qq3g在线是什么意思(手机qq3g在线几种可能)

    手机qq3g在线是什么意思(手机qq3g在线几种可能)

  • beatsx白灯不停闪烁

    beatsx白灯不停闪烁

  • 电脑左单引号怎么打(电脑左双引号)

    电脑左单引号怎么打(电脑左双引号)

  • qq转发怎么屏蔽部分人(qq转发怎么屏蔽微信好友)

    qq转发怎么屏蔽部分人(qq转发怎么屏蔽微信好友)

  • 快手一天能评论多少条(买评论快手)

    快手一天能评论多少条(买评论快手)

  • 苹果电脑退货政策(苹果电脑退货前应该做什么)

    苹果电脑退货政策(苹果电脑退货前应该做什么)

  • ahsprotector能删吗(assetszip能不能删除)

    ahsprotector能删吗(assetszip能不能删除)

  • 网页丢失是怎么回事(网页丢失是怎么解决的)

    网页丢失是怎么回事(网页丢失是怎么解决的)

  • 为什么插耳机进去却不能用(为什么插耳机进去却没有声音)

    为什么插耳机进去却不能用(为什么插耳机进去却没有声音)

  • ae安装失败是怎么回事(ae安装失败是为啥)

    ae安装失败是怎么回事(ae安装失败是为啥)

  • 什么是识别距离(什么是识别距离的软件)

    什么是识别距离(什么是识别距离的软件)

  • opporeno2网速慢怎么办(opporeno手机上网反应慢)

    opporeno2网速慢怎么办(opporeno手机上网反应慢)

  • 优酷电视软件叫什么(优酷电视软件叫啥名字)

    优酷电视软件叫什么(优酷电视软件叫啥名字)

  • dps格式的文件怎么打开(dps格式文件怎么打开)

    dps格式的文件怎么打开(dps格式文件怎么打开)

  • 苹果怎么给软件加密码(苹果怎么给软件上密码锁屏)

    苹果怎么给软件加密码(苹果怎么给软件上密码锁屏)

  • oppo手机桌面时钟怎么弄(oppo手机桌面时间怎么调成横着的)

    oppo手机桌面时钟怎么弄(oppo手机桌面时间怎么调成横着的)

  • 荣耀20如何清除多界面(荣耀如何清除正在运行的APP)

    荣耀20如何清除多界面(荣耀如何清除正在运行的APP)

  • 如何让微信二维码不过期(如何让微信二维码失效)

    如何让微信二维码不过期(如何让微信二维码失效)

  • 大疆dlog是什么意思(大疆dlog和hlg区别)

    大疆dlog是什么意思(大疆dlog和hlg区别)

  • 微信辅助能取消吗(微信辅助取消辅助还能再申请吗)

    微信辅助能取消吗(微信辅助取消辅助还能再申请吗)

  • 手机奥维地图怎么删除标签(手机奥维地图怎么导入文件)

    手机奥维地图怎么删除标签(手机奥维地图怎么导入文件)

  • 苹果xsmax支持无线充电吗(iphonexsmax参数配置)

    苹果xsmax支持无线充电吗(iphonexsmax参数配置)

  • vivov1824a是什么手机(vivo1814a是什么手机)

    vivov1824a是什么手机(vivo1814a是什么手机)

  • 电脑开机后无显示,但主机电源指示灯长亮怎么办?(电脑开机后无显示,但主机电源指示灯长亮)

    电脑开机后无显示,但主机电源指示灯长亮怎么办?(电脑开机后无显示,但主机电源指示灯长亮)

  • drvddll.exe是病毒进程吗 drvddll进程安全吗(loaddriver.exe是什么病毒)

    drvddll.exe是病毒进程吗 drvddll进程安全吗(loaddriver.exe是什么病毒)

  • 购买办公用品为什么不能用现金
  • 什么公司可以核算成本
  • 会展服务费怎么开票
  • 留抵税额账上比申报表多280
  • 是否独立核算取决于什么
  • 增值税进项加计扣除计入哪个科目
  • 车船税是费用吗
  • 小微企业增值税优惠政策最新2023
  • 销售折让会影响单价吗
  • 驾驶培训费可以报销吗
  • 公司账户转账转错了能退回来吗
  • 当月有待发货如何退货
  • 公司购电缆用于生产如何记账?
  • 免抵税额为什么不能抵下期
  • 自产自销产品如何入库存
  • 景区中设立的经济组织是
  • 小微企业享受优惠
  • 企业在筹建期间发生的费用
  • 信用证和银行承兑汇票的区别如何做分录
  • 多扣除了应交税费怎么调整?
  • 税务机关核定应纳税额的具体程序和方法
  • 旅行社税收
  • 统一社会信用代码证
  • 现在还有餐饮许可证吗
  • 契税减免备案材料是什么
  • 利息支出为什么不是经营成本
  • 工信部推出一键解绑怎么用
  • 履约保证金计入什么会计科目
  • php parse_url
  • 企业自持商品住房定义
  • php进程数量怎么决定
  • 股东怎么签合同
  • 伊吕波赛道
  • 分配结转制造费用时借方科目?
  • remote远程
  • python中time模块的用法
  • 个税少报了能查出来吗
  • 回扣,折扣和佣金都具有违法性对吗
  • 企业不年报会怎么样
  • 所得税汇算清缴前取得跨年发票
  • 帝国cms数据表
  • vue this.$el
  • 税务新法规
  • 其他应收款资产类
  • 跨年认证原材料是什么
  • 核定征收企业盈利怎么算
  • 发票已抵扣但对方要红冲账务处理
  • 合同终止已开发怎么办
  • 生产出口退税企业有哪些
  • 专利转让费一般是多少
  • 零余额账户怎么对账
  • 未摊销的费用怎样处理
  • 工程施工和主营业务成本关系
  • SQL直接操作excel表(查询/导入/插入)
  • 经典sql查询语句50条
  • mysql完整教程
  • 注册表怎么优化
  • centos编译器
  • linux的命令行指的是什么
  • win7不激活怎么换壁纸
  • excel表格时间选择
  • cocos屏幕适配方案
  • Windows下自动备份MongoDB的批处理脚本
  • js中数组操作
  • webpack使用场景
  • python中random模块用法
  • unity3d android 插件
  • javax.net.ssl.SSLException: hostname in certificate didn't match:
  • android xml文件有哪几种布局方式
  • jquery 获取滚动距离
  • jQuery实现ajax的叠加和停止(终止ajax请求)
  • 正则化实现
  • 四川国家税务局官网
  • 税务副处级竞争上岗笔试题
  • 发票在地税能查到,但是国税查不到
  • 上报汇总之后怎么申报
  • 东莞医保缴费凭证怎么下载
  • 河南地税税率怎么计算
  • 广西定额发票查询入口官网
  • 广东省电子税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设