基于语义分割Ground Truth(GT)转换yolov5图像分割标签(路面积水检测例子)

news2024/11/19 3:50:10

基于语义分割Ground Truth(GT)转换yolov5图像分割标签(路面积水检测例子)

概述

随着开发者在issues中对 用yolov5做分割任务的呼声高涨,yolov5团队真的在帮开发者解决问题,v6.0版本之后推出了最新的解决方案并配指导教程。

image-20230128172549462

之前就有使用改进yolo添加分割头的方式实现目标检测和分割的方法,最新的v7.0版本有了很好的效果,yolov8在分割方面也是重拳出击

image-20230128172654729

img

因此使用yolo进行完成目标检测也是落地项目的一个选择,而且yolo的生态更适合落地,并且实现试试检测。但是目前的公开数据集大部分使用的是其他分割领域模型,当然标签也是适配其他模型。我在做极市平台的比赛时想到了这一点,路面积水感觉用目标检测更省力,但是他却给了分割数据,

img

img

我尝试转换GT图像标签到yolo的格式,查了好久也没有找到好的解决办法,因此根据之前的转目标检测经验,我尝试修改。

流程

由于没有对应分割区域的json格式或者其他格式的标签,因此需要根据GT找到对应坐标,可以理解为Polygon标签格式,每个拐点除标记,常规使用lableimg标注的来,所以需要通过轮廓检测获取大致的坐标点,在转换为yolo需要的格式

1、查找分割区域,
2、获取分割区域的轮廓坐标
3、精简坐标点
4、转存txt

上面的所有操作都基于OpenCV进行

读取并处理

转换为单通道灰度图并对二值化图像进行处理,让图像自动转换阈值,

cv2.threshold (src, thresh, maxval, type)

src:源图片,必须是单通道
thresh:阈值,取值范围0~255
maxval:填充色,取值范围0~255
type:阈值类型,具体见下表

阈值类型:

阈值参数类型小于阈值的像素点大于阈值的像素点
0cv2.THRESH_BINARY置0置填充色
1cv2.THRESH_BINARY_INV置填充色置0
2cv2.THRESH_TRUNC保持原色置灰色
3cv2.THRESH_TOZERO置0保持原色
4cv2.THRESH_TOZERO_INV保持原色置0

image-20230129101726731

这里我使用了自动阈值调整,因此只需要给定范围0-255即可。

gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,bin_img = cv2.threshold(gray_img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

查询轮廓并获取坐标点

单通道图会送到边缘检测算法中进行轮廓点的查询,因为GT标签的标注是很精细的,所有边缘点会很多,在检测过程中需要使用一个点估计量较少的方法,或者是筛选方法

cv2.findContours(image, mode, method[, offset])

method:轮廓近似方法有以下几种方法

cv2.CHAIN_APPROX_NONE:存储所有的轮廓点
cv2.CHAIN_APPROX_SIMPLE:压缩水平,垂直和对角线段,只留下端点。 例如矩形轮廓可以用4个点编码。
cv2.CHAIN_APPROX_TC89_L1,cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chini chain近似算法

经过测试cv2.CHAIN_APPROX_TC89_KCOS方法比较符合我们的需求,下面是几种方法的对比图:

原图

image-20230129102601475

cv2.CHAIN_APPROX_NONE

image-20230129103241865

cv2.CHAIN_APPROX_SIMPLE

image-20230129103345849

cv2.CHAIN_APPROX_TC89_L1

image-20230129103557153

cv2.CHAIN_APPROX_TC89_KCOS

image-20230129103640467

yolo的标签格式是转折或者较长的边缘添加标注点,因此不需要太多相邻点,给出大概的轮廓即可,对比上面最合适的是cv2.CHAIN_APPROX_TC89_KCOS近似方法,

但是从最后的结果图看,依然存在一些不需要的点,因此我们选择一个简单原则,相邻的点在x或者y上如果变化超过一个阈值才保留,否则不标注和不作为分割点。阈值不固定,我设置为30的效果如下

image-20230129102920513

上面部分的代码

cnt,hit = cv2.findContours(bin_img,cv2.RETR_TREE,cv2.CHAIN_APPROX_TC89_KCOS)
cv2.drawContours(img1,cnt,-1,(0,255,0),5)
cnt = list(cnt)
for j in cnt:
    result = []
    pre = j[0]
    for i in j:
        if abs(i[0][0] - pre[0][0]) > 30 or abs(i[0][1] - pre[0][1]) > 30:
            pre = i
            temp = list(i[0])
            #根据yolo的归一化方式,x,y分别除以原图的宽和高
            temp[0] /= W
            temp[1] /= H
            result.append(temp)
            cv2.circle(img1,i[0],1,(0,0,255),2)

计算并转存txt

按每个类别的坐标存入,有的坐标会很多,所以要一个数组写一次。先写入的“0”是当前的类别,如果多分类的需要单独处理

f.write("0 ")
for line in result:
    line = str(line)[1:-2].replace(",","")
    # print(line)
    f.write(line+" ")
f.write("\n")

效果演示:https://live.csdn.net/v/271857

完整代码:https://github.com/magau123/CSDN/blob/master/GT2yolo-seg.py

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

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

相关文章

2、等价类划分

如何划分等价类 在给定了输入或外部条件之后&#xff0c;等价类的划分原则如下&#xff1a; 如果输入条件规定了一个取值范围&#xff08;例如&#xff0c;“数量可以是1到999”&#xff09;&#xff0c;那么就应确定出一个有效等价类&#xff08;1<数量<999&#xff0…

【大唐杯备考】——5G网络架构的演进趋势(学习笔记)

&#x1f4d6; 前言&#xff1a;本期介绍5G网络架构的演进趋势。 目录&#x1f552; 1. 5G网络架构概述&#x1f552; 2. 4G网络架构概述&#x1f552; 3. 核心网架构演进&#xff08;了解&#xff09;&#x1f558; 3.1 2G核心网&#x1f558; 3.2 3G、4G核心网&#x1f558; …

Golang - 如何编写Go代码

Golang - 如何编写Go代码 今天学习下如何在Go模块中开发一个简单的Package包&#xff0c;并介绍Go相关工具&#xff0c;以及如何获取、构建、安装模块等使用方法。本文中的案例需要使用Go 1.13及以上版本。 代码组织 Go程序以package包的形式组织&#xff0c;package包是同一…

Vue11-事件修饰符

结论&#xff1a;前三最常用 1.prevent 此时点击链接&#xff0c;除了会提示我是一个超链接信息外&#xff0c;a标签还会默认后进行链接跳转&#xff0c;此时为了阻止默认跳转事件&#xff0c;可以加prevent属性实现。此时只有弹框提示是信息&#xff0c;链接不会进行跳转 2.st…

Aqua Data Studio 22.1.x Crack

Aqua Data Studio 数据库 IDE 的优势 使用单一数据库工具管理大量数据源的多项任务 轻松开发、执行和共享 SQL 语句 通过复制和粘贴在类似 Excel 的网格中查看、过滤和编辑查询结果 创建可视化和仪表板以通过拖放来分析数据 比较架构、数据、查询结果、文件和文件夹 将数据库逆…

流量录制工具怎么选?看完这篇文章就懂了

流量录制&#xff1a;在不影响用户正常使用的前提下&#xff0c;获取线上用户的真实请求和服务响应结果&#xff0c;将其保存或者转发到目标应用。 采用不同的流量录制手段&#xff0c;可以采集不同传输阶段的流量。 01、流量复制方式 1、基于应用层的复制&#xff1a; 优点…

Linux串口调试助手

前言 基于网上资料对相关概念做整理汇总&#xff0c;部分内容引用自文后文章。 在linux下使用串口终端有两个选择&#xff1a; 基于命令行的minicom图形界面的putty&#xff08;xshell没有linux版本&#xff09;1 概述 1.1 Linux的串口设备 Linux下的串口和windows不同&…

移动web媒体查询

移动web媒体查询媒体查询媒体查询使用场景-1媒体查询使用场景-2媒体查询使用场景-3Bootstrap栅格系统row 类列偏移列嵌套移动web阶段重点知识媒体查询 使用媒体查询做响应式页面,为Bootstrap 做铺垫。 body {background-color: gray; }/* 大于等于768px 为粉色 */ media (min…

注意力提示

人类的注意力是有限的、有价值和稀缺的资源。 受试者使用非自主性和自主性提示有选择性地引导注意力。前者基于突出性&#xff0c;后者则依赖于意识。 注意力机制与全连接层或者汇聚层的区别源于增加的自主提示。 由于包含了自主性提示&#xff0c;注意力机制与全连接的层或…

MiG Calendar 6.9.3 for Java Crack

将日历功能添加到您的 Java 应用程序。 使用 MiG Calendar&#xff0c;您可以毫不费力地将任何类型的基于时间的可视化添加到您的应用程序中。您可以创建任何东西&#xff0c;从完整的日历应用程序&#xff08;如 Outlook 或 Apple 的 iCal&#xff09;到电视节目表或航班信息应…

居家办公 01 - 组网

# 第一步 - 安装虚拟机 vmbox安装&#xff1a;https://www.virtualbox.org/wiki/Downloads # 第二步 - 修改配置 1. 配置虚拟机网络 网卡1&#xff1a;Host-Only&#xff0c;仅主机与虚拟机网络互通 网卡2&#xff1a;NAT&#xff0c;虚拟机访问互联网 2. 配置虚拟机网络 v…

Lazada、速卖通、沃尔玛、eBay等跨境电商平台怎么做好测评自养号?

现在亚马逊平台不仅会将产品和店铺进行排名&#xff0c;还会将进listing行排名&#xff0c;不同的排名有不同的影响因素&#xff0c;接下来跟随大家一起去了解清楚亚马逊影响listing排名的因素是什么&#xff1f; 1、卖家权重 亚马逊卖家权重与亚马逊控制的卖家指标相关&…

大数据技术架构(组件)9——Hive:数学函数

1.4.2、数学函数注意&#xff1a;当传入值为NULL的时候&#xff0c;返回值大多数也是NULL1.4.2.1、abs作用&#xff1a;返回绝对值select abs(-1),abs(1);1.4.2.2、acos-->从Hive0.13.0作用&#xff1a;如果 -1<a<1 或 NULL&#xff0c;则返回 a 的反余弦值。select a…

[MySQL]-主从同步实战-系统OOM

[MySQL]-主从同步实战-系统OOM 森格 | 2023年1月 本文主要描述了在主从同步过程中&#xff0c;主库非人为重启导致的主从瞬间中断情况的排查及解决。 文章目录[MySQL]-主从同步实战-系统OOM一、问题发现1.1 背景1.2 问题发现二、问题分析2.1 MySQL日志2.2 系统日志三、问题解决…

DocuWare 文档管理软件在金融行业成功案例分享

DocuWare 文档管理软件在金融行业成功案例分享 公司&#xff1a;Advantage Credit, Inc. 国家&#xff1a;美国 行业&#xff1a;金融 部门&#xff1a;财务部门 、人力资源部门 、质量合规管理部门 部署方式&#xff1a;云 成效&#xff1a;信用报告业务从基于办公室的业务模…

RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真

目录 任务描述 机器人拆垛与码垛工作站创建 机器人拆垛与码垛工作流程分析 机器人位置偏移函数介绍 机器人拆垛与码垛应用示教编程 机器人拆垛与码垛虚拟仿真 任务描述 在RobotStudio软件中创建ABB机器人拆垛与码垛工作站&#xff0c;并示教机器人拆垛与码垛程序&#x…

mysql与redis数据一致性问题相关面试题

1、mysql 与 redis 如何保证数据一致性问题 1. 更新 mysql 数据&#xff0c;在手动清除 Redis 缓存 &#xff0c;在重新查询最新的数据同步到Redis 中 伪代码&#xff1a; 判断如果 redis 是为空的 则读取 mysql 同步到 redis 中 setRedis(key&#xff0c;mysql 数据) 2.更新…

法律常识(二)婚姻法解读

目录 参考 &#xff3b;重婚&#xff3d;禁止有配偶者与他人同居 &#xff3b;有配偶者与他人同居&#xff3d; &#xff3b;家庭暴力&#xff3d; 实践中对于借婚姻索取财物一般如何处理&#xff1f; 索要“彩礼”是否是婚姻法所禁止的行为&#xff1f; 实践中因夫妻一方…

【GD32F427开发板试用】多路ADC规则组同时采样 DMA进行传输数据 顺带开启FPU浮点运算

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;Hello_eQN7e7 前言 开启浮点运算 加快浮点类型数据计算使用GD32F427V-START开发板的ADC1采样四路电路使用DMA1进行数据实时搬运至内存读出数据…

Spark RDD 转换算子

文章目录Spark RDD 转换算子一、Value 类型1、map (映射)2、 mapPartitions (map优化缓冲流)(1&#xff09;函数说明(2) 代码示例(2&#xff09;小案例获取每个分区的最大值3、 map 和 mapParitions 的区别4、 mapParitionsWithIndex(1) 小案例只获取第二个分区的最大值(2&…