示例#1
0
def generate_data(data_path,
                  out_path,
                  ignore_sample_path=None,
                  benchmark='cv',
                  dataset='test'):
    if ignore_sample_path != None:
        with open(ignore_sample_path, 'r') as f:
            ignore_samples = [line.strip() + '.skeleton' for line in f.readlines()]
    else:
        ignore_samples = []
    sample_name = []
    sample_label = []
    for filename in os.listdir(data_path):
        if filename in ignore_samples:
            continue
        action_class = int(filename[filename.find('A') + 1:filename.find('A') + 4])
        subject_id = int(filename[filename.find('P') + 1:filename.find('P') + 4])
        camera_id = int(filename[filename.find('C') + 1:filename.find('C') + 4])
        if benchmark == 'cv':
            training = (camera_id in training_cameras)
        elif benchmark == 'cs':
            training = (subject_id in training_subjects)
        else:
            raise ValueError()
        if dataset == 'train':
            training = training
        elif dataset == 'test':
            training = not training
        else:
            raise ValueError()
        if training:
            sample_name.append(filename)
            sample_label.append(action_class - 1)
    if dataset == 'train':
        sample_name, val_name, sample_label, val_label = train_test_split(sample_name, sample_label, test_size=0.05,
                                                                          random_state=10000)
        with open('{}/val_label.pkl'.format(out_path), 'wb') as f:
            pickle.dump((val_name, list(val_label)), f)
        f_data = open_memmap('{}/val_data.npy'.format(out_path),
                             dtype='float32',
                             mode='w+',
                             shape=(len(val_label), 3, max_frame, num_joint, max_body))
        for idx, s in enumerate(val_name):
            print_output(idx * 1.0 / len(val_label), '({:>5}/{:<5}) Processing {:>5}-{:<5} data: '
                         .format(idx + 1, len(val_name), benchmark, 'val'))
            data = read_xyz(os.path.join(data_path, s), max_body=max_body, num_joint=num_joint)
            f_data[idx, :, 0:data.shape[1], :, :] = data
    with open('{}/{}_label.pkl'.format(out_path, dataset), 'wb') as f:
        pickle.dump((sample_name, list(sample_label)), f)
    f_data = open_memmap('{}/{}_data.npy'.format(out_path, dataset),
                         dtype='float32',
                         mode='w+',
                         shape=(len(sample_label), 3, max_frame, num_joint, max_body))
    for idx, s in enumerate(sample_name):
        print_output(idx * 1.0 / len(sample_label), '({:>5}/{:<5}) Processing {:>5}-{:<5} data: '
                     .format(idx + 1, len(sample_name), benchmark, dataset))
        data = read_xyz(os.path.join(data_path, s), max_body=max_body, num_joint=num_joint)
        f_data[idx, :, 0:data.shape[1], :, :] = data
    sys.stdout.write('\n')
示例#2
0
def gendata(data_path,
            out_path,
            ignored_sample_path=None,
            benchmark='xview',
            part='eval'):
    if ignored_sample_path != None:
        with open(ignored_sample_path, 'r') as f:
            ignored_samples = [
                line.strip() + '.skeleton' for line in f.readlines()
            ]
    else:
        ignored_samples = []
    sample_name = []
    sample_label = []
    for filename in os.listdir(data_path):
        if filename in ignored_samples:
            continue
        action_class = int(
            filename[filename.find('A') + 1:filename.find('A') + 4])
        subject_id = int(
            filename[filename.find('P') + 1:filename.find('P') + 4])
        camera_id = int(
            filename[filename.find('C') + 1:filename.find('C') + 4])

        if benchmark == 'xview':
            istraining = (camera_id in training_cameras)
        elif benchmark == 'xsub':
            istraining = (subject_id in training_subjects)
        else:
            raise ValueError()

        if part == 'train':
            issample = istraining
        elif part == 'val':
            issample = not (istraining)
        else:
            raise ValueError()

        if issample:
            sample_name.append(filename)
            sample_label.append(action_class - 1)

    with open('{}/{}_label.pkl'.format(out_path, part), 'wb') as f:
        pickle.dump((sample_name, list(sample_label)), f)
    # np.save('{}/{}_label.npy'.format(out_path, part), sample_label)

    fp = open_memmap(
        '{}/{}_data.npy'.format(out_path, part),
        dtype='float32',
        mode='w+',
        shape=(len(sample_label), 3, max_frame, num_joint, max_body))

    for i, s in enumerate(sample_name):
        print_toolbar(i * 1.0 / len(sample_label),
                      '({:>5}/{:<5}) Processing {:>5}-{:<5} data: '.format(
                          i + 1, len(sample_name), benchmark, part))
        data = read_xyz(
            os.path.join(data_path, s), max_body=max_body, num_joint=num_joint)
        fp[i, :, 0:data.shape[1], :, :] = data
    end_toolbar()
示例#3
0
def gendata(data_path,
            out_path,
            ignored_sample_path=None,
            benchmark='xview',
            part='eval'):
    if ignored_sample_path != None:
        with open(ignored_sample_path, 'r') as f:
            ignored_samples = [
                line.strip() + '.skeleton' for line in f.readlines()
            ]
    else:
        ignored_samples = [] 
    sample_name = []
    sample_label = []
    for filename in os.listdir(data_path):
        if filename in ignored_samples:
            continue
        action_class = int(
            filename[filename.find('A') + 1:filename.find('A') + 4])
        subject_id = int(
            filename[filename.find('P') + 1:filename.find('P') + 4])
        camera_id = int(
            filename[filename.find('C') + 1:filename.find('C') + 4])

        if benchmark == 'xview':
            istraining = (camera_id in training_cameras)
        elif benchmark == 'xsub':
            istraining = (subject_id in training_subjects)
        else:
            raise ValueError()

        if part == 'train':
            issample = istraining
        elif part == 'val':
            issample = not (istraining)
        else:
            raise ValueError()

        if issample:
            sample_name.append(filename)
            sample_label.append(action_class - 1)

    with open('{}/{}_label.pkl'.format(out_path, part), 'w') as f:
        pickle.dump((sample_name,list(sample_label)), f)
    # np.save('{}/{}_label.npy'.format(out_path, part), sample_label)

    fp = open_memmap(
        '{}/{}_data.npy'.format(out_path, part),
        dtype='float32',
        mode='w+',
        shape=(len(sample_label), 3, max_frame, num_joint, max_body))

    for i, s in enumerate(sample_name):
        print_toolbar(i * 1.0 / len(sample_label),
                      '({:>5}/{:<5}) Processing {:>5}-{:<5} data: '.format(
                          i + 1, len(sample_name), benchmark, part))
        data = read_xyz(
            os.path.join(data_path, s), max_body=max_body, num_joint=num_joint)
        fp[i, :, 0:data.shape[1], :, :] = data
    end_toolbar()
def make_data_ntu(origin_path, output_path, benchmark, part):
    # ignore sample
    if ignore_sample_path != None:
        with open(ignore_sample_path, 'r') as f:
            ignored_sample = [
                line.strip() + '.skeleton' for line in f.readlines()
            ]
    else:
        ignored_sample = []

    sample_name = []
    sample_label = []

    # start
    for filename in os.listdir(origin_path):
        # pass: ignore sample
        if filename in ignored_sample:
            continue

        action_class = int(filename[filename.find('A') + 1:filename.find('A') +
                                    4])
        subject_id = int(filename[filename.find('P') + 1:filename.find('P') +
                                  4])
        camera_id = int(filename[filename.find('C') + 1:filename.find('C') +
                                 4])

        # xsub or xview
        if benchmark == 'xview':
            istraining = (camera_id in training_cameras)
        elif benchmark == 'xsub':
            istraining = (subject_id in training_subjects)
        else:
            raise ValueError()

        # train or test
        if part == 'train':
            issample = istraining
        elif part == 'test':
            issample = not (istraining)
        else:
            raise ValueError()

        if issample:
            # storage: data name
            sample_name.append(filename)
            # storage: label
            sample_label.append(action_class - 1)

    # store: label
    with open('{}/{}_label.pkl'.format(output_path, part), 'wb') as f:
        pickle.dump((sample_name, list(sample_label)), f)

    # store: data
    fp = open_memmap('{}/{}_joint.npy'.format(output_path, part),
                     dtype='float32',
                     mode='w+',
                     shape=(len(sample_label), 3, max_frame, num_joint,
                            max_body))
    for i, s in enumerate(sample_name):
        print_toolbar(
            i * 1.0 / len(sample_label),
            '({:>5}/{:<5}) Writing {:>5}-{:<5} data: '.format(
                i + 1, len(sample_name), benchmark, part))
        data = read_xyz(os.path.join(origin_path, s),
                        max_body=max_body,
                        num_joint=num_joint)
        fp[i, :, 0:data.shape[1], :, :] = data
    end_toolbar()
def gendata(data_path,
            out_path,
            ignored_sample_path=None,
            benchmark='xview',
            part='eval'):
    if ignored_sample_path != None:
        with open(ignored_sample_path, 'r') as f:
            ignored_samples = [
                line.strip() + '.skeleton' for line in f.readlines()
            ]
    else:
        ignored_samples = []
    sample_name = []
    sample_label = []
    for filename in os.listdir(data_path):
        if filename in ignored_samples:
            continue
        action_class = int(filename[filename.find('A') + 1:filename.find('A') +
                                    4])
        subject_id = int(filename[filename.find('P') + 1:filename.find('P') +
                                  4])
        camera_id = int(filename[filename.find('C') + 1:filename.find('C') +
                                 4])

        if benchmark == 'xview':
            istraining = (camera_id in training_cameras)
        elif benchmark == 'xsub':
            istraining = (subject_id in training_subjects)
        else:
            raise ValueError()

        if part == 'train':
            issample = istraining
        elif part == 'val':
            issample = not (istraining)
        else:
            raise ValueError()

    ####OVERIDING FOR ZERO SHOT
        if part == 'train' and action_class in unseen_classes:
            issample = False

        if part == 'val' and action_class in unseen_classes:
            issample = True


###################TODO: SO in our train seen classes split we only include this 2 subjects and cameras and only seen classes, but
########for test data we include the remaining classes of all cameras and subjects irrespective
#### SO DURING TRAINING IF YOU FIND THAT UNSEEN CLASS JUST NEGLECT IT DON"T EVEN LOOK AT CAMERAS AND SUBJECTS, AND DURING TEST DATA, IF YOU
#### FIND THE UNSEEN CLASSES INCLUDE THEM NO MATTER WHAT THERE CAMERA AND SUBJECT ID IS ......

        if issample:
            sample_name.append(filename)
            sample_label.append(action_class - 1)

    with open('{}/{}_label.pkl'.format(out_path, part), 'wb') as f:
        pickle.dump((sample_name, list(sample_label)), f)
    # np.save('{}/{}_label.npy'.format(out_path, part), sample_label)

    fp = open_memmap('{}/{}_data.npy'.format(out_path, part),
                     dtype='float32',
                     mode='w+',
                     shape=(len(sample_label), 3, max_frame, num_joint,
                            max_body))

    for i, s in enumerate(sample_name):
        print_toolbar(
            i * 1.0 / len(sample_label),
            '({:>5}/{:<5}) Processing {:>5}-{:<5} data: '.format(
                i + 1, len(sample_name), benchmark, part))
        data = read_xyz(os.path.join(data_path, s),
                        max_body=max_body,
                        num_joint=num_joint)
        fp[i, :, 0:data.shape[1], :, :] = data
    end_toolbar()
def gendata(data_path,
            out_path,
            ignored_sample_path=None,
            benchmark='xview',
            part='eval'):
    if ignored_sample_path != None:
        with open(ignored_sample_path, 'r') as f:
            ignored_samples = [
                line.strip() + '.skeleton' for line in f.readlines()
            ]
    else:
        ignored_samples = []
    sample_name = []
    sample_label = []

    pdb.set_trace()

    for filename in os.listdir(data_path):
        if filename in ignored_samples:
            continue
        action_class = int(filename[filename.find('A') + 1:filename.find('A') +
                                    4])
        subject_id = int(filename[filename.find('P') + 1:filename.find('P') +
                                  4])
        camera_id = int(filename[filename.find('C') + 1:filename.find('C') +
                                 4])

        if benchmark == 'xview':
            istraining = (camera_id in training_cameras)
        elif benchmark == 'xsub':
            istraining = (subject_id in training_subjects)
        else:
            raise ValueError()
        ###CHECKS IF THE FILE IS PART OF TRANING DATA OR TEST DATA


###################TODO: SO in our train seen classes split we only include this 2 subjects and cameras and only seen classes, but
########for test data we include the remaining classes of all cameras and subjects irrespective
#### SO DURING TRAINING IF YOU FIND THAT UNSEEN CLASS JUST NEGLECT IT DON"T EVEN LOOK AT CAMERAS AND SUBJECTS, AND DURING TEST DATA, IF YOU
#### FIND THE UNSEEN CLASSES INCLUDE THEM NO MATTER WHAT THERE CAMERA AND SUBJECT ID IS ......

######TODO IMP.....WE NEED TO ENSURE THIS HAPPENS AND WE STORE IN THE SAME ORDER FOR FEATURES AS WELL
#### THIS IS NOT AN ISSUE BECAUSE FOR FINDING FEATURES IT READS THE FILE NAME STORED IN THE LABELS ACCORDINGLY

        if part == 'train':
            issample = istraining
        elif part == 'val':
            issample = not (istraining)
        else:
            raise ValueError()

        if issample:
            sample_name.append(filename)
            sample_label.append(action_class - 1)

        ####SUBTRACTING -1 from the action class

    ####TILL NOW U READ ALL THE ACTION LABELS APPEND THE FILE NAME AND THE ACTION IN A LIST AND SAVE IT AS A PICKE FILE

    with open('{}/{}_label.pkl'.format(out_path, part), 'wb') as f:
        pickle.dump((sample_name, list(sample_label)), f)
    # np.save('{}/{}_label.npy'.format(out_path, part), sample_label)

    pdb.set_trace()

    fp = open_memmap('{}/{}_data.npy'.format(out_path, part),
                     dtype='float32',
                     mode='w+',
                     shape=(len(sample_label), 3, max_frame, num_joint,
                            max_body))

    ###fp is just a numpy array

    for i, s in enumerate(sample_name):
        print_toolbar(
            i * 1.0 / len(sample_label),
            '({:>5}/{:<5}) Processing {:>5}-{:<5} data: '.format(
                i + 1, len(sample_name), benchmark, part))
        data = read_xyz(os.path.join(data_path, s),
                        max_body=max_body,
                        num_joint=num_joint)

        ####data.shape = (3, 178, 25, 2)
        ###so if there frames less then 300, then the remaining ones are assigned 0
        fp[i, :, 0:data.shape[1], :, :] = data
    end_toolbar()