ターゲット検出テクニック:誤認識データ供給
3269 ワード
いくつかの目標検出任務の中で、よく誤認識しやすいデータがあります.例えば、ブロガーが最近作った台標識別の項目では、マンゴーなどが湖南衛星テレビと誤認されていますが、mmdetectionはground truthのない入力画像をサポートしていないことが実験で発見されました.では、どのように誤認識データを与えますか.
このブログでは、誤認識した領域を正方形で表示し、訓練セットの画像をランダムに開き、誤認識して切断した領域をマウスの指定した位置に置く(マウスは左上隅を指定し、残りは自動的に充填する)方法を使用しています.
プログラムから2つのcvが飛び出します.showの画像は、1つ目は誤認識データ、2つ目はランダムに開いた訓練セットの画像で、注文が終わったら勝手にキーを押して次の画像を開きます.1つの誤認識領域はランダムに5枚の画像に配置されます.
このブログでは、誤認識した領域を正方形で表示し、訓練セットの画像をランダムに開き、誤認識して切断した領域をマウスの指定した位置に置く(マウスは左上隅を指定し、残りは自動的に充填する)方法を使用しています.
プログラムから2つのcvが飛び出します.showの画像は、1つ目は誤認識データ、2つ目はランダムに開いた訓練セットの画像で、注文が終わったら勝手にキーを押して次の画像を開きます.1つの誤認識領域はランダムに5枚の画像に配置されます.
import cv2 as cv
import os
import numpy as np
from PIL import Image
import random
global img, pt_curr, pt_pre, counts, file_list, index, tar_img, img_crop
img_crop = np.zeros((10,10))
tar_img = np.zeros((100,100))
file_list = []
counts = 0
index = 0
def on_mouse1(event, x, y, flags, param): #
global pt_curr, pt_pre, index, tar_img, img_crop, tar_name
if event == cv.EVENT_LBUTTONDOWN:
pt_curr = (x, y)
pt_pre = pt_curr
h, w, _ = np.shape(img_crop)
s = tar_name.split('/')
tar_name = '/Users/hank/Desktop/ad_12/train_aug/' + s[-1]
print(np.shape(img_crop), np.shape(tar_img), tar_name)
tar_img[x:x+h, y:y+w] = img_crop
cv.imwrite(tar_name, tar_img)
def on_mouse(event, x, y, flags, param): #
global img, pt_curr, pt_pre, index
img_cpy = img.copy()
if event == cv.EVENT_LBUTTONDOWN:
pt_curr = (x, y)
pt_pre = pt_curr
cv.circle(img_cpy, pt_curr, 10, (0, 255, 0), 2)
cv.imshow('image', img_cpy)
elif event == cv.EVENT_MOUSEMOVE and (flags & cv.EVENT_FLAG_LBUTTON): # ,
pt_curr = (x, y)
cv.rectangle(img_cpy, pt_pre, pt_curr, (255, 0, 0), 2)
cv.imshow('image', img_cpy)
elif event == cv.EVENT_LBUTTONUP: #
pt_curr = (x, y)
cv.rectangle(img_cpy, pt_pre, pt_curr, (0, 0, 255), 2)
cv.imshow('image', img_cpy)
min_x = min(pt_pre[0], pt_curr[0])
min_y = min(pt_pre[1], pt_curr[1])
width = abs(pt_pre[0] - pt_curr[0])
height = abs(pt_pre[1] - pt_curr[1])
global img_crop
img_crop = img[min_y:min_y + height, min_x:min_x + width]
img_crop = Image.fromarray(img_crop)
global counts
counts = counts + 1
for i in range(5):
global tar_name
tar_name = file_list[index]
index += 1
print(tar_name)
global tar_img
tar_img = cv.imread(tar_name)
cv.namedWindow('tar_img')
cv.setMouseCallback('tar_img', on_mouse1)
cv.imshow('tar_img',tar_img)
cv.waitKey(0)
if __name__ == '__main__':
root_dir = './wujian'
for filename1 in os.listdir('/Users/hank/Desktop//ad_12/train'):
filename = os.path.join('/Users/hank/Desktop/ad_12/train', filename1)
file_list.append(filename)
random.shuffle(file_list)
for img_name in os.listdir(root_dir):
global img
print("image name: {}".format(img_name))
img = cv.imread(os.path.join(root_dir, img_name))
cv.namedWindow('image')
cv.setMouseCallback('image', on_mouse)
cv.imshow('image', img)
cv.waitKey(0)