Advertisement

YOLOV5训练自己目标检测模型和cpu检测

阅读量:

让我们了解一下我们想要实现的效果。我们将利用数据训练一个检测模型,并使用pyqt5框架进行封装。该系统将具备图像识别能力,并能够分别完成以下功能:首先进行图像检测;其次实施烟雾及火灾探测;最后通过摄像头实时监控并完成相关检测任务。

代码下载的位置位于 GitHub repository of ultralytics/yolov5: YOLOv5 model implemented in PyTorch framework, converted to ONNX format, integrated into CoreML workflow, and then exported as a TFLite model.

配置环境

配置anaconda虚拟环境

anaconda安装完成之后请切换到国内的源来提高下载速度 ,命令如下:

复制代码
 conda config --remove-key channels

    
 conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
    
 conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
    
 conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
    
 conda config --set show_channel_urls yes
    
 pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple

首先创建python3.8的虚拟环境,请在命令行中执行下列操作:

复制代码
 conda create -n py14 python==3.8.5

    
 conda activate py14

查看环境:

conda env list and conda info --envs

克隆环境:

codna create -n 新环境 --clone 旧环境

pytorch:CPU和GPU版本的安装

经过实证研究发现,在CPU与GPU环境下YOLOv5均能正常运行。然而,在仅依赖CPU进行模型训练时效率令人担忧。因此建议具备条件的朋友安装GPU版本的PyTorch;无条件用户最好通过 rented servers 来获取所需计算资源,并访问[Previous PyTorch Versions | PyTorch](https://pytorch.org/get-started/previous-versions/ "Previous PyTorch Versions | PyTorch)获取详细信息

复制代码
 # CPU Only

    
 conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly -c pytorch  # cpu
    
  
    
 # CUDA 10.2
    
 conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=10.2 -c pytorch
    
  
    
 # CUDA 11.1
    
 conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge  # GPU

需要注意以下几点:

  • 在安装前必须先更新显卡驱动程序,在官网上获取与型号匹配的驱进步行安装
  • 30系显卡仅限于使用CUDA 11版本
  • 建议创建一个虚拟环境以避免各深度学习框架之间的冲突

安装完毕之后,我们来测试一下GPU是否

复制代码
 import torch

    
 print(torch.__version__)
    
 print(torch.cuda.is_available())

pycocotools的安装:

复制代码
    pip install pycocotools-windows

其他包的安装:

此外大家还需自行安装一些必要的软件包其中包括如OpenCV、Matplotlib等工具库值得注意的是这些工具库的安装过程相对简单只需通过pip命令就能轻松完成接下来的操作步骤请按照以下步骤进行操作

复制代码
 pip install -r requirements.txt

    
 pip install pyqt5
    
 pip install labelme

测试一下

在yolov5目录下运行相应的代码,在代码完成后会产生相关信息,并在runs目录中获取检测结果。

复制代码
    python detect.py --source data/images/bus.jpg --weights pretrained/yolov5s.pt

依据官方发布的指示,在这里提供的检测代码具有很强的功能性,并能够实现对各种图像与视频流进行检测的具体操作步骤如下:

复制代码
  python detect.py --source 0  # webcam

    
                         file.jpg  # image 
    
                         file.mp4  # video
    
                         path/  # directory
    
                         path/*.jpg  # glob
    
                         'https://youtu.be/NUsoVlDFqZg'  # YouTube video
    
                         'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

数据处理:

这里改成yolo的标注形式,之后专门出一期数据转换的内容。

推荐使用的工具是LabelImg软件,在你的虚拟环境中操作时可以通过pip命令快速获取该软件包以完成数据标注任务。

复制代码
 pip install labelimg  或

    
 pip install labelimg -i https://mirror.baidu.com/pypi/simple

安装命令运行后,在终端界面中直接运行labelimg软件即可启动数据自动标注流程。接着,在终端界面中直接运行labelimg软件即可启动数据自动标注流程。注:当标记完成时会生成一批txt文本文件。这些生成的txt文本文件即为目标检测所需的数据标注文档,请查看以下信息:每个txt文本中的每一行代表一个目标物体,在该行内容中以空格分隔的数据依次表示该物体的目标类别ID号、归一化后的中心点x坐标位置、中心点y坐标位置以及该物体的目标框宽度与高度参数值等信息内容。

修改数据集配置文件:

标记完成的数据请按照下面的格式进行放置,方便程序进行索引。

复制代码

这个配置文件便于我们后续的训练工作使用。为此需要在data目录中创建一个名为mask_data.yaml的文件。如图所示:

复制代码
 # Custom data for safety helmet

    
  
    
  
    
 # train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
    
 train: C:/score/images/train  # 训练集位置
    
 val: C:/score/images/val # 验证机位置
    
  
    
 # number of classes
    
 nc: 2   # 数据集类别
    
  
    
 # class names
    
 names: ['fire', 'smoke']  # 目标类名称

模型训练

模型基本训练

位于models目录中创建一个命名为mask_yolov5s.yaml的模型配置文件,并在其内部内容前添加注释以指示具体修改位置(例如,在原有yolov5s.yaml基础上进行参数调整)。同时准备好数据集配置文件、模型配置文件以及预训练权重文件,并按照以下步骤进行操作:首先启动相关软件环境;然后依次读取各配置文件并设置相应参数;最后运行指定的训练或推理命令即可完成任务。

复制代码
 python train.py --data mask_data.yaml --cfg mask_yolov5s.yaml --weights pretrained/yolov5s.pt --epoch 100 --batch-size 4 --device cpu

    
  
    
 python train.py --data mask_data.yaml --cfg mask_yolov5s.yaml --weights pretrained/yolov5s.pt --epoch 100 --batch-size 16 --device 0

当训练代码成功执行时,在命令行界面会显示相关信息,并且随后就可以放心地等待模型完成训练。

用户可以在train/runs/exp3目录中获取到训练生成的模型和日志记录文件。此外,在该目录中还包含不同性能指标的相关图表。一般会访问这些文件。

模型评估

其中mAP是目标检测中使用的主要评价指标,在0到1之间的数值表示模型性能的表现程度;数值越趋近于1,则说明模型性能越好。

在实际应用中,我们通常会关注两个关键指标:召回率(Recall)与精确率(Precision),这两个指标分别用p和r表示。它们都是衡量模型性能的重要标准,在0到1之间取值。数值越接近1表示模型性能越好;数值越接近0则表示性能较差。为了全面评估目标检测系统的性能表现,我们通常采用均值-方差(Mean Average Precision, mAP)这一综合指标来进行进一步评估。通过设定不同置信度的阈值,在不同阈值下计算出对应的p与r值。需要注意的是,在大多数情况下p与r呈负相关关系,在图表中表现为一条曲线(如图所示)。这条曲线下的面积即为AP(Average Precision)指标,在目标检测任务中每个目标都可以对应一个AP指标。将所有目标的AP指标进行算术平均,则可获得整体模型的表现评估指标——mAP(Mean Average Precision)。例如,在本文场景中我们可以分别计算火点火源及烟雾目标的mAP指标,并取其平均值得出整体模型性能评估指标

有关更专业的定义大家可以在知乎或上自行了解。以我们本次训练的模型为例,在模型训练完成后,在验证集上我们会获取到三个指标:召回率、准确率以及均值平均密度。

假如在你的目录中找不到所需曲线

复制代码
    python val.py --data data/mask_data.yaml --weights runs/train/exp_yolov5s/weights/best.pt --img 640

模型使用:

模型的所有功能被整合到detect.py目录中,请按照指示完成检测操作

复制代码
  # 检测摄像头

    
  python detect.py  --weights runs/train/exp_yolov5s/weights/best.pt --source 0  # webcam
    
  # 检测图片文件
    
   python detect.py  --weights runs/train/exp_yolov5s/weights/best.pt --source file.jpg  # image 
    
  # 检测视频文件
    
    python detect.py --weights runs/train/exp_yolov5s/weights/best.pt --source file.mp4  # video
    
  # 检测一个目录下的文件
    
   python detect.py --weights runs/train/exp_yolov5s/weights/best.pt path/  # directory
    
  # 检测网络视频
    
   python detect.py --weights runs/train/exp_yolov5s/weights/best.pt 'https://youtu.be/NUsoVlDFqZg'  # YouTube video
    
  # 检测流媒体
    
   python detect.py --weights runs/train/exp_yolov5s/weights/best.pt 'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream                            

基于我们的烟和火模型,在运行以下命令:python detect.py --weights runs/train/exp_yolov5s/weights/best.pt --source data/images/fishman.jpg时将能够获得一张检测结果图像。

全部评论 (0)

还没有任何评论哟~