与分类任务不同的是,目标检测任务的数据集有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目标检测数据增强

目标检测的数据增强 -- 代码实现相关推荐

  1. 目标检测常见数据增强算法汇总讲解(Mixup,Cutout,CutMix,Mosaic)

           在学习目标检测算法的过程中,发现了一些有趣的目标检测算法,打算简单写个笔记,不足之处还望谅解,可以在评论中指出来.         目标检测作为需要大量数据的算法,在实际情况中经常面临数 ...

  2. 基于深度学习的目标检测:数据增强(一)图像翻转、图像旋转、图像放缩

    1.数据增强简介 数据增强(data augmentation),又名数据增广或数据扩充,其本质是通过使用图像处理方法,基于有限的数据产生更多的数据,以此增加训练样本的数量以及多样性,进而提升模型的泛 ...

  3. 小目标检测的数据增强------Stitcher和Mosaic效果对比

    Stitcher 原文:Stitcher: Feedback-driven Data Provider for Object Detection 复现效果: 复现Mosaic数据增强效果: 总结:其中 ...

  4. Pytorch 目标检测BoundingBox数据增强 详细记录

    目录 1.resize 2 裁剪crop 2.1 中心裁剪center_crop 2.2 随机图像大小裁剪RandomSize_crop 2.3 随机裁剪Random_crop 3.随机翻转rando ...

  5. mscoco数据集_重磅!小目标检测的数据增广秘籍

    Summary:重磅!小目标检测的数据增广秘籍 Author:Amusi Date:2019-03-18 微信公众号:CVer 原文链接:重磅!小目标检测的数据增广秘籍 前戏 最近目标检测方向,出了很 ...

  6. 目标检测Tensorflow:Yolo v3代码详解 (2)

    目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...

  7. masaic 数据增强代码

    masaic数据增强代码: 四张图片随机拼接 输出结果:随机拼接 ''' 数据增强方法测试 1. 像素级:HSV增强.旋转.平移.缩放.剪切.透视.翻转等 2. 图片级:MixUp.Cutout.Cu ...

  8. 目标检测训练数据扩充增强工具使用说明

    最近总有人私信我说这个工具该怎么用 先附上资源地址: 目标检测数据扩充增强工具_目标检测数据增强-深度学习文档类资源-CSDN下载 该工具基于DataAugmentationForObjectDete ...

  9. 目标检测训练数据旋转python代码——数据增广(一)

    转载请在首行附上原文链接!有帮助的话记得点ge赞. 针对目标检测任务,对训练数据做旋转进而达到数据增广的python2代码,网上没找到,自己写了一份. 另外附上一份,检查旋转后效果的Python代码( ...

  10. Keras YOLOv3代码详解(三):目标检测的流程图和源代码+中文注释

    Keras YOLOv3源代码下载地址:https://github.com/qqwweee/keras-yolo3 YOLOv3论文地址:https://pjreddie.com/media/fil ...

最新文章

  1. 最快捷的PPT技能提升之路 PPT定制 驼峰设计
  2. ABAP RANGE 实现 SELECTION-OPTION 功能
  3. matlab 线性拟合相关系数,Matlab自动选择相关性最高波段并拟合曲线
  4. boost::multi_array模块实现index_base 修改工具的测试
  5. 计算机视觉摔倒检测,基于计算机视觉的室内跌倒检测
  6. 编程实现基于二维易位置换机制进行信息加解密_基于TEE的TBOX安全技术
  7. 立体匹配十大概念综述---立体匹配算法介绍
  8. 数据结构上机测试2-2:单链表操作B
  9. django上课笔记6-MVC,MTV架构-中间件-初识Form组件
  10. Laravel 数据库配置
  11. 「分块系列」数列分块入门6 解题报告
  12. configurationproperties_Spring Boot中@ConfigurationProperties注解实现原理源码解析
  13. 168个怪兽之声进化游戏生物怪兽音效素材 Evolved Game Creatures – Monster Sounds
  14. 谷歌发布adb-fastboot工具独立包
  15. 0x0000006B蓝屏解决方法
  16. python发送邮件群发软件_python使用tkinter写的邮件群发软件-python图形界面编程
  17. 如何将图片文字转换成word
  18. Idea的GenerateAllSetter插件,快速填充对象属性
  19. 小蘑菇也有很大力量,他通过种植蘑菇致富,如何成功?
  20. 推荐系统 -- NFM

热门文章

  1. tamtam-nuget-imageserver
  2. Hadoop 删除节点步骤
  3. VS2010 + VS2008 快捷键
  4. Box2DWeb_04之碰撞检测
  5. HTML5 目前无法实现的5件事
  6. 基于核极限学习机(KELM)回归预测 -附代码
  7. 【SQL】实验五 数据库的完整性
  8. 个人地理数据库与文件地理数据库的区别
  9. python 常用的几个镜像源
  10. Spring集成quartz实现的定时任务调用