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

0. 使用到的环境和工具

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

1. 准备训练数据

1.1 截取目标图片

  • 数据特点

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

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

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

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

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

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

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

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

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

1.2 为截取好的图片打标签

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

    conda create -n my_yolo_label python=3.8.5
    
  2. 激活创建的环境

    conda activate my_yolo_label
    
  3. 安装程序运行需要的第三方依赖

    pip install pyqt5
    pip install pyqt5-tools
    pip install lxml
    pip install labelImg
    
  4. 打开labelImg

    labelImg
    

  5. 开始打标签

    • 点击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. 搭建训练环境

  1. 从yovoV5官方网站下载源代码

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

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

  4. 安装依赖包

    pip install -U -r requirements.txt
    

3. 开始训练

  1. 创建和配置数据目录

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

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

  3. 修改配置文件

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

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

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

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

  5. 等待训练结束。

4. 训练结果

  1. 标签情况

  2. 数据收敛情况

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

  3. 标记情况

    在测试集中的表现情况

  4. 视频中的表现

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

    在这里插入图片描述

5. 常见问题

  1. 批量重命名脚本

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

    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)
    
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值