CV实战01 YOLOv5实现图像分割

news2024/12/24 17:23:14

网上翻了一天,没找到称心的教程,最后发现还是Ultralytics官方的教程文档好用!这里贴上官方教程一起学习!

【1:找到官方教程文档】

yolov5官方下载地址:GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

下载方法如下:

下载后解压为文件夹打开,在“segment”目录下的文件【tutorial.ipynb】就是官方提供的教程了。

(注:.ipynb是notebook格式,若电脑编辑器无法打开也可在github网站单击打开)

【2:教程文档解读】

内容包括Setup、Predict、Validate、Train、Visualize、Environments、Status和Appendix共8个部分:

第1部分:Setup

从github网站采用git工具克隆到本地,并导入查看版本。(采用【第1步】方法下载也可以)

第2部分:Predict

 翻译:segment/predict.py在各种源上运行YOLOv5实例分割推理,从最新的YOLOv5版本自动下载模型,并将结果保存到runs/predict中。示例推理源有:

在notebook中输入如下命令开始预测:

(采用权重为yolov5s-seg.pt,由第4部分的Train步骤得到,图片放缩至640*640,置信度阈值设为0.25,预测对象为“data/images”目录下的所有图片) 

如显示下面结果则表示完成预测,预测结果保存在“runs/predict-seg/exp”目录下。

第3部分:Validate

教程文档采用coco数据集作为验证集

翻译: 在COCO数据集的val或测试分割上验证模型的准确性。模型自动从最新的YOLOv5版本下载。要按类显示结果,请使用——verbose标志。

在notebook中输入如下命令下载coco数据集:

 在notebook中输入如下命令开始验证:

 (采用权重为yolov5s-seg.pt,由第4部分的Train步骤得到,验证数据集采用coco.yaml文件中定义的路径读取,图片放缩至640*640,使用FP16半精度推理)

 如显示下面结果则表示完成验证,验证结果保存在“runs/val-seg/exp”目录下。

第4部分:Train

训练自己的数据:

教程文档推荐的是在线标注网站Roboflow,这个网站与yolo模型深度集成,功能强大且易上手。

文档还提供了使用roboflow制作图像分割数据集的详细教程:

Custom Training Exampleicon-default.png?t=O83Ahttps://blog.roboflow.com/train-yolov5-instance-segmentation-custom-dataset/

开始训练:

上面第1段代码是用于在Google Colab或类似的Jupyter Notebook环境中选择并初始化一个机器学习实验的logger(日志记录器)。Logger在机器学习项目中非常重要,因为它可以帮助你跟踪实验过程中的各种指标、参数和输出,从而更好地理解和比较不同的实验结果。这里提到的YOLOv5是一种流行的实时对象检测算法。

让我们逐行解析这段代码:

1. `# @title Select YOLOv5 🚀 logger {run: 'auto'}` 这是一个注释,但在Colab中它具有特殊意义。`@title`定义了一个可交互的小部件标题,在本例中是"Select YOLOv5 🚀 logger"。`{run: 'auto'}`意味着当用户更改这个小部件时,后面的代码会自动运行。

2. `logger = "Comet"  # @param ['Comet', 'ClearML', 'TensorBoard']` 定义了`logger`变量,并设置了默认值为"Comet"。这里的`# @param`注解允许创建一个下拉菜单,让用户可以在提供的选项中选择一种logger:Comet, ClearML 或 TensorBoard。

3. 接下来是一系列条件语句,根据`logger`变量的值来安装对应的库并进行初始化:
   - 如果选择了`Comet`,则使用`%pip install -q comet_ml`静默地安装Comet ML库,并通过`import comet_ml`导入该库,然后调用`comet_ml.init()`初始化Comet。
   - 如果选择了`ClearML`,则安装ClearML库,导入并登录到ClearML浏览器界面。
   - 如果选择了`TensorBoard`,则加载TensorBoard扩展,并启动TensorBoard服务指向`runs/train`目录,这通常是TensorFlow或PyTorch保存训练日志的地方。

总的来说,这段代码提供了一种方便的方式来配置不同类型的日志记录工具,这些工具可以用来监控和记录YOLOv5模型训练过程中产生的数据。这样可以根据需要灵活切换不同的日志系统,而无需手动修改大量的代码。

第5部分:Visualize

使用Comet网站在线可视化:

此外,使用ClearML网站在线可视化:

当然,也可以采用Tensorboard在本地进行实时可视化:

第6部分:Environments

这里的环境指运行python代码的平台,教程文档推荐4类环境,分别是1)可免费使用GPU的notebook:Gradient AI、Google Colab、Kaggle,2)谷歌云平台:Google Cloud,3)亚马逊计算平台:Manage AWS Resources - AWS Management Console - AWS.,4)Docker镜像:Ultralytics HUB

第7部分:Status

翻译:如果此徽章为绿色,则表示当前所有YOLOv5 GitHub Actions持续集成(CI)测试都通过了。CI测试每24小时在macOS, Windows和Ubuntu上验证YOLOv5训练(train.py),测试(value .py),推理(detect.py)和导出(export.py)的正确操作。

第8部分:Appendix

这段代码展示了如何使用 PyTorch Hub 来加载 YOLOv5 模型并进行推理(即对图像进行对象检测)。YOLOv5 是一个非常流行且高效的实时对象检测算法。下面是代码的详细解释:

1. **加载模型**:
   model = torch.hub.load(
       "ultralytics/yolov5", "yolov5s-seg", force_reload=True, trust_repo=True
   )
   - `torch.hub.load` 从指定的 GitHub 仓库中加载预训练模型。
   - `"ultralytics/yolov5"` 是仓库的名称,这里是 Ultralytics 的 YOLOv5 仓库。
   - `"yolov5s-seg"` 是要加载的具体模型名称。这里选择了 `yolov5s-seg`,它是一个轻量级的分割版本。你也可以选择其他变体,如 `yolov5n`, `yolov5m`, `yolov5l`, `yolov5x` 等。
   - `force_reload=True` 强制重新加载模型,即使缓存中已经存在。
   - `trust_repo=True` 表示信任这个仓库,允许执行其中的脚本。

2. **准备输入图像**:
   im = "https://ultralytics.com/images/zidane.jpg"
   - `im` 可以是文件路径、URL、PIL 图像、OpenCV 图像、NumPy 数组或列表。在这个例子中,`im` 是一个指向图像的 URL。

3. **进行推理**:
   results = model(im)
   - `model(im)` 对输入图像 `im` 进行推理,并返回检测结果。

4. **显示结果**:
   results.print()
   - `results.print()` 打印出检测到的对象及其置信度等信息。
   - 你还可以使用其他方法来处理结果:
     - `results.show()` 显示带有边界框和标签的图像。
     - `results.save()` 保存带有边界框和标签的图像到文件。
     - `results.crop()` 裁剪出检测到的对象并返回裁剪后的图像。
     - `results.pandas()` 将结果转换为 Pandas DataFrame 格式,方便进一步的数据处理和分析。

### 示例代码

下面是一个完整的示例代码,你可以直接在支持 PyTorch 和 Jupyter Notebook 或者 Google Colab 的环境中运行:

import torch

# 加载模型
model = torch.hub.load("ultralytics/yolov5", "yolov5s-seg", force_reload=True, trust_repo=True)

# 准备输入图像
im = "https://ultralytics.com/images/zidane.jpg"

# 进行推理
results = model(im)

# 打印结果
results.print()

# 显示结果图像
results.show()

这段代码将下载并加载 YOLOv5s-seg 模型,对提供的图像进行对象检测,并打印和显示检测结果。

【3:train在线教程】

在第2章的第4部分train中,教程文档推荐了一个详细的在线教程,进行进去后页面如下:

 在线教程内容包含:环境设置、准备数据集、模型训练、测试与验证、模型性能提升、模型部署。

 具体内容这里就不展开细讲了,以后得空再专门写一篇。

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

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

相关文章

【p2p、分布式,区块链笔记 UPNP】: Libupnp test_init.c 02 初始化SDK --- UpnpInitPreamble

启动前全局资源配置 代码解析函数分析代码中的重要部分1. Winsock 初始化 (WinsockInit):2. 锁初始化资源 (UpnpInitMutexes):3. 句柄表HandleTable(SDK 内部资源的表)初始化:4.线程池初始化 (UpnpInitThreadPools):5. 回调函数设…

Android OpenGLES2.0开发(四):矩阵变换和相机投影

事物的本质是事物本身所固有的、深藏于‌现象背后并决定或支配现象的方面‌。 还记得我们上一篇绘制的三角形吗,我们确实能够顺利用OpenGL ES绘制出图形了,这是一个好的开始,但这还远远不够。我们定义的坐标是正三角形,但是绘制出…

解决无法安装“vue.volar“扩展,跟vscode版本不兼容问题

问题:安装volar插件的时候提示跟vscode版本不兼容 解决方案 1、进入VSCode插件市场,搜索Vue.volar(直达链接:volar下载界面) 2、点击download Extension(下载插件) 3、下载.vsix文件完成后&a…

杨中科 .netcore Linq 。一前期准备知识

为什么要学Linq 一、为什么要学LINQ? 让数据处理变得简单: 统计一个字符串中每个字母出现的频率(忽略大小写),然后按照从高到低的顺序输出出现频率高于2次的单词和其出现的频率。 var itemss.Where(c >char.lsLetter(c))//过滤非字母 .Select(c>char.ToLo…

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …

55100-3H-02微型法兰安装霍尔效应传感器

55100-3H-02微型法兰安装霍尔效应传感器应用领域如:位置和极限感应、无刷换向、RPM测量、直流电机、流量计量、角度感应、磁编码器。 概述 55100微型法兰安装霍尔效应传感器,尺寸为25.5mmx 11.00m,高度仅为3.00mm,可选择数字或可…

生物制药洁净室:设计、施工及常见问题解决

生物制药洁净室的设计施工要点对于保障生产环境的洁净度至关重要。生物制药洁净室的建设不仅是为了符合行业标准,更是确保产品安全和质量的重要环节。生物制药洁净室设计与生物制药洁净室施工是相辅相成的,接下来,我们将深入探讨这两方面的关…

交易中心态管理和情绪控制是第一位

情绪是交易中常见的障碍,无论是负面情绪还是喜悦等正面情绪,都可能成为妨碍交易的关键因素。交易的核心在于保持客观理性,而情绪的起伏往往不经意间扰乱我们的思绪。因此,成功的交易员若想突破自我,首要任务便是克服情…

事件轮询机制

引出闭包案例 for(var i 0; i < 5; i) {setTimeout(function () {console.log(i); // &#xff1f;}); } console.log(a); // 结果是什么&#xff1a;&#xff1f; 2.事件轮询机制&#xff08;Event Loop&#xff09; 事件轮询&#xff08;Event Loop&#xff09;是一个…

调整ApplyItem的界面

调整ApplyItem的界面 前言 在上一集&#xff0c;我们就完成了一个clickItem的一个函数&#xff0c;继承SessionFriendItem并通过它添加不同的Item&#xff0c;并且我添加了它的枚举类。 在上一集的最后&#xff0c;我们提了一嘴&#xff0c;我们要修改ApplyItem的样式。 分…

Flink 04 | 窗口介绍 - 无界数据流的核心

窗口介绍 Flink中Windows&#xff08;窗口&#xff09;是处理无界数据流的核心。因为无界数据集是不断增长的&#xff0c;无法直接对整个数据集进行操作。窗口将数据流分成有限大小的Buckets&#xff0c;我们可以在这些Buckets上应用计算。本文档重点介绍如何在 Flink 中选择合…

三菱FX3UPLC机械原点回归- DSZR/ZRN指令

机械原点回归用指令的种类 产生正转脉冲或者反转脉冲后&#xff0c;增减当前值寄存器的内容。可编程控制器的定位指令&#xff0c;可编程控制器的电源0FF后&#xff0c;当前值寄存器清零&#xff0c;因此上电后&#xff0c;请务必使机械位置和当前值寄存器的位置相吻合…

10.模拟实现s

前面我们了解了string类的常用接口使用&#xff0c;那么现在就来模拟实现一下。 1.constructor string.h namespace Ro {class string{public:string(){}string(const char* str){}~string(){}private:char* _str;size_t _size;size_t _capacity;}; } 为了和库里面的string…

Jenkins+kubernetes流水线构建java项目

在传统的业务环境中&#xff0c;我们的应用部署或者更新都是采用手工的方式&#xff0c;但是在企业内部&#xff0c;应用架构一般都采用微服务&#xff0c;大部分项目都会对应几十个、上百甚至上千个微服务&#xff0c;并且还不仅仅只有一个项目&#xff0c;所以采用收工方式上…

godot帧同步-关于“显示与逻辑分离”

很多教程说帧同步的关键是“显示与逻辑分离”&#xff0c;但是又没有具体讲解&#xff0c;我起初也没有搞懂这句话的意思&#xff0c;就直接上手开发帧同步了。在开发的过程中&#xff0c;一下子就悟了&#xff0c;所以分享一下。 显示与逻辑未分离&#xff08;单机&#xff0…

嵌入式中单链表基本实现

第一:单链表基本原理 依次读入表L=(a0,.....,an-1)中每一元素ai(假设为整型),若ai≠结束符(-1),则为ai创建一结点,然后插入表尾,最后返回链表的头结点指针H。 第二:单链表具体实现方法 1:实现单链表的时候,需要先定义基本文件link.h #ifndef __LINKLIST_H__ #define…

考华为认证拼了命,怎么还是没工作啊

在当今竞争激烈的就业市场中&#xff0c;网络工程领域的发展备受关注。当你疯狂地在某 BOSS 或者某联等招聘平台上浏览时&#xff0c;你必然会惊讶地发现&#xff0c;华为认证已赫然成为网络方向至关重要的资格认证之一&#xff0c;频繁地出现在形形色色的岗位 JD 里。 这一现…

如何设置 GitLab 密码长度?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 60天专业…

【RabbitMQ——消息应答机制——分布式事务解决方式】

1. RabbitMQ高级-消息确认机制的配置 NONE值是禁用发布确认模式&#xff0c;是默认值 CORRELATED值是发布消息成功到交换器后会触发回调方法&#xff0c;如1示例SIMPLE值经测试有两种效果&#xff0c;其一效果和CORRELATED值一样会触发回调方法&#xff0c;其二在发布消息成功…

UE5 TimeLine入门

UE5 TimeLine入门 时间轴曲线 共计三个关键帧&#xff08;0,0&#xff09;(1.5,10) (3,0) 蓝图 1.按下空格键执行。 2.时间轴TimeLine函数。 3.动画播放结束后执行。 4.每一帧都执行。