基于YOLOv3实现跌倒检测

本教程介绍如何用PaddleDetection的YOLOv3模型实现摔倒检测。步骤包括解压VOC格式数据集、安装相关包、划分数据集,修改配置文件后训练模型,还涉及模型评估、预测及可视化,最后说明Paddle Inference、Serving、Lite等部署方式,mAP达80.28%,可用于监控场景。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

基于yolov3实现跌倒检测 - 创想鸟

基于YOLOv3模型实现摔倒检测

教程目的: 通过PaddleDetection API熟悉经典的目标检测框架,为下一步自己手写实现目标检测网络打基础

教程内容: 以PaddleDetection API中的特色模型为例,介绍网络结构,以及如何使用此框架训练自己的数据集

数据准备: 本教程基于易华录开发者社区的人体摔倒姿态检测数据实现了摔倒检测模型的训练。

PaddelDetection: 为方便读者体验,存放在PaddleDetection。

其他说明: 本教程所有命令均在Notebook中执行。

      

本次项目实验步骤以及实验结果
       

本次实验通过使用PaddleDetection2.0中的YOLOv3(主干网络为mobilenetv3的轻量化模型),通过几行代码就能实现跌倒的目标检测,后期可部署用于监控医院、疗养院甚至家里等。

基于YOLOv3实现跌倒检测 - 创想鸟        

按以下几个步骤来介绍项目实现流程。

解压自定义的数据集;

下载安装PaddleDetection包;

自定义数据集划分;

选择模型(本次选择YOLO-v3)进行训练:训练的配置文件说明;

效果可视化:使用训练好的模型进行预测,同时对结果进行可视化;

模型评估和预测:评估模型效果;

预测结果

PaddleDetection 预测部署

检测效果如下图所示: 基于YOLOv3实现跌倒检测 - 创想鸟        

数据和环境准备

数据解压

将把完成好标注的跌倒图片(VOC格式数据集)进行解压。

In [ ]

!unzip -oq /home/aistudio/data/data115779/fall.zip -d /home/aistudio/work/

   

准备环境

目前代码的版本是release/2.0,需要使用PaddlePaddle2.0.2版本。

In [ ]

! git clone https://gitee.com/paddlepaddle/PaddleDetection.git

   

安装PaddleDetection依赖库:

In [17]

%cd /home/aistudio/PaddleDetection/!pip install -r requirements.txt

   

自定义数据集的划分

本案例原始数据存在标注错误的情况,如标注数据中图像长宽为0,本案例将这部分数据剔除掉,不参与训练和测试。

将数据集按照9:1的比例进行划分,并生成train.txt和val.txt进行训练

In [ ]

import randomimport osimport xml.etree.ElementTree as ET#生成train.txt和val.txtrandom.seed(2020)data_root_dir = '/home/aistudio/work/fall'path_list = list()labels = []#['down','person']#设置你想检测的类别print("数据总数:",len(os.listdir(data_root_dir))/2)for img in os.listdir(data_root_dir):    if not img.endswith(".jpg"):        continue    img_path = os.path.join(data_root_dir,img)    xml_path = os.path.join(data_root_dir,img.replace('jpg', 'xml'))    # 读取xml获取标签    tree = ET.parse(xml_path)    root = tree.getroot()    # 有些数据标注有问题,如图像大小为空0,过滤掉    size=root.find('size')    width = float(size.find('width').text)    height = float(size.find('height').text)    if width==0 or height==0:        continue        for obj in root.iter('object'):        difficult = int(obj.find('difficult').text)        cls_name = obj.find('name').text.strip().lower()        if cls_name not in labels:            labels.append(cls_name)     path_list.append((img_path, xml_path))print("有效数据个数:",len(path_list))random.shuffle(path_list)ratio = 0.9train_f = open('/home/aistudio/work/train.txt','w') #生成训练文件val_f = open('/home/aistudio/work/val.txt' ,'w')#生成验证文件for i ,content in enumerate(path_list):    img, xml = content    text = img + ' ' + xml + 'n'    if i < len(path_list) * ratio:        train_f.write(text)    else:        val_f.write(text)train_f.close()val_f.close()#生成标签文档print(labels)with open('/home/aistudio/work/label_list.txt', 'w') as f:    for text in labels:        f.write(text+'n')

       

数据总数: 7782.0有效数据个数: 7713['down', 'person', '10+', 'dog']

       

模型训练

用户在选择好模型后,只需要改动对应的配置文件后,只需要运行train.py文件,即可实现训练。

本项目中,使用YOLOv3模型里的yolov3_mobilenet_v3_large_ssld_270e_voc.yml进行训练

配置文件示例

我们使用configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml配置进行训练。 在PaddleDetection2.0中,模块化做的更好,可以可自由修改覆盖各模块配置,进行自由组合。

基于YOLOv3实现跌倒检测 - 创想鸟        

       

配置文件结构说明
       

       

配置文件详细说明

从上图看到yolov3_mobilenet_v3_large_ssld_270e_voc.yml配置需要依赖其他的配置文件。在该例子中需要依赖:

基于YOLOv3实现跌倒检测 - 创想鸟        

在修改文件之前,先给大家解释一下各依赖文件的作用:

  '_base_/optimizer_270e.yml',主要说明了学习率和优化器的配置,以及设置epochs。在其他的训练的配置中,学习率和优化器是放在了一个新的配置文件中。  '../datasets/voc.yml'主要说明了训练数据和验证数据的路径,包括数据格式(coco、voc等)  '_base_/yolov3_reader.yml', 主要说明了读取后的预处理操作,比如resize、数据增强等等  '_base_/yolov3_mobilenet_v3_large.yml',主要说明模型、和主干网络的情况说明。  '../runtime.yml',主要说明了公共的运行状态,比如说是否使用GPU、迭代轮数等等

       

数据配置如下:

configs/datasets/voc.yml

硅基智能 硅基智能

基于Web3.0的元宇宙,去中心化的互联网,高质量、沉浸式元宇宙直播平台,用数字化重新定义直播

硅基智能 62 查看详情 硅基智能

../datasets/voc.yml

metric: VOCmap_type: 11pointnum_classes: 4TrainDataset:  !VOCDataSet    dataset_dir: /home/aistudio/work    anno_path: train.txt    label_list: label_list.txt    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']EvalDataset:  !VOCDataSet    dataset_dir: /home/aistudio/work    anno_path: val.txt    label_list: label_list.txt    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']TestDataset:  !ImageFolder    anno_path: /home/aistudio/work/label_list.txt

       num_classes为目标类别数目;dataset_dir为数据存放目录;anno_path为标注文件相对路径;label_list为标签列表。

base/optimizer_270e.yml

基于YOLOv3实现跌倒检测 - 创想鸟        

epoch为训练的轮数;base_lr为初始学习率。

       

配置文件结构说明
       

       

执行训练

执行下面命令开始进行训练,需要指定训练配置文件路径-c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml,–eval参数指定在训练过程中进行评估。

In [ ]

%cd /home/aistudio/PaddleDetection!python tools/train.py -c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml --eval

   

模型评估

需要指定评估配置文件路径-c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml,被评估的模型路径-o weights=output/yolov3_mobilenet_v3_large_ssld_270e_voc/best_model.pdparams。

In [ ]

%cd /home/aistudio/PaddleDetection/!python -u tools/eval.py -c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml  -o weights=/home/aistudio/work/best_model.pdparams

   

模型预测

在执行tools/infer.py后,在output文件夹下会生成对应的预测结果。

需要指定:

预测配置文件-c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml;预测用到的模型-o weights=/home/aistudio/work/best_model.pdparams;预测的图像路径–infer_img=/home/aistudio/work/people_930.jpg。In [14]

!python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml   -o weights=/home/aistudio/work/best_model.pdparams   --infer_img=/home/aistudio/work/people_930.jpg

   

推理结果可视化:

In [18]

%matplotlib inlineimport matplotlib.pyplot as plt import cv2infer_img = cv2.imread("output/people_930.jpg")plt.figure(figsize=(15, 10))plt.imshow(cv2.cvtColor(infer_img, cv2.COLOR_BGR2RGB))plt.show()

       

               

PaddleDetection 预测部署

PaddleDetection提供了Paddle Inference、Paddle Serving、Paddle-Lite多种部署形式,支持服务端、移动端、嵌入式等多种平台,提供了完善的Python和C++部署方案。

PaddleDetection支持的部署形式说明

形式 语言 教程 设备/平台

Paddle InferencePython已完善Linux(ARMX86)、WindowsPaddle InferenceC++已完善Linux(ARMX86)、WindowsPaddle ServingPython已完善Linux(ARMX86)、WindowsPaddle-LiteC++已完善Android、IOS、FPGA、RK…

Paddle Inference部署

导出模型

导出模型,默认存储于PaddleDetection/output_inference目录

In [19]

%cd /home/aistudio/PaddleDetection!python tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml  -o weights=/home/aistudio/work/best_model.pdparams

   

使用PaddleInference进行预测

Python部署 支持CPU、GPU和XPU环境,支持,windowslinux系统,支持NV Jetson嵌入式设备上部署。参考文档python部署C++部署 支持CPU、GPU和XPU环境,支持,windows、linux系统,支持NV Jetson嵌入式设备上部署。参考文档C++部署PaddleDetection支持TensorRT加速,相关文档请参考TensorRT预测部署教程

注意: Paddle预测库版本需要>=2.1,batch_size>1仅支持YOLOv3和PP-YOLO。

In [20]

!python deploy/python/infer.py --model_dir=output_inference/yolov3_mobilenet_v3_large_ssld_270e_voc  --image_file=/home/aistudio/work/people_930.jpg --use_gpu=True

   

推理数据

推理时间:Inference: 30.33137321472168 ms per batch image

检测出目标id,置信度以及预测框的坐标:class_id:0, confidence:0.6939, left_top:[254.97,189.10],right_bottom:[333.20,224.15]

保存路径:save result to: output/fall_39.jpg

PaddleServing部署

安装 paddle serving

请参考PaddleServing中安装教程安装(版本>=0.6.0)。

导出模型

如果需要导出PaddleServing格式的模型,需要设置export_serving_model=True:

python tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml -o weights=output/yolov3_mobilenet_v3_large_ssld_270e_voc/best_model.pdparams --export_serving_model=True

       

预测模型会导出到output_inference/yolov3_mobilenet_v3_large_ssld_270e_voc目录下,分别为infer_cfg.yml, model.pdiparams,  model.pdiparams.info, model.pdmodel, serving_client/文件夹, serving_server/文件夹。

模型导出具体请参考文档PaddleDetection模型导出教程。

In [21]

# 安装paddle_serving_client!pip install paddle_serving_client

   In [22]

!python tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml -o weights=/home/aistudio/work/best_model.pdparams  --export_serving_model=True

   

使用PaddleServing进行预测

安装PaddleServing使用PaddleServing

PaddleLite部署

使用PaddleLite部署PaddleDetection模型详细案例请参考Paddle-Lite-Demo部署。更多内容,请参考Paddle-Lite

Benchmark测试

PP-YOLO模型benchmark测试为不包含数据预处理和网络输出后处理(NMS)的网络结构部分数据,导出模型时须指定–exlcude_nms来裁剪掉模型中后处理的NMS部分,通过如下命令进行模型导出和benchmark测试。

# 导出模型,通过--exclude_nms参数裁剪掉模型中的NMS部分,默认存储于output_inference/yolov3_mobilenet_v3_large_ssld_270e_voc目录python tools/export_model.py -c -c configs/yolov3/yolov3_mobilenet_v3_large_ssld_270e_voc.yml -o weights=output/yolov3_mobilenet_v3_large_ssld_270e_voc/best_model.pdparams --exclude_nms# FP32 benchmark测试CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/yolov3_mobilenet_v3_large_ssld_270e_voc --image_file=/home/aistudio/work/fall3.jpg --use_gpu=True --run_benchmark=True --run_mode=trt_fp32# TensorRT FP16 benchmark测试CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/yolov3_mobilenet_v3_large_ssld_270e_voc --image_file=/home/aistudio/work/fall3.jpg --use_gpu=True --run_benchmark=True --run_mode=trt_fp16

   In [24]

!python deploy/python/infer.py --model_dir=output_inference/yolov3_mobilenet_v3_large_ssld_270e_voc --image_file=/home/aistudio/work/people_930.jpg --use_gpu=True --run_benchmark=True

   

总结

由上图我们可以看到,使用PaddleDetection完成了跌倒的目标识别检测,并且mAP已经达到了80.28%。

优化方案

可以通过增加数据集、选择更优化模型,增加训练的次数。

后期应用

后期可以部署到医院、疗养院等公共场合,甚至家里的监控中实现跌倒目标检测,可以及时救援,以免造成更大的损失。

更多深度学习资源

一站式深度学习平台awesome-DeepLearning

深度学习入门课基于YOLOv3实现跌倒检测 - 创想鸟        深度学习百问基于YOLOv3实现跌倒检测 - 创想鸟        特色课基于YOLOv3实现跌倒检测 - 创想鸟        产业实践基于YOLOv3实现跌倒检测 - 创想鸟        

       

以上就是基于YOLOv3实现跌倒检测的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/316995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 08:09:14
下一篇 2025年11月5日 08:09:58

相关推荐

  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    400
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    800
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    400
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    500
  • 如何选择元素个数不固定的指定类名子元素?

    灵活选择元素个数不固定的指定类名子元素 在网页布局中,有时需要选择特定类名的子元素,但这些元素的数量并不固定。例如,下面这段 html 代码中,activebar 和 item 元素的数量均不固定: *n *n 如果需要选择第一个 item元素,可以使用 css 选择器 :nth-child()。该…

    2025年12月24日
    200
  • 使用 SVG 如何实现自定义宽度、间距和半径的虚线边框?

    使用 svg 实现自定义虚线边框 如何实现一个具有自定义宽度、间距和半径的虚线边框是一个常见的前端开发问题。传统的解决方案通常涉及使用 border-image 引入切片图片,但是这种方法存在引入外部资源、性能低下的缺点。 为了避免上述问题,可以使用 svg(可缩放矢量图形)来创建纯代码实现。一种方…

    2025年12月24日
    100
  • 如何解决本地图片在使用 mask JS 库时出现的跨域错误?

    如何跨越localhost使用本地图片? 问题: 在本地使用mask js库时,引入本地图片会报跨域错误。 解决方案: 要解决此问题,需要使用本地服务器启动文件,以http或https协议访问图片,而不是使用file://协议。例如: python -m http.server 8000 然后,可以…

    2025年12月24日
    200
  • 如何让“元素跟随文本高度,而不是撑高父容器?

    如何让 元素跟随文本高度,而不是撑高父容器 在页面布局中,经常遇到父容器高度被子元素撑开的问题。在图例所示的案例中,父容器被较高的图片撑开,而文本的高度没有被考虑。本问答将提供纯css解决方案,让图片跟随文本高度,确保父容器的高度不会被图片影响。 解决方法 为了解决这个问题,需要将图片从文档流中脱离…

    2025年12月24日
    000
  • CSS元素设置em和transition后,为何载入页面无放大效果?

    css元素设置em和transition后,为何载入无放大效果 很多开发者在设置了em和transition后,却发现元素载入页面时无放大效果。本文将解答这一问题。 原问题:在视频演示中,将元素设置如下,载入页面会有放大效果。然而,在个人尝试中,并未出现该效果。这是由于macos和windows系统…

    2025年12月24日
    200
  • 为什么 CSS mask 属性未请求指定图片?

    解决 css mask 属性未请求图片的问题 在使用 css mask 属性时,指定了图片地址,但网络面板显示未请求获取该图片,这可能是由于浏览器兼容性问题造成的。 问题 如下代码所示: 立即学习“前端免费学习笔记(深入)”; icon [data-icon=”cloud”] { –icon-cl…

    2025年12月24日
    200
  • 如何利用 CSS 选中激活标签并影响相邻元素的样式?

    如何利用 css 选中激活标签并影响相邻元素? 为了实现激活标签影响相邻元素的样式需求,可以通过 :has 选择器来实现。以下是如何具体操作: 对于激活标签相邻后的元素,可以在 css 中使用以下代码进行设置: li:has(+li.active) { border-radius: 0 0 10px…

    2025年12月24日
    100
  • 如何模拟Windows 10 设置界面中的鼠标悬浮放大效果?

    win10设置界面的鼠标移动显示周边的样式(探照灯效果)的实现方式 在windows设置界面的鼠标悬浮效果中,光标周围会显示一个放大区域。在前端开发中,可以通过多种方式实现类似的效果。 使用css 使用css的transform和box-shadow属性。通过将transform: scale(1.…

    2025年12月24日
    200
  • 如何用HTML/JS实现Windows 10设置界面鼠标移动探照灯效果?

    Win10设置界面中的鼠标移动探照灯效果实现指南 想要在前端开发中实现类似于Windows 10设置界面的鼠标移动探照灯效果,有两种解决方案:CSS 和 HTML/JS 组合。 CSS 实现 不幸的是,仅使用CSS无法完全实现该效果。 立即学习“前端免费学习笔记(深入)”; HTML/JS 实现 要…

    2025年12月24日
    000
  • 为什么我的 Safari 自定义样式表在百度页面上失效了?

    为什么在 Safari 中自定义样式表未能正常工作? 在 Safari 的偏好设置中设置自定义样式表后,您对其进行测试却发现效果不同。在您自己的网页中,样式有效,而在百度页面中却失效。 造成这种情况的原因是,第一个访问的项目使用了文件协议,可以访问本地目录中的图片文件。而第二个访问的百度使用了 ht…

    2025年12月24日
    000
  • 如何用前端实现 Windows 10 设置界面的鼠标移动探照灯效果?

    如何在前端实现 Windows 10 设置界面中的鼠标移动探照灯效果 想要在前端开发中实现 Windows 10 设置界面中类似的鼠标移动探照灯效果,可以通过以下途径: CSS 解决方案 DEMO 1: Windows 10 网格悬停效果:https://codepen.io/tr4553r7/pe…

    2025年12月24日
    000
  • 如何用前端技术实现Windows 10 设置界面鼠标移动时的探照灯效果?

    探索在前端中实现 Windows 10 设置界面鼠标移动时的探照灯效果 在前端开发中,鼠标悬停在元素上时需要呈现类似于 Windows 10 设置界面所展示的探照灯效果,这其中涉及到了元素外围显示光圈效果的技术实现。 CSS 实现 虽然 CSS 无法直接实现探照灯效果,但可以通过以下技巧营造出类似效…

    2025年12月24日
    000
  • 使用CSS mask属性指定图片URL时,为什么浏览器无法加载图片?

    css mask属性未能加载图片的解决方法 使用css mask属性指定图片url时,如示例中所示: mask: url(“https://api.iconify.design/mdi:apple-icloud.svg”) center / contain no-repeat; 但是,在网络面板中却…

    2025年12月24日
    000
  • 如何用CSS Paint API为网页元素添加时尚的斑马线边框?

    为元素添加时尚的斑马线边框 在网页设计中,有时我们需要添加时尚的边框来提升元素的视觉效果。其中,斑马线边框是一种既醒目又别致的设计元素。 实现斜向斑马线边框 要实现斜向斑马线间隔圆环,我们可以使用css paint api。该api提供了强大的功能,可以让我们在元素上绘制复杂的图形。 立即学习“前端…

    2025年12月24日
    000
  • 图片如何不撑高父容器?

    如何让图片不撑高父容器? 当父容器包含不同高度的子元素时,父容器的高度通常会被最高元素撑开。如果你希望父容器的高度由文本内容撑开,避免图片对其产生影响,可以通过以下 css 解决方法: 绝对定位元素: .child-image { position: absolute; top: 0; left: …

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信