×

Nvidia Jetson Nano面罩Yolov4探测器

消耗积分:0 | 格式:zip | 大小:0.16 MB | 2022-11-18

李伟

分享资料个

描述

引文

这是 Jetson 社区的一个项目,没有其他开发人员的努力是不可能实现的。

指数

数据集

  • 下载数据集
  • 转换为 Yolo 格式

YoloV4

  • 在 Nvidia Jetson Nano 上编译 YoloV4
  • 用 COCO 测试 YoloV4
  • 训练面具检测器
  • 领导控制
  • 以前的提示

以前的提示

在这个项目的开发过程中,我使用 SSH、SCP 和 VNC Viewer 来控制和从我的 PC 到 Jetson Nano 板的文件传输。您可以使用键盘和鼠标直接从板上控制它,但从我的角度来看,这种方式更不舒服:

数据集

对于这个项目,我使用了 Kaggle 的面罩检测数据集,其中包含属于 3 个类别的 853 张图像。每个图像都有一个或多个边界框。

这些课程是:

  • 带口罩
  • 不戴口罩
  • 口罩戴错了

我建议使用谷歌数据集搜索来查找任何类型的数据集,在这种情况下,这个数据集可能有点小,但我有一个很好的准确度,如果你愿意,你可以用你自己的图像或任何其他数据集把它变大。

转换为 Yolo 格式

Yolo 需要一个特定的符号来训练模型和 .jpg 文件格式,所以首先你必须转到 images 文件夹并运行:

$> sudo apt-get install imagemagick
$> mogrify -format jpg *.png

现在有了 jpg 格式的图像,下一步是将 parse.xml 转换为 yolo 格式并创建 train/test.txt 文件。只需将 xml_to_yolo.py python 脚本放到 annotations 文件夹中并运行它:

$> python3 xml_to_yolo.py

如果您没有任何库,只需使用 pip/pip3 安装它。

之后,您将拥有一个.txt per.xml 文件、train.txt 和 test.txt(这些文件占边界框总数的 90/10)。

YoloV4

所有的 YoloV4 代码都是由AlexeyAB/ darknet 开发的,在那里你可以找到关于如何训练、指标等的优秀文档和示例。

在 Nvidia Jetson Nano 上编译 YoloV4

首先,您必须克隆AlexeyAB 存储库

$ git clone https://github.com/AlexeyAB/darknet.git
$ cd darknet

使用以下命令编辑 Makefile:

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=1
LIBSO=1
ZED_CAMERA=0
ZED_CAMERA_v2_8=0
......
USE_CPP=0
DEBUG=0
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]
......
NVCC=/usr/local/cuda/bin/nvcc

并运行 make:

$ make

用 COCO 测试 YoloV4

之后,项目被编译,只需要经过训练的权重来运行它。如果你想要更高的 FPS 性能,我建议使用 Tiny-Yolo。您可以从 AlexeyAB 存储库下载两者:

只运行暗网:

./darknet detector demo cfg/coco.data \
cfg/yolov4-tiny.cfg \
yolov4-tiny.weights \
-c 0

使用-c 0相机 (V4L2) 设备的方法/dev/video0

训练面具检测器

要训​​练一个新的 YoloV4-Tiny 模型,只需按照AlexeyAB 的步骤或使用我的文件和.weights。完成 6000 步(2000x3 类)大约需要 20 个小时。

与我的训练一起跑步:

./darknet detector demo cfg/obj.data \
cfg/yolov4-tiny-masks.cfg \
yolov4-tiny-obj_last.weights \
-c 0

领导控制

为了完成这个项目,我想用这个检测来创建“红绿灯”,这只是一个愚蠢的实验,但可能性是无穷无尽的......

加载模型后,您可以从 darknet_video.py 或 darknet_images.py 运行它,在这种情况下,我使用 darknet_images.pyimport RPi.GPIO as GPIO 并添加了一个 if-else 语句来控制检测并将高低值设置为引脚输出。

如果这个电路有 2 个 LED 和 2 个 PN2222 晶体管,一个用于绿色 LED,另一个用于红色,我创建的电路。

引脚以这种方式映射:

pinGreen =  18 #Green led -> Pin 12 on the board
pinRed = 24 #Red led -> Pin 18 on the board

这是一张有用的图片,可以查看 BCM 地图的工作原理:

 
poYBAGN25yKAOMj6AAFDaEcX7Ag299.png
 

现场演示:

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !