如何使用Python和OpenCV实现对象检测任务的数据扩充过程?

磐创AI
关注

   
   # Modify annotation
   new_boxes=[]
   for box in gt_boxes:
       obj_name = box[0]
       x1 = int(box[1])
       y1 = int(box[2])
       x2 = int(box[3])
       y2 = int(box[4])
       x1, x2 = x1-x, x2-x
       y1, y2 = y1-y, y2-y
       x1, y1, x2, y2 = x1/scale, y1/scale, x2/scale, y2/scale
       if (x1<img.shape[1] and y1<img.shape[0]) and (x2>0 and y2>0):
           if x1<0: x1=0
           if y1<0: y1=0
           if x2>img.shape[1]: x2=img.shape[1]
           if y2>img.shape[0]: y2=img.shape[0]
           new_boxes.append([obj_name, x1, y1, x2, y2])
   return resized, new_boxes
CutoutCutout是2017年由Terrance DeVries和Graham W. Taylor在他们的论文中介绍的,是一种简单的正则化技术,在训练过程中随机掩盖输入的正方形区域,可以用来提高卷积神经网络的鲁棒性和整体性能。这种方法不仅非常容易实现,而且表明它可以与现有形式的数据扩充和其他正则化器一起使用,进一步提高模型的性能。论文地址:https://arxiv.org/abs/1708.04552与本文一样,我们使用了cutout来提高图像识别(分类)的精度,因此,如果我们将相同的方案部署到目标检测数据集中,可能会导致丢失目标(特别是小目标)的问题。在下图中,删除了剪切区域(黑色区域)内的大量小对象,这不符合数据增强的精神。

为了使这种方式适合对象检测,我们可以做一个简单的修改,而不是仅使用一个遮罩并将其放置在图像中的随机位置,而是随机选择一半的对象,并将裁剪应用于每个目标区域,效果更佳。增强后的图像如下图所示。

Cutout的输出是一个新生成的图像,我们不删除对象或改变图像大小,那么生成的图像的注释就是原始注释。def cutout(img, gt_boxes, amount=0.5):
   '''
   ### Cutout ###
   img: image
   gt_boxes: format [[obj x1 y1 x2 y2],...]
   amount: num of masks / num of objects
   '''
   out = img.copy()
   ran_select = random.sample(gt_boxes, round(amount*len(gt_boxes)))
   for box in ran_select:
       x1 = int(box[1])
       y1 = int(box[2])
       x2 = int(box[3])
       y2 = int(box[4])
       mask_w = int((x2 - x1)*0.5)
       mask_h = int((y2 - y1)*0.5)
       mask_x1 = random.randint(x1, x2 - mask_w)
       mask_y1 = random.randint(y1, y2 - mask_h)
       mask_x2 = mask_x1 + mask_w
       mask_y2 = mask_y1 + mask_h
       cv2.rectangle(out, (mask_x1, mask_y1), (mask_x2, mask_y2), (0, 0, 0), thickness=-1)
   return out
ColorJitterColorJitter是另一种简单的图像数据扩充类型,我们随机改变图像的亮度、对比度和饱和度。我相信这个“家伙”很容易被大多数读者理解。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存