目标检测的数据增强 -- 代码实现
与分类任务不同的是,目标检测任务的数据集有boxes位置的标注,而若进行上下翻转、裁剪等操作,坐标位置也就随之改变,需要在transform时对boxes坐标作出对应的转换。
import math
import random
import torch
from PIL import Image, ImageDraw
1、resize
def resize(img, boxes, size, max_size=1000): # 调整大小缩放w, h = img.size # 输入img w h (480, 364)if isinstance(size, int): # 按照短边长度,等比例缩放另一边size_min = min(w, h) # 输入size=300size_max = max(w, h) # 首先找到短边,缩放的边是364 hsw = sh = float(size) / size_min # 计算出短边h缩放的比例,将长边w缩放到同等比例if sw * size_max > max_size: # 放置缩放过大sw = sh = float(max_size) / size_max # 缩放至最大程度ow = int(w * sw + 0.5)oh = int(h * sh + 0.5) # 向上取整else: # 直接固定长度缩放ow, oh = size # 输入size(300,300)sw = float(ow) / wsh = float(oh) / h # 计算高h和宽w的缩放比例,boxes的y和x乘以这个比例# 双线性resize# x1,y1,x2,y2return img.resize((ow, oh), Image.BILINEAR), boxes*torch.Tensor([sw, sh, sw, sh])def draw(img, boxes):draw = ImageDraw.Draw(img) # 绘图for box in boxes:draw.rectangle(list(box), outline='red') # 画一个红线矩形框img.show() # 显示def test():img = Image.open('test.jpg')boxes = torch.Tensor([[167, 63, 280, 202]])img, boxes = resize(img, boxes, (300, 300))draw(img, boxes)test()
2、center_crop
def center_crop(img, boxes, size): # 中部裁剪w, h = img.size # 原大小ow, oh = size # 裁剪后的大小i = int(round((h - oh) / 2.)) # round 四舍五入j = int(round((w - ow) / 2.)) # 同样我们只需要将照片上下左右两边需要减掉的高和宽计算出来img = img.crop((j, i, j+ow, i+oh)) # 利用自带的图像处理,选取图像固定位置 x1,y1,x2,y2boxes -= torch.Tensor([j, i, j, i]) # 将boxes减去裁剪大小,就可以得到正确的boxes位置信息boxes[:, 0::2].clamp_(min=0, max=ow-1) # clamp_函数是用来防止超出边界boxes[:, 1::2].clamp_(min=0, max=oh-1)return img, boxes
3、random_flip
def random_flip(img, boxes): # 随机水平翻转if random.random() < 0.5: # 0.5的概率随机翻转img = img.transpose(Image.FLIP_LEFT_RIGHT) # 左右镜像图像w = img.width # 宽wxmin = w - boxes[:, 2] # 计算左上角的位置 w-x2 y的位置都不变xmax = w - boxes[:, 0] # 计算右下角的位置 w-x1boxes[:, 0] = xmin # 新的x1 = w - 原来的x2boxes[:, 2] = xmax # 新的x2 = w - 原来的x1return img, boxes
4、random_crop
def random_crop(img, boxes):success = Falsefor attempt in range(10): # 尝试截取位置,如果尝试10次都失败的话就截取中间部分area = img.size[0] * img.size[1]target_area = random.uniform(0.56, 1.0) * area#生成随机大小区域aspect_ratio = random.uniform(3. / 4, 4. / 3) #再次随机大小w = int(round(math.sqrt(target_area * aspect_ratio)))#计算高和宽h = int(round(math.sqrt(target_area / aspect_ratio)))if random.random() < 0.5:w, h = h, wif w <= img.size[0] and h <= img.size[1]: #截取规范,不能超出边界x = random.randint(0, img.size[0] - w)y = random.randint(0, img.size[1] - h)success = Truebreak# Fallback 截取中间部分if not success:#尝试10次都不满足的话就直接中间截取w = h = min(img.size[0], img.size[1])x = (img.size[0] - w) // 2y = (img.size[1] - h) // 2img = img.crop((x, y, x+w, y+h))boxes -= torch.Tensor([x,y,x,y]) # 原坐标减去截取的boxes[:,0::2].clamp_(min=0, max=w-1)boxes[:,1::2].clamp_(min=0, max=h-1)return img, boxes
参考:pytorch 目标检测数据增强 详细讲解_视觉盛宴的博客-CSDN博客_pytorch目标检测数据增强
目标检测的数据增强 -- 代码实现相关推荐
- 目标检测常见数据增强算法汇总讲解(Mixup,Cutout,CutMix,Mosaic)
在学习目标检测算法的过程中,发现了一些有趣的目标检测算法,打算简单写个笔记,不足之处还望谅解,可以在评论中指出来. 目标检测作为需要大量数据的算法,在实际情况中经常面临数 ...
- 基于深度学习的目标检测:数据增强(一)图像翻转、图像旋转、图像放缩
1.数据增强简介 数据增强(data augmentation),又名数据增广或数据扩充,其本质是通过使用图像处理方法,基于有限的数据产生更多的数据,以此增加训练样本的数量以及多样性,进而提升模型的泛 ...
- 小目标检测的数据增强------Stitcher和Mosaic效果对比
Stitcher 原文:Stitcher: Feedback-driven Data Provider for Object Detection 复现效果: 复现Mosaic数据增强效果: 总结:其中 ...
- Pytorch 目标检测BoundingBox数据增强 详细记录
目录 1.resize 2 裁剪crop 2.1 中心裁剪center_crop 2.2 随机图像大小裁剪RandomSize_crop 2.3 随机裁剪Random_crop 3.随机翻转rando ...
- mscoco数据集_重磅!小目标检测的数据增广秘籍
Summary:重磅!小目标检测的数据增广秘籍 Author:Amusi Date:2019-03-18 微信公众号:CVer 原文链接:重磅!小目标检测的数据增广秘籍 前戏 最近目标检测方向,出了很 ...
- 目标检测Tensorflow:Yolo v3代码详解 (2)
目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...
- masaic 数据增强代码
masaic数据增强代码: 四张图片随机拼接 输出结果:随机拼接 ''' 数据增强方法测试 1. 像素级:HSV增强.旋转.平移.缩放.剪切.透视.翻转等 2. 图片级:MixUp.Cutout.Cu ...
- 目标检测训练数据扩充增强工具使用说明
最近总有人私信我说这个工具该怎么用 先附上资源地址: 目标检测数据扩充增强工具_目标检测数据增强-深度学习文档类资源-CSDN下载 该工具基于DataAugmentationForObjectDete ...
- 目标检测训练数据旋转python代码——数据增广(一)
转载请在首行附上原文链接!有帮助的话记得点ge赞. 针对目标检测任务,对训练数据做旋转进而达到数据增广的python2代码,网上没找到,自己写了一份. 另外附上一份,检查旋转后效果的Python代码( ...
- Keras YOLOv3代码详解(三):目标检测的流程图和源代码+中文注释
Keras YOLOv3源代码下载地址:https://github.com/qqwweee/keras-yolo3 YOLOv3论文地址:https://pjreddie.com/media/fil ...
最新文章
- 最快捷的PPT技能提升之路 PPT定制 驼峰设计
- ABAP RANGE 实现 SELECTION-OPTION 功能
- matlab 线性拟合相关系数,Matlab自动选择相关性最高波段并拟合曲线
- boost::multi_array模块实现index_base 修改工具的测试
- 计算机视觉摔倒检测,基于计算机视觉的室内跌倒检测
- 编程实现基于二维易位置换机制进行信息加解密_基于TEE的TBOX安全技术
- 立体匹配十大概念综述---立体匹配算法介绍
- 数据结构上机测试2-2:单链表操作B
- django上课笔记6-MVC,MTV架构-中间件-初识Form组件
- Laravel 数据库配置
- 「分块系列」数列分块入门6 解题报告
- configurationproperties_Spring Boot中@ConfigurationProperties注解实现原理源码解析
- 168个怪兽之声进化游戏生物怪兽音效素材 Evolved Game Creatures – Monster Sounds
- 谷歌发布adb-fastboot工具独立包
- 0x0000006B蓝屏解决方法
- python发送邮件群发软件_python使用tkinter写的邮件群发软件-python图形界面编程
- 如何将图片文字转换成word
- Idea的GenerateAllSetter插件,快速填充对象属性
- 小蘑菇也有很大力量,他通过种植蘑菇致富,如何成功?
- 推荐系统 -- NFM