标注数据扩充

使用labelImg标注目标检测数据。由于标注数据工作非常枯燥,标得自己头晕眼花。想了个办法扩充自己的标注数据集。
使用labelImg标注后得到的数据是这样:
在这里插入图片描述
使用代码对图片进行翻转,旋转180度,旋转180度再翻转。同时对xml中的坐标进行运算,得到图片变换后的目标区域。
在这里插入图片描述
如此,标注1张图可得4张训练数据。代码如下:

import os 
import xml.etree.ElementTree as ET
class ManufacturingData():
    '''
    制造数据,对打好标签的数据进行翻转,旋转180,旋转180再翻转
    '''
    def __init__(self):
        '''

        '''
        self.path=''
        self.save_path=''
    def manufacturing(self):
        '''
        :return:
        '''
        imagelist=os.listdir(self.path)
        print(imagelist)
        for s in imagelist:
            if ".xml" in s:
                continue
            else:
                self.newXML(s,0)
                self.newXML(s, 1)
                self.newXML(s, 2)

    def rotate(self,name,model):
        '''
        :param img:
        :return:
        '''
        image=cv2.imread(os.path.join(self.path,name+".png"))
        #
        if model==0:
            image2 = cv2.flip(image, model)  
            cv2.imwrite(os.path.join(self.save_path,name + "-1.png"),image2)
        elif model==1:
            image3 = cv2.flip(image, 1) 
            cv2.imwrite(os.path.join(self.save_path,name + "-2.png"),image3)
        elif model==2:
            image0 = cv2.flip(image, -1)  
            cv2.imwrite(os.path.join(self.save_path, name + "-3.png"), image0)

    def newXML(self,name,model):
        name=name.replace(".png","")
        tree = ET.parse(os.path.join(self.path,name + ".xml"))
        root=tree.getroot()
        objects = root.findall('object')
        size=root.find('size')
        w=int(size.find('width').text)
        h=int(size.find('height').text)
        # print(w,h)
        for obj in objects:
            bbox = obj.find('bndbox')
            x1,y1,x2,y2=int(bbox.find('xmin').text),int(bbox.find('ymin').text),int(bbox.find('xmax').text),int(bbox.find('ymax').text)
            # print(y1,y2)
            if model==0:
                new_y1=h-y2
                new_y2=h-y1
                bbox.find('ymin').text = str(new_y1)
                bbox.find('ymax').text = str(new_y2)
            elif model==1:
                new_x1=w-x2
                new_x2=w-x1
                bbox.find('xmin').text = str(new_x1)
                bbox.find('xmax').text = str(new_x2)
            elif model==2:
                new_y1=h-y2
                new_y2=h-y1
                new_x1 = w - x2
                new_x2 = w - x1
                bbox.find('ymin').text = str(new_y1)
                bbox.find('ymax').text = str(new_y2)
                bbox.find('xmin').text = str(new_x1)
                bbox.find('xmax').text = str(new_x2)
   
        if model==0:
            tree.write(os.path.join(self.save_path,name + "-1.xml"))
        elif model==1:
            tree.write(os.path.join(self.save_path,name + "-2.xml"))
        elif model==2:
            tree.write(os.path.join(self.save_path,name + "-3.xml"))
        self.rotate(name,model)


if __name__=="__main__":
    # 旋转图片 得到更多数据
    obj=ManufacturingData()
    obj.path=r'' #图片及xml路径
    obj.save_path=r'' #数据扩充后的保存路径
    obj.manufacturing()

labelImg生成的xml和图片放到同一路径下。这里吐槽一下labelImg这个工具,用着用着就只能框正方形,不知道怎么调回去,需要重启工具才能解决。如有大佬知道原因求指点。

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
在机器学习任务中,标注数据扩充是一种常用的技术,用于增加训练数据的数量,提高模型的泛化能力和性能。Python提供了许多工具和库来实现标注数据扩充。 一种常用的数据扩充技术是图像增强。通过对原始图像进行旋转、翻转、缩放、平移、亮度调整等操作,可以生成多个新的图像样本。例如,使用Python的PIL库,我们可以通过旋转和翻转图像来生成更多不同角度和方向的图像样本。 另一种数据扩充技术是文本增强。对于文本分类任务,可以利用Python的文本处理库,如NLTK和gensim,对原始文本进行词语替换、同义词替换、句子重组等操作,生成多个新的文本样本。 此外,还有基于生成对抗网络(GAN)的数据扩充方法。GAN模型可以生成逼真的合成数据,可以用来增加样本数量,同时保持数据的真实性。使用Python的深度学习框架,如TensorFlow和PyTorch,可以实现GAN模型,并生成新的合成数据。 需要注意的是,标注数据扩充虽然可以增加训练数据的数量,但并不是万能的。在扩充数据时,需要考虑数据的真实性和多样性,避免过度扩充导致模型过拟合。同时,还需要根据具体任务和领域特点选择合适的数据扩充方法。 综上所述,Python提供了多种方法实现标注数据扩充,包括图像增强、文本增强和基于GAN的数据生成。通过合理地扩充数据集,可以提高模型的泛化能力和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值