def test_img_diff(self): bp = os.path.join(os.path.dirname(__file__), 'test-images') imgs = [os.path.join(bp, x) for x in ["eiffel1.png", "dog.jpg"]] ie = ImageEmbedder() ie.load_model(model_name="mobilenet", depth=-2) embed = ie.process_images(imgs, pooling="flat") sim = np.mean(np.abs(embed[0, :] - embed[1, :])) self.assertGreater(sim, 2)
def test_img_bw_alpha(self): bp = os.path.join(os.path.dirname(__file__), 'test-images') imgs = [ os.path.join(bp, x) for x in ["eiffel1-bw.png", "eiffel1-bw-alpha.png"] ] ie = ImageEmbedder() ie.load_model(model_name="mobilenet", depth=-2) embed = ie.process_images(imgs, pooling="flat") sim = np.mean(np.abs(embed[0, :] - embed[1, :])) self.assertLess(sim, 0.0001)
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")
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)
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))