KERAS-YOLOV3的数据增强

2023-05-16

前言

上篇KERAS-YOLOV3的代码走读
https://blog.csdn.net/yangchengtest/article/details/80664415
有数据增强的内容没有看明白。
这篇来介绍一下。

简介

数据增强的方法主要有:
1. 翻转变换 flip
2. 随机修剪 random crop
3. 色彩抖动 color jittering
4. 平移变换 shift
5. 尺度变换 scale
6. 对比度变换 contrast
7. 噪声扰动 noise
8. 旋转变换/反射变换 Rotation/reflection

KERAS-YOLOV3源码分析

def get_random_data(annotation_line, input_shape, random=True, max_boxes=20, jitter=.3, hue=.1, sat=1.5, val=1.5, proc_img=True)
def rand(a=0, b=1):
return np.random.rand()*(b-a) + a
rand返回两个入参之间的随机数。

缩放图片

# resize image
# 随机生成宽高比
new_ar = w/h * rand(1-jitter,1+jitter)/rand(1-jitter,1+jitter)
# 随机生成缩放比例。
scale = rand(.25, 2)
# 生成新的高宽数据,可能放大2倍。
if new_ar < 1:
    nh = int(scale*h)
    nw = int(nh*new_ar)
else:
    nw = int(scale*w)
    nh = int(nw/new_ar)
image = image.resize((nw,nh), Image.BICUBIC)

平移变换

# place image
# 随机水平位移
dx = int(rand(0, w-nw))
dy = int(rand(0, h-nh))
new_image = Image.new('RGB', (w,h), (128,128,128))
new_image.paste(image, (dx, dy))
image = new_image

翻转

# flip image or not
flip = rand()<.5
if flip: image = image.transpose(Image.FLIP_LEFT_RIGHT)

颜色抖动

RGB->HSV->RGB

# distort image
# HSV抖动
hue = rand(-hue, hue)
sat = rand(1, sat) if rand()<.5 else 1/rand(1, sat)
val = rand(1, val) if rand()<.5 else 1/rand(1, val)
# 归一化处理
# 内部函数,通过公式转化。具体函数不介绍。
x = rgb_to_hsv(np.array(image)/255.)
x[..., 0] += hue
x[..., 0][x[..., 0]>1] -= 1
x[..., 0][x[..., 0]<0] += 1
x[..., 1] *= sat
x[..., 2] *= val
# 避免S/V CHANNEL越界
x[x>1] = 1
x[x<0] = 0
image_data = hsv_to_rgb(x) # numpy array, 0 to 1

定义新的BOX位置

YOLO是位置检测的算法,在经过缩放和水平变换后,BOX的左边也需要相应的变化。

# correct boxes
box_data = np.zeros((max_boxes,5))
if len(box)>0:
    np.random.shuffle(box)
    box[:, [0,2]] = box[:, [0,2]]*nw/iw + dx
    box[:, [1,3]] = box[:, [1,3]]*nh/ih + dy
    ### 左右翻转
    if flip: box[:, [0,2]] = w - box[:, [2,0]]
    ### 定义边界
    box[:, 0:2][box[:, 0:2]<0] = 0
    box[:, 2][box[:, 2]>w] = w
    box[:, 3][box[:, 3]>h] = h
    ### 计算新的长宽
    box_w = box[:, 2] - box[:, 0]
    box_h = box[:, 3] - box[:, 1]
    box = box[np.logical_and(box_w>1, box_h>1)] # discard invalid box
    if len(box)>max_boxes: box = box[:max_boxes]
    box_data[:len(box)] = box
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KERAS-YOLOV3的数据增强 的相关文章

随机推荐

  • linux下运行动态库问题 cannot open shared object file: No such file or directory

    如果动态库不在同一级目录下 xff0c 则需要将以上文件的目录加载到动态库搜索路径中 xff0c 设置的方式有以下几种 一 将动态库路径加入到LD LIBRARY PATH环境变量 1 在终端输入 xff1a export LD LIBRA
  • 几个串口通信协议的整理

    一 UART UART是一个大家族 xff0c 其包括了RS232 RS499 RS423 RS422和RS485等接口标准规范和总线标准规范 它们的主要区别在于其各自的电平范围不相同 嵌入式设备中常常使用到的是TTL TTL转RS232的
  • 单片机中断的过程

    1 根据响应的中断源的中断优先级 使相应的优先级状态触发器置1 xff1b 2 把当前程序计数器PC的内容压入堆栈 xff0c 保护断点 xff0c 寻找中断源 xff1b 3 执行硬件中断服务子程序调用 xff1b 4 清除相应的中断请求
  • Ruby学习札记(3)- Ruby中gem的安装与卸载

    Ruby 学习札记 3 Ruby 中 gem 的安装与卸载 在 Ruby 中有 gem 包这种概念 xff0c 类似 PHP 中的 pear xff0c 相当于一种插件 具体可以 Google 一下 xff08 1 xff09 查看已经安装
  • 【linux】ubuntu20.04 运行软件 提示找不到过时的库 libQtCore.so.4、libQtGui.so.4、libpng12.so.0

    先上结果 1 nxView运行起来 环境 硬件 xff1a Jetson Xavier NX 套件 系统 xff1a Ubuntu 20 04 软件 xff1a nxView 43 libQtCore so 4 解决 0 现象 运行软件提示
  • rtt相关问题总结

    1 总结RT Thread的启动流程 xff08 启动文件部分跳过 xff09 关中断 rt hw interrupt disable 板级初始化 xff1a 需在该函数内部进行系统堆的初始化 rt hw board init 打印 RT
  • FTP 客户端C实现

    使用 Socket 通信实现 FTP 客户端程序 FTP 概述 文件传输协议 xff08 FTP xff09 作为网络共享文件的传输协议 xff0c 在网络应用软件中具有广泛的应用 FTP的目标是提高文件的共享性和可靠高效地传送数据 在传输
  • Qt编写串口通信程序全程图文讲解

    说明 我们的编程环境是windows xp下 xff0c 在Qt Creator中进行 xff0c 如果在Linux下或直接用源码编写 xff0c 程序稍有不同 xff0c 请自己改动 在Qt中并没有特定的串口控制类 xff0c 现在大部分
  • VLC播放器调试经验总结

    一 前言 在使用VS学习VLC源码时 xff0c 可以打断点分析变量数据 xff0c 跟踪代码流程 xff0c 方便我们理解源码 但是在定位音视频卡顿 延时等疑难问题时 xff0c 这一招就不管用了 xff0c 因为打上断点就会导致实时计算
  • http协议如何解决粘包问题

    在讲粘包问题之前 xff0c 首先得明白这个包是应用层的数据包 当数据在传输层时 xff0c 由于TCP是面向字节流的 xff0c 所以它看到的数据是按照顺序一个个放在缓冲区中的 xff0c 而对于应用层而言 xff0c 看到的只是一连串的
  • ROS- 解决 sudo rosdep init和update 出现的错误

    大家在使用ROS时都需要执行sudo rosdep init 方法和rosdep update方法 但是在执行rosdep init时会提示如下错误 ERROR cannot download default sources list fr
  • 如何用MQTT网关快速接入阿里云IOT

    深圳市钡铼技术有限公司推出的BL102 xff0c 是采集西门子 xff0c 欧姆龙 xff0c 三菱 xff0c 台达 xff0c AB xff0c 施耐德等主流PLC及Modbus xff0c DT L645协议设备数据 xff0c 简
  • 闫刚 qgc模块mavlinklog实现过程

    mavlink log qml部分 这样logController就和LogDownloadController进行了绑定 AnalyzeView qml Rectangle span class token punctuation spa
  • 初识TVM--TVM的编译与安装

    TVM是什么 xff1f Apache incubating TVM is an open deep learning compiler stack for CPUs GPUs and specialized accelerators It
  • iOS上简单推送通知(Push Notification)的实现

    iOS上简单推送通知 xff08 Push Notification xff09 的实现 根据这篇很好的教程 xff08 http www raywenderlich com 3443 apple push notification ser
  • Android学习记录(十三) http之digest鉴权之填坑6.0。

    背景 xff1a android 6 0 1 的手机发现使用webdav下载文件实效 xff0c httpclient execute get的时候出现 xff1a CrashHandler java lang ArrayIndexOutO
  • 开源视频播放器IjkPlayer使用记录之(三)--播放视频从上次播放的时间点播放。

    方法 xff1a 1 在关闭视频的时候 xff0c 使用getCurrentPosition 获取当前的时间点 2 使用SharedPreferences记录当前的时间点 3 重新播放时 xff0c 获取该时间点 xff0c 使用seekt
  • 开源视频播放器IjkPlayer使用记录之(四)--多音轨的探路之旅

    前言 xff1a 在视频播放中 xff0c 我们经常会遇到多音轨的资源文件 xff0c 比如某个mkv文件同时支持英语 国语 xff0c 那么最好是能够进行音轨的切换 在IjkPlayer中并没有支持多音轨的代码 xff0c 所以在移植的过
  • KERAS-YOLOV3的代码走读

    KERAS YOLOV3的代码走读 GITHUB地址 xff1a https github com qqwweee keras yolo3 YOLOV3的论文中文翻译 xff1a https zhuanlan zhihu com p 349
  • KERAS-YOLOV3的数据增强

    前言 上篇KERAS YOLOV3的代码走读 https blog csdn net yangchengtest article details 80664415 有数据增强的内容没有看明白 这篇来介绍一下 简介 数据增强的方法主要有 xf