模型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文件。