yolov5负样本构造:标注区域内随机裁剪等大子区域

在做目标检测的时候,模型总是会学到一些局部信息,比如总把红色的东西识别成灭火器。为了构造对抗样本,考虑在标注范围内随机裁剪子区域作为负样本。

	name = 'test'
    label_path = path_label + name + '.txt'
    img_path = path_img + name + '.jpg'
    # print(img_path)
    img_none=cv2.imread(img_path)
    # print(img_none)
    ww, hh = img_none.shape[0], img_none.shape[1]
    # print(ww, hh)
    label_ = []
    with open(label_path, mode='r', encoding = "utf-8") as fin:
        finl = fin.readlines()
        for i in finl: #这部分是把yolov5的标注进行复原
            il = i.replace('\n','')
            il = i.split(' ')
            # print(int(il[0]))
            x,y,w,h = float(il[1]), float(il[2]), float(il[3]), float(il[4])
            x *= ww
            w *= ww
            y *= hh
            h *= hh
            x_max = int(((x+1)*2+w)/2)
            x_min = int(((x+1)*2-w)/2)
            y_max = int(((y+1)*2+h)/2)
            y_min = int(((y+1)*2-h)/2)
            label_.append([x_min, x_max, y_min, y_max])
            # print(x_min, x_max, y_min, y_max)
    j = -1
    for ll in label_:
        j += 1
        x_min, x_max, y_min, y_max = ll[0], ll[1], ll[2], ll[3]
        # print(x_min, x_max, y_min, y_max)
        sw = int((x_max-x_min)*0.2)
        sh = int((y_max-y_min)*0.2)
        for i in range(3): # 取3个子区域 
            x=random.randint(x_min, x_max-sw)
            y=random.randint(y_min, y_max-sh)
            # print('({},{})'.format(x,y))
            res=img_none[x:x+sw,y:y+sh] #子区域
            cv2.imwrite(out_path+name+'_'+str(j)+'_'+str(i)+'.jpg',res)

参考:https://blog.csdn.net/a272881819/article/details/121979255

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

持续战斗状态

很高兴可以帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值