YOLOv7 自定义数据训练

AI算法与图像处理

共 7661字,需浏览 16分钟

 ·

2022-10-15 08:38

对象检测技术被广泛用作业界许多应用程序的后端,包括桌面和 Web 应用程序。此外,它是许多计算机视觉任务的支柱,包括对象分割、对象跟踪、对象分类、对象计数等。在现代,每个人对任何应用程序的目标是:

应用程序必须易于使用、处理时间更少并提供最佳结果。

日前,YOLOv7 已经发布,由AlexeyAB(YOLOv4作者)和WongKinYiu(YOLOR作者)投稿。与YOLOR、YOLOv5 和 YOLOX 相比,YOLOv7 实现的目的是达到更高的准确性。

作者AlexeyAB:https://github.com/AlexeyAB

YOLOv4:https://github.com/AlexeyAB/darknet

作者WongKinYiu:https://github.com/WongKinYiu

YOLOR:https://github.com/WongKinYiu/yolor



Fig-1 来源:YOLOv7 BenchMarks [ https://github.com/WongKinYiu/yolov7 ]

在图 1 中,你可以清楚地看到 YOLOv7 在精度和速度方面都超过了 YOLOX、PP-YOLOE、YOLOR 和 YOLOv5。YOLOv7 的开发是在 PyTorch 中完成的。

在本文中,我们将重点介绍“自定义数据上的 YOLOv7 训练”。你可以按照下面提到的步骤在你自己的数据上训练 YOLOv7。

所有提到的步骤都已在Ubuntu 18.04 和 20.04上使用 CUDA 10.x/11.x 进行了测试。

  • 模块安装

  • 预训练对象检测

  • 自定义数据训练

  • 使用自定义权重进行推理

模块安装:

创建一个名为“ YOLOv7 ”的文件夹。在“YOLOv7”文件夹中打开终端/cmd,使用上述命令创建一个虚拟环境,然后激活它。

python3 -m venv yolov7training     #creation of virtual environment
source yolov7training/bin/activate #activation of virtualenvxxxxxxxxxx python3 -m venv yolov7training     #creation of virtual environmentsource yolov7training/bin/activate #activation of virtualenvpython3 -m venv yolov7training #创建虚拟环境源码 yolov7training/bin/activate #激活virtualenv

注意:以上步骤不是必需的,但如果你不想打扰 python 系统包,建议你使用。

从链接:https://github.com/WongKinYiu/yolov7 克隆 YOLOv7 存储库,升级 pip 并使用上述命令移动到克隆的文件夹。

git clone https://github.com/WongKinYiu/yolov7.git
cd yolov7
pip install --upgrade pip

我们需要安装所有有助于 YOLOv7 训练的库。你可以使用提到的命令来安装所需的模块。

pip install -r requirements.txt
sudo apt install -y zip htop screen libgl1-mesa-glx

预训练的目标检测

我们已经安装了所有模块。我们现在使用预先训练的权重测试检测,以确认我们所有的模块都工作正常。你可以在终端/cmd 中使用上述命令来检测具有预训练权重的对象。

注意: YOLOv7 权重必须在 yolov7 文件夹中,从这个链接:https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt)下载预训练的权重文件并将下载的文件移动到当前工作目录**{** yolov7}

python detect.py --weights yolov7.pt --source inference/images/horses.jpg --img 640

如果一切正常,那么你将能够在下面提到的目录中获得结果。

结果目录:[yolov7/runs/detect/exp/horses.jpg]



Fig-2 【来源】YOLOv7 官方仓库:https://github.com/WongKinYiu/yolov7/blob/main/inference/images/horses.jpg

在自定义数据上训练 YOLOv7

自定义训练的步骤如下:

1- 收集数据

2- 标记数据

3- 拆分数据(训练和测试)

4- 创建配置文件

5- 开始训练

第 1 步:我们需要为YOLOv7 自定义训练创建一个数据集。如果你没有数据你可以使用 openimages数据库中的数据集。

openimages:https://storage.googleapis.com/openimages/web/index.html

YOLOv7 在 text(.txt) 文件中获取标签数据,格式如下:

<object-class-id> <x> <y> <width> <height>



图 3:YOLO 标记样本

第 2 步:对于自定义数据的标记,请查看我的文章,内容是为对象检测标记数据 (Yolo:https://medium.com/nerd-for-tech/labeling-data-for-object-detection-yolo-5a4fa4f05844)

第 3 步:标记数据后,我们现在需要将数据拆分为训练和测试文件夹。拆分比例将取决于用户,而通常优选的拆分为 (80–20)%,这意味着 80% 的数据用于训练,而 20% 的数据用于测试。

对于数据拆分,你可以查看python-library:https://pypi.org/project/split-folders/),它将你的数据随机拆分为训练、测试和验证。

文件夹结构:

├── yolov7
 ## └── train
 ####└── images (folder including all training images)
 ####└── labels (folder including all training labels)
 ## └── test
 ####└── images (folder including all testing images)
 ####└── labels (folder including all testing labels)

第 4 步:现在我们需要创建一个自定义配置文件。(确保设置正确的路径),因为训练过程将完全依赖于该文件。

创建文件名为“custom. yaml”,在 (yolov7/data) 文件夹中。将以下代码粘贴到该文件中。设置数据集文件夹的正确路径,更改类及其名称,然后保存。

train: (Complete path to dataset train folder)
test: (Complete path to dataset test folder) 
valid: (Complete path to dataset valid folder)
#Classes
nc: 1 # replace according to your number of classes
#classes names
#replace all class names list with your classes names
names: ['person''bicycle''car''motorcycle''airplane''bus''train''truck''boat''traffic light',
        'fire hydrant''stop sign''parking meter''bench''bird''cat''dog''horse''sheep''cow',
        'elephant''bear''zebra''giraffe''backpack''umbrella''handbag''tie''suitcase''frisbee',
        'skis''snowboard''sports ball''kite''baseball bat''baseball glove''skateboard''surfboard',
        'tennis racket''bottle''wine glass''cup''fork''knife''spoon''bowl''banana''apple',
        'sandwich''orange''broccoli''carrot''hot dog''pizza''donut''cake''chair''couch',
        'potted plant''bed''dining table''toilet''tv''laptop''mouse''remote''keyboard''cell phone',
        'microwave''oven''toaster''sink''refrigerator''book''clock''vase''scissors''teddy bear',
        'hair drier''toothbrush'

第 5 步:所有预处理步骤都完成了,是时候开始训练了。在主“yolo v7 ”中打开终端,激活虚拟环境,然后运行下面提到的命令。

source yolov7training/bin/activate
python train.py --weights yolov7.pt --data "data/custom.yaml" --workers 4 --batch-size 4 --img 416 --cfg cfg/training/yolov7.yaml --name yolov7 --hyp data/hyp.scratch.p5.yaml
or
python3 train.py --weights yolov7.pt --data "data/custom.yaml" --workers 4 --batch-size 4 --img 416 --cfg cfg/training/yolov7.yaml --name yolov7 --hyp data/hyp.scratch.p5.yaml --epochs 50

-- img = 模型将训练的图像大小,默认值为 640。

-- batch-size= 训练中使用的批量大小。

-- epochs = 训练 epoch 的数量

-- data = 自定义配置文件的路径

-- 权重= 预训练的权重

yolov7.pt:https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7_training.pt

yolov7x.pt:https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7x_training.pt

yolov7-w6.pt:https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6_training.pt

yolov7-e6.pt:https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6_training.pt



图 4:YOLOv7 训练开始

注意:如果出现任何图像损坏的话,训练将不会开始,如果是某些标签文件损坏,那么训练不会有问题,因为 yolov7 将忽略该图像和标签文件。

等待训练完成,然后使用新创建的权重进行推理。自定义训练的权重将保存在下面提到的文件夹路径中。

[yolov7/runs/train/yolov7/weights/best.pt]

使用自定义权重进行推理

训练完成后,转到终端并运行下面提到的命令以检测自定义权重。

python detect.py --weights runs/train/yolov7/weights/best.pt --source "path to your testing image"

我使用 Person 数据进行训练,自定义权重的结果如下所示。

查看视频:https://youtu.be/hAdyEobLBnQ

基于自定义数据的 YOLOv7 人员检测

这就是“在自定义数据上训练 YOLOv7”的全部内容。你可以对自己的数据进行尝试。

  • 从视频创建数据集:文章链接:https://medium.com/nerd-for-tech/extraction-of-frames-from-a-single-video-2b9fdd901208

  • 自定义训练的标签数据:文章链接:https://medium.com/nerd-for-tech/labeling-data-for-object-detection-yolo-5a4fa4f05844

  • 在自定义数据上训练 YOLO-v5:文章链接:https://medium.com/nerd-for-tech/how-to-train-yolov5-on-custom-data-9983a545e509

  • 如何修剪和稀疏 YOLOv5:文章链接:https://medium.com/nerd-for-tech/how-to-prune-sparse-yolov5-da19e1d84a6

  • YOLOv5 的超参数如何工作:文章链接:https://chr043416.medium.com/how-hyperparameters-of-yolov5-works-ec4d25f311a2


浏览 198
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报