簡體   English   中英

如何在tensorflow中為ssd網絡加載和保存Widerface數據集?

[英]How to load and save Widerface dataset for ssd network in tensorflow?

我想在tensorflow中為ssd(單發多盒檢測器)網絡加載和保存Widerface標簽,但是wider_face_train_bbx_gt是如此復雜。

如何在tensorflow中為ssd網絡保存標簽?

為了加載數據集,我給你一個解釋,說明如何使用TensorPack在TensorFlow中做到這一點 (僅用於數據)。

首先,我們需要包含邊界框的zip文件和mat文件。 以下部分基本上直接從zip文件和mat文件中讀取

class RawWiderFaceReader(RNGDataFlow):
    """Read images directly from tar file without unpacking
    boxes: left, top, width, height
    """
    def __init__(self, matfile, zipfile):
        super(RawWiderFaceReader, self).__init__()
        self.matfile = matfile
        self.zipfile = zipfile
        self.subset = matfile.split('_')[-1].replace('.mat', '')
        f = sio.loadmat(matfile)
        events = [f['event_list'][i][0][0] for i in range(len(f['event_list']))]
        raw_files = [f['file_list'][i][0] for i in range(len(f['file_list']))]
        raw_bbx = [f['face_bbx_list'][i][0] for i in range(len(f['face_bbx_list']))]

        col_files = []
        for file, bbx in zip(raw_files, raw_bbx):
            for filee, bbxe in zip(file, bbx):
                col_files.append((filee[0][0], bbxe[0]))

        self.col_files2 = []
        for file, bbx in col_files:
            for ev in events:
                if file.startswith(ev.replace('--', '_')):
                    self.col_files2.append((str('WIDER_%s/images/' % self.subset + ev +
                                           '/' + file + '.jpg').encode('ascii', 'ignore'), bbx))
                    break

    def get_data(self):
        with ZipFile(self.zipfile, 'r') as zip_hnd:
            for fn, bbx in self.col_files2:
                buf = zip_hnd.read('%s' % fn)
                yield [buf, bbx]

它為您提供了一個生成器get_data() ,該生成器返回jpeg編碼的圖像和邊界框。 它的存儲方式似乎很復雜,因為它是一個包含Matlab生成的邊界框的文件。 要繪制邊界框,可以使用:

def draw_rect(img, top, left, bottom, right, rgb, margin=1):
    m = margin
    r, g, b = rgb
    img[top:bottom, left - m:left + m, 0] = r
    img[top:bottom, left - m:left + m, 1] = g
    img[top:bottom, left - m:left + m, 2] = b

    img[top:bottom, right - m:right + m, 0] = r
    img[top:bottom, right - m:right + m, 1] = g
    img[top:bottom, right - m:right + m, 2] = b

    img[top - m:top + m, left:right, 0] = r
    img[top - m:top + m, left:right, 1] = g
    img[top - m:top + m, left:right, 2] = b

    img[bottom - m:bottom + m, left:right, 0] = r
    img[bottom - m:bottom + m, left:right, 1] = g
    img[bottom - m:bottom + m, left:right, 2] = b

    return img

整個腳本在這里: https : //gist.github.com/PatWie/a743d2349f388b27ed3ef783919c3882

pip install -U git+https://github.com/ppwwyyxx/tensorpack.git之后,您可以通過以下方式啟動它

python data_sampler.py --zip /scratch/patwie/data/wider_face/WIDER_val.zip \
                       --mat wider_face_split/wider_face_val.mat \
                       --debug

要將其轉換為lmdb文件,可以使用其他參數。 無需在此處解壓縮數據。

要使用數據,就像在腳本中一樣:

from tensorpack import *
ds = LMDBDataPoint('/scratch/wieschol/data/wider_face/WIDER_train.lmdb', shuffle=True)
ds = RawWiderFaceReader(matfile=args.mat, zipfile=args.zip)
ds.reset_state()
for jpeg, bbx in ds.get_data():
    rgb = cv2.imdecode(np.asarray(jpeg), cv2.IMREAD_COLOR)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM