Exemple #1
0
def gendefault(annot, idx, img_in, chg=None):
    # Initialize sample parameters
    c = annot['center'][idx]
    s = annot['scale'][idx]
    flip, r = False, 0
    flip_idxs = ref.flipped_parts[annot.attrs['name']]

    # Handle data augmentation
    if chg is not None:
        # Flipping
        if 'flip' in chg:
            if np.random.rand() < .5:
                flip = True
        # Scaling
        if 'scale' in chg:
            s *= min(
                1 + chg['scale'],
                max(1 - chg['scale'], (np.random.randn() * chg['scale']) + 1))
        # Rotation
        if 'rotate' in chg:
            if chg['rotate'] == -1:
                # Force vertical orientation
                r = annot['torsoangle'][idx]
            else:
                r = np.random.randint(-chg['rotate'], chg['rotate'] + 1)
        # Translation
        if 'translate' in chg:
            for i in xrange(2):
                offset = np.random.randint(-chg['translate'],
                                           chg['translate'] + 1)
                c[i] += offset

    # Generate input image
    cropped = img.crop(img_in, c, s, ref.in_res, rot=r)
    inp = np.zeros((3, ref.in_res[0], ref.in_res[1]))
    for i in xrange(3):
        inp[i, :, :] = cropped[:, :, i]

    # Generate part heatmap output
    num_parts = annot['part'].shape[1]
    out = np.zeros((num_parts, ref.out_res[0], ref.out_res[1]))
    for i in xrange(num_parts):
        pt = annot['part'][idx, i]
        if pt[0] > 0:
            draw.gaussian(out[i], img.transform(pt, c, s, ref.out_res, rot=r),
                          2)

    # Flip sample
    if flip:
        inp = np.array([np.fliplr(inp[i]) for i in xrange(len(inp))])
        out = np.array(
            [np.fliplr(out[flip_idxs[i]]) for i in xrange(len(out))])

    return inp, out
Exemple #2
0
def gendefault(annot, idx, img_in, chg=None):
    # Initialize sample parameters
    c = annot['center'][idx]
    s = annot['scale'][idx]
    flip, r = False, 0
    flip_idxs = ref.flipped_parts[annot.attrs['name']]

    # Handle data augmentation
    if chg is not None:
        # Flipping
        if 'flip' in chg:
            if np.random.rand() < .5:
                flip = True
        # Scaling
        if 'scale' in chg:
            s *= min(1+chg['scale'], max(1-chg['scale'], (np.random.randn() * chg['scale']) + 1))
        # Rotation
        if 'rotate' in chg:
            if chg['rotate'] == -1:
                # Force vertical orientation
                r = annot['torsoangle'][idx]
            else:
                r = np.random.randint(-chg['rotate'], chg['rotate'] + 1)
        # Translation
        if 'translate' in chg:
            for i in xrange(2):
                offset = np.random.randint(-chg['translate'], chg['translate'] + 1)
                c[i] += offset

    # Generate input image
    cropped = img.crop(img_in, c, s, ref.in_res, rot=r)
    inp = np.zeros((3, ref.in_res[0], ref.in_res[1]))
    for i in xrange(3):
        inp[i, :, :] = cropped[:, :, i]

    # Generate part heatmap output
    num_parts = annot['part'].shape[1]
    out = np.zeros((num_parts, ref.out_res[0], ref.out_res[1]))
    for i in xrange(num_parts):
        pt = annot['part'][idx,i]
        if pt[0] > 0:
            draw.gaussian(out[i], img.transform(pt, c, s, ref.out_res, rot=r), 2)

    # Flip sample
    if flip:
        inp = np.array([np.fliplr(inp[i]) for i in xrange(len(inp))])
        out = np.array([np.fliplr(out[flip_idxs[i]]) for i in xrange(len(out))])

    return inp,out
Exemple #3
0
def gendetect(annot, idx, img_in, chg=None):
    img_c = [img_in.shape[1] / 2, img_in.shape[0] / 2]
    img_s = max(img_in.shape) / 200
    flip, r = False, 0
    idxs = np.where(annot['index'][:] == annot['index'][idx])[0]

    # Handle data augmentation
    if chg is not None:
        # Flipping
        if 'flip' in chg:
            if np.random.rand() < .5:
                flip = True
        # Scaling
        if 'scale' in chg:
            img_s *= min(
                1 + chg['scale'],
                max(1 - chg['scale'], (np.random.randn() * chg['scale']) + 1))
        # Rotation
        # if 'rotate' in chg:
        #     r = np.random.randint(-chg['rotate'], chg['rotate'] + 1)
        # Translation
        if 'translate' in chg:
            for i in xrange(2):
                offset = np.random.randint(-chg['translate'],
                                           chg['translate'] + 1)
                c[i] += offset

    img_c[0] += img_s * np.random.randint(-10, 10)
    img_c[1] += img_s * np.random.randint(-10, 10)
    cropped = img.crop(img_in, img_c, img_s, ref.in_res)
    inp = np.zeros((3, ref.in_res[0], ref.in_res[1]))
    for i in xrange(3):
        inp[i, :, :] = cropped[:, :, i]

    out = np.zeros((2, ref.out_res[0], ref.out_res[1]))
    for i in idxs:
        pt = img.transform(annot['center'][i], img_c, img_s, ref.out_res)
        draw.gaussian(out[0], pt, 1)
        out[1, pt[1] - 1:pt[1] + 1,
            pt[0] - 1:pt[0] + 1] = annot['scale'][i] / img_s

    if flip:
        inp = np.array([np.fliplr(inp[i]) for i in xrange(len(inp))])
        out = np.array([np.fliplr(out[i]) for i in xrange(len(out))])

    return inp, out
Exemple #4
0
def transformpreds(dataset, preds, res, rot=False, dotrain=False):
    # Predictions from torch will need to go through a coordinate transformation
    new_preds = np.zeros(preds.shape)
    idx_ref = np.arange(len(new_preds))
    if dotrain:
        idx_ref = np.load(get_path(dataset,'train_idxs'))
        dataset += '_train'
    for i in xrange(preds.shape[0]):
        idx = idx_ref[i]
        c = annot[dataset]['center'][idx]
        s = annot[dataset]['scale'][idx]
        if rot:
            r = annot[dataset]['torsoangle'][idx]
        else:
            r = 0
        for j in xrange(preds.shape[1]):
            new_preds[i,j] = img.transform(preds[i,j]-.5, c, s, res, invert=1, rot=r)
    return new_preds
Exemple #5
0
def gendetect(annot, idx, img_in, chg=None):
    img_c = [img_in.shape[1]/2, img_in.shape[0]/2]
    img_s = max(img_in.shape) / 200
    flip, r = False, 0
    idxs = np.where(annot['index'][:] == annot['index'][idx])[0]

    # Handle data augmentation
    if chg is not None:
        # Flipping
        if 'flip' in chg:
            if np.random.rand() < .5:
                flip = True
        # Scaling
        if 'scale' in chg:
            img_s *= min(1+chg['scale'], max(1-chg['scale'], (np.random.randn() * chg['scale']) + 1))
        # Rotation
        # if 'rotate' in chg:
        #     r = np.random.randint(-chg['rotate'], chg['rotate'] + 1)
        # Translation
        if 'translate' in chg:
            for i in xrange(2):
                offset = np.random.randint(-chg['translate'], chg['translate'] + 1)
                c[i] += offset

    img_c[0] += img_s * np.random.randint(-10,10)
    img_c[1] += img_s * np.random.randint(-10,10)
    cropped = img.crop(img_in, img_c, img_s, ref.in_res)
    inp = np.zeros((3, ref.in_res[0], ref.in_res[1]))
    for i in xrange(3): inp[i, :, :] = cropped[:, :, i]

    out = np.zeros((2, ref.out_res[0], ref.out_res[1]))
    for i in idxs:
        pt = img.transform(annot['center'][i], img_c, img_s, ref.out_res)
        draw.gaussian(out[0], pt, 1)
        out[1,pt[1]-1:pt[1]+1,pt[0]-1:pt[0]+1] = annot['scale'][i] / img_s

    if flip:
        inp = np.array([np.fliplr(inp[i]) for i in xrange(len(inp))])
        out = np.array([np.fliplr(out[i]) for i in xrange(len(out))])

    return inp,out
Exemple #6
0
def transformpreds(dataset, preds, res, rot=False, dotrain=False):
    # Predictions from torch will need to go through a coordinate transformation
    new_preds = np.zeros(preds.shape)
    idx_ref = np.arange(len(new_preds))
    if dotrain:
        idx_ref = np.load(get_path(dataset, 'train_idxs'))
        dataset += '_train'
    for i in xrange(preds.shape[0]):
        idx = idx_ref[i]
        c = annot[dataset]['center'][idx]
        s = annot[dataset]['scale'][idx]
        if rot:
            r = annot[dataset]['torsoangle'][idx]
        else:
            r = 0
        for j in xrange(preds.shape[1]):
            new_preds[i, j] = img.transform(preds[i, j] - .5,
                                            c,
                                            s,
                                            res,
                                            invert=1,
                                            rot=r)
    return new_preds