如何在张量流中加载并保存ssd网络的Widerface数据集?
我想加载并保存ssd(single shot multibox detector)网络的Widerface标签,但是张力很大,但是wider_face_train_bbx_gt
太复杂了。如何在张量流中加载并保存ssd网络的Widerface数据集?
如何在张量流中保存ssd网络的标签?
要加载数据集,我给你一个解释如何在TensorFlow中使用TensorPack(仅用于数据)来完成此操作。
首先,我们需要包含边界框的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-file可以使用其他参数。这里不需要解压缩数据。
使用数据,这就像在脚本:
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)
谢谢。我做了所有这些,但是在你的整个剧本中我有点困惑。我的错在这里? (' - zip','C:/用户/用户/文档/ FirstCode/Datasett/Wider_Face_Imdb')解析器.add_argument(' - lmdb','C:/ Users/User/Documents/FirstCode/Datasett/Wider_Face_Imdb') parser.add_argument第一代码/数据集/ Wider_Face',默认='WIDER_train.zip') parser.add_argument(' - mat','C:/ Users/User/Documents/FirstCode/Datasett/Wider_Face',default ='wide_face_split/wide_face_train。 mat') parser.add_argument(' - debug',action ='store_true',help ='只显示图像')' – Mosi
我们可以,但我们需要一些更多的上下文。我可耻承认,我从来没有听说过SSD网络,Widerface数据集或相关标签保存问题。究竟是什么问题? – Drop
ssd是一种卷积网络。你可以在这里看到它:https://arxiv.org/pdf/1512.02325.pdf Widerface是一个很好的人脸检测数据集,它可以在这里找到:http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/ 。 Widerface有一个文本文件注释。我想加载这个数据集,并准备在ssd网络中使用它。我的意思是这个版本的ssd是由Tensorflow实现的:https://github.com/balancap/SSD-Tensorflow – Mosi
你可以像我这样在TensorPack中加载它们:https://gist.github.com/PatWie/ a743d2349f388b27ed3ef783919c3882 运行这个脚本应该会给你带包围盒的图像 – Patwie