热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程

本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。

本文主要介绍关于人工智能,神经网络,深度学习的知识点,对【YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程】和【郑州最低生活保障】有兴趣的朋友可以看下由【Together_CZ】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的深度学习相关技术问题。

郑州最低生活保障

YOLOv7出来也有一段时间了,在刚出来的时候我就抢先体验了一把,当时主要是就是尝尝鲜,没有实际项目落地,所以也就没有去用很多数据集,也没有对模型进行评估计算,在前面的系列博文里面已经做了记录,感兴趣的话可以去看下:

                  《基于yolov4作者最新力作yolov7目标检测模型实现火点烟雾检测》

相信很多从事目标检测任务的人来说一定对于YOLO是很不陌生的,对于新出来的模型大多都保持着一定的新鲜感,新鲜事物早体验呗。前段时间感觉也是应接不暇了,先是美团技术团队提出来了yolov6,也就间隔一周的时间吧,yolov7就出来的,当然了,两者的优化思路是不一样的,可以根据自身的实际业务场景需求来进行选择即可,也未必说越新的模型就会越好。

还记得第一次接触到目标检测类任务的时候很不知所措,即使是拿到开源的项目也很难说能够顺利调试跑起来,一方面是可能项目本身迭代的过程中有问题遗留了、版本不兼容了等等;另一方面就是自己的实践经验不足,所以新领域新模型新任务可能会踩很多坑进去。

写这篇文章的最大的初衷就是想要基于作者开源的项目详细出一篇操作使用教程,这里不涉及对于YOLOv7原理的讲解,感兴趣的话可以看看论文,这个可能更有用一点。之前自己的尝鲜写的一篇文章对于初学者新手来说并不很好上手,所以这篇文章也算是从内容细节角度对YOLOv7使用的补充说明。除此之外还有一个原因就是之前也有在网上看到过一些平台、公众号发的YOLOv7什么从零开始的教程,我对照着操作了一下发现按照教程里面的说明根本跑不起来,连最基本的数据集构建形式都不对,真心怀疑作者或者是那些转发的人真的有自己去按照这个发的教程实地操作过吗?我给平台和公众号都留言提问了,我以为能够得到答复不管是否与问题有关毕竟是做技术的公众号或者是平台,结果换来的却是留言被屏蔽折叠了。。。。这种操作着实是很无语,想了下与其纠结这些不如自己发个教程,真正是可以被复制操作的操作教程。

首先给出来论文地址。前面也说了,想要仔细了解作者的网络的设计思想和YOLOv7模型的原理部分可以先去看看作者前不久刚发表的论文,本文主要是重实践操作。

《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》

 官方作者开源的项目地址在这里。

 现在已经突破了4K的star量了,不得不说真的强啊!

 简单的介绍就到这里,接下来开始步入正题,首先从git仓库下载作者提供的项目源码。

1、开源项目下载

如下图所示,一共有两种方式可供下载

 这里之所以区分开为两种方式下载,是因为一些比较热门或者大型项目或者是更新频率比较高的项目作者在开发到某个阶段的时候都会发布出来一个可用的稳定版本也就是tag这里,我一般下载开源项目使用的话会偏向于下载作者releas的稳定版本使用;当然了,如果不在意这些细节的话也可以直接点击Code之后下载zip源码包,此时下载下来的源码包会是最新的代码,也就是说:方式二获取到的代码版本>=方式一获取到的代码版本。到底使用哪个完全看自己的选择和需求。我这里选择的是tag里面的稳定版本。

点击tag,进入新的页面,地址在这里。

 之后点击Download进入到下载页面。

 下载页面如下,地址在这里。

 下载红框选择的源码包即可。下载好后截图如下:

 我是在windows10下面操作的,本地解压缩后,截图如下所示:

 一共包含12个项目文件。到此处,项目下载处理工作就已经全部结束了。接下来就是数据集构建解析部分了。

2、数据集构建

本文使用到的数据集来自于网络采集,需要检测的目标对象是牛耳朵上面的标牌,样例数据如下所示:

 首先在当前项目目录下创建新的目录0000,之所以用这种临时数字作为目录名是因为方便辨识,之后处理完数据集后就可以直接删除掉了。创建好后项目截图如下所示:

 进入0000目录,分别创建:JPEGImages/、labels/、xmls三个目录,顾名思义,分别用来存放:图像数据集、yolo标注数据集和xml原始标注文件数据。如下所示:

 接下来我们分别看下三个目录的数据。

JPEGImages/目录截图如下所示:

xmls/目录截图如下所示:

 labels/目录截图如下所示:

 到这里数据集的准备工作就结束了,接下来就是数据集划分处理了。

这里我在自己跑通YOLOv7项目对比发现,YOLOv7其实和之前发表的YOLOv6所用的数据集格式是相同的,所以为了方便使用项目,我写了个数据集划分处理的脚本makeDataset.py放在项目统计目录下即可,如下所示:

 红框选中的是我们自己新增的部分,0000目录是原始数据集存放目录,makeDataset.py是训练集-测试集划分模块。我默认设定90%的数据集用于模型的训练,其余的用于模型测试,可以根据自己的需求修改都是可以的。

这里给出来makeDataset源码:

#!usr/bin/env python
# encoding:utf-8
from __future__ import division



"""
__Author__:沂水寒城
功能: 拆分原始的数据集为  训练集-测试集,训练集和测试集不交叉
"""



import os
import json
import random
import shutil




def splitDataset(dataDir="0000/", saveDir="dataset/", train_ratio=0.9):
    """
    划分数据集
    """
    pic_ids_list = [
        one.split(".")[0].strip() for one in os.listdir(dataDir + "JPEGImages/")
    ]
    print("pic_ids_list_length: ", len(pic_ids_list))
    train_num = int(train_ratio * len(pic_ids_list))
    train_list = random.sample(pic_ids_list, train_num)
    test_list = [one for one in pic_ids_list if one not in train_list]
    print("train_list_length: ", len(train_list))
    print("test_list_length: ", len(test_list))
    # 创建存储目录-训练集
    trainImgDir = saveDir + "images/train/"
    trainTxtDir = saveDir + "labels/train/"
    if not os.path.exists(trainImgDir):
        os.makedirs(trainImgDir)
    if not os.path.exists(trainTxtDir):
        os.makedirs(trainTxtDir)
    for one_id in train_list:
        shutil.move(
            dataDir + "JPEGImages/" + one_id + ".jpg", trainImgDir + one_id + ".jpg"
        )
        shutil.move(
            dataDir + "labels/" + one_id + ".txt", trainTxtDir + one_id + ".txt"
        )
    print(
        "================================Train Dataset Build Success================================"
    )
    # 创建存储目录-测试集
    testImgDir = saveDir + "images/test/"
    testTxtDir = saveDir + "labels/test/"
    if not os.path.exists(testImgDir):
        os.makedirs(testImgDir)
    if not os.path.exists(testTxtDir):
        os.makedirs(testTxtDir)
    for one_id in test_list:
        shutil.move(dataDir + "JPEGImages/" + one_id + ".jpg", testImgDir + one_id + ".jpg")
        shutil.move(dataDir + "labels/" + one_id + ".txt", testTxtDir + one_id + ".txt")
    print(
        "================================Test Dataset Build Success================================"
    )




if __name__ == "__main__":

    print(
        "========================================Loading splitDataset========================================"
    )


    splitDataset(dataDir="0000/", saveDir="dataset/", train_ratio=0.9)

 终端执行makeDataset.py,输出如下所示:

 执行结束后会自动创建新的数据集目录dataset,如下所示:

 进入dataset目录,截图如下所示:

其中:

images目录用于存储图像数据

labels目录用于存储标注文件数据 

整体结果如下所示:

dataset-images-test
        |     |
        |     -train
        |
        labels-test
              | 
              -train

进入images目录如下所示:

 进入test目录如下所示:

 进入train目录如下所示:

 接下来进入labels目录,如下所示:

 进入test目录如下所示:

 进入train目录如下所示:

 train(301)—test(34)这与前面终端输出结果数据相对应。

到这里我们的数据集准备——>数据集创建工作就已经全部结束了。

3、模型开发训练

前两部分完成以后就可以开始修改对应的参数配置来进行自己的数据集上面的模型训练开发了,因为我没有GPU资源,只能使用CPU资源来进行计算,所以这里我选择的模型是yolov7-tiny,这个相较于其他型号的模型来说参数量和计算量更小。

本质上来讲,训练自己的模型可以从头开始训练也可以基于官方公开的预训练模型来进行微调,重头训练的话花费的时间会更多,精度可能也不好因为有很多超参数要调试才行没有那么多的精力和时间去做,所以这里我选择的是基于预训练模型进行微调,可以从这个页面下载模型:

 红框就是我自己下载的模型,选择的是最小的型号。

接下来就需要编写自己的训练yaml配置文件了,官方提供的coco数据集的yaml配置文件默认都存放在data目录下,进入到data目录下截图如下所示:

 coco.yaml如下所示:

# COCO 2017 dataset http://cocodataset.org

# download command/URL (optional)
download: bash ./scripts/get_coco.sh

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./coco/train2017.txt  # 118287 images
val: ./coco/val2017.txt  # 5000 images
test: ./coco/test-dev2017.txt  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

# number of classes
nc: 80

# class 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' ]

我们可以仿照着写自己的就好,我创建的是niuer.yaml,如下所示:

 niuer.yaml内容如下所示:

 相比于官方提供的coco.yaml来说,我删除了不必要的注释信息精简了格式,总体只需要三部分的内容:
a、数据集的路径

b、类别数目

c、目标清单列表

创建完成后就可以修改模型的yaml文件了,原始项目的模型yaml文件默认存放在cfg/deploy/目录下面,进入到该目录下,截图如下所示:

 选择自己所需要的型号的模型的yaml文件打开修改,这里我是用的是tiny版本的。yolov7-tiny-silu.yaml如下所示:

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv7-tiny backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [32, 3, 2]],  # 0-P1/2  
  
   [-1, 1, Conv, [64, 3, 2]],  # 1-P2/4    
   
   [-1, 1, Conv, [32, 1, 1]],
   [-2, 1, Conv, [32, 1, 1]],
   [-1, 1, Conv, [32, 3, 1]],
   [-1, 1, Conv, [32, 3, 1]],
   [[-1, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [64, 1, 1]],  # 7
   
   [-1, 1, MP, []],  # 8-P3/8
   [-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, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [128, 1, 1]],  # 14
   
   [-1, 1, MP, []],  # 15-P4/16
   [-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, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [256, 1, 1]],  # 21
   
   [-1, 1, MP, []],  # 22-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, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [512, 1, 1]],  # 28
  ]

# YOLOv7-tiny head
head:
  [[-1, 1, Conv, [256, 1, 1]],
   [-2, 1, Conv, [256, 1, 1]],
   [-1, 1, SP, [5]],
   [-2, 1, SP, [9]],
   [-3, 1, SP, [13]],
   [[-1, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [256, 1, 1]],
   [[-1, -7], 1, Concat, [1]],
   [-1, 1, Conv, [256, 1, 1]],  # 37
  
   [-1, 1, Conv, [128, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [21, 1, Conv, [128, 1, 1]], # route backbone P4
   [[-1, -2], 1, Concat, [1]],
   
   [-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, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [128, 1, 1]],  # 47
  
   [-1, 1, Conv, [64, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [14, 1, Conv, [64, 1, 1]], # route backbone P3
   [[-1, -2], 1, Concat, [1]],
   
   [-1, 1, Conv, [32, 1, 1]],
   [-2, 1, Conv, [32, 1, 1]],
   [-1, 1, Conv, [32, 3, 1]],
   [-1, 1, Conv, [32, 3, 1]],
   [[-1, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [64, 1, 1]],  # 57
   
   [-1, 1, Conv, [128, 3, 2]],
   [[-1, 47], 1, Concat, [1]],
   
   [-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, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [128, 1, 1]],  # 65
   
   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 37], 1, Concat, [1]],
   
   [-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, -2, -3, -4], 1, Concat, [1]],
   [-1, 1, Conv, [256, 1, 1]],  # 73
      
   [57, 1, Conv, [128, 3, 1]],
   [65, 1, Conv, [256, 3, 1]],
   [73, 1, Conv, [512, 3, 1]],

   [[74,75,76], 1, Detect, [nc, anchors]],   # Detect(P3, P4, P5)
  ]

一般来说只需要修改nc,也就是类别数目即可,别的参数初步先不需要怎么动。这里我的数据集只有1种目标对象,所以修改如下:

 模型训练所需要的超参数配置文件默认存放在data目录下,如下所示:

 tiny版本对应的yaml文件为hyp.scratch.tiny.yaml,如下所示:

lr0: 0.01  # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.01  # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937  # SGD momentum/Adam beta1
weight_decay: 0.0005  # optimizer weight decay 5e-4
warmup_epochs: 3.0  # warmup epochs (fractions ok)
warmup_momentum: 0.8  # warmup initial momentum
warmup_bias_lr: 0.1  # warmup initial bias lr
box: 0.05  # box loss gain
cls: 0.5  # cls loss gain
cls_pw: 1.0  # cls BCELoss positive_weight
obj: 1.0  # obj loss gain (scale with pixels)
obj_pw: 1.0  # obj BCELoss positive_weight
iou_t: 0.20  # IoU training threshold
anchor_t: 4.0  # anchor-multiple threshold
fl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)
hsv_h: 0.015  # image HSV-Hue augmentation (fraction)
hsv_s: 0.7  # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4  # image HSV-Value augmentation (fraction)
degrees: 0.0  # image rotation (+/- deg)
translate: 0.1  # image translation (+/- fraction)
scale: 0.5  # image scale (+/- gain)
shear: 0.0  # image shear (+/- deg)
perspective: 0.0  # image perspective (+/- fraction), range 0-0.001
flipud: 0.0  # image flip up-down (probability)
fliplr: 0.5  # image flip left-right (probability)
mosaic: 1.0  # image mosaic (probability)
mixup: 0.05  # image mixup (probability)
copy_paste: 0.0  # image copy paste (probability)
paste_in: 0.05  # image copy paste (probability)

初步学习使用的话可以先不修改,这些在后期调参的时候会用到,这里我直接使用默认参数配置。

完成这些操作后就可以修改训练模块train.py,执行训练了。主要修改的部分在

if __name__ == '__main__':

这句代码后面。为了使用方便,我这里做了一些修改工作,如下所示:

 我把需要修改的参数都给提取罗列出来了不需要再那么多的代码里面找来找去,只需要修改我上面的变量值即可。

另外,我在训练的时候报错如下:

 报错详情如下:

RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.

这个报错说白了就是在CPU训练模式下,加载预训练权重文件的时候报错的,因为这时候需要显示地指定cpu加载才行,于是我修改了代码,如下:

 在这里加入了判断,兼容了cpu和gpu两种训练模式。

修改报错后,重新训练,看到输出的这么一大堆信息的时候我一度认为训练成功跑起来了,如下:

 结果又又又报错了,如下所示:

 报错详情如下:

BrokenPipeError: [Errno 32] Broken pipe

一顿百度,找到了解决方案:

 这个是windows下多线程的问题,把多线程换成单线程就可以了。

定位到问题发生模块在utils/datasets.py,打开该模块后,直接ctrl+F,搜索如下信息:

torch.utils.data.DataLoader

定位到了83行,如下所示:

 将87行内容,num_workers值修改为0,保存即可,如下所示:

 之后重新执行train.py模块启动模型训练。这次终于成功跑起来了,如下所示:

 资源占用如下所示:

 当前项目截图如下所示:

 runs为模型训练过程中权重等数据的存储目录。进入runs如下所示:

 进入train如下所示:

 每一次运行报错再次启动都会重新创建一个exp目录,后缀会依次递增。进入最新目录截图如下所示:

 weights目录是模型权重的存储目录,进入weights截图如下所示:

 默认设定的是100次的迭代计算。

看下混淆矩阵,因为这里我们是单目标检测,所以混淆矩阵就相当于是二分类:

 F1曲线(用于找到模型的最佳score阈值):

 精确度曲线:

 召回率曲线:

 PR曲线:

 可以看出来:检测识别的效果还是很好的。

模型结果指标数据:

 100次迭代计算输出:

      0/99        0G   0.08645   0.02109         0    0.1075        21       640    0.1316    0.1667   0.05215   0.01419    0.1187   0.01549         0
      1/99        0G   0.07425    0.0143         0   0.08855        22       640   0.09285    0.1621   0.03091  0.009984    0.1028    0.0151         0
      2/99        0G   0.06819   0.01275         0   0.08094        13       640    0.1224    0.6667    0.1063   0.02592   0.09379   0.01552         0
      3/99        0G   0.06039   0.01239         0   0.07278        16       640     0.607    0.7083    0.6347    0.2695   0.09059   0.01422         0
      4/99        0G   0.05559   0.01155         0   0.06714        22       640    0.6782    0.7917    0.6511    0.1883   0.09351   0.01164         0
      5/99        0G   0.05053   0.01077         0    0.0613        20       640    0.9989      0.75    0.8682    0.5465   0.08279   0.01145         0
      6/99        0G   0.04722   0.00985         0   0.05707        17       640    0.8326    0.8333    0.8599    0.4325   0.07511   0.01165         0
      7/99        0G   0.04488  0.009128         0     0.054        17       640    0.8811     0.618    0.8112    0.1873   0.07467     0.011         0
      8/99        0G   0.04992  0.008219         0   0.05814        17       640    0.7237    0.8732    0.8679    0.4222    0.0738   0.01156         0
      9/99        0G   0.04696  0.008613         0   0.05557        20       640    0.9333    0.5831    0.8237    0.3091   0.07597   0.01119         0
     10/99        0G   0.04695  0.008877         0   0.05583        15       640         1    0.4562    0.7159    0.3098   0.07727   0.01142         0
     11/99        0G   0.04495  0.009201         0   0.05415        19       640    0.8947     0.708    0.8565    0.4405   0.06773   0.01188         0
     12/99        0G     0.041  0.008533         0   0.04954        13       640    0.8053     0.875    0.8975     0.504   0.07316   0.01061         0
     13/99        0G   0.04185  0.008655         0    0.0505         8       640    0.8468    0.9583    0.9474    0.6442   0.06655   0.01095         0
     14/99        0G   0.03833   0.00922         0   0.04755        23       640    0.8799    0.9167    0.9322    0.5691   0.06899   0.01023         0
     15/99        0G    0.0385  0.008392         0   0.04689        27       640    0.9196         1    0.9799    0.7191    0.0659   0.01057         0
     16/99        0G   0.03746  0.008487         0   0.04595        20       640         1    0.9989    0.9951    0.5919   0.06961   0.00971         0
     17/99        0G   0.03358  0.007715         0    0.0413        17       640    0.9231         1    0.9782    0.6687   0.06801  0.009243         0
     18/99        0G   0.03469  0.007757         0   0.04245        17       640    0.8888         1    0.9857    0.6962   0.06664  0.009126         0
     19/99        0G   0.03891  0.007384         0   0.04629        13       640    0.9165    0.9151    0.9683    0.6942   0.07167  0.008562         0
     20/99        0G   0.03341  0.007338         0   0.04074        15       640    0.9999         1    0.9951    0.6178   0.06388  0.008745         0
     21/99        0G   0.03309   0.00712         0   0.04021        19       640         1    0.9581    0.9906    0.4566   0.06662  0.008792         0
     22/99        0G   0.03108  0.007027         0   0.03811        12       640    0.9231    0.9997    0.9772    0.5566   0.06053  0.008572         0
     23/99        0G    0.0308  0.007174         0   0.03798        12       640    0.9998         1    0.9951    0.7559   0.05631  0.008735         0
     24/99        0G   0.03142  0.007236         0   0.03865        19       640    0.9998         1    0.9951    0.6692   0.05503  0.008945         0
     25/99        0G   0.03478  0.007464         0   0.04224        11       640    0.9231    0.9997     0.989    0.7802   0.05774  0.009384         0
     26/99        0G    0.0365  0.007349         0   0.04385        18       640    0.8328    0.8333    0.8836    0.4577   0.06091  0.008671         0
     27/99        0G    0.0341  0.007164         0   0.04126        20       640    0.9583     0.958    0.9878    0.4116   0.06685  0.008755         0
     28/99        0G   0.03703   0.00709         0   0.04412        19       640    0.9597         1    0.9935    0.6888   0.05661  0.008824         0
     29/99        0G   0.03433  0.007063         0   0.04139        17       640         1    0.9996    0.9951    0.5953    0.0602  0.008255         0
     30/99        0G   0.03485  0.007211         0   0.04206        22       640      0.92     0.958    0.9753     0.584   0.05793  0.007916         0
     31/99        0G   0.03329  0.007254         0   0.04054        21       640    0.9999         1    0.9951    0.7042   0.05681  0.007966         0
     32/99        0G   0.03125   0.00786         0   0.03911        22       640    0.9999         1    0.9952    0.7568   0.05928  0.007284         0
     33/99        0G   0.03193  0.007066         0     0.039        17       640    0.9999         1    0.9952    0.7773   0.05714  0.007892         0
     34/99        0G   0.02773  0.006793         0   0.03453        16       640      0.96         1    0.9904    0.8012   0.05402  0.007608         0
     35/99        0G    0.0293  0.007126         0   0.03643        18       640         1         1    0.9952    0.7726   0.05394  0.007457         0
     36/99        0G   0.03043   0.00702         0   0.03745        17       640         1         1    0.9952    0.7329   0.04932  0.007579         0
     37/99        0G   0.02925  0.006435         0   0.03568        14       640    0.9999         1    0.9952    0.6977    0.0503  0.007968         0
     38/99        0G   0.02686  0.006439         0    0.0333        11       640         1         1    0.9952    0.8362   0.04803  0.008053         0
     39/99        0G   0.02749  0.006792         0   0.03428        18       640    0.9999         1    0.9952    0.7249    0.0484  0.008273         0
     40/99        0G   0.02841  0.006806         0   0.03522        19       640    0.9998         1    0.9953    0.7464   0.04826  0.007672         0
     41/99        0G   0.02737  0.006376         0   0.03375        17       640    0.8746     0.875    0.9341     0.575   0.05707  0.007859         0
     42/99        0G   0.03425  0.006874         0   0.04112        15       640         1         1    0.9954    0.6918   0.04879  0.008522         0
     43/99        0G   0.02923  0.006797         0   0.03603        18       640      0.96         1    0.9937    0.7065   0.04774  0.007688         0
     44/99        0G    0.0299  0.006504         0    0.0364        14       640         1    0.9999    0.9954    0.7592   0.04981  0.008118         0
     45/99        0G   0.02879  0.007006         0    0.0358        16       640    0.9999         1    0.9954    0.7742   0.04913  0.007718         0
     46/99        0G   0.02725  0.006798         0   0.03405        13       640    0.9999         1    0.9954    0.7273   0.04678  0.007715         0
     47/99        0G   0.02942  0.006903         0   0.03633        22       640         1         1    0.9953    0.7607   0.04437  0.007802         0
     48/99        0G    0.0257   0.00718         0   0.03288        24       640         1         1    0.9952    0.7488   0.04486  0.007831         0
     49/99        0G    0.0274   0.00674         0   0.03414        16       640    0.9999         1    0.9953    0.7407   0.04439  0.007823         0
     50/99        0G   0.02644  0.006724         0   0.03317        14       640    0.9999         1    0.9954    0.8482   0.04071  0.007581         0
     51/99        0G   0.02581  0.006213         0   0.03202        10       640         1         1    0.9954     0.816   0.04281  0.007705         0
     52/99        0G   0.02359  0.006992         0   0.03058        18       640         1         1    0.9954    0.8604   0.03255  0.008439         0
     53/99        0G   0.02393  0.006942         0   0.03088        21       640         1         1    0.9955    0.8642   0.03305  0.007995         0
     54/99        0G   0.02203  0.007255         0   0.02929        23       640         1         1    0.9955    0.8587   0.03032  0.008071         0
     55/99        0G   0.02139  0.006785         0   0.02817        10       640         1         1    0.9955    0.8869    0.0299   0.00762         0
     56/99        0G   0.02232  0.006676         0     0.029        11       640         1         1    0.9956    0.8487   0.03179  0.007302         0
     57/99        0G   0.02199  0.006501         0   0.02849        18       640         1         1    0.9956    0.8947   0.02997  0.006732         0
     58/99        0G    0.0203   0.00691         0   0.02721        21       640         1         1    0.9956    0.8894   0.02956  0.006285         0
     59/99        0G   0.02032  0.006013         0   0.02634        18       640    0.9999         1    0.9956     0.895   0.02968  0.005989         0
     60/99        0G   0.01971  0.006415         0   0.02612        15       640         1         1    0.9957    0.8855    0.0283  0.005833         0
     61/99        0G   0.01886  0.006243         0    0.0251        15       640    0.9999         1    0.9957    0.8863   0.02836  0.005427         0
     62/99        0G   0.01866  0.005752         0   0.02441        12       640         1         1    0.9956    0.8727   0.03066  0.005088         0
     63/99        0G    0.0173  0.005166         0   0.02247         7       640         1         1    0.9956    0.9077    0.0299  0.004827         0
     64/99        0G   0.01837    0.0058         0   0.02417        16       640    0.9999         1    0.9956    0.8771   0.03165  0.004784         0
     65/99        0G   0.01754  0.005237         0   0.02278        13       640    0.9999         1    0.9958    0.9042   0.02821  0.005012         0
     66/99        0G   0.01677   0.00601         0   0.02278        14       640         1         1    0.9958    0.9129   0.02833  0.004743         0
     67/99        0G   0.01704  0.005926         0   0.02296        15       640         1         1    0.9957    0.8731   0.02821  0.004747         0
     68/99        0G   0.01823  0.005314         0   0.02354        13       640    0.9999         1    0.9958     0.869    0.0296  0.004604         0
     69/99        0G   0.01615  0.005362         0   0.02151        16       640    0.9999         1    0.9958    0.8795   0.02833  0.004512         0
     70/99        0G   0.01602  0.005604         0   0.02162        21       640         1    0.9999    0.9958    0.9032   0.02666  0.004343         0
     71/99        0G   0.01572  0.005379         0    0.0211        22       640         1         1    0.9958    0.8962   0.02728  0.004219         0
     72/99        0G   0.01486  0.005087         0   0.01995        13       640         1         1    0.9958    0.9119   0.02647  0.004087         0
     73/99        0G   0.01542  0.004972         0   0.02039        16       640         1         1    0.9958    0.9166   0.02592  0.004002         0
     74/99        0G   0.01433  0.005106         0   0.01943        21       640         1         1    0.9958     0.934    0.0255  0.004025         0
     75/99        0G   0.01361   0.00529         0    0.0189        20       640         1         1    0.9959    0.9441   0.02405  0.003928         0
     76/99        0G    0.0129  0.004545         0   0.01745        15       640    0.9999         1    0.9958    0.9326   0.02385  0.003876         0
     77/99        0G   0.01242  0.004843         0   0.01726        18       640         1         1    0.9958    0.9328    0.0239  0.003851         0
     78/99        0G   0.01263  0.005073         0   0.01771        19       640         1         1    0.9957    0.9485     0.024  0.003696         0
     79/99        0G   0.01177  0.004769         0   0.01654        23       640         1         1    0.9957    0.9387   0.02324  0.003642         0
     80/99        0G   0.01226  0.004614         0   0.01687        10       640    0.9999         1    0.9958    0.9424   0.02323   0.00361         0
     81/99        0G   0.01122  0.004606         0   0.01582        18       640         1         1    0.9958    0.9498     0.023  0.003545         0
     82/99        0G   0.01084  0.004422         0   0.01526        12       640         1         1    0.9958    0.9594   0.02283  0.003506         0
     83/99        0G   0.01122  0.004561         0   0.01578        16       640    0.9999         1    0.9959    0.9541   0.02255  0.003443         0
     84/99        0G   0.01085  0.004742         0   0.01559        20       640         1         1    0.9959    0.9448    0.0221   0.00344         0
     85/99        0G   0.01078  0.004391         0   0.01517        16       640         1         1    0.9959    0.9513   0.02194  0.003411         0
     86/99        0G   0.01064  0.004382         0   0.01502        20       640         1         1    0.9959    0.9561   0.02182  0.003396         0
     87/99        0G   0.01091  0.004461         0   0.01537        20       640         1         1    0.9959    0.9571   0.02182  0.003385         0
     88/99        0G   0.01089   0.00456         0   0.01545        11       640         1         1    0.9959    0.9578    0.0214  0.003448         0
     89/99        0G   0.01091  0.004312         0   0.01522        16       640         1         1    0.9959    0.9624   0.02072  0.003512         0
     90/99        0G   0.01038  0.004264         0   0.01464        11       640         1         1    0.9959    0.9582   0.01999  0.003566         0
     91/99        0G   0.01118  0.004709         0   0.01589        22       640         1         1    0.9959    0.9574   0.01936    0.0036         0
     92/99        0G   0.01076  0.004586         0   0.01535        25       640         1         1    0.9959    0.9581   0.01895  0.003642         0
     93/99        0G   0.01049  0.005233         0   0.01572        10       640         1         1    0.9959    0.9611   0.01883  0.003617         0
     94/99        0G   0.01045  0.004639         0   0.01509        21       640         1         1    0.9959    0.9574   0.01872  0.003617         0
     95/99        0G   0.01009  0.004873         0   0.01496        12       640    0.9999         1    0.9959    0.9673   0.01849  0.003629         0
     96/99        0G   0.01067  0.004641         0   0.01531        15       640         1         1    0.9958     0.958   0.01823  0.003663         0
     97/99        0G   0.01042  0.004466         0   0.01489        19       640         1         1    0.9959     0.958   0.01798  0.003696         0
     98/99        0G   0.01102  0.004842         0   0.01587        21       640         1         1    0.9958    0.9581   0.01783  0.003703         0
     99/99        0G   0.01014  0.004716         0   0.01485        13       640    0.9999         1    0.9958    0.9581   0.01773  0.003693         0

训练结束终端输出截图如下所示:

 每个batch模型还会存储下载图像检测效果,随机选取一些看下:

 因为我前面设置的是batchsize大小是16,所以这里面的图中包含的都是16张子图数据。

到这里模型的开发训练工作就全部结束了,之后就可以对模型进行测试了。

4、模型测试分析

训练完成后就得到了训练好的模型权重数据了,之后就可以离线加载训练好的模型记性预测分析了,这里需要需要detect.py模块的内容,如下所示:

 可以看到:我保持了与train.py相同的风格,将需要修改的参数都提取罗列了出来,方便自己使用。这里为了方便我直接复制最初划分得到的测试数据集到同级目录下用于测试。项目截图如下所示:

 终端执行detect.py模块,输出截图如下所示:

 测试的结果会默认存储到runs目录下面,此时进入runs目录,截图如下所示:

 detect目录即为测试结果的存储目录。进入detect目录截图如下所示:

 进入exp目录,截图如下所示:

  labels目录存储的是模型的检测计算结果,如下所示:

 测试数据集共有34张图片,这里与之正好对应起来。

 随机打开一个,内容如下:

我们随机看几张测试的效果,如下所示:

 虽然只有几百张的图片,但是感觉YOLOv7的检测效果是很好的,尤其是目标边框边界的处理,检测框基本都是恰到好处的框住了所需要的目标对象。有意思,后面可以多研究看看。

到这里,基于YOLOv7来基于自己的数据集构建训练模型、调用离线权重文件来进行图像测试识别的完整流程就全部结束了,写了好长的时间,准备了大量的截图素材,希望是一份清晰明了的YOLOv7实战教程,有问题欢迎留言咨询。

本文《YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程》版权归Together_CZ所有,引用YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决python matplotlib画水平直线的问题
    本文介绍了在使用python的matplotlib库画水平直线时可能遇到的问题,并提供了解决方法。通过导入numpy和matplotlib.pyplot模块,设置绘图对象的宽度和高度,以及使用plot函数绘制水平直线,可以解决该问题。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
author-avatar
本人xiao13
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有