Code Monkey home page Code Monkey logo

yolov5-pytorch's Introduction

YOLOV5:You Only Look Once目标检测模型在pytorch当中的实现(edition v5.0 in Ultralytics)


目录

  1. 仓库更新 Top News
  2. 相关仓库 Related code
  3. 性能情况 Performance
  4. 所需环境 Environment
  5. 文件下载 Download
  6. 训练步骤 How2train
  7. 预测步骤 How2predict
  8. 评估步骤 How2eval
  9. 参考资料 Reference

Top News

2022-04:支持多GPU训练,新增各个种类目标数量计算,新增heatmap;将正样本匹配过程加入dataloader,加快了运算速度;加入EMA效果变好。
BiliBili视频中的原仓库地址为:https://github.com/bubbliiiing/yolov5-pytorch/tree/bilibili

2022-02:仓库创建,支持不同尺寸模型训练,分别为s、m、l、x版本的yolov5、支持step、cos学习率下降法、支持adam、sgd优化器选择、支持学习率根据batch_size自适应调整、新增图片裁剪。

相关仓库

模型 路径
YoloV3 https://github.com/bubbliiiing/yolo3-pytorch
Efficientnet-Yolo3 https://github.com/bubbliiiing/efficientnet-yolo3-pytorch
YoloV4 https://github.com/bubbliiiing/yolov4-pytorch
YoloV4-tiny https://github.com/bubbliiiing/yolov4-tiny-pytorch
Mobilenet-Yolov4 https://github.com/bubbliiiing/mobilenet-yolov4-pytorch
YoloV5-V5.0 https://github.com/bubbliiiing/yolov5-pytorch
YoloV5-V6.1 https://github.com/bubbliiiing/yolov5-v6.1-pytorch
YoloX https://github.com/bubbliiiing/yolox-pytorch
YoloV7 https://github.com/bubbliiiing/yolov7-pytorch
YoloV7-tiny https://github.com/bubbliiiing/yolov7-tiny-pytorch

性能情况

训练数据集 权值文件名称 测试数据集 输入图片大小 mAP 0.5:0.95 mAP 0.5
COCO-Train2017 yolov5_s.pth COCO-Val2017 640x640 35.6 53.9
COCO-Train2017 yolov5_m.pth COCO-Val2017 640x640 43.9 62.6
COCO-Train2017 yolov5_l.pth COCO-Val2017 640x640 47.4 66.2
COCO-Train2017 yolov5_x.pth COCO-Val2017 640x640 49.4 67.9

YoloV5官方保存的是半精度模型,本仓库保存的是全精度模型,所以权值的大小有所差异。

所需环境

torch==1.2.0

文件下载

训练所需的权值可在百度网盘中下载。
链接: https://pan.baidu.com/s/1gPDsDVX1lbcSNqCKsvzz0A
提取码: 3mjs

VOC数据集下载地址如下,里面已经包括了训练集、测试集、验证集(与测试集一样),无需再次划分:
链接: https://pan.baidu.com/s/19Mw2u_df_nBzsC2lg20fQA
提取码: j5ge

训练步骤

a、训练VOC07+12数据集

  1. 数据集的准备
    本文使用VOC格式进行训练,训练前需要下载好VOC07+12的数据集,解压后放在根目录

  2. 数据集的处理
    修改voc_annotation.py里面的annotation_mode=2,运行voc_annotation.py生成根目录下的2007_train.txt和2007_val.txt。

  3. 开始网络训练
    train.py的默认参数用于训练VOC数据集,直接运行train.py即可开始训练。

  4. 训练结果预测
    训练结果预测需要用到两个文件,分别是yolo.py和predict.py。我们首先需要去yolo.py里面修改model_path以及classes_path,这两个参数必须要修改。
    model_path指向训练好的权值文件,在logs文件夹里。
    classes_path指向检测类别所对应的txt。

    完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。

b、训练自己的数据集

  1. 数据集的准备
    本文使用VOC格式进行训练,训练前需要自己制作好数据集,
    训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。
    训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。

  2. 数据集的处理
    在完成数据集的摆放之后,我们需要利用voc_annotation.py获得训练用的2007_train.txt和2007_val.txt。
    修改voc_annotation.py里面的参数。第一次训练可以仅修改classes_path,classes_path用于指向检测类别所对应的txt。
    训练自己的数据集时,可以自己建立一个cls_classes.txt,里面写自己所需要区分的类别。
    model_data/cls_classes.txt文件内容为:

cat
dog
...

修改voc_annotation.py中的classes_path,使其对应cls_classes.txt,并运行voc_annotation.py。

  1. 开始网络训练
    训练的参数较多,均在train.py中,大家可以在下载库后仔细看注释,其中最重要的部分依然是train.py里的classes_path。
    classes_path用于指向检测类别所对应的txt,这个txt和voc_annotation.py里面的txt一样!训练自己的数据集必须要修改!
    修改完classes_path后就可以运行train.py开始训练了,在训练多个epoch后,权值会生成在logs文件夹中。

  2. 训练结果预测
    训练结果预测需要用到两个文件,分别是yolo.py和predict.py。在yolo.py里面修改model_path以及classes_path。
    model_path指向训练好的权值文件,在logs文件夹里。
    classes_path指向检测类别所对应的txt。

    完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。

预测步骤

a、使用预训练权重

  1. 下载完库后解压,在百度网盘下载权值,放入model_data,运行predict.py,输入
img/street.jpg
  1. 在predict.py里面进行设置可以进行fps测试和video视频检测。

b、使用自己训练的权重

  1. 按照训练步骤训练。
  2. 在yolo.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件;model_path对应logs文件夹下面的权值文件,classes_path是model_path对应分的类
_defaults = {
    #--------------------------------------------------------------------------#
    #   使用自己训练好的模型进行预测一定要修改model_path和classes_path!
    #   model_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt
    #
    #   训练好后logs文件夹下存在多个权值文件,选择验证集损失较低的即可。
    #   验证集损失较低不代表mAP较高,仅代表该权值在验证集上泛化性能较好。
    #   如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改
    #--------------------------------------------------------------------------#
    "model_path"        : 'model_data/yolov5_s.pth',
    "classes_path"      : 'model_data/coco_classes.txt',
    #---------------------------------------------------------------------#
    #   anchors_path代表先验框对应的txt文件,一般不修改。
    #   anchors_mask用于帮助代码找到对应的先验框,一般不修改。
    #---------------------------------------------------------------------#
    "anchors_path"      : 'model_data/yolo_anchors.txt',
    "anchors_mask"      : [[6, 7, 8], [3, 4, 5], [0, 1, 2]],
    #---------------------------------------------------------------------#
    #   输入图片的大小,必须为32的倍数。
    #---------------------------------------------------------------------#
    "input_shape"       : [640, 640],
    #------------------------------------------------------#
    #   所使用的YoloV5的版本。s、m、l、x
    #------------------------------------------------------#
    "phi"               : 's',
    #---------------------------------------------------------------------#
    #   只有得分大于置信度的预测框会被保留下来
    #---------------------------------------------------------------------#
    "confidence"        : 0.5,
    #---------------------------------------------------------------------#
    #   非极大抑制所用到的nms_iou大小
    #---------------------------------------------------------------------#
    "nms_iou"           : 0.3,
    #---------------------------------------------------------------------#
    #   该变量用于控制是否使用letterbox_image对输入图像进行不失真的resize,
    #   在多次测试后,发现关闭letterbox_image直接resize的效果更好
    #---------------------------------------------------------------------#
    "letterbox_image"   : True,
    #-------------------------------#
    #   是否使用Cuda
    #   没有GPU可以设置成False
    #-------------------------------#
    "cuda"              : True,
}
  1. 运行predict.py,输入
img/street.jpg
  1. 在predict.py里面进行设置可以进行fps测试和video视频检测。

评估步骤

a、评估VOC07+12的测试集

  1. 本文使用VOC格式进行评估。VOC07+12已经划分好了测试集,无需利用voc_annotation.py生成ImageSets文件夹下的txt。
  2. 在yolo.py里面修改model_path以及classes_path。model_path指向训练好的权值文件,在logs文件夹里。classes_path指向检测类别所对应的txt。
  3. 运行get_map.py即可获得评估结果,评估结果会保存在map_out文件夹中。

b、评估自己的数据集

  1. 本文使用VOC格式进行评估。
  2. 如果在训练前已经运行过voc_annotation.py文件,代码会自动将数据集划分成训练集、验证集和测试集。如果想要修改测试集的比例,可以修改voc_annotation.py文件下的trainval_percent。trainval_percent用于指定(训练集+验证集)与测试集的比例,默认情况下 (训练集+验证集):测试集 = 9:1。train_percent用于指定(训练集+验证集)中训练集与验证集的比例,默认情况下 训练集:验证集 = 9:1。
  3. 利用voc_annotation.py划分测试集后,前往get_map.py文件修改classes_path,classes_path用于指向检测类别所对应的txt,这个txt和训练时的txt一样。评估自己的数据集必须要修改。
  4. 在yolo.py里面修改model_path以及classes_path。model_path指向训练好的权值文件,在logs文件夹里。classes_path指向检测类别所对应的txt。
  5. 运行get_map.py即可获得评估结果,评估结果会保存在map_out文件夹中。

Reference

https://github.com/qqwweee/keras-yolo3/
https://github.com/Cartucho/mAP
https://github.com/Ma-Dan/keras-yolo4
https://github.com/ultralytics/yolov5

yolov5-pytorch's People

Contributors

bubbliiiing avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

yolov5-pytorch's Issues

predict没有检测结果

用自己的数据集训练(100张)二分类检测任务;model_path 、voc_classes都改了;loss是下面的样子。
但是最后predict的时候什么都没有检测出来,请问这是什么原因呀?
image

Bottleneck的堆叠比例

导师下午好,叨扰了。请问在修改v5模型时,改变了CSPdarknet53中的Bottleneck的堆叠比例,从3:6:9:3改变后效果提升了一丢丢,这个比例只能是3的倍数吗?为什么不能改成其他的?如何更改?万分感谢导师。
以及您的模型中Bottleneck的堆叠比例是3:6:9:3还是3:9:9:3?

关于 RuntimeError: Error(s) in loading state_dict for YoloBody:的报错

您好,我用yolov5训练数据集时,出现RuntimeError: Error(s) in loading state_dict for YoloBody:'这个错误。不知道怎么解决。想麻烦您帮我看看,谢谢!
File "F:/graduation_project/yolov5-pytorch-main/predict.py", line 14, in
yolo = YOLO()
File "F:\graduation_project\yolov5-pytorch-main\yolo.py", line 92, in init
self.generate()
File "F:\graduation_project\yolov5-pytorch-main\yolo.py", line 103, in generate
self.net.load_state_dict(torch.load(self.model_path, map_location=device))
File "D:\Anaconda\envs\pytorch\lib\site-packages\torch\nn\modules\module.py", line 1406, in load_state_dict
raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
RuntimeError: Error(s) in loading state_dict for YoloBody:
size mismatch for yolo_head_P3.weight: copying a param with shape torch.Size([255, 128, 1, 1]) from checkpoint, the shape in current model is torch.Size([18, 128, 1, 1]).
size mismatch for yolo_head_P3.bias: copying a param with shape torch.Size([255]) from checkpoint, the shape in current model is torch.Size([18]).
size mismatch for yolo_head_P4.weight: copying a param with shape torch.Size([255, 256, 1, 1]) from checkpoint, the shape in current model is torch.Size([18, 256, 1, 1]).
size mismatch for yolo_head_P4.bias: copying a param with shape torch.Size([255]) from checkpoint, the shape in current model is torch.Size([18]).
size mismatch for yolo_head_P5.weight: copying a param with shape torch.Size([255, 512, 1, 1]) from checkpoint, the shape in current model is torch.Size([18, 512, 1, 1]).
size mismatch for yolo_head_P5.bias: copying a param with shape torch.Size([255]) from checkpoint, the shape in current model is torch.Size([18]).

训练能够正常进行,但是会出现Warning

/root/Desktop/yolo/utils/dataloader.py:434: RuntimeWarning: divide by zero encountered in true_divide
ratios_of_anchors_gt = np.expand_dims(anchors, 0) / np.expand_dims(batch_target[:, 2:4], 1)
请问大佬,这个有没有啥问题呢,使用的版本是7.28号下载的

yolov5框定位不准确

您好,有一个问题,yolov5在目标的是识别上比较准确,也能找到图中的物体进行划分,但是基本上所有的框都会在原本的目标位置向右下方偏移一部分,这是什么原因?

使用colab训练自己数据集出现了报错

/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py:490: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.
cpuset_checked))
Start Train
Epoch 1/300: 0% 0/18 [00:00<?, ?it/s<class 'dict'>]Traceback (most recent call last):
File "train.py", line 543, in
fit_one_epoch(model_train, model, ema, yolo_loss, loss_history, eval_callback, optimizer, epoch, epoch_step, epoch_step_val, gen, gen_val, UnFreeze_Epoch, Cuda, fp16, scaler, save_period, save_dir, local_rank)
File "/content/drive/MyDrive/Model/yolov5-pytorch/utils/utils_fit.py", line 16, in fit_one_epoch
for iteration, batch in enumerate(gen):
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 530, in next
data = self._next_data()
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1224, in _next_data
return self._process_data(data)
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1250, in _process_data
data.reraise()
File "/usr/local/lib/python3.7/dist-packages/torch/_utils.py", line 457, in reraise
raise exception
FileNotFoundError: Caught FileNotFoundError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
data = fetcher.fetch(index)
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 49, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 49, in
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/content/drive/MyDrive/Model/yolov5-pytorch/utils/dataloader.py", line 48, in getitem
image, box = self.get_random_data(self.annotation_lines[index], self.input_shape, random = self.train)
File "/content/drive/MyDrive/Model/yolov5-pytorch/utils/dataloader.py", line 77, in get_random_data
image = Image.open(line[0])
File "/usr/local/lib/python3.7/dist-packages/PIL/Image.py", line 2843, in open
fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: '/content/drive/MyDrive/Model/yolov5-pytorch/VOCdevkit/VOC2007/JPEGImages/TED9.jpg'

对先验框的调整方式

            #----------------------------------------------------------#
            #   利用预测结果对先验框进行调整
            #   首先调整先验框的中心,从先验框中心向右下角偏移
            #   再调整先验框的宽高。
            #----------------------------------------------------------#
            pred_boxes          = FloatTensor(prediction[..., :4].shape)
            pred_boxes[..., 0]  = x.data * 2. - 0.5 + grid_x
            pred_boxes[..., 1]  = y.data * 2. - 0.5 + grid_y
            pred_boxes[..., 2]  = (w.data * 2) ** 2 * anchor_w
            pred_boxes[..., 3]  = (h.data * 2) ** 2 * anchor_h

您好,我不理解这里对先验框进行调整的方式,似乎和yolov4有很大区别,请问在哪里可以找到相关的理论解释?

训练自己的数据集,训练和测试均没问题,但运行get_map.py文件时,报错ZeroDivisionError: float division by zero

up大大,您好,我用自己的数据集训练了您的yolov5网络,数据集只有一个类别drone,训练预测均没问题,最后的get_map 出问题了,运行get_map.py文件后,报错ZeroDivisionError: float division by zero,yolo.py文件的的权重和class文件路径和get_map.py文件的class路径均已更改,请up大大花时间看一下,问题出在哪里?按照报错的信息来看是分母为0,但是n_classes的值没看明白怎么为0 了,还请up大大答疑解惑。
报错信息:
Load model. logs/ep096-loss0.001-val_loss0.001.pth model, anchors, and classes loaded. 0%| | 0/234 [00:00<?, ?it/s]Load model done. Get predict result. 100%|██████████| 234/234 [00:15<00:00, 14.96it/s] 100%|██████████| 234/234 [00:00<00:00, 21775.54it/s] Get predict result done. Get ground truth result. Get ground truth result done. Get map. Traceback (most recent call last): File "/home/king/Jiang/yolov5-pytorch-bilibili/get_map.py", line 107, in <module> get_map(MINOVERLAP, True, path = map_out_path) File "/home/king/Jiang/yolov5-pytorch-bilibili/utils/utils_map.py", line 641, in get_map mAP = sum_AP / n_classes ZeroDivisionError: float division by zero
E1B49B896FADBBB3A3EF45892ECCAFC5
FB0CBA427E98F19D17B00A5F7C6447A6
414

self.balance取值问题

UP主好,
请问你在yolo_training文件中设置的**self.balance=[0.4, 1.0, 4]**代表什么含义。
我在你的网络基础上增加一个160×160的输出特征层(你原来是80×80, 40×40, 20×20),对应的增加了一组anchors(5,6, 8,14,15,11),那么请问这个self.balance我应该怎么设置?
另外,请问除了self.balance这个值需要修改,请问我还需要修改什么自定义值?
如能赐教,感激不尽!

选用其他的backbone如何导入参数

博主你好,我将yolo.py中的backbone从默认的cspdarknet改为了convnext_tiny,出现了键值不匹配问题。我知道这是由于backbone结构不同导致的,但我不知道应该如何解决,才能直接在你的项目中使用其他主干网络进行预测。希望博主解答一下,谢谢

关于yolo_training.py中get_target函数的理解

        #-------------------------------------------------------#
        #   batch_target            : num_true_box, 4
        #   anchors                 : 9, 2
        #
        #   ratios_of_gt_anchors    : num_true_box, 9, 2
        #   ratios_of_anchors_gt    : num_true_box, 9, 2
        #
        #   ratios                  : num_true_box, 9, 4
        #   max_ratios              : num_true_box, 9
        #-------------------------------------------------------#
        ratios_of_gt_anchors = torch.unsqueeze(batch_target[:, 2:4], 1) / torch.unsqueeze(torch.FloatTensor(anchors), 0)
        ratios_of_anchors_gt = torch.unsqueeze(torch.FloatTensor(anchors), 0) /  torch.unsqueeze(batch_target[:, 2:4], 1)
        ratios               = torch.cat([ratios_of_gt_anchors, ratios_of_anchors_gt], dim = -1)
        max_ratios, _        = torch.max(ratios, dim = -1)

请问大家yolo_training.py,get_target函数中上面这段代码怎么理解啊,为什么要这样做了,把这个函数看了几遍,还是不太理解,求助!

没有目标框

我用我自己标的400来张训练,测试的时候无论怎么改nms和iou,一个框都没有是怎么回事?

ConvNext的全连接层体现在哪里?

泡泡哥您好,我想用ConvNext做一个分类任务,但是种类并不是1000个,但是我在代码里面并没有找到全连接层,那么这个种类数的改变我该体现在哪里呢?谢谢

如何将yolov5结合ghostnet

导师你好,我在看了你的yolov4结合ghostnet视频后,想尝试将ghostnet结合进入yolov5。想请问,除了需要导入相应的ghostnet.py以外,还需要对bottldneckCSP或者其他地方进行修改吗?

训练过程中因callbacks.py文件报错

泡泡哥您好,近期我尝试将YOLOv5中更新的训练策略应用到v4上去,在训练过程中报错,如下所示:
image
我在刚开始看的时候就对于下图这个tensor的定义十分迷惑,确实是在这里出现了错误,将下面的两行去除并进行调整之后,问题消失。
dummy_input = torch.randn(2, 3, 128, 128) self.writer.add_graph(model, dummy_input)
image

和官方YOLOV5模型的大小比较

作者您好,我看您这边提供的预训练模型的大小比yolov5官方提供的要大一些。比如官方的yolov5s.pt是14.1MB,您这边的yolov5s.pth是27.8MB。请问这个差距是因为不同的网络结构或者是不同的训练优化策略导致的吗?

训练损失为nan

您好,我在训练自己的数据集时,出现训练损失为nan的情况,调小学习率也还是出现这个问题,
出现了这个报错:
Intel MKL ERROR: Parameter 6 was incorrect on entry to DGELSD.
请您帮忙解答一下,谢谢!

image

YOLOv5自适应锚框

您好,请问代码里使用的锚框是提前设定的吗?有体现作者说的自适应吗?

权值问题

b导好!为什么您现在仓库的网盘权值里只有模型权值比如yolov5_s.pth,yolov5_l.pth等等了,我记得之前我是有从您这里保存主干权值文件的,而且我看了一下之前的主干权值文件就是v6.1版本的,是不能用了吗?

在训练224*224的图片时的报错

使用yolov5_x权重 训练224*224尺寸的数据集后的模型使用predict.py会报错

RuntimeError: Error(s) in loading state_dict for YoloBody:
size mismatch for yolo_head_P3.weight: copying a param with shape torch.Size([33, 320, 1, 1]) from checkpoint, the shape in current model is torch.Size([255, 320, 1, 1]).
size mismatch for yolo_head_P3.bias: copying a param with shape torch.Size([33]) from checkpoint, the shape in current model is torch.Size([255]).
size mismatch for yolo_head_P4.weight: copying a param with shape torch.Size([33, 640, 1, 1]) from checkpoint, the shape in current model is torch.Size([255, 640, 1, 1]).
size mismatch for yolo_head_P4.bias: copying a param with shape torch.Size([33]) from checkpoint, the shape in current model is torch.Size([255]).
size mismatch for yolo_head_P5.weight: copying a param with shape torch.Size([33, 1280, 1, 1]) from checkpoint, the shape in current model is torch.Size([255, 1280, 1, 1]).
size mismatch for yolo_head_P5.bias: copying a param with shape torch.Size([33]) from checkpoint, the shape in current model is torch.Size([255]).

是否必须满足640*640? 还是32的倍数就可以呀 谢谢!

Mixup数据增强

代码里是不是省略了mixup图像增强的部分?效果如何呢?
谢谢

代码更新问题

导师好,想请问下,您在4月12日更新了哪些代码?只有注释吗,谢谢

关于我花了一下午测试up所有关于yolo框架的结论(大家都可以来看看)

以yolov5为例
image
我通过修改了 这两部分的代码
image
尝试去优化速度也只能达到45ms左右
跟yolov5官方那个还是差10ms的样子虽然我用的是v5 nano的模型
目前测试了以下几款:
image
检测速度快慢请看以上图。
希望up还能更新pytorch版本的yolov5 中支持的nano权重,我需要好好再进一步测试,另外我是一个编程新手 也只会改点皮毛,但PIL的库真的拖慢了好多速度 所以我改成了cv2,改了之后提高了百分之50的速度
一直支持up,加油@~~~!@!

训练时能够正常进行,但是会出现Warning

/root/Desktop/yolo/utils/dataloader.py:434: RuntimeWarning: divide by zero encountered in true_divide
ratios_of_anchors_gt = np.expand_dims(anchors, 0) / np.expand_dims(batch_target[:, 2:4], 1)
请问大佬,这个有没有啥问题呢,使用的版本是7.28号下载的

yolov5的FPS问题

yolov5的FPS似乎并不是很高?相比于yolov4tiny好像还差距挺大的,1650的卡将将能达到30多FPS?这个对吗博主,我看好多论文里面都是一百多FPS

训练报错 KeyError: 'backbone.dark2.1.m.1.cv1.conv.weight'

您好,我用yolov5训练数据集时,出现KeyError: 'backbone.dark2.1.m.1.cv1.conv.weight'这个错误。不知道怎么解决。想麻烦您帮我看看,谢谢!
完整报错:
D:\software\anaconda3\envs\yolov5\python.exe D:/ZYQ/project/yolov5-pytorch-main/train.py
initialize network with normal type
Load weights model_data/yolov5_l.pth.
Traceback (most recent call last):
File "D:/ZYQ/project/yolov5-pytorch-main/train.py", line 200, in
pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)}
File "D:/ZYQ/project/yolov5-pytorch-main/train.py", line 200, in
pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)}
KeyError: 'backbone.dark2.1.m.1.cv1.conv.weight'

Process finished with exit code 1

YOLOv5训练速度慢的问题

up新年快乐,我在训练yolov5-s模型时,BS:设为64,但训练速度提不上来? cpu使用率1000%, GPU显存占用着,但使用效率低?

环境问题

安装环境后运行存在错误

当前本地环境

  • windows: 10
  • conda: 4.12.0
  • python: Python 3.6.13 |Anaconda, Inc.| (default, Mar 16 2021, 11:37:27) [MSC v.1916 64 bit (AMD64)] on win32

pytorch

安装

(pytorch-1.2.0) D:\dev\github\yolov5-pytorch>conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0
Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.

运行报错

(pytorch-1.2.0) D:\dev\github\yolov5-pytorch>python train.py
Traceback (most recent call last):
  File "D:\Users\yihan\miniconda3\envs\pytorch-1.2.0\lib\site-packages\torch\utils\tensorboard\__init__.py", line 2, in <module>
    from tensorboard.summary.writer.record_writer import RecordWriter  # noqa F401
ModuleNotFoundError: No module named 'tensorboard'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "train.py", line 17, in <module>
    from utils.callbacks import LossHistory
  File "D:\dev\github\yolov5-pytorch\utils\callbacks.py", line 9, in <module>
    from torch.utils.tensorboard import SummaryWriter
  File "D:\Users\yihan\miniconda3\envs\pytorch-1.2.0\lib\site-packages\torch\utils\tensorboard\__init__.py", line 4, in <module>
    raise ImportError('TensorBoard logging requires TensorBoard with Python summary writer installed. '
ImportError: TensorBoard logging requires TensorBoard with Python summary writer installed. This should be available in 1.14 or above.

先验框匹配问题

在对真实框附近的先验框进行匹配时,将真实框所在的网格以及相邻的两个最近网格都拿来预测此真实框,且令这三个网格处的先验框的中心坐标与宽高都等于此真实框。但是有一个疑问,每个尺度下有三种不同宽高比的先验框(比如10,13, 16,30, 33,23),代码中似乎没有根据IOU来过滤这三种不同的先验框,而是在get_pred_boxes函数中根据这三种宽高比都生成了预测框信息,这样一来在某个尺度下就有9个先验框去预测一个真实框。

不知道理解的对不对,麻烦老哥解释一下

model_path、classes_path修改完成后,运行predict或get_map仍shape不匹配

我已经进行了以下修改:yolo.py中的model_path修改为百度云中的yolov5_s预训练权值路径,也将classes_path修改为voc对应的类别文件;
报错:我在没有自己训练的情况下,运行predict.py以及get_map.py时仍然报错,shape应为255,实际上是75。

请问我是漏掉了需要修改的文件吗?还是需要我自己从头训练一次,绑定自己训练的权值呢?(个人认为有预训练权值可以不用从头训练)

主干问题

导师,您好!
您在yolov5中放入了 swin transformer和convneXt作为主干,但我下载好的对应权重来尝试,训练没问题,测试前三个epoch的map都只有零点几,这正常吗?如果不正常的话,该如何解决呢!

K-means聚类出的锚框如何应用在本代码中呢

作者大大您好,因为刚刚接触本代码,对细节不是很清楚。
我看到您在仓库中有实现使用K-means算法对框进行聚类,但是train中又是直接给定了比例大小好像没有使用聚类的结果
因为我数据集中物体大小的变化比较明显,所以想试试用聚类自动提取...请问在您的代码中如何设置能让您之前写好的聚类算法应用进去呢

requirements.txt是否需要更新?

使用pip安装会报错, python==3.7.9

WARNING: Ignoring invalid distribution -rotobuf (d:\environments\anaconda3\envs\pytorch\lib\site-packages)
WARNING: Ignoring invalid distribution -rotobuf (d:\environments\anaconda3\envs\pytorch\lib\site-packages)
Collecting scipy==1.2.1
  Using cached scipy-1.2.1-cp37-cp37m-win_amd64.whl (30.0 MB)
Collecting numpy==1.17.0
  Using cached numpy-1.17.0-cp37-cp37m-win_amd64.whl (12.8 MB)
Collecting matplotlib==3.1.2
  Using cached matplotlib-3.1.2-cp37-cp37m-win_amd64.whl (9.1 MB)
Collecting opencv_python==4.1.2.30
  Using cached opencv_python-4.1.2.30-cp37-cp37m-win_amd64.whl (33.0 MB)
ERROR: Ignored the following versions that require a different python version: 1.22.0 Requires-Python >=3.8; 1.22.0rc1 Requires-Python >=3.8; 1.22.0rc2 Requires-Python >=3.8; 1.22.0rc3 Requires-Python >=3.8; 1.22.1 Requires-Python >=3.8; 1.22.2 Requires-Python >=3.8; 1.22.3 Requires-Python >=3.8; 1.22.4 Requires-Python >=3.8; 1.23.0 Requires-Python >=3.8; 1.23.0rc1 Requires-Python >=3.8; 1.23.0rc2 Requires-Python >=3.8; 1.23.0rc3 Requires-Python >=3.8; 1.23.1 Requires-Python >=3.8; 1.8.0 Requires-Python >=3.8,<3.11; 1.8.0rc1 Requires-Python >=3.8,<3.11; 1.8.0rc2 Requires-Python >=3.8,<3.11; 1.8.0rc3 Requires-Python >=3.8,<3.11; 1.8.0rc4 Requires-Python >=3.8,<3.11; 1.8.1 Requires-Python >=3.8,<3.11; 1.9.0 Requires-Python >=3.8,<3.12; 1.9.0rc1 Requires-Python >=3.8,<3.12; 1.9.0rc2 Requires-Python >=3.8,<3.12; 1.9.0rc3 Requires-Python >=3.8,<3.12
ERROR: Could not find a version that satisfies the requirement torch==1.2.0 (from versions: 1.7.0, 1.7.1, 1.8.0, 1.8.1, 1.9.0, 1.9.1, 1.10.0, 1.10.1, 1.10.2, 1.11.0, 1.12.0, 1.12.1)
ERROR: No matching distribution found for torch==1.2.0
WARNING: Ignoring invalid distribution -rotobuf (d:\environments\anaconda3\envs\pytorch\lib\site-packages)
WARNING: Ignoring invalid distribution -rotobuf (d:\environments\anaconda3\envs\pytorch\lib\site-packages)
WARNING: Ignoring invalid distribution -rotobuf (d:\environments\anaconda3\envs\pytorch\lib\site-packages)

让模型在VOC2007和VOC2012数据集上训练,但出现通道数不匹配

博主你好,我目前在测试yolov5s模型,因为我要和我的另外一个模型进行对比实验,训练集和测试集均在VOC2007和VOC2012。所以我想让模型不使用你提供的在coco上预训练的权重(yolov5_s.pth),而是直接在VOC2007和VOC2012上直接训练,我设置了train.py中model_path = '',并按照你的建议,修改了UnFreeze_Epoch = 300和Freeze_Train = False。
但是我在测试训练后的权重文件,运行get_map.py后,会抱如下的错误:
从0开始训练报错

所以想请教你一下,这是什么问题?
非常感谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.