长方形图像训练:

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

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

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

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

修改mosic功能

修改Load_image功能

修改load_mosaic功能

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

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

    def load_mosaic(self, index):# YOLOv5 4-mosaic loader. Loads 1 image + 3 random images into a 4-image mosaiclabels4, segments4 = [], []if isinstance(self.img_size, int):s = self.img_sizeyc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border)  # mosaic center x, yelse: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 indicesrandom.shuffle(indices)for i, index in enumerate(indices):# Load imageimg, _, (h, w) = self.load_image(index)if isinstance(self.img_size, int):# place img in img4if i == 0:  # top leftimg4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8)  # base image with 4 tilesx1a, 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 rightx1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), ycx1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), helif i == 2:  # bottom leftx1a, 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 rightx1a, 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 leftimg4 = np.full((s_h * 2, s_w * 2, img.shape[2]), 114, dtype=np.uint8)  # base image with 4 tilesx1a, 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 rightx1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s_w * 2), ycx1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), helif i == 2:  # bottom leftx1a, 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 rightx1a, 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 - x1bpadh = y1a - y1b# Labelslabels, 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 formatsegments = [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:  对放入的图片进行随机的旋转,翻转 ,平移 缩放等等操作。

YoloV5 训练长方形图像相关推荐

  1. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv5训练自己数据集(v6.0)

    一.源码下载及requirments 源码下载地址:https://github.com/ultralytics/yolov5 (持续更新中) 本人所用环境如下: pytorch:1.8(因为cuda ...

  2. 手把手教你使用YOLOV5训练自己的数据集并用TensorRT加速

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 本文主要介绍目标检测YOLOV5算法来训练自己的数据集,并且使用TensorRT来对训练好的模型 ...

  3. 使用yolov5训练自己的目标检测数据集

    使用yolov5训练自己的目标检测数据集 yolov4出来后不久,又出现了yolov5,没有论文.虽然作者没有放上和yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的.很多人考虑到Y ...

  4. Yolov5训练自己的数据集+TensorRT加速+Qt部署

    本人由于项目要求,需要利用Yolov5网络训练自己的目标检测与分类模型,并利用TensorRT加速将其部署到Qt界面上.目前已经实现了整个流程,写下这篇博客供需要的各位参考.(本文描述的重点主要是在后 ...

  5. YOLOv5训练自己的数据集实现视频的识别

    写在前面 我本来是使用这个模型进行手写签名的定位,但是因为比赛的主办方原因,数据不允许公开,所以我使用动物世界的一段开头视屏来制作我的数据集.这整个模型跑通的过程中,我参考了很多不错的博客,写这篇博客 ...

  6. YOLOv5训练KAIST数据集

    YOLOv5训练KAIST数据集 YOLOv5目前比较火热,因此模型下载和使用不再赘述,网上资源很多,该文章主要是介绍如何将KAIST数据集处理成YOLOv5可以使用的格式. 一.数据获取 1.KAI ...

  7. 目标检测论文解读复现之六:基于YOLOv5的遥感图像舰船的检测方法

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应 ...

  8. 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...

  9. 深度学习目标检测---使用yolov5训练自己的数据集模型(Windows系统)

    目录 0    前言 1.从githab上克隆yolov5代码 1.1 yolov5网络project克隆 1.2 项目代码结构的整体介绍 1.3 深度学习环境的配置和安装yolov5所需要的库 2. ...

最新文章

  1. 怎么调用获取被创建的预制体_Uber 开源 Plato:扩展性极强的开发测试会话 AI 平台,可实现多智能体并行训练...
  2. 2018 German Collegiate Programming Contest (GCPC 18)
  3. SQL中几个比较重要的系统表
  4. 生成树生成森林c语言中文网,生成树协议(STP)基本知识及实验(使用eNSP)
  5. python实例[判断操作系统类型]
  6. java 线程安全list_JAVA并发编程实战-线程安全性
  7. mongodb的文档游标
  8. Node-express写接口的详细步骤
  9. Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。
  10. php程序读取firework生成的png图片数据
  11. Android开发之——统计代码行数
  12. 中学数学知识点实体识别
  13. 软件开发岗位职责描述
  14. 腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会
  15. 手机进水声音变小怎么办
  16. 不同版本cuda对应的NVIDIA驱动版本
  17. UEFI+GPT+双硬盘下 搭建Windos10 和CentOS7 双系统
  18. OpenAI 最强对话模型 ChatGPT: 用户已破百万,落地将有几何
  19. pandas读取excel数据以及matplotlib的散点与直线图绘画
  20. 入职字节外包一个月,我离职了

热门文章

  1. 流图(程序图)表示程序的控制流——McCabe方法度量程序空间复杂度
  2. 龙与地下城中的人物属性
  3. 使用EasyExcel实现Excel的导入、导出、下载模板等功能
  4. 低学历者已无法生存 程序员尤其明显
  5. 单独上线音乐直播APP,“LOOK直播”能给网易云音乐带来什么?
  6. [1106]python bezier(贝塞尔)曲线
  7. 我的梦想就是不工作,有什么错?
  8. DM数据库部署dem管理工具(tomcat)
  9. 团队任务3每日立会(2018-10-25)
  10. unity 2d地图tilemap滚轮缩放出现缝隙解决办法