实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)

导  读

    本文主要介绍如何使用YoloV8实例分割识别猪的姿态(含数据集)。

背景介绍

    在本文中,我将介绍如何使用YoloV8在猪的自定义数据集上进行实例分割,以识别和跟踪它们的不同姿态。

图片

      

数据集

    使用的数据集来源于Kokkenborg Aps,下载地址:

https://365ucl.sharepoint.com/:f:/s/dataset-oft/Eicf36oizq1DvISOjGEHuwABFA6z1Z22zewM2rPWJzFBWg?e=y88D5Y

图片

    样本图片:

图片

    标注好的json文件:

图片

    注意:数据集是使用LabelMe标注的,是json格式

https://github.com/wkentaro/labelme

    YoloV8使用的是txt格式,这里可以借助labelme2yolo来转换:

https://pypi.org/project/labelme2yolo/

图片

图片

图片

      

项目搭建

    数据集准备好后,打开终端并创建一个项目目录,您要在其中放置数据和我们要编写的脚本。请注意,本教程假定您正在 Linux 平台上工作。

mkdir Pigs_Yolov8

    进入你创建的目录:

cd Pigs_Yolov8

    从现在开始我们将其作为项目根目录,所有终端调用都将从这里进行。

    将包含图像和json文件的文件夹添加到项目根目录文件夹中,并将该文件夹命名为:PigsCam1ImagesAndJson。

    就我而言,我在两个单独的文件夹中有图像和 json 文件,我只是将它们合并到一个名为PigsCam1ImagesAndJson的新文件夹中。这是您需要的三个文件夹中唯一的一个。

图片

    接下来创建一个虚拟环境,我们可以在其中安装项目所需的所有依赖项。

    这是创建虚拟环境的命令。最后一个词是环境的名称。

python3 -m venv PigYolov8Venv

    虚拟环境将在您当前所在的目录中创建。

    接下来激活环境:

source PigYolov8Venv/bin/activate

图片

图片

    现在您应该在项目的根目录中看到您的虚拟环境。如果您不熟悉虚拟环境,虚拟环境的目的是将当前项目中安装的包与计算机上的其他项目分开,这样您就可以避免项目之间的版本不匹配。

    接下来,将以下软件包安装到您的虚拟环境中。确保位于项目文件夹的根目录中,并激活虚拟环境。

pip install numpy==1.21.2 scipy==1.7.0 scikit-learn==1.0 matplotlib==3.4.3 pandas==1.3.2pip install labelme2yolopip install ultralytics

    现在我们要将数据集格式转换为 Yolov8 的格式。

    运行以下命令创建yolov8dataset(将目录更改为指向您自己的目录)

labelme2yolo - json_dir /home/simonadmin/Documents/Pigs_Yolov8/PigsCam1ImagesAndJson - val_size 0.15 - test_size 0.15

    参数 –val_size 和 –test_size 指定用于验证和测试的数据集的大小。

图片

图片

    您现在应该有一个名为 YoloDataset 的文件夹,其中包含一个图像文件夹、一个标签文件夹和一个 dataset.yaml 文件。

    图像和标签都分为 train、test 和 val 文件夹(见下文并检查它是否与您自己的文件夹结构匹配)。

图片

图片

图片

训练

    为了训练模型,您需要确保安装了 torch,并且最好在 GPU 上运行。

    您可以通过以下命令检查 torch 是否已安装并正在运行:

图片

    如果未安装 torch,请转到https://pytorch.org/并按照安装程序进行操作。

    现在我们将微调现有模型,以便能够学习我们的自定义类别。

    用于训练的模型可以在以下链接中找到:

https://github.com/ultralytics/ultralytics#models

(进入分割部分),其中显示了下表。从这个表中,我们只需要名称和大小作为训练算法的参数。

图片

    实际的文件名是蓝色的名称,后跟扩展名.pt。例如。如果我们想使用        YOLOv8m-seg模型,我们需要名称YOLOv8m-seg.pt

    我们需要的其他参数是:

    • size参数,为 640。

    • 我们还需要定义 epoch 的数量(即训练时间),在我们的例子中,我们将其设置为 100 个 epoch。epoch 的数量主要取决于您愿意等待多长时间,epoch 越多,结果越好,但是,总有一个点是无法实现任何改进的,因此从 100 个 epoch 开始似乎是个好主意。

    • batch size大小。这取决于你的 GPU,我使用 8 作为批次大小。

    • 什么类型的任务task,在本例中是分割segmentation 。

    • 哪种模式mode,也就是训练training。

以及 dataset.yaml 文件的路径,它指向我们的数据、标签和要识别的类的数量。在我们的例子中,这是四个类(见下图)。确保路径与您在计算机上的期望相符。

图片

    下面是完整指令:

yolo task=segment mode=train epochs=100 data=/home/simonadmin/Documents/Pigs_Yolov8/PigsCam1ImagesAndJson/YOLODataset/dataset.yaml model=yolov8m-seg.pt imgsz=640 batch=8

图片

    结果应该是这样的:

图片

    训练完成后,您会注意到项目文件夹的根目录中已创建一些文件和文件夹。

图片

    这两个 .pt 文件是脚本下载以完成其工作的模型。文件夹“runs”包含我们执行的不同训练运行。

    在运行文件夹中,您可以图形化地查看训练的进展情况或是否应该进行更长时间的训练。

图片

    以下是验证进展顺利的一些示例。

图片

推理

    现在到了真正有趣的部分。我们要试驾一下我们的新模型。

    为了测试模型,您需要猪的图像和/或视频,最好是从与训练数据相同的位置拍摄。

    接下来,在运行文件夹内,进入权重文件夹(下面的路径层次结构)

图片

    复制文件 best.pt 并将其放置在项目的根文件夹中(其他 .pt 文件所在的位置)。

    将猪的视频和/或图像也添加到根中。

创建测试脚本

    在您最喜欢的编辑器中创建一个名为 predict.py 的小脚本,并添加以下内容:

from ultralytics import YOLOmodel = YOLO("/home/simonadmin/Documents/Pigs_Yolov8/best.pt")model.predict(source= "/home/simonadmin/Documents/Pigs_Yolov8/PigMovieNew.mov", show=True, save=True, conf=0.5, save_txt=False, save_crop=False, show_labels=True)

图片

    视频格式不一定是.mov,也可以是.mp4或.avi

    如果你想在图像上进行测试,那么只需将源参数更改为指向你机器上的图像即可。

图片

    将脚本放置在项目的根目录中并使用以下命令运行它:

python predict.py

    测试结果:

图片

    非常好!模型似乎已经正确识别了猪。

    这是我们视频的结果(请注意:该视频是由多个图像创建的,这就是为什么它看起来像是滞后的原因)。

图片

    视频效果可能会更好,但这可能需要更大的数据集,尤其是姿势更均匀表示的数据集。

    使用 Yolov8 时,可以记录某一类别的猪的数量(例如正在进食的猪),这样您就可以随时统计猪的数量。还可以跟踪猪,从而可以选择创建图表来显示特定猪活跃或不活跃的时间。

—THE END—

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SVm和随机森林算法模型的中国黄金价格预测分析与研究

摘要 本研究基于回归模型,运用支持向量机(SVM)、决策树和随机森林算法,对中国黄金价格进行预测分析。通过历史黄金价格数据的分析和特征工程,建立了相应的预测模型,并利用SVM、决策树和随机森林算法进行训…

基础7 探索JAVA图形编程桌面:数据库操作组件详解

在当今这个全面以数字化占据主导地位的时代,图形化编程犹如一颗冉冉升起的新星,逐渐在编程领域中崭露头角,并且正逐步成为一种全新的趋势。其具备的直观性以及易上手的显著特性,使得数量愈发庞大的开发者以及业务人员能够以更为快…

从零开始构建 Vision Transformer(ViT) 模型

Transformer 模型最早由 Vaswani 等人在 2017 年论文 Attention Is All You Need 中提出,并已广泛应用于自然语言处理。 2021年,Dosovitsky 等人在论文An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale中提出将 Transforme…

抖音小店怎么做才会赚钱?不要再想赔钱起店了,根本不稳定!

大家好,我是电商糖果 抖音小店发展有四五年的时间了,现在网上有很多分享做店方法的博主。 可以说百分之八十左右的博主喜欢分享货损起店,暴力起店的玩法。 难道这种赔钱起店的玩法真的赚钱吗? 很多新手商家开过之后就会发现&a…

【Redis】持久化操作详解

Redis 持久化操作详解 Redis 实现持久化的时候,具体是按照什么样的策略来实现的呢? Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF(append-only-file)方式,两种持久化方式可以单独使用其中一种&…

RS8557XF功能和参数介绍及PDF资料

RS8557XF是一款单通道精密运算放大器,其主要特点包括高精度、低偏移电压、低输入偏置电流和低噪声。以下是该产品的部分参数和功能介绍: 增益带宽积 (GBW): 4.3 MHz,这使得该运放适用于较宽频率范围内的信号处理。 输入偏置电流: 650 μA&…

分布式事务解决方案(最终一致性【TCC解决方案】)

最终一致性分布式事务概述 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保持一致,查询任意节点的数据都能得到最新的数据结果,这就导致在分布式场景,尤其是高并发场景下,系统的性能受到了影响。而最终一致性分布式…

Solana 验证节点搭建教程 SOL节点

搭建验证节点 (成功下载快照) 部署 Solana 验证节点 由于项目需求,需要部署一台solana节点,我们从一开始搭建,遇到许多坑,做个记录。 一定要注意服务器配置,配置不够,rpc启动不起来。 一、简介 官网地址…

OpenHarmony 实战开发——ArkUI中的线程和看门狗机制

一、前言 本文主要分析ArkUI中涉及的线程和看门狗机制。 二、ArkUI中的线程 应用Ability首次创建界面的流程大致如下: 说明: • AceContainer是一个容器类,由前端、任务执行器、资源管理器、渲染管线、视图等聚合而成,提供了生…

产品经理-流程图结构图(四)

1. 流程图 1.1 概念 为了达到特定的目标而进行的一系列有逻辑性的操作步骤,由两个及以上的步骤,完成一个完整的行为的过程,可称之为流程 1.2 产品经理为什么需要绘制流程图? 保证产品的使用逻辑合理顺畅向项目组其他成员清晰的…

3.5 四个子空间的维度

一、概述 这一节的主要定理是将秩与维度联系在一起。矩阵的秩就是主元的个数,子空间的维度是基向量的个数,我们计算出这两个数就可以得到秩与维度。 A A A 的秩揭露了四个基本子空间的维度。 四个子空间中,两个子空间来自 A A A&#xff0c…

2024年蓝桥杯B组C++——复盘

1、握手问题 知识点:模拟 这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手,仅需要两两握手,也就是从42个握手开始,而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。 总结&#xff1a…

jQuery事件导读+其它方法

jQuery 事件导读一、事件注册二、事件处理1.内容2.例子,微博绑定事件3.off解绑事件4.自动触发事件 三、事件对象 其他方法一、拷贝对象二、多库共存三、插件 事件导读 一、事件注册 单个事件叫注册,多个事件叫处理 二、事件处理 1.内容 2.例子&#…

每天五分钟深度学习框架pytorch:tensor张量的维度转换大全

本文重点 在深度学习中比较让人头疼的一点就是矩阵的维度,我们必须构建出符合神经网络维度的矩阵,只有将符合要求的矩阵放到神经网络中才可以运行神经网络,本节课程我们将学习以下tensor中维度的变化。 view和shape View和shape,这两个方法可以完成维度的变换操作,而且使…

Windows操作系统基本知识整理

目录 引言 一、Windows操作系统的发展历史 1.1 Windows 1.0到Windows 3.0 1.2 Windows 95到Windows Me 1.3 Windows NT到Windows 2000 1.4 Windows XP到Windows 7 1.5 Windows 8到Windows 10 二、Windows操作系统的核心组件 2.1 内核 2.2 文件系统 2.3 图形用户界面&…

Android 系统日志(Log) JNI实现流程源码分析

1、JNI概述 Java Native Interface (JNI) 是一种编程框架,使得Java代码能够与用其他编程语言(如C和C)编写的本地代码进行交互。JNI允许Java代码调用本地代码的函数,也允许本地代码调用Java代码的函数。下面是对JNI机制的详细概述…

kettle学习之表的输入输出

需求 把表A里的数据传送到表B中,在此之前,清空表B内的数据 表输入 执行SQL脚本 表输出

Qt 5前后调色板差异变化

Qt 5之前: QPalette palette;//调色板 设置背景颜色 palette.setColor(QPalette::Backgound, color...);Qt 5之后: 由原有的 Background 模式 更新为 Window 模式 QPalette palette;//调色板 设置背景颜色 palette.setColor(QPalette::Window, color..…

STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距

一、模块资料 (1)模块简介 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点。HC-SRO4是一款尺寸完全兼容老版本,增加UART和IIC功能的开放式超声波测距模块,默认条件下,软件…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时,确实有点迷糊。但是他们是独立的,没有太大关联。 就是说在Android studio中看到的两个版本信息,并无太大关联,是相互独立的。Gradle插件版本决定了你的项目是如何构建的,而Gradle版本是执行构建…