YoloV5 训练长方形图像
长方形图像训练:
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 训练长方形图像相关推荐
- 【目标检测】yolo系列:从yolov1到yolov5之YOLOv5训练自己数据集(v6.0)
一.源码下载及requirments 源码下载地址:https://github.com/ultralytics/yolov5 (持续更新中) 本人所用环境如下: pytorch:1.8(因为cuda ...
- 手把手教你使用YOLOV5训练自己的数据集并用TensorRT加速
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 本文主要介绍目标检测YOLOV5算法来训练自己的数据集,并且使用TensorRT来对训练好的模型 ...
- 使用yolov5训练自己的目标检测数据集
使用yolov5训练自己的目标检测数据集 yolov4出来后不久,又出现了yolov5,没有论文.虽然作者没有放上和yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的.很多人考虑到Y ...
- Yolov5训练自己的数据集+TensorRT加速+Qt部署
本人由于项目要求,需要利用Yolov5网络训练自己的目标检测与分类模型,并利用TensorRT加速将其部署到Qt界面上.目前已经实现了整个流程,写下这篇博客供需要的各位参考.(本文描述的重点主要是在后 ...
- YOLOv5训练自己的数据集实现视频的识别
写在前面 我本来是使用这个模型进行手写签名的定位,但是因为比赛的主办方原因,数据不允许公开,所以我使用动物世界的一段开头视屏来制作我的数据集.这整个模型跑通的过程中,我参考了很多不错的博客,写这篇博客 ...
- YOLOv5训练KAIST数据集
YOLOv5训练KAIST数据集 YOLOv5目前比较火热,因此模型下载和使用不再赘述,网上资源很多,该文章主要是介绍如何将KAIST数据集处理成YOLOv5可以使用的格式. 一.数据获取 1.KAI ...
- 目标检测论文解读复现之六:基于YOLOv5的遥感图像舰船的检测方法
目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应 ...
- 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测
目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...
- 深度学习目标检测---使用yolov5训练自己的数据集模型(Windows系统)
目录 0 前言 1.从githab上克隆yolov5代码 1.1 yolov5网络project克隆 1.2 项目代码结构的整体介绍 1.3 深度学习环境的配置和安装yolov5所需要的库 2. ...
最新文章
- 怎么调用获取被创建的预制体_Uber 开源 Plato:扩展性极强的开发测试会话 AI 平台,可实现多智能体并行训练...
- 2018 German Collegiate Programming Contest (GCPC 18)
- SQL中几个比较重要的系统表
- 生成树生成森林c语言中文网,生成树协议(STP)基本知识及实验(使用eNSP)
- python实例[判断操作系统类型]
- java 线程安全list_JAVA并发编程实战-线程安全性
- mongodb的文档游标
- Node-express写接口的详细步骤
- Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。
- php程序读取firework生成的png图片数据
- Android开发之——统计代码行数
- 中学数学知识点实体识别
- 软件开发岗位职责描述
- 腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会
- 手机进水声音变小怎么办
- 不同版本cuda对应的NVIDIA驱动版本
- UEFI+GPT+双硬盘下 搭建Windos10 和CentOS7 双系统
- OpenAI 最强对话模型 ChatGPT: 用户已破百万,落地将有几何
- pandas读取excel数据以及matplotlib的散点与直线图绘画
- 入职字节外包一个月,我离职了