Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【目标检测】YOLOv5跑通VOC2007数据集

【目标检测】YOLOv5跑通VOC2007数据集

作者头像
zstar
发布于 2022-09-07 08:54:04
发布于 2022-09-07 08:54:04
2.2K10
代码可运行
举报
文章被收录于专栏:往期博文往期博文
运行总次数:0
代码可运行

前言

如果经常阅读我博客的读者,想必对YOLOv5并不陌生。在Pytorch:YOLO-v5目标检测(上)一文中,我使用了coco128数据集,非常轻松的跑通了。然而在使用VOC2007数据集时,却遇到重重阻碍。主要问题在数据标签转化这个阶段,VOC数据集标注形式是xml,需要将其转换为txt。很多博文并未把文件的放置位置交代清楚,导致走了不少弯路,本篇博文就记录如何不走弯路地跑通VOC数据集。

VOC数据集

我是用的VOC数据集是VOC2007,它的文件格式长这样:

注:官网上下载的话训练验集和测试集是分成两个压缩包VOCtrainval_06-Nov-2007.tarVOCtest_06-Nov-2007.tar,此处我将其进行合并,如需下载我合并后的数据集,可跳转到文末进行下载。

  • Annotations 该文件包含数据标注的xml文件
  • ImageSets 该文件包含数据集的划分
  • JPEGImages 该文件包含图像数据集

拿到数据集,第一件需要干的事是把JPEGImages文件夹名称改成images,具体原因后面解释,改完之后如图所示:

数据集处理

GitHub上,下载Yolov5代码 项目地址: https://github.com/ultralytics/yolov5 下载完之后,在文件中新建一个文件,我起名为voc_label.py,起名,位置均随意,这个文件主要干两件事:

  • 1、将ImageSets中的训练集、测试集、验证集提出来,拼凑成可以直接访问的绝对路径,如图所示
  • 2、把xml格式的标注转换成txt格式,如图所示:

图中红色方框圈住的是要提取出的数据,对于每一个目标,txt格式的数据有5个,分别为(class, x , y , w, h),即类别、中心点(x,y),宽高(w,h)。这里的转换公式在代码中有写道,不作细述。注意class必须是以0开始的序号,否则训练时会出现类别溢出的报错。

voc_label.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets = ['train', 'test', 'val']

Imgpath = 'D:/Desktop/Work/VOC2007/images' 
xmlfilepath = 'D:/Desktop/Work/VOC2007/Annotations/'  
ImageSets_path = 'D:/Desktop/Work/VOC2007/ImageSets/Segmentation/'
Label_path = 'D:/Desktop/Work/VOC2007/'
classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]



def convert(size, box):
    dw = 1. / size[0]
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def convert_annotation(image_id):
    in_file = open(xmlfilepath + '%s.xml' % (image_id))
    out_file = open(Label_path + 'labels/%s.txt' % (image_id), 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        bb = convert((w, h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')


for image_set in sets:
    if not os.path.exists(Label_path + 'labels/'):
        os.makedirs(Label_path + 'labels/')
    image_ids = open(ImageSets_path + '%s.txt' % (image_set)).read().strip().split()
    list_file = open(Label_path + '%s.txt' % (image_set), 'w')
    for image_id in image_ids:
        list_file.write(Imgpath + '/%s.jpg\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()

使用时,替换路径和类别classes即可。

运行之后,会在数据集文件夹下生成四个文件,labels中的txt文件和images中的图片名称一一对应。

训练准备

YOLOv5是通过yaml格式的配置文件来找到对应的训练测试数据,因此在训练前需要对该文件进行简单配置。 尽管YOLOv5已有自带的voc.yaml配置文件,但为了之后训练自己的数据,我这里还是新建一个mydata.yaml来将VOC数据进行导入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
train: D:/Desktop/Work/VOC2007/train.txt
val: D:/Desktop/Work/VOC2007/val.txt
test: D:/Desktop/Work/VOC2007/test.txt

# number of classes
nc: 20

# class names
names: [ 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor' ]

文件内容很简单,需要指定三个数据集的路径,类别个数和类别名称。

开始训练

打开train.py文件 主要需要调整三个参数 我使用yolov5s作为预训练模型,如下图所示进行修改。

运行之后,程序会自动从官网下载yolov5s.pt模型文件,放在根目录下面。 如果前面的操作和我一样,到此时应该能顺利跑通训练程序。 程序默认的epochs为300,为了尽快看到效果,可以改小些,训练完后,会在runs -> train -> exp 中看到训练和验证的文件。

如果再次运行,会发现生成了一个新的文件夹exp2…这是由于yolov5默认将每次运行结果单独放一个文件夹存储。 具体代码可参见train.py的518行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
opt.save_dir = increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok | opt.evolve)  # increment run

这里的increment_path函数就是每次累加exp序号,如果需要将结果保存到指定路径,可以直接将路径替换到等号右边。

当然,Yolov5也提供了一种便捷的方式放置不断生成exp文件。 在超参数设定中,有个参数为exist-ok,其默认为False,将其设置为True,则程序再次运行会在最近的exp生成文件。

另外,还有各种不同的参数,参数含义补充如下,可供研究参考。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path  模型配置和网络结构的yaml文件路径')
    parser.add_argument('--data', type=str, default='data/mydata.yaml', help='data.yaml path 数据集配置的yaml文件路径,包括数据集的路径,类名等关键信息')
    parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='超参数配置的yaml文件路径')
    parser.add_argument('--epochs', type=int, default=2)
    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes  输入图像的分辨率大小')
    parser.add_argument('--rect', action='store_true', help='rectangular training  是否采用矩形图像训练,默认是False')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training 从给定的path/last.pt恢复训练,如果为空,则从最近保存的path/last.pt恢复训练')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint 保存模型,只保存最后的检查点,默认为False')
    parser.add_argument('--notest', action='store_true', help='only test final epoch 训练中不进行test,只测试最后一个轮次,默认为False')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check 不自动调整anchor,默认为False')
    parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters 是否进行超参数进化,默认为False')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache-images', action='store_true', help='cache images for faster training 是否提前缓存图片到内存,以加快训练速度,默认为False')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%% 是否进行多尺度训练,默认为False')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class 将所有数据按照一个类别进行训')
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer 是否使用 torch.optim.Adam() 优化器,默认是False')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode 是否使用跨卡同步BN')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
    parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')
    parser.add_argument('--project', default='runs/train', help='save to project/name')
    parser.add_argument('--entity', default=None, help='W&B entity')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', default=True, action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
    parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
    parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
    parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
    opt = parser.parse_args()

开始测试

上面的过程只运用到了模型的训练和验证,打开test.py,可使用测试集对模型进行测试。 需要修改的参数和训练程序差不多,值得注意的是,yolov5在每次训练之后会输出两个模型文件,一个是best.pt,即验证集上表现最好(mAP最高)的模型,另一个是last.pt,即最后一轮训练的模型。通常来说,输入best.pt进行测试即可。 测试运行之后,会在runs中生成一个test文件,其中可进行训练结果和标注结果的对比。

开始检测

训练/测试只停留在数据集范围内,下面要对一些数据集之外的数据进行检测,打开detect.py文件 修改source为检测图片的文件夹,运行之后,在run->detect中输出检测结果。

更多拓展

如果你的目的只是跑通VOC数据集,那现在估计已经成功了(可以给本文点个赞来分享你成功的快乐 )。 如果你想更深入地研究Yolov5模型,可继续进行阅读。

超参数注释

在训练时,引入了--hyp这个属性,在data/hyp.scratch.yaml这个文件中,包含了训练所有的参数设置。 下面是各参数含义的解释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Hyperparameters for COCO training from scratch
# python train.py --batch 40 --cfg yolov5m.yaml --weights '' --data coco.yaml --img 640 --epochs 300
# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials

# 优化器相关
lr0: 0.01  # initial learning rate (SGD=1E-2, Adam=1E-3)  初始学习率
lrf: 0.2  # 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) 预热学习epoch
warmup_momentum: 0.8  # warmup initial momentum 预热学习率动量
warmup_bias_lr: 0.1  # warmup initial bias lr 预热学习率

# 不同损失函数权重,以及其他损失函数相关内容
box: 0.05  # box loss gain giou损失的系数
cls: 0.5  # cls loss gain 分类损失的系数
cls_pw: 1.0  # cls BCELoss positive_weight 分类BCELoss中正样本的权重
obj: 1.0  # obj loss gain (scale with pixels) 有无物体损失的系数
obj_pw: 1.0  # obj BCELoss positive_weight 有无物体BCELoss中正样本的权重
iou_t: 0.20  # IoU training threshold 标签与anchors的iou阈值iou training threshold

# anchor锚框
anchor_t: 4.0  # anchor-multiple threshold 标签的长h宽w/anchor的长h_a宽w_a阈值, 即h/h_a, w/w_a都要在(1/4.0, 4.0)之间
# anchors: 3  # anchors per output layer (0 to ignore)

# 数据增强相关 - 色彩转换
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/mixup
mosaic: 1.0  # image mosaic (probability) 进行mosaic的概率(一幅图像融合四幅图像)
mixup: 0.0  # image mixup (probability) 进行mixup的概率(对两个样本-标签数据对按比例相加后生成新的样本-标签数据)

我所使用的是YOLOv5-5.0版本,只有这一个超参数文件。而在官网最新的版本中,已经添加了多个文件。

每个文件属性依旧是上面这些,只是数值不同。至于如何进行调参会让效果更好,有必要进行更多的实验尝试。

更改文件名的逻辑

现在来解决之前遗留的问题,为什么要把图片文件夹名改成images 在源码dataset.py的341行,定义了img2label_paths这个路径函数,这里面固定了images和labels的名称。

如果未改文件夹名,会产生这个报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AssertionError: train: No labels in D:\Desktop\Work\XDUAV-dataset2\train.cache. Can not train without labels.

数据集/源码

本文使用的VOC2007数据集下载地址: https://pan.baidu.com/s/1Be9Ya5__2J9LKJhV5RkhaA?pwd=8888 本文编辑之后的Yolov5文件: https://pan.baidu.com/s/1GHAbUdU-Rf0dNc-FYgonCA?pwd=8888

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
你好我想问一下,博主用yolov5s跑voc2007准确率和召回率可以达到多少
你好我想问一下,博主用yolov5s跑voc2007准确率和召回率可以达到多少
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【目标检测】YOLOv5跑通VOC2007数据集(修复版)
在【目标检测】YOLOv5跑通VOC2007数据集一文中,我写了个脚本来提取VOC中Segmentation划分好的数据集,但是经过观察发现,这个train.txt中仅有209条数据,而VOC2007的图片有9963张,这意味着大量的图片被浪费,没有输入到模型中进行训练。
zstar
2022/09/16
6490
【目标检测】YOLOv5跑通VOC2007数据集(修复版)
YOLOv5 实现目标检测(训练自己的数据集实现猫猫识别)
2020年6月10日,Ultralytics在github上正式发布了YOLOv5。YOLO系列可以说是单机目标检测框架中的潮流前线了,YOLOv5并不是一个单独的模型,而是一个模型家族,包括了YOLOv5s(最小)、YOLOv5m、YOLOv5l、YOLOv5x(最大)。目前v6.0版本又新增一层YOLOv5n模型,代替YOLOv5s成为最小模型,在所有模型中速度更快但精度也更低。
全栈程序员站长
2022/07/01
5.4K0
YOLOv5 实现目标检测(训练自己的数据集实现猫猫识别)
基于YOLOv5的玻璃瓶盖缺陷检测
​摘要:采用Yolov5对玻璃瓶盖进行缺陷检测,做到工业落地部署,该任务相对来说在工业界较为简单,性能也能够满足客户要求,做到漏判≤0.01%,误报≤0.5%,交付成功;
AI小怪兽
2023/11/30
7800
基于yolov4的目标检测_yolov5预训练模型
YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。不得不说GitHub的确是全球最大的男性交友网站,里面的人个个都是人才,yolov5发布才一年左右的时间,YOLOv5就已经更新了5个分支了,分别是yolov5.1-yolov5.5分支。该项目就是利用的yolov5.5分支来作为讲解。
全栈程序员站长
2022/09/27
8750
基于yolov4的目标检测_yolov5预训练模型
基于YOLOv5的二维码QR码识别
二维码被广泛的应用在我们日常生活中,比如微信和支付宝支付、火车票、商品标识等。二维码的出现极大的方便了我们日常的生活,同时也能将信息较为隐蔽的传输。二维码种类多种多样,有QR Code、Data Matrix、Code One等,日常生活中常用的二维码是QR二维码,该二维码样式以及每部分的作用在图7-30给出。二维码定点方向有三个较大的“回”字形区域用于对二维码进行定位,该区域最大的特别之处在于任何一条经过中心的直线其在黑色和白色区域的长度比值都为1:1:3:1:1。二维码中间具有多个较小的“回”字形区域用于二维码的对齐,根据二维码版本和尺寸的不同,对齐区域的数目也不尽相同。
AI小怪兽
2023/12/04
1.1K0
使用YOLOv5模型进行目标检测!
目标检测是计算机视觉领域的一大任务,大致分为一阶段目标检测与两阶段目标检测。其中一阶段目标检测模型以YOLO系列为代表。最新的YOLOv5在各个数据集上体现出收敛速度快、模型可定制性强的特点,值得关注。本文主要讲解如何从零训练自己的YOLOv5模型与一些重要参数的含义。
Datawhale
2021/07/12
11.6K0
使用YOLOv5模型进行目标检测!
YOLOv5超详细的入门级教程(训练篇)(二)——VOC2007模型复现
- TIPS:用迅雷下载速度起飞哦!!!(之前我只下载了训练集,在这里补下测试集)
润森
2022/08/18
1.7K0
YOLOv5超详细的入门级教程(训练篇)(二)——VOC2007模型复现
利用yolov5实现口罩佩戴检测算法
首先申明,这篇博客是用于记录我第一次完全从头到尾跑通一个算法,我会在此博客详细写出我的具体过程,以供大家参考,可能会和炮哥博客有些重合,没办法毕竟我就是用他的博客来训练模型的。但这篇博客我会结合炮哥的博客和我自己训练过程中的一些问题和心得来写,所以还是会有所不的!!!博主其实也是个深度学习的小菜鸟hhh。在此感谢。
润森
2022/09/22
9600
利用yolov5实现口罩佩戴检测算法
基于Yolov8网络进行目标检测(二)-安装和自定义数据集
首先我们要知道YOLOv8这次发行中带的预训练模型,是是基于COCO val2017 数据集训练的结果。
python与大数据分析
2023/09/18
2.7K0
基于Yolov8网络进行目标检测(二)-安装和自定义数据集
GitHub YOLOv5 开源代码项目系列讲解(四)------训练相关参数解释
可以用于指定一个训练好的模型路径,用这个模型初始化模型中一些参数(首先需要提前下载或运行程序时会自动下载)
荣仔_最靓的仔
2022/01/05
3.1K1
GitHub YOLOv5 开源代码项目系列讲解(四)------训练相关参数解释
Pytorch:YOLO-v5目标检测(上)
YOLO全称为You Only Look Once(你只需看一次)。卷积神经网络处理图像时,需要将用卷积核对图像进行逐行扫描,而YOLO则是将一张图片分成无数个方格,通过机器来判断每个方格出现目标的可能性。具体的理论比较复杂,想要了解原理,我推荐看下面两个视频。 第一个是吴恩达讲解的Yolo算法(传送门) 第二个是B站讲解最清楚的Yolo-v3算法(传送门) Yolo中的v即version,代表版本,yolo的创始人总共从v1更新到v3,而v4,v5则是另外一位作者编写,虽未得到官方认可,但在某测试集上的表现已经超越之前的v3版本。
zstar
2022/06/14
1.4K0
Pytorch:YOLO-v5目标检测(上)
YOLOv9如何训练自己的数据集(NEU-DET为案列)
💡💡💡 2024年计算机视觉顶会创新点适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,轻松带你上手魔改网络 !!!
AI小怪兽
2024/03/26
1.2K0
【目标检测】小脚本:提取训练集图片与标签并更新索引
在做目标检测任务时,我想提取训练集的图片单独进行外部数据增强。因此,需要根据划分出的train.txt来提取训练集图片与标签。
zstar
2022/09/21
3410
【目标检测】小脚本:提取训练集图片与标签并更新索引
基于YOLOv8的遥感SAR舰船小目标识别
本文摘要:基于YOLOv8的遥感SAR舰船小目标,阐述了整个数据制作和训练可视化过程
AI小怪兽
2024/01/12
1.6K2
用YOLOv5模型识别出表情!
本文整体思路如下。提示:本文含完整实践代码,代码较长,建议先看文字部分的实践思路,代码先马后看
Datawhale
2021/09/22
1.3K0
基于YOLOv5的摄像头吸烟行为检测系统(pytoch)
AI工具如何改变生活,本文主要通过YOLOv5技术阐述生活中对摄像头进行监控,并对吸烟危险行为进行识别,详细阐述了如何提升吸烟行为的检测精度。
AI小怪兽
2023/11/30
1.3K0
【目标检测】YOLOv5遇上知识蒸馏
知识蒸馏(Knowledge Distillation)由深度学习三巨头Hinton在2015年提出。
zstar
2022/11/12
2.8K0
【目标检测】YOLOv5遇上知识蒸馏
【从零开始学习YOLOv3】2. YOLOv3中的代码配置和数据集构建
到https://pytorch.org/中根据操作系统,python版本,cuda版本等选择命令即可。
BBuf
2020/02/14
1.6K0
【从零开始学习YOLOv3】2. YOLOv3中的代码配置和数据集构建
基于YOLOv8的农作物水稻病害检测系统,优化SPPF提升检测性能
💡💡💡本文摘要:农作物水稻病害首先进行数据处理到训练模型,最好优化SPPF提升检测精度,map0.5从原始的0.807提升至0.821
AI小怪兽
2023/12/13
1.2K1
【yolov5目标检测】使用yolov5训练自己的训练集
首先得准备好数据集,你的数据集至少包含images和labels,严格来说你的images应该包含训练集train、验证集val和测试集test,不过为了简单说明使用步骤,其中test可以不要,val和train可以用同一个,因此我这里只用了一个images
叶茂林
2023/10/23
1.4K0
【yolov5目标检测】使用yolov5训练自己的训练集
推荐阅读
相关推荐
【目标检测】YOLOv5跑通VOC2007数据集(修复版)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验