YOLOv8猫狗检测:从SwanLab可视化训练到Gradio Demo网站

基于YOLO模型在自定义数据上做训练,实现对特定目标的识别和检测,是CV领域非常经典的任务,也是AI项目落地最热门的方向之一。

这篇文章我将带大家使用Ultralytics、SwanLab、Gradio这两个开源工具,完成从数据集准备、代码编写、可视化训练推理Demo的全过程。

观察了一下,中文互联网上似乎很少有针对自定义数据的,能直接跑起来的YOLO训练代码和教程,所以也希望这篇文章可以帮到在科研一线的大家~

在这里插入图片描述

  • 代码:完整代码直接看本文第3、4节
  • 模型与数据集:百度云,提取码: f238
  • 实验过程:猫狗检测-SwanLab
  • SwanLab:https://swanlab.cn
  • Ultralytics:https://github.com/huggingface/transformers
  • Gradio:https://github.com/gradio-app/gradio

1.环境安装

我们需要安装以下这4个Python库:

ultralytics
swanlab>=0.3.6
gradio

一键安装命令:

pip install ultralytics swanlab gradio

他们的作用分别是:

  1. Ultralytics:YOLO官方团队推出的CV训练与推理框架,不仅支持目标检测任务,还支持分割、姿态识别、分类等更多任务。本项目用Ultralytics作为训练框架。

在这里插入图片描述

  1. swanlab: 一个深度学习实验管理与训练可视化工具,由西安电子科技大学团队打造,官网, 融合了Weights & Biases与Tensorboard的特点,可以记录整个实验的超参数、指标、训练环境、Python版本等,并可视化图表,帮助你分析训练的表现。本项目用swanlab主要用于记录指标和可视化。

在这里插入图片描述

  1. gradio: HuggingFace出品的推理Demo构建工具,是深度学习最流行的Demo框架之一,可以用python代码轻松搭建网页。本项目用Gradio作为推理Demo框架。

在这里插入图片描述

整个项目的目录结构如下:

在这里插入图片描述

2.准备数据集

数据集这里我使用的是Kaggle上的Dog and Cat Detection数据集,包含3686张带标注的猫狗图像。

在这里插入图片描述

这里除了下载数据集以外,还需要对格式做处理,所以我把做好的数据集放到百度云(提取码: f238)里了,推荐大家直接下载。

下面重点介绍一下怎么让你的自定义数据集适配Ultralytics,掌握之后,几乎所有自定义数据集的处理就都学会了。

首先,Ultralytics推荐的数据集结构是这样的:

datasets
├── images
│   ├── train
│      ├── 00001.jpg
│      ├── ...
│   ├── val
│   ├── test
├── labels
│   ├── train
│      ├── 00001.txt
│      ├── ...
│   ├── val
│   ├── test
├── data.yaml

这里面是一个数据集文件夹,包含imageslabels两个文件夹和一个data.yaml配置文件:

  • images文件夹放图像,labels文件夹放标注文件,图像和标注文件的名称要一一对应
  • imageslabels文件夹下分别放train、val、test三个子文件夹,作为训练集、验证集和测试集
  • data.yaml的格式如下:
path:  path/to/datasets # 这里填写你数据集所在的绝对路径
train: images/train
val: images/train
test: images/test# 标签和对应的类别
names:0: cat1: dog
  • 标注文件的格式如下:
0 0.618 0.127 0.299 0.226
1 0.491 0.333 0.506 0.545

每一行的第一个数字代表标签,后续的四个数字是标注框的<x1> <y1> <x2> <y2>相对于图像shape的归一化值(或者说比例)。
标签文件中出现多行则代表着图像中有多个检测到的目标。

由于Kaggle的数据集并不是按YOLO的标注格式来的,所以需要写脚本进行处理,推荐直接从百度云(提取码: f238)下载。

这里我们只做train和val。最后处理好的数据集格式如下:

在这里插入图片描述

3.开始训练-train.py

在准备好数据集之后,最艰难的步骤就结束了——训练代码非常的简短,如下所示:

from ultralytics import YOLO
from swanlab.integration.ultralytics import add_swanlab_callback
import swanlabdef main():swanlab.init(project="Cats_Dogs_Detection", experiment_name="YOLOv8n",)model = YOLO("yolov8n.pt")add_swanlab_callback(model)# 将下面的路径替换成你的绝对路径model.train(data="path/to/cats_dogs_dataset/data.yaml", epochs=5, imgsz=320, batch=32)if __name__ == "__main__":main()

请将model.train中data参数的路径替换成你的data.yaml的绝对路径。

这里我们使用了yolov8n模型(6MB左右)训练5个epoch,batchsize为32,并使用swanlab进行训练可视化。

在运行训练脚本的时候,如果你是第一次使用swanlab,那么需要去swanlab官网注册一个账号,然后在用户设置界面复制API Key,然后在命令行输入swanlab login,粘贴API Key即可完成登录。

训练过程(可访问猫狗检测-SwanLab查看):

在这里插入图片描述

我这里做了个两个实验,分别使用yolov8n和yolov8s两个模型训练100个epoch,可以看到最终的结果,指标非常的不错:

在这里插入图片描述

在这里插入图片描述

训练好的模型会存放在Ultralytics自动生成的runs文件夹下。

4.推理代码-predict.py

from ultralytics import YOLO# 载入训练好的模型
model = YOLO("path/to/model.pt")
# 推理多张图像
results = model(["img1.jpg", "img2,jpg"], device="cpu")# 保存结果图
for iter, result in enumerate(results):result.save(filename=f"result{iter}.jpg")

5.Gradio推理Demo-app.py

import gradio as gr
from ultralytics import YOLO
from PIL import Image# 加载预训练的 YOLO 模型
model = YOLO('path/to/best.pt')def predict_image(image, conf_threshold, iou_threshold):# 使用模型进行推理results = model.predict(source=image, conf=conf_threshold,iou=iou_threshold,show_labels=True,show_conf=True,imgsz=640,)# 提取结果for r in results:im_array = r.plot()im = Image.fromarray(im_array[..., ::-1])return im# 定义 Gradio 接口
demo = gr.Interface(fn=predict_image,inputs=[gr.Image(type="pil", label="Upload Image"),gr.Slider(minimum=0, maximum=1, value=0.25, label="Confidence threshold"),gr.Slider(minimum=0, maximum=1, value=0.45, label="IoU threshold"),],outputs=gr.Image(type="pil", label="Result"),title="猫狗检测Demo",description="传一张带有猫狗的图像来进行推理。",
)# 启动 Gradio 应用
if __name__ == "__main__":demo.launch()

运行程序后,会出现以下输出:

在这里插入图片描述

点开链接,出现猫狗检测的Demo网页:

在这里插入图片描述

用猫和狗的图片试试:

在这里插入图片描述

效果很完美!

至此,我们完成了用Ultralytics、SwanLab、Gradio三个开源工具训练1个猫狗检测模型的全部过程,更多想了解的可以参考相关链接或评论此文章。

如果有帮助,请点个赞和收藏吧~

5. 相关链接

  • 在线看实验过程:猫狗检测 · SwanLab
  • SwanLab:https://swanlab.cn
  • 数据集:百度云,提取码: f238

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

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

相关文章

深入剖析:探究编程领域就业热点的地理分布

深入剖析&#xff1a;探究编程领域就业热点的地理分布 在数字化浪潮席卷全球的时代&#xff0c;编程技能无疑成为求职市场的热门标签。然而&#xff0c;对于编程爱好者而言&#xff0c;寻找最佳就业地点却成为一项颇具挑战性的任务。究竟什么地方编程最好找工作&#xff1f;本…

第十八节:带你梳理Vue2: Vue组件中的注意事项和特例

1. Vue组件名推荐使用驼峰命名 现在我们来看看为什么在Vue中推荐注册组件时使用驼峰写法, 在了解这个之前,相信大家应该都能明白为什么在Vue中, 局部组件的使用频率高于全局组件. 推荐使用驼峰写法也是和局部组件有关系 我们先看一个示例 <div id"app"><…

vue el-carousel走马灯实现显示多张(5张)和(7张)

vue el-carousel走马灯实现显示多张&#xff08;5张&#xff09;和&#xff08;7张&#xff09; 父组件不用修改&#xff0c;仅在子组件源码的基础上进行修改即可 直接上代码 <template><div><el-carousel v-if"typeitem5_xybjzq || typeitem5_qdbjzq&quo…

2、PHP 8.1.0-dev 后门远程命令执行漏洞复现

1、青少年ctf&#xff0c;题目PHP后门 2、页面 3、bp抓包发现PHP版本为8.1.0-dev 4、尝试使用以前爆出过的漏洞&#xff08;网上查相关案例&#xff09; User-Agentt: zerodiumvar_dump(5*5); User-Agentt: zerodiumsystem("cat /flag"); 5、查找flag User-Agentt: z…

C语言与内存息息相关的重要概念有哪些?

一、问题 C语⾔、C语⾔和C#语⾔&#xff0c;这三门语⾔&#xff0c;⼀个⽐⼀个加号&#xff08;&#xff09;多&#xff0c;C语⾔没有加号&#xff0c;C有两个加号&#xff0c;C#有四个加号。随着语⾔的发展&#xff0c;⼀个⽐⼀个简单&#xff0c;很多问题系统都给做了&#x…

关于Infinity在不同的编程语言中的含义

在不同的编程语言中&#xff0c;Infinity&#xff08;或等价的概念&#xff09;通常用来表示一个比任何有限数都要大的数值。它是浮点数类型的一个特殊值&#xff0c;用于表示当一个数超过了该类型能够表示的最大值时的情况。例如&#xff0c;在JavaScript、Python、Java、C#等…

双向带头链表实现

目录 一. 逻辑结构图解 1. 节点中存储的值 2.逻辑实现 二. 各种功能实现 1. 创建节点函数 2. 初始化哨兵位 3. 尾插 4. 头插 5. 尾删 6. 头删 7. 打印链表值 8. 查找数据&#xff0c;返回节点地址 9. 指定地址后插入节点 10. 删除指定地址节点 11. 销毁链表 三.…

vue2 自定义ant design vue (组件) 的message内容 及 vue 定义公用方法流程

1 modules.js import { Button, message } from ant-design-vue; function downFile(){ alert(下载) } export default { // 成功提示 success(_this,content,size = 14) { // message.success({ // content : h => // _this.$createElement(span, [ // …

JAVA云HIS医院系统源码 云HIS运维平台源码 融合B/S版电子病历系统,支持电子病历四级,saas模式

JAVA云HIS医院系统源码 云HIS运维平台源码 融合B/S版电子病历系统&#xff0c;支持电子病历四级&#xff0c;saas模式 HIS系统就是医院信息管理系统&#xff0c;HIS系统是整个医院信息化的核心&#xff0c;门诊、住院、药房、药库等都是由HIS系统来承载起来的&#xff0c;所以…

【Spring】深入学习AOP编程思想的实现原理和优势

【切面编程】深入学习AOP编程思想的实现原理和优势 前言AOP的由来及AOP与代理的关系AOP的实现方式详解静态代理动态代理 AOP的应用场景记录日志权限控制数据库事务控制缓存处理异常处理监控管理 AOP的底层实现全流程解析Spring AOP的简介动态代理的实现原理Spring AOP的实现原理…

rockeylinux 搭建k8s 1.28.10

1.关闭防火墙 systemctl stop firewalld systemctl disable firewalld 2.关闭selinux # 临时禁用selinux # 将 SELinux 设置为 permissive 模式&#xff08;相当于将其禁用&#xff09; setenforce 0 sed -i s/^SELINUXenforcing$/SELINUXpermissive/ /etc/selinux/config 3.网…

tinyrenderer-渲染器着色

整理了代码&#xff0c;创建了一个相机类&#xff0c;控制镜头 class Camera { public:Camera(Vec3f cameraPos, Vec3f target, Vec3f up):cameraPos_(cameraPos), target_(target), up_(up) {}Matrix getView();Matrix getProjection(); private:Vec3f cameraPos_;Vec3f targ…

安装Chrome扩展程序来 一键禁用页面上的所有动画和过渡。有那些扩展程序推荐一下

要安装Chrome扩展程序来一键禁用页面上的所有动画和过渡&#xff0c;以下是一些推荐的扩展程序&#xff1a; Toggle CSS Animations and Transitions 功能&#xff1a;此扩展程序允许用户轻松地在网页上切换CSS动画和过渡的开启与关闭状态。使用方法&#xff1a;安装后&#x…

2024年区块链,物联网与信息技术国际会议(ICBITIT 2024)

2024年区块链&#xff0c;物联网与信息技术国际会议&#xff08;ICBITIT 2024&#xff09; 2024 International Conference on Blockchain, Internet of Things, and Information Technology 会议简介&#xff1a; 2024年区块链&#xff0c;物联网与信息技术国际会议&#xff…

ML307R OpenCPU UDP使用

一、UDP通信流程 二、示例 三、UDP通信代码 一、UDP通信流程 ML307R UDP 是使用LWIP的标准的通信,具体UDP流程可以自行百度 二、示例 实验目的:实现把接收的数据再发送到服务端 测试网址:UDP电脑端测试网址 因为是4G,所以必须用外网的 /* 测试前请先补充如下参数 */…

Flutter 中的 CupertinoTimePicker 小部件:全面指南

Flutter 中的 CupertinoTimePicker 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CupertinoTimePicker 是 Cupertino 组件库中的一个 widget&#xff0c;它提供了一个 iOS 风格的时间和日期选择器。这个选择器允许用户通过滚动选择器来选择时间&#xff0c;非常适合需…

halcon3D学习备份

目录 xyz_to_object_model_3d 1 gen_object_model_3d_from_points 1 object_model_3d_to_xyz 2 segment_object_model_3d 2 prepare_object_model_3d 4 distance_object_model_3d 5 area_object_model_3d 7 project_object_model_3d 8 surface_normals_object_model_3d 9 sampl…

css样式,点击 箭头方向上下转换

实现效果&#xff1a; 点击切换箭头方向 实现代码 <divclass"modelPart"click"showClick"><div class"modelPart_left"><img:srcaidefalutIconclass"sNodeIcon"><div>{{ selectModel }}</div><div …

Scala的简单认识

Scala编程基础 小白的Scala学习笔记 2024/5/21 上午某一时刻 文章目录 Scala编程基础spark是用Scala开发出来的Scala的优点 打开idea 搜索scala&#xff0c;安装 如果不小心点了取消&#xff0c;或者没有上图的提示&#xff0c;就在依赖里面添加 spark是用Scala开发出来的 类比…

英语学习笔记21+23——Which book?/Which glasses?

Which book?/Which glasses? 哪本书&#xff1f;/哪些杯子&#xff1f; 词汇 Vocabulary give v. 给 搭配&#xff1a;Give me five! 击掌庆祝 用法&#xff1a;give 人 东西     give 东西 to 人    把……东西给某人 例句&#xff1a;把这些苹果给 Bobby.   …