实战 | 使用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—

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

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

相关文章

【话题】你眼中的IT行业现状与未来趋势

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 引言一、IT行业的现状1.1 云计算与大数据1.2 人工智能与机器学习1.3 物联网与5G通信1.4 区块链技术 二、IT行业未来发展趋势2.1 边缘计算与智能设备2.2 深度学习与自然语…

告别繁琐!Xinstall助你轻松实现APP地推结算,提升推广效率

随着移动互联网的迅猛发展,APP市场竞争日益激烈。面对线上推广转化率下降、成本上升的挑战,越来越多的APP厂商开始尝试线下地推这一更为直接、有效的推广方式。然而,地推结算过程中的种种问题却让许多企业头痛不已。今天,我们将为…

亲测使用frp获得访问者真实ip

怎么访问都只有127.0.0.1这个内网ip,获取不到访问者的真实ip 1.打开frp的配置文件(一般是frpc.toml,无需设置frps.toml) 在每一个tcp协议中添加 transport.proxyProtocolVersion "v2" 实例: # frpc.toml [[proxies]] name "web" …

CSS学习笔记:flex布局(弹性布局)

设置flex布局 父元素添加display: flex 使用justify-content调节元素在主轴的对齐方式 给父元素添加justify-content属性,取值如下 用于调节子元素在主轴方向(水平方向)的对齐方式 使用align-items调节元素在侧轴的对齐方式 给父元素添加…

华为机考入门python3--(31)牛客31-单词倒排

分类:字符串、正则 知识点: 正则提取所有符合的字符串 words re.findall(r[a-zA-Z], sentence) 列表倒序 words[::-1] 题目来自【牛客】 import re # 导入正则表达式模块def reverse_words(sentence):# 使用正则表达式将句子拆分成单词# 如可以将…

Android启动动画SplashScreen,Error inflating class的问题

1、官网实现 链接:https://developer.android.google.cn/training/wearables/apps/splash-screen?hlzh-cn 2、遇到的问题 在启动新的activity,com.google.android.material.tabs.TabLayout控件无法inflate,出现 Error inflating class c…

代码随想录算法训练营第36期DAY42

DAY42 62不同路径 AC了&#xff0c;舒服&#xff01;待会看看优质解答。 class Solution {public: int uniquePaths(int m, int n) { vector<vector<int>> dp(m,vector<int>(n,1)); for(int i0;i<m;i){ for(int j0;j<n…

GM Bali,OKLink受邀参与Polygon AggIsland大会

5月16日-17日&#xff0c;OKLink 受到生态合作伙伴 Polygon 的特别邀请&#xff0c;来到巴厘岛参与以 AggIsland 为主题的大会活动并发表演讲&#xff0c;详细介绍 OKLink 为 Polygon 所带来的包括多个浏览器和数据解析等方面的成果&#xff0c;并与 Polygon 一起&#xff0c;对…

MPJLambdaWrapperX leftJoin 用法

MPJLambdaWrapperX 是 Mybatis-Plus 的一个扩展类&#xff0c;用于构造更复杂的数据表关联查询条件。它主要用于实现 SQL 的 JOIN 操作&#xff0c;如 LEFT JOIN、RIGHT JOIN 等。下面重点介绍如何使用 MPJLambdaWrapperX 来完成 LEFT JOIN 操作。 基本用法 首先确保你的项目…

python打印exception信息

一直以为掌握以下内容就够了。 try:#正常执行语句pass except:#如果正常执行语句不对&#xff0c;执行替代语句pass finally:不论正常执行语句执行如何&#xff0c;最后都会执行.finally这部分可以省略pass因为我try部分写的业务逻辑复杂&#xff0c;配置了多少活动&#xff0…

Apache Flink CDC 3.1.0版本知识学习

Apache Flink CDC 3.1.0版本知识学习 一、Flink CDC 3.1 快速预览二、Transformation 支持三、分库分表合并支持四、使用 Kafka Pipeline Sink 高效写入 Canal/Debezium 格式数据五、更高效地实时入湖 Paimon六、其他改进七、Flink CDC 3.1 版本兼容性 一、Flink CDC 3.1 快速预…

代码随想录算法训练营第四十一天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营第四十一天 509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 动规五部曲&#xff1a; 确定dp数组以及下标的含义&#xff1a;第i个数的斐波那契数值是dp[i]确定递推公式&#xff1a;dp[i] dp[i - 1] dp[i - 2];dp数组如何初始化&#xff1a;dp[…

汽车电子专栏目录一览

最近开始整理汽车电子专栏的目录。 方便找到想要的内容&#xff0c;与大家一起学习。 目录 一、 AUTOSAR规范与ECU软件开发篇幅目录 二、 CDD复杂驱动讲解篇幅目录 三、ETAS的运用 四、自动驾驶芯片驾驶芯片 五、三电技术 六、S32KXXMCU&#xff08;NXP汽车常用芯片&…

phpmyadmin漏洞汇总

phpmyadmin是一个非常常用的框架&#xff0c;所以学习它的常见漏洞是非常必要的。 参考大佬的文章进行自学&#xff1a;最全phpmyadmin漏洞汇总_phpmyadmin弱口令-CSDN博客 目录 phpmyadmin简介 查看phpmyadmin版本 漏洞及利用 万能密码登入 影响版本 漏洞POC 远程代码…

【MySQL精通之路】数据类型

目录 1.数字数据类型 1.1 数字数据类型语法 1.2 整数类型&#xff08;精确值&#xff09;-Integer、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT 1.3 定点类型&#xff08;精确值&#xff09;-DECIMAL&#xff0c;NUMERIC 1.4 浮点类型&#xff08;近似值&#xff09;-FLOA…

【传知代码】无监督动画中关节动画的运动表示(论文复现)

前言&#xff1a;在数字动画的广袤领域中&#xff0c;关节动画以其真实、流畅的运动表现&#xff0c;一直占据着举足轻重的地位。无论是电影中的震撼特效&#xff0c;还是游戏世界的角色互动&#xff0c;关节动画都以其细腻的运动表现&#xff0c;赋予虚拟世界以生动与活力。然…

Excel某列中有不连续的数据,怎么提取数据到新的列?

这里演示使用高级筛选的例子&#xff1a; 1.设置筛选条件 在D2单元格输入公式&#xff1a;COUNTA(A4)>0 这里有两个注意事项&#xff1a; *. 公式是设置在D2单元格&#xff0c;D1单元格保持为空&#xff0c; **. 为什么公式中选A4单元格&#xff0c;A列的第一个数据在A3…

CPU数据传送控制方式

引入 为了实现CPU与I/O设备信息交换的同步 无条件传送 示例1&#xff1a; 示例2&#xff1a; 程序查询方式 引入 工作过程 单个外设 多个外设 特点 中断传送方式 工作过程 特点 DMA 概述 DMAC功能 总线请求信号HOLD 总线请求响应信号HOLDA 工作过程 小结

代码随想录算法训练营第五十九天

想想其实坚持下来也不是很难&#xff0c;不过有很多题做一遍应该是记忆没那么深&#xff0c;anyway&#xff0c;要继续往换工作的方向走啊。加油&#xff01;&#xff01; 503.下一个更大元素II 想对了地方&#xff0c;但是没有坚持&#xff0c;应该搞两遍&#xff0c;就把所有…

景源畅信:新手做抖音运营难不难?

在这个信息爆炸的时代&#xff0c;社交媒体平台如抖音已经成为了人们日常生活中不可或缺的一部分。随着抖音的兴起&#xff0c;越来越多的人开始尝试进入这个领域&#xff0c;希望通过抖音运营实现自己的价值。然而&#xff0c;对于新手来说&#xff0c;抖音运营是否真的容易呢…