【深度学习目标检测】三、基于深度学习的人物摔倒检测(python,yolov8)

news2024/11/15 8:25:41

深度学习目标检测方法则是利用深度神经网络模型进行目标检测,主要有以下几种:

  1. R-CNN系列:包括R-CNN、Fast R-CNN、Faster R-CNN等,通过候选区域法生成候选目标区域,然后使用卷积神经网络提取特征,并通过分类器对每个候选区域进行分类。
  2. SSD:Single Shot MultiBox Detector,通过在特征图上利用不同大小和形状的卷积核进行目标检测,同时预测目标的类别和位置。
  3. YOLO:You Only Look Once,将目标检测问题转化为回归问题,通过将图像分割成网格单元,并预测每个单元中是否存在目标以及目标的位置和类别。
  4. RetinaNet:通过引入Focal Loss解决目标检测中类别不平衡问题,提高了小目标的检测效果。

YOLOv8是一种用于对象检测的深度学习模型,它是YOLO系列模型的最新版本。本文介绍了基于Yolov8的任务摔倒检测模型,包括训练过程和数据准备过程,同时提供了推理的代码。对准备计算机视觉相关的毕业设计的同学有着一定的帮助。

效果如下图,可以看到,躺着的人都被检测出来了:

示例2:

一、安装yolov8

yolov8官方文档:https://docs.ultralytics.com/zh/

安装部分参考:官方安装教程

二、数据集处理

本次训练使用的摔倒数据集来自aistudio摔倒数据集,该数据集默认的格式是VOC格式,使用yolov8训练需要转换数据集格式。

该数据集包含3个类别:正常、摔倒、其他

其示例图片如下:

数据集的格式转换可以参考:官方数据集格式转换教程

本文提供已经完成转换的数据集,可以使用yolov8直接训练(因为有的数据有问题,训练的时候可能有警告,但是可以忽略):yolov8格式的任务摔倒数据集

三、修改yolov8配置文件

1、添加数据集配置文件

在ultralytics/ultralytics/cfg/datasets目录下添加fall.yaml,添加以下内容:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco  ← downloads here (20.1 GB)


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: datasets/fall/fall-yolov8  # 改成你的数据集的路径,最好用绝对路径
train: images/train 
val: images/val  
test: images/val  

# Classes
names:
  0: person
  1: down
  2: other


2、添加模型配置文件

在ultralytics/ultralytics/cfg/models/v8目录下添加yolov8n_fall.yaml,添加以下内容:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 3  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

3、开始训练

使用如下命令(命令中的配置文件路径可以根据自己的需要改成绝对路径):

yolo detect train project=deploy name=yolov8_fall exist_ok=True optimizer=auto val=True amp=True epochs=100  imgsz=640 model=ultralytics/ultralytics/cfg/models/v8/yolov8_fall.yaml  data=ultralytics/ultralytics/cfg/datasets/fall.yaml

4、评估

评估命令如下:

yolo detect val imgsz=640 model=deploy/yolov8_fall/weights/best.pt data=ultralytics/ultralytics/cfg/datasets/fall.yaml

结果如下:

四、推理

训练好了模型之后,可以使用如下的命令轻松推理,将best.pt复制到推理代码同级目录:

from PIL import Image
from ultralytics import YOLO

# 加载预训练的YOLOv8n模型
model = YOLO('best.pt')

# 在'bus.jpg'上运行推理
image_path = 'people(16).jpg'
results = model(image_path)  # 结果列表

# 展示结果
for r in results:
    im_array = r.plot()  # 绘制包含预测结果的BGR numpy数组
    im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像
    im.show()  # 显示图像
    im.save('results.jpg')  # 保存图像

本文也提供训练好的权重和预测代码:摔倒检测yolov8的训练权重和推理代码

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

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

相关文章

【高效开发工具系列】DataGrip入门

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

数据分享 I 全国市级商品房屋销售数据,shp/excel格式,2005-2020年数据

基本信息. 数据名称: 全国市级商品房屋销售数据 数据格式: Shp、excel 数据时间: 2005-2020年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源:网络公开数据 数据字段: 序号字段名称字段说明1spxse商品房销售额(亿元&#xf…

主卧卫生间门对着床,怎么设计才能让你好好睡觉呢?福州中宅装饰,福州装修

主卧卫生间门对着床,一抬眼就能和卫生间来一个对视,心里很膈应,那么怎么解决这个问题呢? 1️⃣门改方向 首先,你可以考虑把卫生间门的开门方向改一下。如果卫生间门是向外开的,你可以考虑把门换成向内开的…

吴恩达《机器学习》12-4-12-5:核函数 1、核函数 2

一、核函数 1 1. 多项式模型的局限性 在之前的学习中,了解到可以使用多项式模型来解决无法用直线进行分隔的分类问题。例如,对于判定边界的建模,可能会使用类似于以下形式的模型: 然而,这样的多项式模型在实际应用中…

ALV动态GUI标题

导语:快两个月没有分享内容了,积攒了一大堆,最近经历了一些变动,有些充实和忙碌,最近在做的客制化平台中,顾问需要在不同的按钮对应的ALV中,展示不同的GUI标题。 效果图: 实现方法&a…

大模型概述

文章目录 大模型语言大模型视觉大模型多模态大模型 大模型 所谓 大:模型结构大, 参数量大,训练数据量大 大模型包含数十亿个参数,模型大小可以达到数百GB甚至更大。这种巨大的模型规模为其提供了强大的表达能力和学习能力多任务…

网络安全——SQL注入实验

一、实验目的要求: 二、实验设备与环境: 三、实验原理: 四、实验步骤: 五、实验现象、结果记录及整理: 六、分析讨论与思考题解答: 七、实验截图: 一、实验目的要求: 1、…

【DC-DC】世微 AP9166 降压恒压芯片 18V 2A同步降压转换器

600KHz,18V,2A同步降压转换器 概述 AP9166是一款完全集成的效率2A同步整流降压转换器。AP9166运行在宽输出电流上以高效率 负载范围。此设备提供两个操作模式、PWM控制和PFM模式切换控制,允许更宽范围的高效率 负载AP9166至少需要现成标准的…

亲测好用的国内AI绘画工具TOP榜,中文输入,新手友好!

“如果不想被AI工具替代,那就先成为用好工具的人。” 最近AI绘画也是大火,上次给大家整理了9款国内实用的AI工具,很多小伙伴就私信我能不能整理一下关于国内可用的AI绘画工具,因为现在最火的AI绘画工具Midjourney和Stable Diffus…

换内核ubuntu

grep menuentry /boot/grub/grub.cfg我要使用第三个(索引从0开始,所以是第二个) 可以使用vi编辑(很麻烦) i变为插入模型 esc变为普通模型 :x删除单个字符,dd删除一行,:wq保存并退出 更新文件…

ArkTS 任务统计页面

我们继续学习使用ArkTS实现一个任务进度的统计功能。 1.公共的组件、样式 class Task{static id: number 1// 任务名称name: string 任务${Task.id}// 任务状态: 是否完成finished: boolean false }// 统计的卡片样式 Styles function card(){.width(95%).padding(20).backg…

c#按照时间进行数据存储(不用数据库)

概要介绍 按照日期生成文件夹,按照时间生成文件名,存储字符串。 可以用于简单数据记录(如果数据存储考虑格式文本,保存为csv格式) 实现效果 调用方法 SaveText.saveStr("测试字符串"DateTime.Now.ToStrin…

LeetCode 2132. 用邮票贴满网格图:二维前缀和 + 二维差分

【LetMeFly】2132.用邮票贴满网格图:二维前缀和 二维差分 力扣题目链接:https://leetcode.cn/problems/stamping-the-grid/ 给你一个 m x n 的二进制矩阵 grid ,每个格子要么为 0 (空)要么为 1 (被占据&…

关于git clone速度极慢的解决方法

!!!!前提条件:得有一个可靠且稳定的梯子,如果没有接下来的就不用看了 前言:我在写这篇文章前,也搜索过很多相关git clone速度很慢的解决方法,但是很多很麻烦&#xff0c…

系统规划与管理师和信息系统项目管理师哪个好考?

软考系统规划与管理师和信息系统项目管理师是软考中备受关注的两个证书。这两个证书的相关知识领域广泛,对于从事IT行业的人们来说,都具有相当的吸引力。那么,对于考生而言,究竟哪个证书更适合呢?接下来,我…

MQTT 介绍与学习 —— 筑梦之路

之前写过的相关文章: MQTT协议(转载)——筑梦之路_mqtt url-CSDN博客 k8s 部署mqtt —— 筑梦之路-CSDN博客 CentOS 7 搭建mqtt服务——筑梦之路_腾讯云宝塔搭 centos 7.9.2009 x86_64 建标准mqtt服务器-CSDN博客 mqtt简介 MQTT&#xff…

NV040D语音芯片应用于取暖桌:智能语音提高用户体验

科技与生活的结合,是科技发展的展示。天气的降温,取暖桌越来越取得用户的心,时至今日传统的取暖桌已经没有办法满足用户的需求,智能语音取暖桌给用户的生活带来了不一样的体验。 NV040D语音芯片是一款性能稳定的芯片,拥…

strtok()的用法及实现哦

1. 用法 1. 声明:char *strtok(char *str, const char *delim) str -- 要被分解成一组小字符串的字符串。第一次调用 strtok() 时,这个参数应该是你想要分割的字符串。随后的调用应该将此参数设置为NULL,以便继续从上次的位置分割。delim -- …

弹性搜索引擎Elasticsearch:本地部署与远程访问指南

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装…

前端常用去重的几种方式

文章目录 方式1: ES6新语法方式2: 遍历 利用filter方式3: 使用 new Map() for循环方式4: 利用 hasOwnProperty总结 在github 查看该文章 方式1: ES6新语法 过滤出网页中不重复的html标签 结合去重知识点考查 […new Set([…document.querySelectorAll(‘*’)].map(v>v.t…