改进YOLO的群养猪行为识别算法研究及部署(小程序-网站平台-pyqt)

news2024/12/23 8:50:05

概述

在这里插入图片描述

群养猪的运动信息和行为信息与其健康状况息息相关,但人工巡视费时费力,本实验提出采用行为识别算法于群养猪的养殖管理中,识别群养猪drink(饮水)stand(站立)lie(躺卧)行为,为自动化养殖提供基础。本项目最终以三种不同的形式进行部署,分别为:

  • 网站平台
  • 微信小程序
  • PyQt应用程序

实验流程

下图是基于改进YOLOv5s的群养猪行为识别模型建立流程,可概括为以下几个阶段:数据集的准备工作,YOLOv5模型的搭建,模型结构的调优和模型的部署。

在这里插入图片描述

数据集的准备工作

关于群养猪的行为相关的数据集十分难获取,尤其是饮水行为的数据集。进行数据集的准备工作时,首先通过在生猪养殖场抓拍特定行为的图片和编写脚本爬取网络图片来采集数据集,然后使用labelImg软件进行数据集的标注,并将群养猪的行为定义为drink(饮水)、stand(站立)和lie(躺卧),标注完成后编写代码将标注数据转化为txt格式,原始图片和txt格式的标注文件共同构成群养猪行为识别数据集。

YOLOv5模型的搭建

在YOLOv5s模型的搭建阶段,将输入端、骨干网络、颈部网络和头部网络按照一定组织结构连接起来,同时可在yolov5/models/yolov5s.yaml文件中按需修改骨干网络和头部网络的结构,修改后可通过运行yolov5/models/yolo.py文件查看网络结构。

注意:YOLOv5模型的搭建对应的工作目录是yolov5

模型结构的调优

在模型结构的调优阶段,在深度学习平台中开始对模型进行训练,直到模型收敛,然后对模型进行测试,比较并调整模型结构,周而复始,直到得到适用于群养环境下密集拥挤的生猪检测场景的模型。

在YOLOv5s基础上,提出两种改进群养猪行为识别方法。第一点改进为:将坐标注意力模块(Coordinate Attention,CA)融合在YOLOv5s的骨干网络之后,记为YOLOv5s_CA。CA能够突出特征图的重要行为特征,抑制一般特征,对比于基于YOLOv5s群养猪行为识别算法,该模型的召回率、F1得分和mAP@0.5均有提升,分别为90.6%,0.897和93.0%。第二点改进为:在YOLOv5s_CA的基础上,用DIoU-NMS后处理算法替换NMS,记为改进YOLOv5s_CA。该改进方法在行为识别预测阶段,能够有效保留图像中密集遮挡的目标生猪检测框,降低生猪的漏检率。下图为改进YOLOv5s_CA的网络结构:

在这里插入图片描述

下表为基于YOLOv5s网络的消融实验结果:

CADIoU-NMS精确率(%)召回率(%)F1mAP@0.5(%)推理时间
--92.486.40.89392.92.475ms/张
-88.890.60.89793.02.725ms/张
-88.493.10.90793.66.600ms/张
90.991.50.91294.16.763ms/张

注意:YOLOv5模型结构的调优对应的工作目录是yolov5

模型的部署

通用中间格式ONNX

首先将自己训练得到的群养猪行为识别模型,转换为机器学习通用中间格式ONNX,为后续ONNX Runtime部署奠定基础。导出ONNX需要声明输入图像的大小,我指定为640×640​,其核心代码如下:

torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'],
                   dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'},  # size(1,3,640,640)
                                'output': {0: 'batch', 2: 'y', 3: 'x'}} if opt.dynamic else None)

注意:导出ONNX的代码为yolov5/models/export.py。在导出改进YOLOv5s_CA模型为ONNX格式时,坐标注意力中使用了nn.AdaptiveAvgPool2d,这个操作符在ONNX是动态的,ONNX暂时不支持导出。因此,导出的是基于YOLOv5s的群养猪行为识别模型,并在后续的部署中使用该模型。

使用ONNX Runtime部署即可调用ONNX格式的模型,其核心代码如下:

import onnxruntime as ort
self.onnx_session = ort.InferenceSession(onnx_path)
# 推理结果
pred = self.onnx_session.run(None, input_feed)[0]  # <class 'numpy.ndarray'>(1, 25200, 9)

注意:使用ONNX进行推理的代码为yolov5_deploy/onnx_inference3.py

部署平台

  • 腾讯云
  • Ubuntu-20.04
  • CPU-2核
  • 内存-2GB
    在这里插入图片描述

使用Flask部署后端服务

使用轻量级的Flask框架编写调用YOLOv5s模型进行推理的接口,各个接口的功能如下:

接口功能
http://1.12.231.219:8083/demo上传图片并进行推理识别的demo
http://1.12.231.219:8083/upload_image上传图片
http://1.12.231.219:8083/results/查看图片
http://1.12.231.219:8083/yolo调用ONNX模型进行推理

注意:使用Flask部署后端服务的工作目录为yolov5_deploy

下图为能直接展示的Flask后端接口:
在这里插入图片描述

网站平台

网站部署网址:http://1.12.231.219/

在网站平台的实现上,实验采用Vue.js作为前端框架,使用轻量级的Flask框架编写的后端接口,采用前后端分离的方式进行网站平台的开发。下图为网站平台首页:

将网页下拉到底部,用户可以点击“选择文件”的按钮上传群养猪图片,并点击“行为识别”:

在这里插入图片描述

注意:使用Vue部署网站平台的工作目录为deepvue。Vue项目的打包部署已上传至谷歌云端

微信小程序

在微信小程序的实现上,实验使用微信开发者工具进行开发,后端采用Flask框架进行编写,以前后端分离的方式完成该项目设计与开发。由于需要域名才能上线小程序,因此微信端的部署仅限于本地开发,之后有充足的经济支持会考虑上架小程序。

微信小程序的界面如下图所示,界面划分为“登录”、 “行为识别”和“个人中心”三个部分。

群养猪行为识别检测系统(微信小程序)操作展示如下:
在这里插入图片描述

<
注意:使用开发微信小程序的工作目录为wx-pig

PyQt应用程序

在应用软件的实现上,实验采用Python和PyQt5完成对群养猪行为识别检测系统的开发,借助界面设计辅助工具QtDesigner完成应用软件的界面设计工作。应用软件的主界面如下所示,界面划分为五个模块,分别为“图片显示模块”、“图片调整模块”、“图片信息模块”、“识别结果模块”和“功能按钮模块”。
应用程序操作如下所示:
在这里插入图片描述

注意:使用PyQt开发应用程序的工作目录为yolov5_pyqt。PyQt应用程序的部署exe文件已上传至谷歌云端硬盘

更多信息

计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!

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

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

相关文章

[STM32]从零开始的STM32标准库环境搭建(小白向)

一、我们为什么要搭建STM32标准库开发环境 如果你对STM32有一定的了解&#xff0c;相信你已经认识了STM32的几种开发方式。基于STM32寄存器开发&#xff0c;基于ST官方的标准库开发&#xff0c;基于ST官方的HAL库开发。我们现在来了解一下这些库的优缺点。首先就是基于寄存器开…

【计算机组成原理】七、输入/输出系统:1.I/O基本概念、I/O设备(外部设备)

七、输入/输出系统 文章目录 七、输入/输出系统1.基本概念4. I/O设备&#xff08;外部设备&#xff09;4.1输出设备4.1.1键盘4.1.2鼠标 4.2输出设备4.2.1显示器4.2.2打印机 4.3外存设备 1.基本概念 “I/O”就是“输入/输出”( Input/Output)。 I/O系统由I/O软件和I/O硬件两部分…

精益管理:怎样选择适合的库存管理策略?

如果顾客在下单后愿意耐心等待产品制作完成&#xff0c;对于生产管理者而言&#xff0c;自然是最为方便的。一般而言&#xff0c;水电工程行承接的订单&#xff0c;顾客都只能耐心等待工作完成&#xff1b;但这只是个别情况&#xff0c;实际上大部分顾客并没有这么多耐心&#…

【k8s系列】Kubernetes Service 深度解析:从基础到实战

一、前言 在当今的云原生世界中&#xff0c;Kubernetes 已经成为容器编排和管理的事实标准。它提供了一种强大的方式来部署、扩展和管理容器化应用。然而&#xff0c;随着应用规模的扩大和复杂性的增加&#xff0c;如何有效地暴露和管理这些应用的网络服务成为了一个关键问题。…

Google Gemini 使用 | 中小型企业借助谷歌 Gemini 提高生产力的 5 种方法

Gemini Business for Workspace 融合了谷歌最强 AI 技术&#xff0c;并集成到办公产品组件中的解决方案。 无论是中型的家族企业&#xff0c;还是刚起步的小型创业团队&#xff0c;你们是否觉得一天 24 小时根本不够用&#xff1f;既要忙着客户维系和拉新&#xff0c;又要管理员…

pda移动护理终端医用手持机

随着物联网技术的发展&#xff0c;智能设备之间形成了紧密的网络互联。 医疗行业越来越注重智能设备的使用&#xff0c;医用手持机可以采集病人、药品、材料等信息&#xff0c;很大程度地改善了医院患者的管理&#xff0c;进一步提升医护人员的工作效率。 医护人员通过使用pda移…

【开学季】告别一次性AI写作工具,打造你自己的专属AI助手!

新学期的钟声敲响&#xff0c;校园里充满了书本的香气和求知的热情。&#x1f4da;可许多学生和职场人士&#xff0c;仍然依赖那些一次性的AI写作工具来完成自己的写作任务。我想问你&#xff1a;为什么不尝试自己构建一个属于自己的AI写作工作流呢&#xff1f;&#x1f914; 前…

机器学习:自然语言处理之关键词提取(TF-IDF)

目录 前言 一、TF-IDF 1.TF 2.IDF 3.TF-IDF计算法则 4.TF-IDF的本质 二、代码实现 1.导入库 2.读取文本数据 3. 初始化TfidfVectorizer并转换文本数据 4. 获取词汇表并创建 DataFrame 5.处理每篇文章的特征 总结 前言 TF-IDF&#xff08;Term Frequency-Inverse D…

MySql字段有null值与其他值的比较

MySql字段有null值与其他值的比较 SELECT count(1)在这里插入代码片FROM LAW_ENFORCEMENT_TROUBLE TBWHERE TB.STATUS 1AND TB.DUTY_LIMIT_DATE < NOW()AND TB.TROUBLE_STATUS ! 2查出结果为0条&#xff0c;但是应该为3条&#xff0c;查看表数据发现&#xff0c;TROUBLE_S…

常见图像图片属性的介绍与说明

图像属性是指图像的一些基本特征和参数&#xff0c;它们定义了图像的外观和存储方式。以下是一些常见的图像属性&#xff1a; 1. 分辨率&#xff1a; 分辨率通常以像素数&#xff08;如800x600&#xff09;来表示&#xff0c;指的是图像的宽度和高度上的像素点数。分辨率越高&…

mysql5.7 TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ 换版8版本 引发的问题

mysql5.7 TIMESTAMP NOT NULL DEFAULT 0000-00-00 00:00:00 换版引发的问题 问题背景sql_mode上机演示5.78.4 问题背景 在项目mysql版本由5.7 换版到8.4版本后&#xff0c;我们进行回归测试时&#xff0c;却发现一个积年代码报错了&#xff0c;是数据库插入报的错 xxx can not…

自用Office 365家庭版全家桶 + OneDrive 1TB拼车,40/年,来长期拼的!

自用Office 365家庭版全家桶 OneDrive 1TB拼车&#xff0c;40/年&#xff0c;来长期拼的! &#x1f50d;1.背景描述&#x1f50d;&#x1f421;2. 常见问题解答&#x1f421;【问】是正版吗&#xff1f;【问】跟普通版本有什么区别&#xff1f;【问】会不会是假货? &#x1f…

1、Java简介+DOS命令+java的编译运行(字节码/机器码、JRE/JVM/JDK/JIT的区别)+一个简单的Java程序

前言&#xff1a;本文属于黑马程序员和javaguide的混合笔记&#xff0c;仅作学习分享使用&#xff0c;建议感兴趣的小伙伴去看黑马原视频或javaguide原文。如有侵权&#xff0c;请联系删除。 Java类型&#xff1a; JavaSE 标准版&#xff1a;以前称为J2SE&#xff0c;主要用来…

掌握一招:‌输入什么命令,‌轻松查看电脑IP地址?‌

在日常使用电脑的过程中&#xff0c;‌无论是进行网络设置、‌远程连接还是解决网络问题&#xff0c;‌了解并查看自己的电脑IP地址都是一项基础且重要的操作。‌对于许多用户来说&#xff0c;‌可能并不清楚如何快速准确地获取这一信息。‌本文将为你揭秘一个简单实用的命令&a…

【数据结构与算法】:十大经典排序算法

文章目录 前言一、冒泡排序&#xff08;Bubble Sort&#xff09;1.1 冒泡排序原理1.2 冒泡排序代码1.3 输出结果 二、选择排序&#xff08;Selection Sort&#xff09;2.1 选择排序原理2.2 选择排序代码2.3 输出结果 三、插入排序&#xff08;Insertion Sort&#xff09;3.1 插…

可重入VI,VI模板和动态VI之间的差异 转

可重入VI 当您想要同时运行同一VI的多个实例时&#xff0c;将使用可重入VI。当VI不可重入时&#xff0c;VI只有一个数据空间。因此&#xff0c;一次只能有一个调用者运行VI&#xff0c;因此调用者可能必须“等待轮到它”时才能使用VI。这是VI的默认选项&#xff0c;但您可以将V…

精通大模型:八本必读书籍,一篇搞定所有知识点!

如果你想深入了解大模型领域&#xff0c;无论是为了学术研究还是实际应用&#xff0c;选择合适的书籍是非常重要的。以下是精选的八本大模型相关书籍&#xff0c;涵盖了从基础理论到高级实践的内容&#xff0c;可以帮助你构建全面的知识体系。 《大模型应用开发极简入门》 简介…

Hadoop之HDFS的原理和常用命令及API(java)

1、简介 书接上回&#xff0c;上篇博文中介绍如何安装Hadoop和基本配置&#xff0c;本文介绍Hadoop中分布式文件组件--HDFS&#xff0c;在HDFS中&#xff0c;有namenode、datanode、secondnamenode这三个角色&#xff0c;本文将详细介绍这几个组件是如何进行协作的&#xff0c;…

PHP一键预约便捷高效咨询小程序系统源码

一键预约&#xff0c;开启便捷高效咨询新时代 —— 你的专属咨询小程序 &#x1f680; 【开篇&#xff1a;告别繁琐&#xff0c;拥抱便捷新体验】 在这个快节奏的时代&#xff0c;时间就是金钱&#xff0c;效率就是生命。你还在为寻找咨询服务而四处奔波&#xff0c;或是为了预…

社区团购小程序系统源码+界面diy+分销+团长+供应商+拼团+菜谱+秒杀+预售+配送,开启社区营销新模式

社区团购小程序类似美团优选,兴盛优选平台.是一款针对小区居民开发的在线购物平台&#xff0c;旨在为用户提供便捷、实惠的购物体验&#xff1b;同时还提供了“限时抢购”和“优惠券营销”等多种实惠的购物体验&#xff0c;是小区居民们的不二之选。 一、 特点与优势 社区化运…