Esempio n. 1
0
    def test_img_one(self):
        bp = os.path.join(os.path.dirname(__file__), 'test-images')
        imgs = [os.path.join(bp, x) for x in ["eiffel1.png"]]

        ie = ImageEmbedder()
        ie.load_model(model_name="mobilenet", depth=-2)
        embed = ie.process_images(imgs, pooling="flat")
        embed_one = ie.process_images(imgs[0], pooling="flat")
        sim = np.mean(np.abs(embed[0, :] - embed_one[0, :]))

        self.assertLess(sim, 0.000001)
Esempio n. 2
0
    def test_depth_positive(self):
        bp = os.path.join(os.path.dirname(__file__), 'test-images')
        imgs = [os.path.join(bp, x) for x in ["eiffel1.png"]]

        ie = ImageEmbedder()
        ie.load_model(model_name="mobilenet", depth=10)
        embed_pos = ie.process_images(imgs)
        ie.load_model(model_name="mobilenet", depth=-45)
        embed_neg = ie.process_images(imgs)

        sim = np.sum(np.abs(embed_pos[0, :] - embed_neg[0, :]))

        self.assertLess(sim, 0.000001)
Esempio n. 3
0
    def test_pooling(self):
        bp = os.path.join(os.path.dirname(__file__), 'test-images')
        imgs = [os.path.join(bp, x) for x in ["eiffel1.png"]]

        ie = ImageEmbedder()
        ie.load_model(model_name="mobilenet", depth=2)
        embed_none = ie.process_images(imgs, pooling="none")
        embed_max = ie.process_images(imgs, pooling="max")
        embed_avg = ie.process_images(imgs, pooling="avg")
        embed_flat = ie.process_images(imgs, pooling="flat")

        self.assertEqual(embed_none.shape, (1, 112, 112, 32))
        self.assertEqual(embed_max.shape, (1, 112 * 112))
        self.assertEqual(embed_avg.shape, (1, 112 * 112))
        self.assertEqual(embed_flat.shape, (1, 112 * 112 * 32))
        self.assertGreater(np.mean(embed_max), np.mean(embed_avg))
Esempio n. 4
0
    def test_img_small(self):
        bp = os.path.join(os.path.dirname(__file__), 'test-images')
        imgs = [
            os.path.join(bp, x)
            for x in ["eiffel1.png", "eiffel1-small.jpg", "eiffel1-small.png"]
        ]

        ie = ImageEmbedder()
        ie.load_model(model_name="mobilenet", depth=-2)
        embed = ie.process_images(imgs, pooling="flat")
        sim1 = np.mean(np.abs(embed[0, :] - embed[1, :]))
        sim2 = np.mean(np.abs(embed[0, :] - embed[2, :]))
        sim = (sim1 + sim2) / 2

        self.assertLess(sim, 2)
Esempio n. 5
0
def main(model_name, depth, output):
    from image_embed import ImageEmbedder

    if os.path.exists(output):
        msg = "Output location '{0:s}' already exists.".format(output)
        raise ValueError(msg)

    input_dir = "~/local/cv_tutorial/images/wikiart"
    input_dir = os.path.expanduser(input_dir)
    input_dir = os.path.abspath(input_dir)

    fs = [
        y for x in os.walk(input_dir)
        for y in glob(os.path.join(x[0], '*.jpg'))
    ]

    ie = ImageEmbedder()
    ie.load_model(model_name=model_name, depth=depth)

    ld = len([x.name for x in ie.nn.layers if x.count_params() > 0])
    sz = np.prod(ie.nn.layers[-1].output_shape[1:])

    click.echo("")
    click.echo("Loaded model.       : {0:s}".format(model_name))
    click.echo("Depth parameters    : {0:d}".format(depth))
    click.echo("Total depth         : {0:d}".format(ld))
    click.echo("Output size         : {0:d}".format(sz))
    click.echo("")
    click.echo("Input location      : {0:s}".format(input_dir))
    click.echo("Num. input images   : {0:d}".format(len(fs)))
    click.echo("")

    embed = ie.process_images(fs)

    ue = umap.UMAP(n_neighbors=10, min_dist=0.1).fit_transform(embed)

    df = pd.DataFrame(ue)
    df.columns = ['umap{0:d}'.format(x) for x in range(df.shape[1])]
    df = pd.concat([pd.DataFrame({"file": fs}), df], axis=1)
    df.to_csv(output, index=False)

    click.echo("\n\n")