def plot_class_prediction(subm_name, image_id, c):
    subm = pd.read_csv('subm/%s.csv.gz' % subm_name)
    image = load_image(image_id)

    xmax = grid_sizes.loc[image_id, 'xmax']
    ymin = grid_sizes.loc[image_id, 'ymin']

    multi_poly = shapely.wkt.loads(
        subm.loc[(subm['ClassType'] == c + 1) & (subm['ImageId'] == image_id),
                 'MultipolygonWKT'].values[0])

    plt.title("%s - class %d" % (subm_name, c))
    plt.imshow(poly_to_mask(multi_poly, image.shape[1:], [xmax, ymin]),
               cmap='hot')
    plt.show()
def plot_predictions(subm_name, image_id):
    subm = pd.read_csv('subm/%s.csv.gz' % subm_name)
    image = load_image(image_id)

    xmax = grid_sizes.loc[image_id, 'xmax']
    ymin = grid_sizes.loc[image_id, 'ymin']

    f, ax = plt.subplots(2, 5, sharex='col', sharey='row')

    ax[0][0].imshow(np.rollaxis(image, 0, 3))

    for c in xrange(9):
        multi_poly = shapely.wkt.loads(subm.loc[(subm['ClassType'] == c + 1) &
                                                (subm['ImageId'] == image_id),
                                                'MultipolygonWKT'].values[0])

        ax[(c + 1) // 5][(c + 1) % 5].imshow(poly_to_mask(
            multi_poly, image.shape[1:], [xmax, ymin]),
                                             cmap='hot')

    plt.tight_layout()
    plt.show()
def plot_prediction(image_id, pred_id, cls=0):
    image = np.load('cache/images/%s.npy' % image_id)
    pred = np.load('cache/preds/%s.npy' % image_id)

    xymax = (grid_sizes.loc[image_id, 'xmax'], grid_sizes.loc[image_id,
                                                              'ymin'])

    plt.figure()

    ax1 = plt.subplot(131)
    ax1.set_title('image_id:%s' % image_id)
    ax1.imshow(image[1, :, :], cmap=plt.get_cmap('gray'))
    ax2 = plt.subplot(132)
    ax2.set_title('predict bldg pixels')
    ax2.imshow(pred[cls], cmap=plt.get_cmap('hot'))
    ax3 = plt.subplot(133)
    ax3.set_title('predict bldg polygones')
    ax3.imshow(poly_to_mask(mask_to_poly(pred[cls], xymax), image.shape[1:],
                            xymax),
               cmap=plt.get_cmap('hot'))

    plt.title("%s - class %d" % (pred_id, cls))
    plt.show()
Ejemplo n.º 4
0
import shapely.wkt as wkt

import cv2

print "Preparing train image masks..."

# Prepare location
for image_id, image_cls_wkt in train_wkt.groupby('image_id'):
    print "  Processing %s..." % image_id

    xmax = grid_sizes.loc[image_id, 'xmax']
    ymin = grid_sizes.loc[image_id, 'ymin']

    meta = load_pickle('cache/meta/%s.pickle' % image_id)

    mask = np.zeros((n_classes, meta['shape'][1], meta['shape'][2]),
                    dtype=np.float32)

    for tp in image_cls_wkt.itertuples():
        poly = wkt.loads(tp.multi_poly_wkt)
        h, w = meta['shape'][1:]

        mask[tp.cls - 1] = np.clip(
            cv2.resize(poly_to_mask(poly, (w * 4, h * 4),
                                    [xmax, ymin]).astype(np.float32), (w, h),
                       interpolation=cv2.INTER_AREA), 0, 1)

    np.save('cache/masks/%s.npy' % image_id, mask)

print "Done."
for image_id in sorted(subm['ImageId'].unique()):
    print "%s..." % image_id

    xymax = (grid_sizes.loc[image_id, 'xmax'], grid_sizes.loc[image_id, 'ymin'])

    subm.loc[subm['ImageId'] == image_id, 'MultipolygonWKT'] = 'MULTIPOLYGON EMPTY'

    for cls in classes:
        polys = [shapely.wkt.loads(s.loc[(s['ImageId'] == image_id) & (s['ClassType'] == cls), 'MultipolygonWKT'].iloc[0]) for s in subms]

        if pre_buffer_size is not None:
            polys = [p.buffer(pre_buffer_size) for p in polys]

        if pixelize:
            mask = sum(poly_to_mask(p, (18000, 18000), xymax) for p in polys) > len(polys) * 0.5

            if 'mask_postprocess' in preset:
                mask = preset['mask_postprocess'](mask)

            res = mask_to_poly(mask, xymax, min_area=1.0, threshold=1.0)
        else:
            try:
                poly_parts = []

                for i in xrange(len(polys)):
                    for j in xrange(i+1, len(polys)):
                        poly_parts.append(polys[i].intersection(polys[j]))

                res = unary_union(poly_parts)
            except:
Ejemplo n.º 6
0
    xymax = (grid_sizes.loc[image_id, 'xmax'], grid_sizes.loc[image_id,
                                                              'ymin'])

    subm.loc[subm['ImageId'] == image_id,
             'MultipolygonWKT'] = 'MULTIPOLYGON EMPTY'

    for cls in classes:
        polys = [
            shapely.wkt.loads(
                s.loc[(s['ImageId'] == image_id) & (s['ClassType'] == cls),
                      'MultipolygonWKT'].iloc[0]) for s in subms
        ]

        if preset.get('pixelize', False):
            mask = sum(poly_to_mask(p, (9000, 9000), xymax)
                       for p in polys) > 0.5

            if 'mask_postprocess' in preset:
                mask = preset['mask_postprocess'](mask)

            res = mask_to_poly(mask, xymax, min_area=1.0, threshold=1.0)
        else:
            try:
                res = unary_union(polys)
            except:
                print "Error, using first poly"
                res = polys[0]

        res = res.buffer(0)
Ejemplo n.º 7
0
    for image_id in full_train_image_ids:
        start_time = time.time()

        sys.stdout.write("  Processing %s... " % image_id)
        sys.stdout.flush()

        pred = predict_mask(image_id)
        xymax = (grid_sizes.loc[image_id, 'xmax'], grid_sizes.loc[image_id,
                                                                  'ymin'])

        for ci, cls in enumerate(classes):
            true_poly = shapely.wkt.loads(
                train_wkt.loc[(train_wkt['image_id'] == image_id) &
                              (train_wkt['cls'] == cls + 1),
                              'multi_poly_wkt'].iloc[0])
            true_mask = poly_to_mask(true_poly, pred.shape[1:], xymax)

            pred_mask = pred[ci]

            cls_pixel_inter = (pred_mask & true_mask).sum()
            cls_pixel_union = (pred_mask | true_mask).sum()

            pixel_intersections[cls] += cls_pixel_inter
            pixel_unions[cls] += cls_pixel_union

            pred_poly = mask_to_poly(pred_mask, xymax, **cls_opts.get(cls, {}))

            poly_intersections[cls] += pred_poly.intersection(true_poly).area
            poly_unions[cls] += pred_poly.union(true_poly).area

        print "Done in %d seconds" % (time.time() - start_time)