YoloV5 训练长方形图像

这篇具有很好参考价值的文章主要介绍了YoloV5 训练长方形图像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

20230329更新

官方的源代码中,训练的时候将rect开启,即可进行长方形训练同时也会进一步降低训练时的显存。

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 Imagesz只需要设置图像最大尺寸即可,在dataload中,读取图像时候会进行判断处理,

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 在load_image过程中,会将图像等比例缩放

比如原图为1280*640。

输入的imagesize为1280的话,则读取的图像为1280*640,

输入的imagesize为640的话,则读取的图像为640*320

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 

但是需要注意开始Rect后 不会再对图像进行mosaic的增强,如果实在需要的话可以参考原来的长方形训练(下面的文章进行更改)

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 

 

长方形图像训练:

Step1: 修改训练图片的尺寸,因为默认尺寸是是对训练集和验证集的。所以此处进行修改长方形时,需要分别赋值构建一个数组。

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

Step2:Train.py中修改对图像尺寸检查的功能。

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

Step3: Train.py中修改模型属性功能。原来640 是int类型,现在【640,320】是一个数组。所以需要进行修改。

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 Step4: 对LoadImageAndLabels中的代码进行修改

 修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

修改mosic功能

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 修改Load_image功能

修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

 修改load_mosaic功能

 修改yolov5的输入图像尺寸为指定尺寸训练,深度学习,人工智能,深度学习

修改mosaic拼接功能以及label拼接的功能。

注意看if isinstance 做判断的位置,都会进行修改。

    def load_mosaic(self, index):
        # YOLOv5 4-mosaic loader. Loads 1 image + 3 random images into a 4-image mosaic
        labels4, segments4 = [], []
        if isinstance(self.img_size, int):
            s = self.img_size
            yc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border)  # mosaic center x, y
        else:
            s_h, s_w = self.img_size  # (h,w)
            yc, xc = [int(random.uniform(-x, 2 * s + x)) for x, s in zip(self.mosaic_border, self.img_size)]
        indices = [index] + random.choices(self.indices, k=3)  # 3 additional image indices
        random.shuffle(indices)
        for i, index in enumerate(indices):
            # Load image
            img, _, (h, w) = self.load_image(index)
            if isinstance(self.img_size, int):
                # place img in img4
                if i == 0:  # top left
                    img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8)  # base image with 4 tiles
                    x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc  # xmin, ymin, xmax, ymax (large image)
                    x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h  # xmin, ymin, xmax, ymax (small image)
                elif i == 1:  # top right
                    x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc
                    x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h
                elif i == 2:  # bottom left
                    x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h)
                    x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h)
                elif i == 3:  # bottom right
                    x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h)
                    x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h)
            else:
                if i == 0:  # top left
                    img4 = np.full((s_h * 2, s_w * 2, img.shape[2]), 114, dtype=np.uint8)  # base image with 4 tiles
                    x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc  # xmin, ymin, xmax, ymax (large image)
                    x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h  # xmin, ymin, xmax, ymax (small image)
                elif i == 1:  # top right
                    x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s_w * 2), yc
                    x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h
                elif i == 2:  # bottom left
                    x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s_h * 2, yc + h)
                    x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h)
                elif i == 3:  # bottom right
                    x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s_w * 2), min(s_h * 2, yc + h)
                    x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h)

            img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b]  # img4[ymin:ymax, xmin:xmax]
            padw = x1a - x1b
            padh = y1a - y1b

            # Labels
            labels, segments = self.labels[index].copy(), self.segments[index].copy()
            if labels.size:
                labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padw, padh)  # normalized xywh to pixel xyxy format
                segments = [xyn2xy(x, w, h, padw, padh) for x in segments]
            labels4.append(labels)
            segments4.extend(segments)

至此就完成了程序上的修改

附mosaic增强

        mosaic拼接并不是将图片进行4等份拼接。

 1:会随机设定中心点,然后这个中心点将数据分为4份,然后将图片填充到每一份中。

马赛克的中心点值,随机从-x ---2*s+x 中随机抽选,一般X的值为-320,所以就变成 了  320-        -960中随机抽选中心值。

Step0:   初始化整幅图,将图片的像素都填充为114

Step1:读取当前要填充的图片,并获取图片的长和宽

Step2:    计算当前图片在大图中的位置 ,如果当前图片超过大图界限,越界部分就取消掉。

同时如果当前图片过小,填充不了大图给定的区域位置。

不管大图小图都要计算其在整幅图片中的位置,计算差异值,因为接下来要取更新标签(label)

(标签是相对于图片的位置的,如果当前图片放入大图中,没有完全占据左上角,那么不就多余

了部分空的区域了吗直接计算标签的话肯定偏移,所以要去除掉这些空的区域再取加载原来的图片的标签并且更新)

如果有label正好在边界上,就要修正或者裁剪掉超过边界的框

Step3:    连续放入图片

Step4:  对放入的图片进行随机的旋转,翻转 ,平移 缩放等等操作。文章来源地址https://www.toymoban.com/news/detail-672452.html

到了这里,关于YoloV5 训练长方形图像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5的运行环境配置、参数修改和训练命令,并将训练的pt模型转换为rknn模型,并推理

    目录 一.yolov5的运行环境配置(Windows系统) 1、NVIDIA驱动安装与更新  2、Anaconda 的安装 3、Pytorch环境安装  4、pycharm安装 二.yolov5训练数据集,得到best.pt(Windows系统)  1.下载YOLO项目代码  2.环境安装 3. 数据集下载: 三.best.pt转为onnx模型(Windows系统) 四.best.onnx转为best.rknn模型(Linu

    2024年02月13日
    浏览(37)
  • 【AI】yolov5:数据下载、图像标注、训练、预测等,超详细笔记;pytorch转onnx再转TensorRT;训练识别口罩

    https://gitcode.net/mirrors/ultralytics/yolov5/ 1)安装pytorch 2)安装cudnn 3)下载yolov5源码: 4)安装yolov5依赖

    2024年02月15日
    浏览(35)
  • yolov5-Lite通过修改Detect.py代码实现灵活的检测图像、视频和打开摄像头检测

    这里项目链接查看,或者这里下载。 经过本人测试,与yolov5-7.0相比,训练好的权重文件大小大约是yolov5-7.0的0.3倍(yolov5-Lite——3.4M,yolov5-7.0——13M),置信度均在0.9之上。特别的,我之所以使用此Lite改进算法,是因为需要部署在智能小车上实现图像识别的功能,而小车上

    2024年02月04日
    浏览(33)
  • 【零基础玩转yolov5】yolov5训练自己的数据集(CPU训练+GPU训练)

     博主也是最近开始玩yolov5的,甚至也是最近开始使用python的,很多东西都没有接触过,因此训练自己的数据集花了不少时间,所以想写篇博客记录一下,希望同样是零基础的小伙伴们可以更加轻松的上手。同时大家如果发现了错误和理解偏差,欢迎指正。 参考资料: Yolo

    2024年02月06日
    浏览(56)
  • yolov5ds-断点训练、继续训练、先终止训练并调整最终epoch(yolov5同样适用)

    🍀yolov5 继续训练 🍅yolov5ds:Yolov5同时进行目标检测和分割分割(yolov5ds作者的博客介绍) github地址:👉yolov5ds 训练yolov5ds案例:用YOLOv5ds训练自己的数据集——同时检测和分割 两种情况: 训练过程中中断了,继续训练 训练完了,但是未收敛,在这个基础上,还想用这个权

    2024年01月21日
    浏览(83)
  • YOLOV5 训练

    windows上安装可以参考这篇知乎文章 自己准备数据集 可以使用 labelImg 工具,直接 pip install labelimg 就可以安装了。 命令行中输入 labelImg 就可以运行 标注数据的输出结果有多种过格式,VOC 、COCO 、YOLO等。 数据组织 先放目录树,建议先按照下面的目录格式,准备数据集。 我们

    2024年02月08日
    浏览(39)
  • yolov5——训练策略

    yolov5的训练策略big big丰富,这也是yolov5涨分厉害的reason,目前yolov5的使用量也是非常大的,官网的star已经23.5k了,无论是在迁移学习还是实际场景的应用都是非常广泛的。之前参加比赛,发现好几页的选手都在使用yolov5,确实有必要梳理一下,yolov5的训练策略。感觉这些策略

    2024年02月08日
    浏览(28)
  • yolov5训练结果解析

    yolov5训练结果的文件解析 1、weights训练好的模型,一般使用best.pt去进行推理 2、confusion_matrix.png 混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。 TP(True Positive): 将正类预

    2024年02月06日
    浏览(55)
  • yolov5解读,训练,复现

    小白的第一篇csdn...最近在准备小论文,大概率是目标检测方向了,没经验,慢慢学,本文只是跟着b站的天才up主一起训练和复现,这里只是我记录yolov5的学习历程,都是大白话,没有专业术语,肯定也会说错很多东西,但是我都想记录在这里,这样就不会忘记啦,如果有幸被

    2024年02月10日
    浏览(48)
  • YoloV5+ECVBlock:基于YoloV5-ECVBlock的小目标检测训练

    目录 1、前言 2、数据集 3、添加ECVBlock  4、BackBone+ECVBlock 5、Head+ECVBlock 6、训练结果 6.1 Backbone 6.2 Head   视觉特征金字塔在广泛的应用中显示出其有效性和效率的优越性。然而,现有的方法过分地集中于层间特征交互,而忽略了层内特征规则,这是经验证明是有益的。尽管一些

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包