Person detection

文章目录

  • 1 模型
    • 1.1 参考项目
    • 1.2 模型文件
    • 1.3 自己训练模型
  • 2 RT-AK 使用
  • 3 应用代码
  • 4. 参考链接

让 AI 在你的板子上尽情舞蹈~

本次实验的是识别摄像头中的人,就一个人,而不是多个。

从多类别检测模型改编而来,只保留 person 这个类别,根据各位看官的能力完全可以改成识别多类

本次项目的篇幅将会较长,请各位看官耐心看完

源码地址:Project4-Person_detection_RT-AK

整体分为三部分:

  1. 模型
  2. RT-AK 使用
  3. 板子上的应用层代码实现

硬件平台 ART-Pi, 50M FLOPS。

我的模型(删减后的模型)最终部署在板子上是推理时间是56ms,不包括数据处理时间。

  • pc 端推理一张图片:
$ pip install -r requirements.txt
$ python inference_yolo-s.py

  • 以下是在 ART-PI 上的模型推理实现:


我的模型数据:map 21.58%

Model MACC Inference Size
yolo-s.tflite 6.5 M 50ms 144k

1 模型

1.1 参考项目

参考项目:

  1. Yolo-Fastest https://github.com/dog-qiuqiu/Yolo-Fastest

  2. keras-YOLOv3-model-set https://github.com/david8862/keras-YOLOv3-model-set

原因:目前了解的全网最轻量级的目标检测网络,没有之一

现在不是了,出现了一个 ppyolo,百度产

Network Model Size mAP(VOC 2017) FLOPS
Tiny YOLOv2 60.5MB 57.1% 6.97BFlops
Tiny YOLOv3 33.4MB 58.4% 5.52BFlops
YOLO Nano 4.0MB 69.1% 4.51Bflops
MobileNetv2-SSD-Lite 13.8MB 68.6% &Bflops
MobileNetV2-YOLOv3 11.52MB 70.20% 2.02Bflos
Pelee-SSD 21.68MB 70.09% 2.40Bflos
Yolo Fastest 1.3MB 61.02% 0.23Bflops
Yolo Fastest-XL 3.5MB 69.43% 0.70Bflops
MobileNetv2-Yolo-Lite 8.0MB 73.26% 1.80Bflops

当然,Yolo Fastest 最小的模型也有 0.23 Bflops,想要在 ART-Pi 上顺利的跑起来,肉眼可见的丝滑程度,我是在做梦。。。

这时候有两个办法:

  1. 换一块板子,换一块算力更大的板子。
  2. 将模型改的小一点,能够在 ART-PI 上丝滑的跑起来。

这里我选择的是后者。

我改动的很简单,去掉特征金字塔输出,只保留一个输出,保证对大物体检测友好即可。同时删减网络结构。原来是109层,我是20+层网络结构。

纠正一个思想误区,由于一些很神奇的存在,网络并不是越深,FLOPS 就会越大,比如 DSCNN


第二个参考项目的意义是在于:将模型转变为 tflite 可食用模型

1.2 模型文件

  • 我改动的模型配置文件:./model/yolo-s_with_lrelu.cfg

    原模型配置文件:./model/VOC

    为了防止在后期模型转换的过程中遇到不支持的算子:leakyrelu,我这里提供了一份 relu 的模型训练配置文件

  • 预先训练好的模型:./model/yolo-s.h5 507 k,量化的 tflite 模型文件:./model/yolo-s.tflite 144 k

1.3 自己训练模型

请参考:dog-qiuqiu/Yolo-Fastest 项目

我自己也写过一份 快速上手 yolo-fastest 教程:

https://blog.csdn.net/weixin_37598106/article/details/112544854?spm=1001.2014.3001.5501

但是由于 up 主更新的比较快,可能有一些版本落后,仅供参考。

  1. 需要配置 darknet 训练环境,然后根据需求修改下 cfg 文件即可

  2. 准备数据集:VOC 2007 + VOC 2012

    wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
    wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
    wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
    tar xf VOCtrainval_11-May-2012.tar
    tar xf VOCtrainval_06-Nov-2007.tar
    tar xf VOCtest_06-Nov-2007.tarwget https://pjreddie.com/media/files/voc_label.py
    # 修改文件,将里面的类别只保留 person 类别
    python voc_label.pycat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt
    

​ 修改 ./model/voc_person.data 中的 trainvalid 路径,注意,如果你不是训练 person 单类别,请一并修改 voc_person.names 文件

  1. 训练

    $ ./darknet detector train <data_path> <cfg_path> # 举例, -dont_show 是不显示图片, -gpus 是指定 gpu 训练
    $ ./darknet detector train voc_person.data yolo-s.cfg -dont_show -gpus 0, 1
    
  2. 测试

    perons.jpg 位于 ./imgs

    # test 1 image
    ./darknet detector test voc_person.data yolo-s.cfg yolo-s_last.weights person.jpg -thresh 0.5 -dont_show# mAP
    ./darknet detector map voc_person.data yolo-s.cfg yolo-s_last.weights -points 11
    

    模型转换成 keras,最后转成 tflite

    对应的代码仓库:

    Lebhoryi/keras-YOLOv3-model-set
    转自 david8862/keras-YOLOv3-model-set,我做了一些修改,请按照我的来,否则出错请自负

    ART-PI 嵌入式人形检测 附源码(RT-AK Demo)相关推荐

    1. 搜索提示的实现(仿百度):附源码和在线demo

      这篇文章是我转载过来的,我现在做的搜索引擎项目也做了一个基于Jquery做的自动提示功能,这里就不贴了,下面我给出一个我转载的文章分享给大家,喜欢的拿去吧! 智能搜索提示的功能大家都用过,百度搜索的时 ...

    2. 基于matlab使用主动声纳系统进行水下目标检测(附源码)

      一.前言 此示例演示如何模拟具有两个目标的主动单基地声纳方案.声纳系统由各向同性投影仪阵列和单个水听器元件组成.投影仪阵列呈球形.反向散射信号由水听器接收.接收到的信号包括直接和多路径贡献. 二.水下 ...

    3. 基于Pytorch的从零开始的目标检测 | 附源码

      01. 引言 目标检测是计算机视觉中一个非常流行的任务,在这个任务中,给定一个图像,你预测图像中物体的包围盒(通常是矩形的) ,并且识别物体的类型.在这个图像中可能有多个对象,而且现在有各种先进的技术 ...

    4. OpenCvSharp (C# OpenCV) DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别、骰子识别、菜品识别)(附源码)

      本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别.骰子识别.菜品识别)! 前言: 下 ...

    5. Halcon转OpenCV实例--去除纸张中的颜色笔迹/墨迹(附源码)

      导读 本文主要介绍一个去除纸张中颜色笔迹/墨迹的实例,并将Halcon实现转为OpenCV. 实例来源 实例来源于51Halcon论坛的讨论贴: https://www.51halcon.com/fo ...

    6. Entity Framework在Asp.net MVC中的实现One Context Per Request(附源码)

      上篇中"Entity Framework中的Identity map和Unit of Work模式", 由于EF中的Identity map和Unit of Work模式,EF体现 ...

    7. VC++获取磁盘剩余空间(附源码)

        VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第23章:VC++获取磁盘剩余空间(附源码) 源代码demo已上传到百度网盘:永久生效  ,代码实现了获取任一磁盘的剩余空间,返回MB ...

    8. C++RTSP服务端(附源码)

        VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第16章:VC++ RTSP服务端(附源码)  源代码demo已上传到百度网盘:永久生效 ,文章尾部附 百度链接

    9. VC++电脑锁屏(附源码)

        VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第14章:VC++电脑锁屏(附源码) 源代码demo已上传到百度网盘:永久生效 ,文章尾部附 百度链接 源代码demo已上传到百度网盘 ...

    最新文章

    1. 注意力不集中的判断标准
    2. STM32 基础系列教程 11 – ADC 轮询
    3. 驱动利器:数据驱动下的产品决策(上)
    4. 如何证明在素数p和2p之间存在另一个素数呢?简单却不完备的证明
    5. Nacos安装和服务注册
    6. 小心!你家的 IoT 设备可能已成为僵尸网络“肉鸡”
    7. Java核心类库-IO-File类介绍和路径分割符
    8. 南昌大学2021年811考研真题+答案详解
    9. 利用python的requests爬取高清壁纸
    10. 专访吴军:“腾讯无2B基因,谷歌太平庸”,“我说错了吗?”
    11. 洛谷P1725 琪露诺 题解
    12. spyder 更改默认工作目录的最优方法
    13. web -【在线聊天】
    14. c语言n层文字塔程序的结构图,精馏塔中由塔顶向下的第n-1,n,n+1层塔板,其气相组成关系为( )...
    15. JAVA系列 IO流 知识结构整理 建立合理的知识框架逻辑 输入输出流 理顺你的思维架构Fileoutput inputStream FileWriter FIleReader结构整理
    16. C++ Boost库:简介和第一个示例程序
    17. html5 中心点旋转,html5 canvas围绕中心点旋转
    18. 根据所选日期、当前日期计算一周的日期和星期,农历
    19. centOS 7下python2升级为python3
    20. 数学主题分类 - 中文(下)

    热门文章

    1. 针对“扫雷“和“植物大战僵尸“游戏,分析,扫描,阳光值,植物,金币,僵尸的分析逆向
    2. 机器学习——经典降维算法与框架综述
    3. 学校计算机室应该配备哪种灭火器,学校教学楼应配备哪种灭火器
    4. 探索REALY,元宇宙赛道的潮流先锋
    5. bp神经网络权值调整公式,bp神经网络算法推导
    6. python逻辑运算符的优先级_Python逻辑运算符
    7. 什么样的人适合当软件工程师?
    8. R语言问题解决: 不存在叫‘xxx’这个名字的程辑包
    9. 解决gradle编译报Error:All flavors must now belong to a named flavor dimension.问题
    10. 代理模式——游戏代练