def extract(model_path, gpu, out, split, in_episodes, out_episodes, hidden_channels): """Extract hidden features for each data in dataset""" import chainer import chainervr import os import numpy as np import pandas as pd assert in_episodes == out_episodes model = chainervr.models.DeepEpisodicMemory( hidden_channels=hidden_channels, num_episodes=in_episodes) model.reset_state() if gpu >= 0: P.info("Using GPU %d" % gpu) chainer.cuda.get_device_from_id(gpu).use() model.to_gpu() else: P.info("Using CPU") chainer.serializers.load_npz(model_path, model) P.info("Loading dataset") dataset = chainervr.datasets.MovingMnistDataset(split=split, channels_num=3) os.makedirs(out, exist_ok=True) chainer.config.train = False P.info("Forwarding") xp = model.xp features = [] with click.progressbar(dataset, label="Extracting") as it: for data in it: in_data, next_data = data[:in_episodes], data[ in_episodes:in_episodes + out_episodes] in_data, next_data = in_data[np.newaxis, :], next_data[ np.newaxis, :] in_data = chainer.Variable(in_data) if gpu >= 0: with chainer.cuda.get_device_from_id(gpu): in_data.to_gpu() _, _, hidden = model(in_data) if gpu >= 0: hidden.to_cpu() feature = hidden.array.reshape(-1) features.append(feature) features = np.asarray(features, dtype=features[0].dtype) save_fn = os.path.join(out, "features.npz") np.savez(save_fn, features=features) P.info("Extracted features into %s" % save_fn)
def predict(model_path, gpu, out, split, hidden_channels, in_episodes, out_episodes, start_from, images_num): """Generate image for visualization using trained model""" assert in_episodes == out_episodes P.info("Loading model from %s" % model_path) model = chainervr.models.DeepEpisodicMemory( hidden_channels=hidden_channels, num_episodes=in_episodes) model.reset_state() P.info("Loading dataset") dataset = chainervr.datasets.MovingMnistDataset(split=split, channels_num=3) P.predict(model=model, model_path=model_path, dataset=dataset, gpu=gpu, out=out, in_episodes=in_episodes, out_episodes=out_episodes, start_from=start_from, images_num=images_num)
def predict(model_path, gpu, out, split, disable_predict, in_episodes, out_episodes, start_from, images_num): P.info("Loading model from %s" % model_path) model = chainervr.models.ConvLSTM( n_channels=1, patch_size=(64, 64), predict=not disable_predict, in_episodes=in_episodes, out_episodes=out_episodes) model.reset_state() P.info("Loading dataset") dataset = chainervr.datasets.MovingMnistDataset( split=split, channels_num=1) P.predict( model=model, model_path=model_path, dataset=dataset, gpu=gpu, out=out, in_episodes=in_episodes, out_episodes=out_episodes, start_from=start_from, images_num=images_num)
def summary(model_dir, gpu, out, split, disable_predict, layers_num, in_episodes, out_episodes, image_num, skip_num): model = chainervr.models.RPLSTM(n_channels=1, patch_size=(64, 64), n_layers=layers_num, predict=not disable_predict, in_episodes=in_episodes, out_episodes=out_episodes) model.reset_state() P.info("Loading dataset") dataset = chainervr.datasets.MovingMnistDataset(split=split, channels_num=1) P.predict_summary(model=model, model_dir=model_dir, dataset=dataset, gpu=gpu, in_episodes=in_episodes, out_episodes=out_episodes, out=out, image_num=image_num, skip_num=skip_num)
def summary(model_dir, gpu, out, split, hidden_channels, in_episodes, out_episodes, image_num): """Generate images for evaluation using each model in directory""" assert in_episodes == out_episodes model = chainervr.models.DeepEpisodicMemory( hidden_channels=hidden_channels, num_episodes=in_episodes) model.reset_state() P.info("Loading dataset") dataset = chainervr.datasets.MovingMnistDataset(split=split, channels_num=3) P.predict_summary(model=model, model_dir=model_dir, dataset=dataset, gpu=gpu, in_episodes=in_episodes, out_episodes=out_episodes, out=out, image_num=image_num)
def detect(model_path, features_path, input_num, top_n, gpu, out, split, in_episodes, out_episodes, hidden_channels): """Extract hidden features for each data in dataset""" import chainer import chainervr import os import numpy as np import pandas as pd from sklearn.metrics.pairwise import cosine_similarity import matplotlib.pyplot as plt assert in_episodes == out_episodes model = chainervr.models.DeepEpisodicMemory( hidden_channels=hidden_channels, num_episodes=in_episodes) model.reset_state() if gpu >= 0: P.info("Using GPU %d" % gpu) chainer.cuda.get_device_from_id(gpu).use() model.to_gpu() else: P.info("Using CPU") chainer.serializers.load_npz(model_path, model) P.info("Loading dataset") dataset = chainervr.datasets.MovingMnistDataset(split=split, channels_num=3) os.makedirs(out, exist_ok=True) chainer.config.train = False P.info("Loading features") features = np.load(features_path)["features"] P.info("Forwarding: %d" % input_num) in_data = dataset[input_num][:in_episodes][np.newaxis, :] in_data = chainer.Variable(in_data) if gpu >= 0: with chainer.cuda.get_device_from_id(gpu): in_data.to_gpu() # forwarding _, _, hidden = model(in_data) if gpu >= 0: hidden.to_cpu() feature = hidden.array.reshape(-1) # compute similarities similarities = cosine_similarity( features, np.broadcast_to(feature, (len(dataset), feature.shape[0]))) similarities = np.diag(similarities) ranking = (-similarities).argsort() rows = top_n + 1 fig = plt.figure(figsize=(3, rows)) ax = fig.add_subplot(rows, 1, 1) ax = vis_episode(in_data, ax=ax, title="Input") for n in range(top_n): index = ranking[n] similarity = similarities[index] comp_data = dataset[index][:in_episodes][np.newaxis, :] ax = fig.add_subplot(rows, 1, n + 2) ax = vis_episode(comp_data, ax=ax, title="Top %d (index: %d, similarity: %f)" % (n + 1, index, similarity)) os.makedirs(out, exist_ok=True) out_path = os.path.join(out, "rank.png") plt.savefig(out_path, bbox_inches="tight", dpi=300) P.info("saved to %s" % out_path) plt.close(fig)