나는 tensorflow에서 ssd (single shot multibox detector) 네트워크의 Widerface 레이블을로드하고 저장하려고하지만, wider_face_train_bbx_gt
은 매우 복잡합니다.tensorflow에서 ssd 네트워크의 Widerface 데이터 세트를로드하고 저장하는 방법은 무엇입니까?
어떻게 tensorflow에서 ssd 네트워크의 레이블을 저장할 수 있습니까?
나는 tensorflow에서 ssd (single shot multibox detector) 네트워크의 Widerface 레이블을로드하고 저장하려고하지만, wider_face_train_bbx_gt
은 매우 복잡합니다.tensorflow에서 ssd 네트워크의 Widerface 데이터 세트를로드하고 저장하는 방법은 무엇입니까?
어떻게 tensorflow에서 ssd 네트워크의 레이블을 저장할 수 있습니까?
데이터 집합을로드하려면 TensorFlow에서 TensorPack (데이터 만 해당)을 사용하여이 작업을 수행하는 방법을 설명합니다.
먼저, zip 파일과 경계 상자가 포함 된 매트 파일이 필요합니다. 다음 부분은 기본적으로 zip 파일과 매트 파일이 당신에게 JPEG 인코딩 된 이미지와 경계 박스를 반환 발전기 get_data()
을 제공
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]
에서 직접 읽습니다. 그것이 저장되는 방식은 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
전체 스크립트는 여기에 있습니다 : pip install -U git+https://github.com/ppwwyyxx/tensorpack.git
후 https://gist.github.com/PatWie/a743d2349f388b27ed3ef783919c3882
은 당신이로 변환하기 위해
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)
감사합니다. 나는 그들 모두를했으나 전체 대본에서 나는 약간 혼란 스러웠다. 내 잘못은 뭐니? parser.add_argument ('- zip', 'C :/Users/User/Documents/FirstCode/Datasett/Wider_Face_Imdb' 기본 '= WIDER_train.zip') parser.add_argument ('- mat', 'C :/사용자/사용자/문서/FirstCode/Datasett/Wider_Face', 기본값 = 'wider_face_split/wider_face_train. mat ') parser.add_argument ('- debug ', action ='store_true ', help ='이미지 만 표시 ')' – Mosi
,하지만 우리는 좀 더 컨텍스트가 필요합니다
데이터를 사용하기 위해서는 스크립트 같다. 나는 수치스럽게도 SSD 네트워크, Widerface 데이터 세트 또는 관련 라벨 저장 문제에 관해 들어 본 적이 없다고 인정합니다. 문제는 정확히 무엇입니까? – Dropssd는 일종의 길쌈 네트워크입니다. https://arxiv.org/pdf/1512.02325.pdf 여기에서 볼 수 있습니다. Widerface는 얼굴 탐지를위한 훌륭한 데이터 세트이며 http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/에서 볼 수 있습니다. . Widerface에는 텍스트 파일 주석이 있습니다. 이 데이터 집합을로드하고 ssd 네트워크에서 사용할 준비를하고 싶습니다. 나는 Tensorflow에 의해 여기 구현 된 ssd의이 버전을 의미합니다. https://github.com/balancap/SSD-Tensorflow – Mosi
여기에서했던 것처럼 TensorPack으로로드 할 수 있습니다 : https://gist.github.com/PatWie/ a743d2349f388b27ed3ef783919c3882 이 스크립트를 실행하면 경계 상자가있는 이미지가 제공됩니다. – Patwie