訂閱
糾錯(cuò)
加入自媒體

如何使用Python和OpenCV實(shí)現(xiàn)對(duì)象檢測(cè)任務(wù)的數(shù)據(jù)擴(kuò)充過(guò)程?

   
   # 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.a(chǎn)ppend([obj_name, x1, y1, x2, y2])
   return resized, new_boxes
CutoutCutout是2017年由Terrance DeVries和Graham W. Taylor在他們的論文中介紹的,是一種簡(jiǎn)單的正則化技術(shù),在訓(xùn)練過(guò)程中隨機(jī)掩蓋輸入的正方形區(qū)域,可以用來(lái)提高卷積神經(jīng)網(wǎng)絡(luò)的魯棒性和整體性能。這種方法不僅非常容易實(shí)現(xiàn),而且表明它可以與現(xiàn)有形式的數(shù)據(jù)擴(kuò)充和其他正則化器一起使用,進(jìn)一步提高模型的性能。論文地址:https://arxiv.org/abs/1708.04552與本文一樣,我們使用了cutout來(lái)提高圖像識(shí)別(分類(lèi))的精度,因此,如果我們將相同的方案部署到目標(biāo)檢測(cè)數(shù)據(jù)集中,可能會(huì)導(dǎo)致丟失目標(biāo)(特別是小目標(biāo))的問(wèn)題。在下圖中,刪除了剪切區(qū)域(黑色區(qū)域)內(nèi)的大量小對(duì)象,這不符合數(shù)據(jù)增強(qiáng)的精神。

為了使這種方式適合對(duì)象檢測(cè),我們可以做一個(gè)簡(jiǎn)單的修改,而不是僅使用一個(gè)遮罩并將其放置在圖像中的隨機(jī)位置,而是隨機(jī)選擇一半的對(duì)象,并將裁剪應(yīng)用于每個(gè)目標(biāo)區(qū)域,效果更佳。增強(qiáng)后的圖像如下圖所示。

Cutout的輸出是一個(gè)新生成的圖像,我們不刪除對(duì)象或改變圖像大小,那么生成的圖像的注釋就是原始注釋。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(yuǎn) = int((y2 - y1)*0.5)
       mask_x1 = random.randint(x1, x2 - mask_w)
       mask_y1 = random.randint(y1, y2 - mask_h(yuǎn))
       mask_x2 = mask_x1 + mask_w
       mask_y2 = mask_y1 + mask_h(yuǎn)
       cv2.rectangle(out, (mask_x1, mask_y1), (mask_x2, mask_y2), (0, 0, 0), thickness=-1)
   return out
ColorJitterColorJitter是另一種簡(jiǎn)單的圖像數(shù)據(jù)擴(kuò)充類(lèi)型,我們隨機(jī)改變圖像的亮度、對(duì)比度和飽和度。我相信這個(gè)“家伙”很容易被大多數(shù)讀者理解。

聲明: 本文由入駐維科號(hào)的作者撰寫(xiě),觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

    掃碼關(guān)注公眾號(hào)
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯(cuò)
    x
    *文字標(biāo)題:
    *糾錯(cuò)內(nèi)容:
    聯(lián)系郵箱:
    *驗(yàn) 證 碼:

    粵公網(wǎng)安備 44030502002758號(hào)