2017-10-04 14 views
0

나는 tensorflow에서 ssd (single shot multibox detector) 네트워크의 Widerface 레이블을로드하고 저장하려고하지만, wider_face_train_bbx_gt은 매우 복잡합니다.tensorflow에서 ssd 네트워크의 Widerface 데이터 세트를로드하고 저장하는 방법은 무엇입니까?

어떻게 tensorflow에서 ssd 네트워크의 레이블을 저장할 수 있습니까?

+0

,하지만 우리는 좀 더 컨텍스트가 필요합니다

데이터를 사용하기 위해서는 스크립트 같다. 나는 수치스럽게도 SSD 네트워크, Widerface 데이터 세트 또는 관련 라벨 저장 문제에 관해 들어 본 적이 없다고 인정합니다. 문제는 정확히 무엇입니까? – Drop

+0

ssd는 일종의 길쌈 네트워크입니다. 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

+0

여기에서했던 것처럼 TensorPack으로로드 할 수 있습니다 : https://gist.github.com/PatWie/ a743d2349f388b27ed3ef783919c3882 이 스크립트를 실행하면 경계 상자가있는 이미지가 제공됩니다. – Patwie

답변

0

데이터 집합을로드하려면 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.githttps://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) 
+0

감사합니다. 나는 그들 모두를했으나 전체 대본에서 나는 약간 혼란 스러웠다. 내 잘못은 뭐니? 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