使用Python+OpenCV进行数据增广方法综述(附代码演练)

数据增广通过Python和OpenCV增加数据集多样性,防止模型过拟合。文章介绍了随机剪裁、Cutout、ColorJitter、添加噪声和过滤等方法,附有代码实现。Cutout虽能提升分类任务性能,但在目标检测中需调整以保留目标。最后提供了完整实现链接。
摘要由CSDN通过智能技术生成

数据扩充是一种增加数据集多样性的技术,无需收集更多的真实数据,但仍然有助于提高模型的准确性和防止模型过度拟合。在这篇文章中,你将学习使用Python和OpenCV实现最流行和最有效的对象检测任务的数据扩充过程。

介绍的数据扩充方法包括:

  1. 随机剪裁

  2. Cutout

  3. ColorJitter

  4. 添加噪声

  5. 过滤

首先,让我们导入几个库并准备一些必要的子例程。

import os
import cv2
import numpy as np
import random

def file_lines_to_list(path):
    '''
    ### Convert Lines in TXT File to List ###
    path: path to file
    '''
    with open(path) as f:
        content = f.readlines()
    content = [(x.strip()).split() for x in content]
    return content

def get_file_name(path):
    '''
    ### Get Filename of Filepath ###
    path: path to file
    '''
    basename = os.path.basename(path)
    onlyname = os.path.splitext(basename)[0]
    return onlyname

def write_anno_to_txt(boxes, filepath):
    '''
    ### Write Annotation to TXT File ###
    boxes: format [[obj x1 y1 x2 y2],...]
    filepath: path/to/file.txt
    '''
    txt_file = open(filepath, "w")
    for box in boxes:
        print(box[0], int(box[1]), int(box[2]), int(box[3]), int(box[4]), file=txt_file)
    txt_file.close()

下图在本文中用作示例图像。

随机剪裁

随机剪裁:随机选择一个区域并将其裁剪出来,形成一个新的数据样本,被裁剪的区域应与原始图像具有相同的宽高比,以保持对象的形状。

在上图中,左边的图像是带有真实边界框的原始图像(红色部分),右边的图像是通过裁剪橙色框中的区域创建的新样本。

在新样本的标注中,去除所有与左侧图像中橙色框不重叠的对象,并将橙色框边界上的对象的坐标进行细化,使之与新样本相匹配。对原始图像进行随机裁剪的输出是新的裁剪后的图像及其注释。

def randomcrop(img, gt_boxes, scale=0.5):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值