基于yolov5实现监控浮球信息提取详细步骤

    科技2026-02-28  9

    0. 使用到的环境和工具

    Python 3.8.5PyCharm 2020.1.3yolo V5PyTorch 1.6.0Anaconda 管理工具labelImg, numpy, pandas等依赖包pot player播放器含有GPU的计算机cudacudnn

    1. 准备训练数据

    1.1 截取目标图片

    数据特点

    截取出来的图片需要包含有目标(浮球)。截取的图片尽可能包含不同的外界环境,例如:阴天和晴天,白天和黑夜等。条件允许的情况下,截取尽可能多的图片。

    截取步骤

    使用pot player播放器打开DAV视频文件。

    找到含有浮球的视频片段。

    在播放器中依次选择:Pot Player --> 视频 --> 图像截取 --> 连续截图。 如下图所示。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PCV9Leju-1602160908049)(https://i.loli.net/2020/10/08/piM2Fz4mhsqr1jW.png)]

    配置截图选项。这里按帧截取,如图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5kBkPC6-1602160908058)(https://i.loli.net/2020/10/08/ZdzvchpoeNuDiY9.png)]

    重复选择视频片段,按照上述步骤截取多段数据。在测试案例中,共采集了2497张有效图片。其中2246张作为训练集,251张作为测试集。

    编写简单的重命名脚本,以阿拉伯数字为图片数据命名。(选做步骤,只是为了更加清晰。)

    1.2 为截取好的图片打标签

    使用anaconda创建一个Python3.8环境,专门用于打标签。

    conda create -n my_yolo_label python=3.8.5

    激活创建的环境

    conda activate my_yolo_label

    安装程序运行需要的第三方依赖

    pip install pyqt5 pip install pyqt5-tools pip install lxml pip install labelImg

    打开labelImg

    labelImg

    开始打标签

    点击Open Dir,选择到存放图片文件的目录,右下角的File List会展示出文件夹下所有的图片文件

    点击Change Save Dir,选择保存标签文件的目录。

    在键盘上敲下w,用鼠标标注出浮球区域,输入“ball”

    ctrl + s,保存标签

    按下“D”,标注下一张图片

    常用快捷键:

    快捷键作用ctrk + s保存文件w矩形框d下一张a上一张

    默认的标签类型是不是yolo格式的txt文件,而是Pascal VOC的xml格式。为了满足扩展需求,建议不修改默认设置,保存xml文件,在需要txt文件时,使用脚本做简单的转化。(这是因为从xml转到txt比较简单,反过来比较复杂)

    2. 搭建训练环境

    从yovoV5官方网站下载源代码

    解压源程序,复制到项目目录下。测试过程的项目名是yolo v5

    在pycharm中打开终端,将yolov5目录设为当前工作目录

    安装依赖包

    pip install -U -r requirements.txt

    3. 开始训练

    创建和配置数据目录

    在YOLO V5的同级目录下建立coco128文件夹,其目录结构为: 一定要注意这个文件夹和yoloV5文件夹是并列的,而不是其子文件夹!images文件夹中存放图片文件,labels文件夹中存放标签文件。train2017中存放的都是训练集,val2017中存放验证集。

    修改训练参数

    根据电脑的配置和数据情况修改训练参数。

    修改配置文件

    根据上图中配置好的参数,修改配置文件。例如,在上图中选择了coco128.yam,则需要在coco128.yam文件中配置目标检测的种类及其数量。

    # number of classes nc: 2 # class names names: ['ball', 'fish']

    在以上测试数据中,只有“ball”和“fish”两种数据。 同理,由于选择了yoloV5S,需要修改yolov5s.yam文件中的设置。只用修改nc变量的值。

    执行train.py,开始训练,观察日志。

    等待训练结束。

    4. 训练结果

    标签情况

    数据收敛情况

    在训练过程中,会自动生成一个收敛情况图。默认的训练轮次为300。由于测试中使用的数据比较单一,这里讲训练轮次降低到了100轮,各个参数基本达到了收敛。

    标记情况

    在测试集中的表现情况

    视频中的表现

    测试模型在原始视频中的表现

    5. 常见问题

    批量重命名脚本

    @echo off setlocal enabledelayedexpansion set var=0 echo %var% set /a i = i + var for %%x in (*) do ( if not "%%x"=="rename.bat" ( set /a i+=1 rename "%%x" "!i!.jpg" ) ) pause

    部分截取的数据没有目标物体,删除后导致的图片文件和标签文件不一一对应,需要找到两个文件夹中文件的不同。为此编写了如下脚本:

    import os img_path = "D:\\PEGImages" anno_path = "D:\\Annotations" img_list = os.listdir(img_path) anno_list = os.listdir(anno_path) for img in img_list: if img in anno_list: continue else: print(img) for anno in anno_list: if anno in img_list: continue else: print(anno)
    Processed: 0.012, SQL: 9