如何在tensorflow中加载和保存ssd网络的Widerface数据集?

2024-10-03 00:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在tensorflow中为ssd(单次多盒探测器)网络加载和保存宽面标签,但是wider_face_train_bbx_gt太复杂了。在

如何在tensorflow中保存ssd网络的标签?在


Tags: gt网络tensorflowtrain标签facessd探测器
1条回答
网友
1楼 · 发布于 2024-10-03 00:17:59

为了加载数据集,我向您解释了如何使用TensorPack在TensorFlow中执行此操作(仅针对数据)。在

首先,我们需要包含边界框的zip文件和mat文件。基本上,zip文件直接从下面的文件读取

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生成的边界框的文件。 要绘制边界框,可以使用:

^{pr2}$

整个脚本在这里: 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)

相关问题 更多 >