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

news2024/9/20 17:35:43

导  读

    本文主要介绍如何使用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.coloradmin.cn/o/1703251.html

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

相关文章

【智能算法】青蒿素优化算法(AO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年,C Yuan受到青蒿素药物治疗疟疾过程启发,提出了青蒿素优化算法(Artemisinin Optimization, AO)。 2.算法原理 2.1算法思想 AO灵感来…

在C++中自定义命名空间,在命名空间中定义string变量,同时定义一个函数实现单词逆置

代码 #include <iostream> #include <cstring> using namespace std; namespace my_space {string s;void reverse(string s);//定义逆置函数 } using namespace my_space; void my_space::reverse(string s){int lens.size();int i0;int jlen-1;while(i<j){//…

MongoDB 和 AI 赋能行业应用:电信和媒体

欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第二篇。 本系列重点介绍 AI 应用于不同行业的关键用例&#xff0c;涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 电信行业的经营环境以利润空间狭小为特点&#xff0c;尤其是在差异化极小的商品…

markdown画时序图的时候,如何自动显示每一条时序的序号

1: 现象描述 今天画时序图的时候&#xff0c;发现时序上面没有显示序号&#xff0c;看起来不够清晰&#xff0c;只有单纯的说明; 如下图所示 刚测试CSDN的时序图&#xff0c;默认是带序号的&#xff0c;看起来和实际使用的markdown工具有关系&#xff1b; 2&#xff1a;解决办…

MIT6.828 Lab2-1 Using gdb

Using gdb gdb使用&#xff1a; xv6 gdb调试方法 问题1&#xff1a; Looking at the backtrace output, which function called syscall? 按照提示开启gdb后键入&#xff1a; b syscall c layout src backtrace输出结果&#xff1a; (gdb) backtrace #0 syscall () at k…

nodejs开发入门01启动服务器

目录 1 创建项目2 初始化项目3 创建app.js4 服务器启动代码5 浏览器里访问6 部署到云服务器总结 nodejs是一个服务器运行环境&#xff0c;可以让我们搭建我们自己的服务器&#xff0c;接收客户端的请求&#xff0c;并给出响应。第一篇我们介绍一下服务器的搭建以及启动过程。 1…

Compose学习记录(1)

Compose学习记录(1) 简易使用HelloWorld。 新建一个工程&#xff0c;它已经默认启用了compose特性。MainActivity继承自 ComponentActivity&#xff0c;可以用compose来编写UI界面。 // sample 1: simple VersionsetContent {Text("Hello World.")}一个函数&#xf…

【项目】教你手把手完成博客系统(三)显示用户信息 | 实现退出登录 | 实现发布博客

文章目录 教你手把手完成博客系统&#xff08;三&#xff09;7.实现显示用户信息1.约定前后端交互接口2.前端通过ajax发起请求3.服务器处理请求 8.实现退出登录1.约定前后端的接口2.前端发起请求3.服务器处理请求 9.实现发布博客1.约定前后端的交互接口2.前端构造请求3.服务器处…

.NET调用阿里云人脸核身服务端 (ExecuteServerSideVerification)简易流程保姆级教学

需要注意的是&#xff0c;以下内容仅限基础调用 功能说明 该功能是输入核验人的姓名和身份证以及人脸照片&#xff0c;去阿里库里面匹配&#xff0c;3个信息是否一致&#xff0c;一致则验证通过&#xff0c;需要注意的是&#xff0c;人脸有遮挡&#xff0c;或者刘海&#xff0…

三分钟“手撕”顺序表与ArrayList

前言&#xff1a; 实现顺序表的代码放开头&#xff0c;供大家更好的查阅&#xff0c;每个方法都有代码的实现。 其次我会讲解Java自带的ArrayList的实例&#xff0c;扩容机制ArrayList使用方法&#xff0c;遍历以及它的优缺点。 目录 一、自己实现的顺序表 二、Java的ArrayLi…

Flutter中如何让Android的手势导航栏完全透明?

Flutter 开发中 安卓机器都有 像ios 的手势操作栏&#xff0c; 也就是屏幕底下的 那条线。 但这条线默认是有颜色的 &#xff08;像下面这样&#xff09; 一、全屏幕方式 void main() {// 全屏沉浸式SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []…

解决Error: error:0308010C:digital envelope routines::unsupported的四种解决方案

问题描述&#xff1a; 报错&#xff1a;Error: error:0308010C:digital envelope routines::unsupported 报错原因&#xff1a; 主要是因为 nodeJs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制&#xff0c;nodeJs v17 之前版本没影响&am…

ROS学习笔记(16):夹缝循迹

0.前言 在笔记的第15期对巡墙驾驶的原理进行了简单讲解&#xff0c;而这期我们来讲一下夹缝循迹&#xff0c;也常被叫follow the gap&#xff0c;也更新一些概念。 1.探索式路径规划与避障 1.概念 无预先建图的路径规划叫探索式路径规划&#xff0c;例如巡墙循迹和夹缝循迹&…

解决 Spring Boot 应用启动失败的问题:Unexpected end of file from server

解决 Spring Boot 应用启动失败的问题&#xff1a;Unexpected end of file from server 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的…

启动docker报错:Failed to listen on Docker Socket for the API.

说明&#xff1a; 1、安装部署docker完成后&#xff0c;启动docker报错&#xff1a;Failed to listen on Docker Socket for the API&#xff0c;如下图所示&#xff1a; 2、将SocketGroupdocker更改成&#xff1a;SocketGrouproot即可 一、解决方法&#xff1a; 1、执行命令…

nodejs安装配置

nodejs安装 打开nodejs官网(https://nodejs.org/en/download/package-manager)&#xff0c;参考安装步骤操作。 更新镜像源 输入以下命令&#xff0c;将npm的镜像源设置为淘宝镜像。网上资料中&#xff0c;淘宝镜像地址多为https://registry.npm.taobao.org&#xff0c;这个…

OpenBayes 一周速览|TripoSR 开源:1 秒即 2D 变 3D、经典 GTZAN 音乐数据集上线

公共资源速递 This Weekly Snapshots &#xff01;5 个数据集&#xff1a; FER2013 面部表情识别数据集 GTZAN 音乐流派分类数据集 MVTec-AD 工业异常检测数据集 UCAS-AOD 遥感目标检测数据集 Oxford 102 Flowers 花卉图片数据集 3 个教程&#xff1a; Latte 全球首个开…

C++青少年简明教程:switch语句

C青少年简明教程&#xff1a;switch语句 在C中&#xff0c;switch语句用于基于一个表达式的值来执行不同的代码块。这个表达式通常是一个整数类型&#xff08;如int&#xff0c;char&#xff0c;或枚举类型&#xff09;&#xff0c;并且case标签必须是整数常量表达式。 语法格…

VBA高级应用30例:实现在列表框内及列表框间实现数据拖动

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

【学习记录】服务器转发使用tensorboard

场景 代码在服务器上运行&#xff0c;想使用tensorboard查看训练的过程。 但是服务器上不能直接访问地址&#xff0c;所以要转发端口到本地&#xff0c;从而在本地网页中能够打开tensorboard。 参考&#xff1a;https://zhuanlan.zhihu.com/p/680596384 这时我们需要建立本地…