基于YOLO v5的神经网络模型外卖员佩戴头盔目标检测研究

模型Yolo v5神经网络:

实验步骤

1)下载VSstudio2019

注意:安装时勾选“Python开发”和“C++桌面开发”

2) 下载和安装nvidia显卡驱动

下载之后就是简单的下一步直到完成。

完成之后,在cmd中输入执行:

nvidia-smi

如果有错误:

'nvidia-smi' 不是内部或外部命令,也不是可运行的程序

或批处理文件。

把C:\Program Files\NVIDIA Corporation\NVSMI添加到环境变量的path中。再重新打开cmd窗口。

3) 下载和安装CUDA和cuDNN

4) 安装Anaconda

搭建虚拟环境和pytorch软件平台

5)、添加Aanaconda国内镜像配置

清华TUNA提供了 Anaconda 仓库的镜像,运行以下命令:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

conda config --set show_channel_urls yes

6)YOLOv5项目克隆和安装

     在gitub上下载模型

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

安装好所有依赖requirements

# YOLOv5 requirements
# Usage: pip install -r requirements.txt
# Base ------------------------------------------------------------------------
gitpython>=3.1.30
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.1
Pillow>=7.1.2
psutil # system resources
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
thop>=0.1.1 # FLOPs computation
torch>=1.7.0 # see https://pytorch.org/get-started/locally (recommended)
torchvision>=0.8.1
tqdm>=4.64.0
# protobuf<=3.20.1 # https://github.com/ultralytics/yolov5/issues/8012
# Logging ---------------------------------------------------------------------
tensorboard>=2.4.1
# clearml>=1.2.0
# comet
# Plotting --------------------------------------------------------------------
pandas>=1.1.4
seaborn>=0.11.0
# Export ----------------------------------------------------------------------
# coremltools>=6.0 # CoreML export
# onnx>=1.12.0 # ONNX export
# onnx-simplifier>=0.4.1 # ONNX simplifier
# nvidia-pyindex # TensorRT export
# nvidia-tensorrt # TensorRT export
# scikit-learn<=1.1.2 # CoreML quantization
# tensorflow>=2.4.1 # TF exports (-cpu, -aarch64, -macos)
# tensorflowjs>=3.9.0 # TF.js export
# openvino-dev # OpenVINO export
# Deploy ----------------------------------------------------------------------
setuptools>=65.5.1 # Snyk vulnerability fix
# tritonclient[all]~=2.24.0
# Extras ----------------------------------------------------------------------
# ipython # interactive notebook
# mss # screenshots
# albumentations>=1.0.3
# pycocotools>=2.0.6 # COCO mAP
# roboflow
# ultralytics # HUB https://hub.ultralytics.com

Yolov8

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

安装本项目的所有依赖requirements

6.1)设置cuda环境变量

安装完成后设置环境变量计算机上点右键,打开属性->高级系统设置->环境变量,可以看到系统中多了CUDA_PATH和

CUDA_PATH_V10_2两个环境变量。

接下来,还要在系统中添加以下几个环境变量:

这是默认安装位置的路径: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2

CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2

CUDA_LIB_PATH = %CUDA_PATH%\lib\x64

CUDA_BIN_PATH = %CUDA_PATH%\bin

CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64

CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

在系统变量 Path 的末尾添加:

%CUDA_LIB_PATH%; %CUDA_BIN_PATH%; %CUDA_SDK_LIB_PATH%;

%CUDA_SDK_BIN_PATH%;

再添加如下5条(默认安装路径):

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\CUPTI\lib64

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2\bin\win64

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2\common\lib\x64

注:与CUDA Samples相关的几个路径也可以不设置

6.2)创建项目所需虚拟环境变量

创建虚拟环境:conda create -n mypytorch python=3.8

激活mypytorch环境: conda activate mypytorch 或  activate mypytorch

6.3) 安装主框架pytorch

在所创建的pytorch环境下安装pytorch, 执行命令:

conda install pytorch torchvision cudatoolkit=10.2 -c pytorch

(pytorch版本就是项目所需的版本)

7)构建数据集

拍摄300张外卖员的照片,保存后形成数据集

使用PASCAL VOC数据集的目录结构:

文件夹层次为 yolov5 / VOCdevkit / VOC2007

VOC2007下面建立两个文件夹:Annotations和JPEGImages

JPEGImages放所有的训练和测试图片;Annotations放所有的xml标记文件

执行python脚本: python prepare_data.py

在VOCdevkit / VOC2007目录下可以看到生成了文件夹YOLOLabels

YOLOLabels下的文件是images文件夹下每一个图像的yolo格式的标注文件,

这是由annotations的xml标注文件转换来的;

在VOCdevkit目录下生成了images和labels文件夹

images文件夹下有train和val文件夹,分别放置训练集和验证集图片;

labels文件夹有train和val文件夹,分别放置训练集和验证集标签(yolo格式)

数据集样本截图

 

样本标注

运行python labelImg.py,自动打开标注软件,然后 导入图片,标注头盔位置,以及外卖员全身的位置,同时加入负样本。

8)Yolov5网络模型架构

Yolov5网络结构

YOLOv5 是 YOLO 系列新一代的目标检测网络,在YOLOv3 以及 YOLOv4 基础上不断集成创新的产,因而采用 Ov5 检测网络来进行多场景火灾检测。

Yolov5作者也是在COCO数据集上进行的测试,COCO数据集的小目标占比,因此最终的四种网络结构,性能上来说各有千秋。Yolov5s网络最小,速度最少,AP精度也最低。但如果检测的以大目标为主升,但速度的消耗也在不断增加。

Yolov5的输入端采用了和Yolov4一样的Mosaic数据增强的方式。在Yolo算法中,针对不同的数据集,都会有初始设定长宽的锚框。在网络训练中,网络在初始锚框的基础上输出预测框,进而

Backbone分为focus结构和CSP结构。Focus结构:在Yolov3&Yolov4中并没有这个结构,其中比较关键是切片操作。以Yolov5s的结构为例,原始608*608*3的图像输入Focus结构,采用为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。

Yolov5现在的Neck和Yolov4中一样,都采用FPN+PAN的结构,但在Yolov5刚出来时,只使用了FPN结构,后面才增加了PAN结构,此外网络中其他部分也进行了调整。

输出端主要是Bounding box损失函数。Yolov5中采用其中的GIOU_Loss做Bounding box的损失函数。

下图为Yolov5作者的算法性能测试图:

9)神经网络算法大概流程

正向传播:输入样本->输入层->各隐层(处理)->输出层

若输出层实际输出与期望输出(教师信号)不符,则转入2)(误差反向传播过程)

误差反向传播:输出误差(某种形式)->隐层(逐层)->输入层其主要目的是通过将输出误差反传,将误差分摊给各层所有单元,从而获得各层单元的误差信号,进而修正各单元的权值(其过程,是一个权值调整的过程)。

权值调整的过程,也就是网络的学习训练过程(学习也就是这么的由来,权值调整)。上传代码的第一个案例即是BP的详细代码,没有使用内置函数。

10)利用数据集训练模型、验证模型

训练的结果数据:

混淆矩阵

F1值

11)Yolov5目标检测结果

(1)利用训练好的模型权重,检测图片

(2)利用训练好的模型权重,检测视频

外卖员头盔检测

模型训练命令:python train.py --data data/voc_ball.yaml --cfg models/yolov5s_ball.yaml --weights weights/yolov5s.pt --batch-size 6--epochs 150 --workers 2 

结果测试命令:

1)测试图片:python detect.py --source ./testfiles/img1.jpg --weights

runs/train/exp/weights/best.pt --conf-thres 0.8

2)测试视频 :python detect.py --source ./testfiles/waimaiyuan.mp4 --weights

runs/train/exp25/weights/best.pt --conf-thres 0.7


实验心得

通过本次小学期学习深度学习,搭建外卖员佩戴头盔检测系统。在复杂场景中只需少量的样本,150轮的神经网络训练,达到高的精度,计算机能够快速探测出场景中的头盔的位置

同时在设计过程中遇到了诸多问题:

在构建环境时因为电脑硬件问题许多环境无法搭建,会经常报错;在训练时由于只用CPU进行训练,导致训练速度极慢,然后我通过上网寻找资料,结果是在部分Windows机型上,yolov5x的训练权重无法调用GPU,将训练权重文件改换为yolov5s后,成功打开了GPU进行训练,训练速度直接拉满。训练出来的精度不够高,原因是数据集的数量不够,训练次数也不够,接着我又上网再次收集并标注了100张照片并将训练次数从100次追加到了150次。

在安装完图片标住软件labelimg后,使用调用命令打开时遇到上图报错,及语法错误,修改labelImg.py的代码后得到解决。

划分训练集和验证集是anaconda回应上图报错:应注意的是对图片做标注时,标签不建议使用中文。

划分训练集验证集后生成的yolo格式的标住文件(.txt)全部是空的,经查证后发现是,prepare_data.py文件中的标签名字与图片标住文件中的标签名字不同导致,修改统一后即可。

训练命令输入后回应上图报错,经查证后问题为电脑内存不足,这里我的解决办法是将抓取数batch-size 从16改为6。

修改后发现仍然报错,经上网查证后得知,部分Windows机型不支持四线程(works4),这里将works修改为2或6都可以正常训练。

150轮训练完成后,训练模型会保存到exp25文件中,当使用训练好的模型进行图片视频检测时,需要调用exp25文件。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值