手把手改进yolo训练自己的数据(坑洼路面识别)

news2025/6/24 21:00:02

结果展示

img

在Pothole Detection数据集上对YOLOv7进行微调的步骤如下:

0 环境配置

if` `not` `os.path.exists(``'yolov7'``):``  ``!git clone https:``/``/``github.com``/``WongKinYiu``/``yolov7.git` `%``cd yolov7` `!pip install ``-``r requirements.txt
  1. 数据集准备:

    • 收集一个专门用于pothole(坑洼)检测的数据集,包括图像和相应的注释文件。注释可以使用Pascal VOC或YOLO格式。
    • 将数据集分割为训练集和验证集。
    • 图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-
    • 数据下载链接:

在这里插入图片描述


!wget https://learnopencv.s3.us-west-2.amazonaws.com/pothole_dataset.zip
# Extract the dataset.
!unzip -q pothole_dataset.zip

数据排列:


pothole_dataset/
├── images
│   ├── test [118 entries exceeds filelimit, not opening dir]
│   ├── train [1265 entries exceeds filelimit, not opening dir]
│   └── valid [
  1. 下载预训练权重:

    • 从官方仓库或Darknet网站等来源获取YOLOv7的预训练权重。

      
      !wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-tiny.pt
      
      
  2. 配置文件:

    • 创建或修改所需的训练配置文件。
    • 调整类别数量以匹配pothole检测数据集中的类别数。
    • 更新训练、验证和测试数据集的路径。
    • 根据需要自定义其他超参数。

    更改配置文件

    %%writefile data/pothole.yaml
    train: ../pothole_dataset/images/train
    val: ../pothole_dataset/images/valid
    test: ../pothole_dataset/images/test
     
    # Classes
    nc: 1  # number of classes
    names: ['pothole']  # class names
    
  3. 训练:

    • 使用下载的预训练权重初始化YOLOv7模型。

    • 加载训练数据集,并通过迁移学习等技术开始微调模型。

    • 在多个epochs上训练模型,同时监控损失和mAP(mean Average Precision)指标。

    • 使用数据增强技术(如随机裁剪、翻转、旋转等)来提高模型的泛化能力。

    • –device:GPU设备编号(ID),用于进行训练。由于只有一个GPU,所以设为0。

      –data:接受数据集的YAML文件路径。

      –img:默认情况下,图像会在输入网络之前被调整为640×640的分辨率。您可以在此处指定图像大小。

      –cfg:模型配置文件的路径,用于加载我们之前创建的模型架构。

      –weights:预训练模型的路径。

      –name:默认情况下,所有训练、验证和测试结果都会保存在runs目录的子目录中。您可以通过此参数指定这些子目录的名称。

      –hyp:YOLOv7系列中的所有模型都具有不同的参数和超参数。这些包括学习率、数据增强技术以及增强的强度等多个超参数。所有这些超参数都在yolov7/data目录中的超参数文件(YAML文件)中定义。在此参数中,您需要指定合适的YOLOv7-tiny模型超参数文件的路径

    
    !python train.py --epochs 100 --workers 4 --device 0 --batch-size 32 \
    --data data/pothole.yaml --img 640 640 --cfg cfg/training/yolov7_pothole-tiny.yaml \
    --weights 'yolov7-tiny.pt' --name yolov7_tiny_pothole_fixed_res --hyp data/hyp.scratch.tiny.yaml
    Let’s go over
    

    r-images%5Cimage-20231012205821363.png&pos_id=img-MOmMEWe5-1697116793583)

  4. 评估:

  5. 在这里插入图片描述

    	
    python detect.py --source ../../inference_data/video.mp4 --weights runs/train/yolov7_pothole_multi_res/weights/best.pt --view-img
    
    

    评估脚本:

    !python test.py --weights runs/train/yolov7_tiny_pothole_fixed_res/weights/best.pt --task test --data data/pothole.yaml
    1
    2
    Class      Images      Labels           P           R      mAP@.5  mAP@.5:.95: 100% 4/4 [00:04<00:00,  1.09s/it]
                    all         118         304        0.82       0.556        0.64       0.348
    
    
    • 在验证数据集上评估训练好的模型,以评估其性能。
    • 计算精确度、召回率和F1分数等指标来衡量模型的准确性。
    • 根据评估结果调整模型或超参数。

    Results after fine tuning YOLOv7-tiny model on the pothole detection dataset

    改进:

    YOLOv7 fixed resolution fine tuning results.

%%writefile cfg/training/yolov7_pothole.yaml
# parameters
nc: 1  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
 
# anchors
anchors:
  - [12,16, 19,36, 40,28]  # P3/8
  - [36,75, 76,55, 72,146]  # P4/16
  - [142,110, 192,243, 459,401]  # P5/32
 
# yolov7 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [32, 3, 1]],  # 0
  
  [-1, 1, Conv, [64, 3, 2]],  # 1-P1/2     
  [-1, 1, Conv, [64, 3, 1]],
  
  [-1, 1, Conv, [128, 3, 2]],  # 3-P2/4 
  [-1, 1, Conv, [64, 1, 1]],
  [-2, 1, Conv, [64, 1, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [[-1, -3, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [256, 1, 1]],  # 11
        
  [-1, 1, MP, []],
  [-1, 1, Conv, [128, 1, 1]],
  [-3, 1, Conv, [128, 1, 1]],
  [-1, 1, Conv, [128, 3, 2]],
  [[-1, -3], 1, Concat, [1]],  # 16-P3/8 
  [-1, 1, Conv, [128, 1, 1]],
  [-2, 1, Conv, [128, 1, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [[-1, -3, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [512, 1, 1]],  # 24
        
  [-1, 1, MP, []],
  [-1, 1, Conv, [256, 1, 1]],
  [-3, 1, Conv, [256, 1, 1]],
  [-1, 1, Conv, [256, 3, 2]],
  [[-1, -3], 1, Concat, [1]],  # 29-P4/16 
  [-1, 1, Conv, [256, 1, 1]],
  [-2, 1, Conv, [256, 1, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [[-1, -3, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [1024, 1, 1]],  # 37
        
  [-1, 1, MP, []],
  [-1, 1, Conv, [512, 1, 1]],
  [-3, 1, Conv, [512, 1, 1]],
  [-1, 1, Conv, [512, 3, 2]],
  [[-1, -3], 1, Concat, [1]],  # 42-P5/32 
  [-1, 1, Conv, [256, 1, 1]],
  [-2, 1, Conv, [256, 1, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [[-1, -3, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [1024, 1, 1]],  # 50
  ]
 
# yolov7 head
head:
  [[-1, 1, SPPCSPC, [512]], # 51
  
  [-1, 1, Conv, [256, 1, 1]],
  [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  [37, 1, Conv, [256, 1, 1]], # route backbone P4
  [[-1, -2], 1, Concat, [1]],
  
  [-1, 1, Conv, [256, 1, 1]],
  [-2, 1, Conv, [256, 1, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [256, 1, 1]], # 63
  
  [-1, 1, Conv, [128, 1, 1]],
  [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  [24, 1, Conv, [128, 1, 1]], # route backbone P3
  [[-1, -2], 1, Concat, [1]],
  
  [-1, 1, Conv, [128, 1, 1]],
  [-2, 1, Conv, [128, 1, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [-1, 1, Conv, [64, 3, 1]],
  [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [128, 1, 1]], # 75
      
  [-1, 1, MP, []],
  [-1, 1, Conv, [128, 1, 1]],
  [-3, 1, Conv, [128, 1, 1]],
  [-1, 1, Conv, [128, 3, 2]],
  [[-1, -3, 63], 1, Concat, [1]],
  
  [-1, 1, Conv, [256, 1, 1]],
  [-2, 1, Conv, [256, 1, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [-1, 1, Conv, [128, 3, 1]],
  [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [256, 1, 1]], # 88
      
  [-1, 1, MP, []],
  [-1, 1, Conv, [256, 1, 1]],
  [-3, 1, Conv, [256, 1, 1]],
  [-1, 1, Conv, [256, 3, 2]],
  [[-1, -3, 51], 1, Concat, [1]],
  
  [-1, 1, Conv, [512, 1, 1]],
  [-2, 1, Conv, [512, 1, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [-1, 1, Conv, [256, 3, 1]],
  [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
  [-1, 1, Conv, [512, 1, 1]], # 101
  
  [75, 1, RepConv, [256, 3, 1]],
  [88, 1, RepConv, [512, 3, 1]],
  [101, 1, RepConv, [1024, 3, 1]],
 
  [[102,103,104], 1, IDetect, [nc, anchors]
  1. 测试:

    • 在单独的测试数据集上测试最终训练好的模型,以评估其在实际场景中的性能。

    • 分析模型的预测结果,计算指标,并根据需要进行改进。

      YOLOv7 FPS and inference time comparison between different models.

请记住,根据数据集的规模、质量和特定要求对YOLOv7模型进行微调。此外,确保拥有足够的数据量,以避免过拟合并获得良好的泛化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

栈的运行算法

一&#xff0c;顺序栈的静态分配 二&#xff0c;顺序栈的动态分配 #include<stdio.h> #include<stdlib.h> #define initsize 5 #define incresize 5typedef struct Sqstack{int *base;int *top;int stacksize; }Sqstack;void InitStack(Sqstack *s){(*s).base(int…

数字孪生技术:新零售的未来之路

随着科技的不断进步&#xff0c;新零售产业正经历着巨大的变革。数字孪生作为一种新兴技术正在加速这一变革的进程。它不仅为新零售企业带来了更高效的运营方式&#xff0c;还为消费者提供了更个性化、便捷的购物体验。那么&#xff0c;数字孪生技术究竟如何在新零售产业中发挥…

选择同步云盘工具?这些值得一试的优秀选择!

对于云盘用户而言&#xff0c;同步功能是影响产品选择的重要因素。在日常办公过程中&#xff0c;我们难免会遇到需要查看文件&#xff0c;但是存储文件的原设备不在身边的情况。这个时候同步云盘的重要性就显现出来了. 同步云盘的优势 文件同步&#xff1a;同步云盘可以将文件…

L05_SpringBoot入门

SpringBoot入门 浅谈Restful风格代码实现(并且通过Apifox进行接口测试[以传入json格式数据为例])首先创建一个SpringBoot项目,pom文件包引入如下下面在新建src创建com.ndky.controller包,然后再在包内创建一个HelloController类编写(一个简易的restful风格的代码)编写GET请求代…

正则表达式基础语法

https://tool.oschina.net/regex 正则表达式&#xff1a;检查、匹配字符串的表达式 单个字符匹配&#xff1a; 有特殊含义的匹配&#xff1a; 多次重复匹配&#xff1a; 限定开头结尾的匹配&#xff1a; 贪婪模式&#xff1a;在满足条件的情况下&#xff0c;尽可能多匹配…

Python算法练习 10.12

leetcode 649 Dota2参议院 Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每…

MNIST字符识别(C++)

构建网络 采用官方示例的的lenet网络 训练 相关文件都已编译好&#xff0c;下载后执行命令即可 .\caffe-bin.exe train --solver .\lenet_solver.prototxt 识别 #include <caffe/caffe.hpp>#include <opencv2/core/core.hpp> #include <opencv2/highgui/hi…

炒现货白银的最佳时间

天时地利人和是我们进行现货白银投资最关键的因素。天时是指我们因时而动&#xff0c;在适合的时机出击。地利&#xff0c;就是我们对市场的定位&#xff0c;对自己入场的定位有清晰的了解&#xff0c;并且这些位置对我们有利。人和就是指投资者的状态很好&#xff0c;对如何进…

STM32MP157按键中断实验

按键配置 #include "key_it.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_rcc.h"void key_it_config() {/* RCC使能GPIOF时钟 */RCC->MP_AHB4ENSE…

九章云极DataCanvas公司入选《AIGC产业链北京专精特新企业图谱》

近日&#xff0c;北京市经济和信息化局成功举办AIGC&#xff08;生成式人工智能&#xff09;产业链专精特新企业融通路演活动&#xff0c;并正式发布《AIGC产业链北京市专精特新企业图谱》&#xff08;下称《图谱》&#xff09;。九章云极DataCanvas公司凭借DataCanvas Alaya九…

Python- socket编程

Python中的socket模块为网络通信提供了基础API&#xff0c;使我们能够在应用程序中实现低级的网络交互。使用socket编程&#xff0c;可以创建TCP、UDP和RAW sockets来进行数据通信。 以下是Python socket 编程的简要概述&#xff1a; 1. 核心概念 Socket: 通信的端点&#x…

PTrade获取当日n个季度前的日期所处季度的最后一天——时间相关函数4

本文介绍的函数用于获取当日n个季度前的日期所处季度的最后一天&#xff08;有点绕&#xff0c;看后面例子就好理解了&#xff09;。 源码 def last_day_of_quarter_before_n_quarters(n):"""获取当日n个季度前的日期所处季度的最后一天:return: 当日n个季度前…

leetcode 打家劫舍篇

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU规格参数

一、电路原理图 【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU —— 明佳达 二、规格参数 1、STM32F031K4U6&#xff08;16KB&#xff09;闪存 32UFQFPN 核心处理器&#xff1a;ARM Cortex-M0 内核规格&#xff1a;32 位单核 速度&a…

喜报!冲量在线中标中国电信北京公司2023年基于通用GPU的可信执行环境技术的研究项目

近日&#xff0c;冲量在线中标中国电信北京公司2023年基于通用GPU的可信执行环境的研究项目&#xff01;基于通用GPU的可信执行环境技术&#xff0c;完成业界领先的基于国产可信芯片的AI算力平台建设。 通过平台TEEGPU的隐私计算能力&#xff0c;给现有的AI智算平台在可信计算方…

必知必会的22种设计模式(GO语言)

日常工作中免不了使用设计模式&#xff0c;那么你使用了哪些设计模式呢&#xff1f; 设计模式是什么&#xff1f; 设计模式是一种在软件设计中对常见问题的通用解决方案。 它们是经过验证的、可重用的设计思想&#xff0c;可以帮助解决开发过程中遇到的各种问题。 设计模式…

碰撞检测算法——分离轴算法在Unity中实现(二)

一、介绍 分离轴算法&#xff08;简称SAT&#xff09;通常用于检查两个简单多边形&#xff08;凸边形&#xff09;之间或多边形与圆之间的碰撞。本质上&#xff0c;如果您能够绘制一条线来分隔两个多边形&#xff0c;则它们不会发生碰撞&#xff0c;如果找不到一条线来分割两个…

卷积神经网络CNN基础知识

目录 1 前言2 卷积神经网络CNN2.1 LeNet-5相关介绍2.2 CNN基本结构2.2.1 卷积层2.2.2 池化层&#xff08;下采样层&#xff09;2.2.3 全连接层2.2.3.1激励层&#xff08;非线性激活&#xff09;2.2.3.2 线性层2.2.3.3 Dropout层2.2.3.4 总结 2.3 图像的上采样和下采样2.3.1 上采…

vue2 .sync 修饰符

vue2 .sync 修饰符 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\13-sync修饰符 vue --version vue create v-sy…

高效团队协作软件推荐:提升工作效率的优选方案!

使用团队协作软件有什么好处&#xff1f;可以摆脱过时的电子表格&#xff0c;有了单一的真实来源&#xff0c;您可以随时检查任何任务并获得可用的最新信息。 一目了然地查看所有正在进行的工作&#xff0c;看板式面板、甘特图和燃尽图等可视化工具可让您随时轻松获得项目的高级…