图像分割笔记(二): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程))

news2024/11/27 14:30:59

文章目录

  • 一、图像分割介绍
  • 二、YOLOv5-Seg介绍
  • 三、代码获取
  • 四、视频讲解
  • 五、环境搭建
  • 六、数据集准备
    • 6.1 数据集转换
    • 6.2 数据集验证
  • 七、模型训练
  • 八、模型验证
  • 九、模型测试
  • 十、评价指标

一、图像分割介绍

在这里插入图片描述

图像分割是指将一幅图像划分为若干个互不重叠的区域,每个区域内的像素具有相似的特征或属性。图像分割是图像处理和计算机视觉领域的一个重要任务,它在很多应用中起到关键作用,如目标检测、目标跟踪、图像编辑、医学图像分析等。

图像分割的目标是将图像中的目标从背景中分离出来,使得目标区域内的像素具有一致的特征,同时与背景区域有明显的差异。常见的图像分割方法包括基于阈值的方法、边缘检测方法、区域生长方法、基于图割的方法等。

基于阈值的方法是最简单的图像分割方法之一,它根据像素的灰度值与预先设定的阈值进行比较,将像素分为目标和背景两类。这种方法适用于目标与背景之间的灰度差异较大的情况。

边缘检测方法是通过检测图像中的边缘来进行分割的方法。边缘是图像中像素值变化较大的地方,通过检测边缘可以将目标与背景分开。常用的边缘检测算法包括Sobel算子、Canny算子等。

区域生长方法是基于像素相似性的图像分割方法,它从一个或多个种子像素开始,通过像素之间的相似性进行生长,将相似的像素合并为一个区域。这种方法适用于目标与背景之间的灰度差异较小的情况。

基于图割的方法是一种基于图论的图像分割方法,它将图像分割问题转化为图论中的最小割问题。通过构建一个图,将图像中的像素作为图的节点,将像素之间的相似性作为边的权重,然后通过最小割算法将图像分割为不同的区域。

总之,图像分割是图像处理和计算机视觉中的重要任务,它可以将图像中的目标从背景中分离出来,为后续的图像分析和处理提供基础。不同的图像分割方法适用于不同的应用场景,选择合适的方法可以提高分割的准确性和效果。

二、YOLOv5-Seg介绍

YOLOv5-Seg是基于YOLOv5的图像分割模型。YOLOv5是一种基于深度学习的目标检测算法,它使用轻量级的网络结构和高效的推理算法,在保持准确性的同时大大提高了检测速度。YOLOv5-Seg通过对YOLOv5进行改进和扩展,将其应用于图像分割任务。

相对于YOLOv5,YOLOv5-Seg在以下方面进行了改进

  • 网络结构:YOLOv5-Seg在YOLOv5的基础上进行了扩展和改进,添加了分割头部,使得模型能够同时进行目标检测和图像分割。
  • 损失函数:YOLOv5-Seg使用了新的损失函数来适应图像分割任务。传统的YOLOv5使用的是目标检测任务的损失函数,而YOLOv5-Seg引入了分割任务的损失函数,以优化分割的准确性。
  • 数据标注:YOLOv5-Seg需要使用像素级别的标注数据进行训练,而不仅仅是目标的边界框标注。因此,相对于YOLOv5,YOLOv5-Seg需要更加精细和详细的标注数据。
  • 训练策略:由于YOLOv5-Seg同时进行目标检测和图像分割任务的训练,需要采用适当的训练策略来平衡两个任务之间的权重和损失函数。
  • 推理算法:YOLOv5-Seg在推理过程中需要进行目标检测和图像分割的计算,因此需要相应的推理算法来实现高效的分割。

总之,YOLOv5-Seg相对于YOLOv5在网络结构、损失函数、数据标注、训练策略和推理算法等方面进行了改进和优化,使其能够更好地适应图像分割任务的需求。

三、代码获取

https://github.com/z1069614715/yolov5-seg

四、视频讲解

https://www.bilibili.com/video/BV1nV4y1P7HQ/?spm_id_from=333.337.search-card.all.click&vd_source=dda23f7bec965647e736cf2cc056bd59

五、环境搭建

安装cuda、pytorch、torchvision,然后执行pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
如果是cpu,则直接安装cpu对应的pytorch和torchvision,然后再执行后面的pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple。
参考这个博客:点击

六、数据集准备

6.1 数据集转换

方式1:通过labelme自己标注生成一个个的小json文件,这样你就可以得到全部图片对应的json文件了,然后将图片放在一个文件夹,所有的标注信息放在一个文件夹;或者所有图片和JSON再一个文件夹的形式。然后我们通过下面的代码将其转换为TXT标签文件。

import glob
import numpy as np
import json
import os
import cv2

# 根据原图和JSON格式的标签文件生成对应的YOLO的TXT标签文件保存到json_path路径下(保存文件名字和原来文件的名字一样,后缀换成txt)
json_path = r"./labelme/train2014" # 原始的JSON标签文件
TXT_path = r"./labelme/TXT_file" # 保存的TXT文件夹
image_path = r"./images/" # 原图
label_dict = {
   'mat': 0, 'class 2': 1, 'class 3': 2} # 类别情况
json_files = glob.glob(json_path + "/*.json")
for json_file in json_files:
    f = open(json_file)
    json_info = json.load(f)
    img = cv2.imread(os.path.join(image_path, json_info["imagePath"][0]))
    height, width, _ = img.shape
    np_w_h = np.array([[width, height]], np.int32)
    txt_file = json_file.split("\\")[-1].replace(".json", ".txt")
    txt_file = os.path.join(TXT_path, txt_file)
    f = open(txt_file, "a")
    for point_json in json_info["shapes"]:
        txt_content = ""
        np_points = np.array(point_json["points"], np.int32)
        label = point_json["label"]
        label_index = label_dict.get(label, None)
        np_points = np.array(point_json["points"], np.int32)
        norm_points = np_points / np_w_h
        norm_points_list = norm_points.tolist()
        txt_content += f"{
     label_index} " + " ".join([" ".join([str(cell[0]), str(cell[1])]) for cell in norm_points_list]) + "\n"
        f.write(txt_content)
 

或者图片和JSON在一个文件夹的形式,通过下面的代码会再相同文件夹下生成对应的txt文件

import os, cv2, json
import numpy as np

classes = ['square', 'triangle'] # 修改成对应的类别

base_path = '../dataset/labelme_dataset' # 指定json和图片的位置
path_list = [i.split('.')[0] for i in os.listdir(base_path)]
for path in path_list:
    image = cv2.imread(f'{
     base_path}/{
     path}.jpg'

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

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

相关文章

win7打开文件夹总弹出新窗口怎么办

我们在使用电脑打开文件夹时,都是在同一个窗口显示,查看非常方便,如果遇到每次打开文件夹弹出新窗口就总觉得很烦人,下面就一起来看看解决win7文件夹每次打开新窗口的方法。 一、 使用360或相关杀毒软件查杀木马,完成…

Kafka3.0.0版本——文件存储机制

这里写木目录标题 一、Topic 数据的存储机制1.1、Topic 数据的存储机制的概述1.2、Topic 数据的存储机制的图解1.3、Topic 数据的存储机制的文件解释 二、Topic数据的存储位置示例 一、Topic 数据的存储机制 1.1、Topic 数据的存储机制的概述 Topic是逻辑上的概念&#xff0c…

网易互娱游戏测试岗位面试喜欢问什么?

对游戏感兴趣,但是计算机技能还有些许欠缺的同学们可以试下游戏测试这个岗位。下面总结了网易互娱游戏测试岗位的面经。 网易互娱的游戏测试岗位面试的主要内容包括:简历里的项目和实践经历,简单的技术问题和游戏相关的经历和技术。一定要有…

【C语言】探讨常见自定义类型的存储形式

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 🔥该文章将探讨结构体,位段,共用体的存储形式。 目录: 🌍结构体内存对齐✉…

MySQL的常用术语

目录 1.关系 2.元组 3.属性 MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.关系 前面的博客有说到,MySQL是一款关系型数据库管理软件,一个关系就是 一张二维表(表) 我想大家都知道表格怎么…

linux常用命令及解释大全(一)

目录 一、系统信息 二、关机、重启及登出 三、文件和目录 3.1 导航命令 3.2 查看命令 3.3 创建和删除命令 3.4 复制和链接命令 3.5 其他命令 四、文件搜索 五、挂载文件系统 六、磁盘空间 七、用户和群组 总结 前言 Linux 是一种自由和开放源代码的操作系统&…

编写软件检测报告有哪些注意事项?软件检测报告获取

软件检测报告是指把测试的过程和结果写成文档,对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。 一、编写软件检测报告的注意事项 1、报告的结构要合理和清晰。应该按照一定的逻辑顺序&…

基于Java+SpringBoot+Vue前后端分离医院挂号就诊系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

重磅| Falcon 180B 正式在 Hugging Face Hub 上发布!

引言 我们很高兴地宣布由 Technology Innovation Institute (TII) 训练的开源大模型 Falcon 180B 登陆 Hugging Face! Falcon 180B 为开源大模型树立了全新的标杆。作为当前最大的开源大模型,有180B 参数并且是在在 3.5 万亿 token 的 TII RefinedWeb 数…

K8S访问控制------认证(authentication )、授权(authorization )体系

一、账号分类 在K8S体系中有两种账号类型:User accounts(用户账号),即针对human user的;Service accounts(服务账号),即针对pod的。这两种账号都可以访问 API server,都需要经历认证、授权、准入控制等步骤,相关逻辑图如下所示: 二、authentication (认证) 在…

【Linux】- Linux下搭建Java环境[IDEA,JDK8,Tomcat]

Java环境 1. 安装JDK2.安装tomcat3.安装idea4. 安装MySQL5.7 1. 安装JDK /usr/local:存放用户自行安装的软件,默认情况下不会被系统软件包管理器管理 发现解压后的文件已经整体移动到/usr/local/java 文件夹下 打开bin目录,可以看到java的版…

c++异步框架workflow分析

简述 workflow项目地址 : https://github.com/sogou/workflow workflow是搜狗开源的一个开发框架。可以满足绝大多数日常服务器开发,性能优异,给上层业务提供了易于开发的接口,却只用了少量的代码,举重若轻&#xff…

​LeetCode解法汇总1123. 最深叶节点的最近公共祖先

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个有…

C# Linq源码分析之Take(五)

概要 本文在C# Linq源码分析之Take(四)的基础上继续从源码角度分析Take的优化方法,主要分析Where.Select.Take的使用案例。 Where.Select.Take的案例分析 该场景模拟我们显示中将EF中与数据库关联的对象进行过滤,然后转换成Web…

蓝牙 or 2.4G or 5.8G?你会选择耳机吗

生活在网络时代,蓝牙、WIFI 已经是生活中必不可少的一部分,蓝牙耳机也是现在都市人群几乎人手一个,而在挑选耳机时,相信大家也见过不少 2.4G、5.8G 等名词,那么,蓝牙、2.4G、5.8G 到底有什么关联和区别&…

1.创建项目(wpf视觉项目)

目录 前言本章环境创建项目启动项目可执行文件 前言 本项目主要开发为视觉应用,项目包含(视觉编程halcon的应用,会引入handycontrol组件库,工具库Masuit.Tools.Net,数据库工具sqlSugar等应用) 后续如果还有…

异步编程 - 04 基于JDK中的Future实现异步编程(上)_Future FutureTask 源码解析

文章目录 概述JDK中的FutureOverViewFuture接口方法详解V get()V get(long timeout,TimeUnit unit)boolean isDone()boolean cancel(boolean mayInterruptIfRunning)boolean isCancelled() JDK中的FutureTaskOverViewFutureTask提交任务到Thread线程执行FutureTask提…

两个类文件,实现根据返回的id显示对应的人员信息增强返回

后台与前台交互时,由于后台存放的原始信息可能就是一些id或code,要经过相应的转换才能很好地在前台展示。 比如: select id, user_id from user 直接返回给前台时,前台可能要根据你这个user_id作为参数,再请求一次后…

DingoDB多模向量数据库,大模型时代的数据觉醒

大模型技术迸发的烟花点燃了整个AI产业链。继各类生成式模型、行业大模型、AI基础软件后,“大模型的海马体”——向量数据库,成为当前最为灼热的AI技术焦点。 在九章云极DataCanvas“变革”产品发布会上重磅亮相的DingoDB多模向量数据库,将多…

杭州高职画室哪家好?如何选择高职画室?高职美术学习选哪家画室?

随着越来越多的画室开始涉足高职美术培训,根据杭州高职画室的美术学生及其家长所知,由于普通高中和高职联考之间存在巨大差异,因此许多普通高中的画室的高职班并未取得太大的成功。因此,小编为正在寻找画室的你提供介绍&#xff1…