改进yolov5实现目标检测与语意分割项目

news2024/9/21 4:21:21

简介

  • 基于ultralytics/yolov5多任务模型。
  • 同时实现yolo目标检测与语意分割
  • 以增加少量计算和显存为代价,同时完成目标检测和语义分割(1024×512输入约增加350MB,同尺寸增加一个bisenet需要约1.3GB,两个单任务模型独立输入还有额外的延时)。
  • 模型在Cityscapes语义分割数据集和由Cityscapes实例分割标签转换来的目标检测数据集上同时训练,检测结果略好于原版单任务的YOLOV5(仅限于此实验数据集),分割指标s模型验证集mIoU
    0.73,测试集0.715;m模型验证集mIoU 0.75测试集0.735。由于将继续考研,tag 2.0发布后仓库近期不会再频繁更新,issue大概率不会回复(问题请参考以下Doc,震荡爆炸请尝试砍学习率。
  • List item
  • 用了yolo官方的COCO检测预训练模型,训练中使用了检测数据,但推理时会比以上模型多跑一个检测头),可视化如下图:
    在这里插入图片描述

多模型集成

一种常见的方法是使用YOLOv5进行目标检测,然后使用专门的语义分割模型(如DeepLab、UNet等)来实现语义分割任务。最后,将两个任务的结果进行集成。这种方法的优势在于可以根据每个任务的特点选择最适合的模型结构和损失函数,从而达到更好的性能。
在这里插入图片描述

自定义模型

另一种可能的方法是探索自定义深度学习模型,将目标检测和语义分割结合到一个统一的模型中。这可能需要深入了解神经网络架构设计、损失函数的定义以及训练技巧等方面的知识。通过精心设计模型结构和损失函数,可以实现同时进行目标检测和语义分割的功能。

多任务学习

另一个研究方向是利用多任务学习的方法,通过共享网络的特征提取部分,同时训练目标检测和语义分割两个任务。通过这种方式,可以使模型学习到更加丰富和通用的特征表示,从而提高模型的泛化能力和效果。

结合传统方法

除了深度学习模型,还可以考虑结合传统的计算机视觉方法,如基于边缘检测和区域生长的图像分割算法,来实现语义分割任务。将传统方法与深度学习模型相结合,可能会为同时进行目标检测和语义分割任务带来新的思路和方法。
在这里插入图片描述

应用场景

通过同时进行目标检测和语义分割,可以为许多实际应用场景带来更多可能性。例如,在自动驾驶领域,可以通过同时检测交通标识和实现道路的语义分割来实现更加智能的驾驶辅助系统。在医学影像分析领域,可以通过同时识别病灶并进行器官的精确分割来帮助医生进行诊断和治疗。

挑战与前景

核心代码

原作者目标检测使用的Coco数据集,语义分割使用的是Cityscapes数据集。
模型主要是在YOLOv5-5.0版本上进行修改的,基准模型采用的是YOLOv5m,语义分割的实现主要是在模型输出的Head部分添加了一个头:
yolov5m_city_seg.yaml

# parameters
nc: 10  # number of classes
n_segcls: 19 # 分割类别数
depth_multiple: 0.67  # model depth multiple
width_multiple: 0.75  # layer channel multiple

# anchors
anchors:
  - [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 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 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, 9, 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, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, C3, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4  # PANet是add, yolov5是concat
   [-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)
                  #[类别/输出通道, C3的n, C3的c2, C3的shortcut(以base为例,其他头含义可能不同)] yolo.py解析代码, []内第一项必须是输出通道数
   #[[4, 19], 1, SegMaskLab, [n_segcls, 3, 256, False]],  # 语义分割头通道配置256,[]内n为3
   [[16, 19, 22], 1, SegMaskPSP, [n_segcls, 3, 256, False]],  # 语义分割头通道配置256
   #[[16, 19, 22], 1, SegMaskBiSe, [n_segcls, 3, 256, False]],  # 语义分割头通道配置无效
   #[[16], 1, SegMaskBase, [n_segcls, 3, 512, False]],  # 语义分割头通道配置512

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)  必须在最后一层, 原代码很多默认了Detect是最后, 并没有全改
  ]

总结

总的来说,尽管目前YOLOv5并不直接支持同时进行目标检测和语义分割,但通过多模型集成、自定义模型、多任务学习和结合传统方法等途径,可以探索出一些可能的方向。同时,通过同时进行目标检测和语义分割,可以为计算机视觉领域带来更多的可能性和应用场景,为实际问题提供更加全面和深入的解决方案。

最后:计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,私聊会回复!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞复现】大华智能物联ICC综合管理平台弱口令漏洞

Nx01 产品简介 大华智能物联ICC综合管理平台是一个集成了多种智能物联应用服务能力的平台。该平台提供了一系列的基础能力,如中台基础能力、各智能物联应用服务能力以及周边生态支持。 Nx02 漏洞描述 大华智能物联ICC综合管理平台存在弱口令漏洞,攻击者…

导入excel某些数值是0

目录 导入excel某些数值是0数据全部都是0原因解决 部分数据是0原因解决 导入excel某些数值是0 数据全部都是0 有一列“工单本月入库重量”全部的数据都是0 原因 展示的时候,展示的字段和内表需要展示的字段不一致,导致显示的是0。 解决 修改展示的字…

stm32利用CubeMX按键控制数码管加减数

首先画电路图: 接下来配置CubeMX: 设置好后生成MDK工程文件: 用keil打开工程: 添加部分代码: /* USER CODE BEGIN Includes */ uint16_t duan[]{0xC0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; uint1…

平时积累的FPGA知识点(10)

平时在FPGA群聊等积累的FPGA知识点,第10期: 41 ZYNQ系列芯片的PL中使用PS端送过来的时钟,这些时钟名字是自动生成的吗? 解释:是的。PS端设置的是ps_clk,用report_clocks查出来的时钟名变成了clk_fpga_0&a…

windows如何恢复删除文件?「2024恢复策略」

在数字时代,数据无疑是最为宝贵的财富之一。然而,无论是因为误操作、病毒感染还是其他各种原因,我们时常会面临文件被误删的风险。当重要的文件从Windows系统中消失时,许多用户都会感到焦虑和无助。那么,Windows系统下…

解锁VIP会员漫画:用Python爬虫轻松实现高清漫画下载

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块…

docker运行onlyoffice,并配置https访问【参考仅用】

官方说明: Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICEhttps://helpcenter.onlyoffice.com/installation/docs-developer-install-docker.aspx 一、容器端口、目录卷映射 sudo docker run --name容器名称 --restartalways -i -t -d -p…

【Linux进程】冯·诺依曼体系结构以及操作系统的深入理解

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1.冯诺依曼体系结构特…

实习日志28

1.医院账套系统换新,卡片数据转移 1.1.修改旧导出的Excel 1.2.尝试导入新系统 1.3.修改导入数据再次导入即可 这个系统做的限制条件比较多,代码健壮性不错。 先在Excel表格里改好批量的,再导入检查,改一些细节的比较快捷。 2.…

Three.js初学(3)

Three.js初学(3) 动画渲染循环1. 请求动画帧2. 旋转动画 Canvas画布布局和全屏常见几何体渲染器设置GUI.js库1. 库的引入2. 如何使用初步调试进阶调试界面分组 动画渲染循环 1. 请求动画帧 requestAnimationFrame实现周期性循环执行 requestAnimationF…

SpringBoot:自定义starter

点击查看:LearnSpringBoot08starter 点击查看:LearnSpringBoot08starterTest 点击查看更多的SpringBoot教程 一、主要流程 1. 先创建空的project 2. 打开空的project 结构 图选中model 点击 3. 创建 model(Maven)启动器 提…

来聊聊向量查询

本文将从基本概念开始,讨论与向量查询相关的技术与使用。向量查询是一种复杂的数据检索技术,它侧重于查询与数据条目相关的上下文含义,而并非简单的文本匹配。 在软件项目中,开发人员往往会尽力搜寻各种数据库优化技术&#xff0…

mapbox面图层标注

mapbox并没有一个属性类似于’text-field’的symbol图层的直接可以标注的办法,这里笔者提供两种其他的面图层标注的办法用来大家参考 效果图 方案一 把面图层当做点图层直接展示 在mapbox里面,面图层是可以直接渲染成线图层和点图层的,这里…

Aigtek高压放大器是什么东西做的

在许多电子应用中,需要将低电压信号放大到较高电压以满足特定的需求。为了实现这个目标,高压放大器被广泛采用。高压放大器是一种专用电子设备,使用特定的电路和器件来增益输入信号的电压。它通常由以下几个主要组成部分构成。 电源供应 高压…

WRF WPS : namelist 学习笔记

WPS & share 采用ARW方式进行模拟,除了ARW还有NMM,不过科研上常用ARW: wrf_core ‘ARW’最大的嵌套层数为3层,初学者一般是从一层开始逐步加多: max_dom 3 # max_dom 2设置模式开始和结束 的时间,从左到右依次是第一层第二层和第三…

轻松掌握opencv的8种图像变换

文章目录 opencv的8种图像变换1. 图像放大、缩小2. 图像平移3. 图像旋转4. 图像仿射变换5. 图像裁剪6. 图像的位运算(AND, OR, XOR)7. 图像的分离和融合8. 图像的颜色空间 opencv的8种图像变换 1. 图像放大、缩小 我们先看下原图 import cv2 import ma…

文献速递:GAN医学影像合成--基于生成对抗网络的肺部图像分类的多域医学图像翻译生成

文献速递:GAN医学影像合成–基于生成对抗网络的肺部图像分类的多域医学图像翻译生成 01 文献速递介绍 在2019年底,一种称为2019冠状病毒病(COVID-19)的新型冠状病毒肺炎出现,迅速成为全球性大流行。感染COVID-19可以…

本机防攻击简介

定义 在网络中,存在着大量针对CPU(Central Processing Unit)的恶意攻击报文以及需要正常上送CPU的各类报文。针对CPU的恶意攻击报文会导致CPU长时间繁忙的处理攻击报文,从而引发其他业务的中断甚至系统的中断;大量正常…

IOS和Android系统架构

IOS的系统架构 iOS的为Objective-C和Swift,Objective-C的优势是效率高但比较“唯一”。 响应顺序:Touch--Media--Service--Core架构 分为四个层次:核心操作系统层(core OS layer)、核心服务层(Core Serv…

STM32Cubemx TB6612直流电机驱动

一、TB6612FNG TB6612是一个支持双电机的驱动模块,支持PWM调速。PWMA、AIN1、AIN2 为一组控制引脚,PWMA 为 PWM 速度控制引脚,AIN1、AIN2 为方向控制引脚;PWMB、BIN1、BIN2 为一组控制引脚,PWMB 为 PWM 速度控制引脚&…