| | import os |
| | import json |
| | import time |
| | import csv |
| | import numpy as np |
| | import sys |
| | import pickle |
| | import base64 |
| | from scipy.special import softmax |
| | vis_path = ".." |
| | sys.path.append(vis_path) |
| | from context import VisContext, ActiveLearningContext, AnormalyContext |
| | from strategy import DeepDebugger, TimeVis, tfDeepVisualInsight, DVIAL, tfDVIDenseAL, TimeVisDenseAL, TrustActiveLearningDVI,DeepVisualInsight, TrustProxyDVI |
| | from singleVis.eval.evaluate import evaluate_isAlign, evaluate_isNearestNeighbour, evaluate_isAlign_single, evaluate_isNearestNeighbour_single |
| | """Interface align""" |
| |
|
| | def initialize_strategy(CONTENT_PATH, VIS_METHOD, SETTING, dense=False): |
| | |
| | with open(os.path.join(CONTENT_PATH, "config.json"), "r") as f: |
| | conf = json.load(f) |
| | |
| | config = conf[VIS_METHOD] |
| |
|
| | |
| | |
| | if SETTING == "normal" or SETTING == "abnormal": |
| |
|
| | if VIS_METHOD == "TrustVisActiveLearning": |
| | strategy = TrustActiveLearningDVI(CONTENT_PATH, config) |
| | elif VIS_METHOD == "TrustVisProxy": |
| | strategy = TrustProxyDVI(CONTENT_PATH, config) |
| | elif VIS_METHOD == "DVI": |
| | strategy = DeepVisualInsight(CONTENT_PATH, config) |
| | elif VIS_METHOD == "TimeVis": |
| | strategy = TimeVis(CONTENT_PATH, config) |
| | elif VIS_METHOD == "DeepDebugger": |
| | strategy = DeepDebugger(CONTENT_PATH, config) |
| | else: |
| | raise NotImplementedError |
| | elif SETTING == "active learning": |
| | if dense: |
| | if VIS_METHOD == "DVI": |
| | strategy = tfDVIDenseAL(CONTENT_PATH, config) |
| | elif VIS_METHOD == "TimeVis": |
| | strategy = TimeVisDenseAL(CONTENT_PATH, config) |
| | else: |
| | raise NotImplementedError |
| | else: |
| | strategy = DVIAL(CONTENT_PATH, config) |
| | |
| | else: |
| | raise NotImplementedError |
| |
|
| | return strategy |
| |
|
| | |
| | def initialize_context(strategy, setting): |
| | if setting == "normal": |
| | context = VisContext(strategy) |
| | elif setting == "active learning": |
| | context = ActiveLearningContext(strategy) |
| | elif setting == "abnormal": |
| | context = AnormalyContext(strategy) |
| | else: |
| | raise NotImplementedError |
| | return context |
| |
|
| | def initialize_backend(CONTENT_PATH, VIS_METHOD, SETTING, dense=False): |
| | """ initialize backend for visualization |
| | |
| | Args: |
| | CONTENT_PATH (str): the directory to training process |
| | VIS_METHOD (str): visualization strategy |
| | "DVI", "TimeVis", "DeepDebugger",... |
| | setting (str): context |
| | "normal", "active learning", "dense al", "abnormal" |
| | |
| | Raises: |
| | NotImplementedError: _description_ |
| | |
| | Returns: |
| | backend: a context with a specific strategy |
| | """ |
| | strategy = initialize_strategy(CONTENT_PATH, VIS_METHOD, SETTING, dense) |
| | context = initialize_context(strategy=strategy, setting=SETTING) |
| | return context |
| |
|
| | def get_train_test_data(context, EPOCH): |
| | |
| | train_data = context.train_representation_data(EPOCH) |
| | test_data = context.test_representation_data(EPOCH) |
| | all_data = np.concatenate((train_data, test_data), axis=0) |
| | return all_data |
| | def get_train_test_label(context, EPOCH): |
| | train_labels = context.train_labels(EPOCH) |
| | test_labels = context.test_labels(EPOCH) |
| | labels = np.concatenate((train_labels, test_labels), axis=0).astype(int) |
| | return labels |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | def update_epoch_projection(context, EPOCH, predicates, isContraVis): |
| | |
| |
|
| | train_data = context.train_representation_data(EPOCH) |
| | test_data = context.test_representation_data(EPOCH) |
| | all_data = np.concatenate((train_data, test_data), axis=0) |
| | print(len(all_data)) |
| |
|
| | train_labels = context.train_labels(EPOCH) |
| | |
| | |
| | labels = train_labels |
| |
|
| |
|
| | embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(EPOCH), "embedding.npy") |
| | if os.path.exists(embedding_path): |
| | embedding_2d = np.load(embedding_path) |
| | else: |
| | embedding_2d = context.strategy.projector.batch_project(EPOCH, all_data) |
| | np.save(embedding_path, embedding_2d) |
| |
|
| | training_data_number = context.strategy.config["TRAINING"]["train_num"] |
| | testing_data_number = context.strategy.config["TRAINING"]["test_num"] |
| | training_data_index = list(range(training_data_number)) |
| | testing_data_index = list(range(training_data_number, training_data_number + testing_data_number)) |
| |
|
| | |
| | |
| | bgimg_path = os.path.join(context.strategy.data_provider.checkpoint_path(EPOCH), "bgimg.png") |
| | scale_path = os.path.join(context.strategy.data_provider.checkpoint_path(EPOCH), "scale.npy") |
| | |
| | if os.path.exists(bgimg_path) and os.path.exists(scale_path): |
| | |
| | |
| | with open(bgimg_path, 'rb') as img_f: |
| | img_stream = img_f.read() |
| | b_fig = base64.b64encode(img_stream).decode() |
| | grid = np.load(scale_path) |
| | else: |
| | x_min, y_min, x_max, y_max, b_fig = context.strategy.vis.get_background(EPOCH, context.strategy.config["VISUALIZATION"]["RESOLUTION"]) |
| | grid = [x_min, y_min, x_max, y_max] |
| | |
| | grid = [float(i) for i in grid] |
| | b_fig = str(b_fig, encoding='utf-8') |
| | |
| | |
| | |
| | np.save(embedding_path, embedding_2d) |
| | |
| | |
| | eval_new = dict() |
| | file_name = context.strategy.config["VISUALIZATION"]["EVALUATION_NAME"] |
| | save_eval_dir = os.path.join(context.strategy.data_provider.model_path, file_name + ".json") |
| | if os.path.exists(save_eval_dir): |
| | evaluation = context.strategy.evaluator.get_eval(file_name=file_name) |
| | eval_new["train_acc"] = evaluation["train_acc"][str(EPOCH)] |
| | eval_new["test_acc"] = evaluation["test_acc"][str(EPOCH)] |
| | else: |
| | eval_new["train_acc"] = 0 |
| | eval_new["test_acc"] = 0 |
| |
|
| | color = context.strategy.vis.get_standard_classes_color() * 255 |
| |
|
| | color = color.astype(int) |
| |
|
| | CLASSES = np.array(context.strategy.config["CLASSES"]) |
| | |
| | label_color_list = color[labels].tolist() |
| | label_list = CLASSES[labels].tolist() |
| | label_name_dict = dict(enumerate(CLASSES)) |
| |
|
| | prediction_list = [] |
| | |
| | |
| |
|
| | |
| | |
| |
|
| | for i in range(len(train_data)): |
| | prediction_list.append("0") |
| | |
| | EPOCH_START = context.strategy.config["EPOCH_START"] |
| | EPOCH_PERIOD = context.strategy.config["EPOCH_PERIOD"] |
| | EPOCH_END = context.strategy.config["EPOCH_END"] |
| | max_iter = (EPOCH_END - EPOCH_START) // EPOCH_PERIOD + 1 |
| | |
| | |
| | |
| | |
| | selected_points = np.arange(training_data_number + testing_data_number) |
| | for key in predicates.keys(): |
| | if key == "label": |
| | tmp = np.array(context.filter_label(predicates[key])) |
| | elif key == "type": |
| | tmp = np.array(context.filter_type(predicates[key], int(EPOCH))) |
| | else: |
| | tmp = np.arange(training_data_number + testing_data_number) |
| | selected_points = np.intersect1d(selected_points, tmp) |
| | |
| | properties = np.concatenate((np.zeros(training_data_number, dtype=np.int16), 2*np.ones(testing_data_number, dtype=np.int16)), axis=0) |
| | lb = context.get_epoch_index(EPOCH) |
| | ulb = np.setdiff1d(training_data_index, lb) |
| | properties[ulb] = 1 |
| |
|
| | highlightedPointIndices = [] |
| |
|
| | if (isContraVis == 'false'): |
| | high_pred = context.strategy.data_provider.get_pred(EPOCH, all_data).argmax(1) |
| | inv_high_dim_data = context.strategy.projector.batch_inverse(EPOCH, embedding_2d) |
| | inv_high_pred = context.strategy.data_provider.get_pred(EPOCH, inv_high_dim_data).argmax(1) |
| | highlightedPointIndices = np.where(high_pred != inv_high_pred)[0] |
| |
|
| | |
| | print("EMBEDDINGLEN", len(embedding_2d)) |
| | return embedding_2d.tolist(), grid, b_fig, label_name_dict, label_color_list, label_list, max_iter, training_data_index, testing_data_index, eval_new, prediction_list, selected_points, properties, highlightedPointIndices, |
| |
|
| |
|
| |
|
| |
|
| | def getContraVisChangeIndices(context, iterationLeft, iterationRight, method): |
| |
|
| | predChangeIndices = [] |
| | |
| | train_data = context.train_representation_data(iterationLeft) |
| | test_data = context.test_representation_data(iterationLeft) |
| | all_data = np.concatenate((train_data, test_data), axis=0) |
| |
|
| | embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(iterationLeft), "embedding.npy") |
| | if os.path.exists(embedding_path): |
| | embedding_2d = np.load(embedding_path) |
| | else: |
| | embedding_2d = context.strategy.projector.batch_project(iterationLeft, all_data) |
| | np.save(embedding_path, embedding_2d) |
| |
|
| | last_train_data = context.train_representation_data(iterationRight) |
| | last_test_data = context.test_representation_data(iterationRight) |
| | last_all_data = np.concatenate((last_train_data, last_test_data), axis=0) |
| |
|
| | last_embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(iterationRight), "embedding.npy") |
| | if os.path.exists(last_embedding_path): |
| | last_embedding_2d = np.load(last_embedding_path) |
| | else: |
| | last_embedding_2d = context.strategy.projector.batch_project(iterationRight, last_all_data) |
| | np.save(last_embedding_path, last_embedding_2d) |
| |
|
| | if (method == "align"): |
| | predChangeIndices = evaluate_isAlign(embedding_2d, last_embedding_2d) |
| | elif (method == "nearest neighbour"): |
| | predChangeIndices = evaluate_isNearestNeighbour(embedding_2d, last_embedding_2d) |
| | elif (method == "both"): |
| | predChangeIndices_align = evaluate_isAlign(embedding_2d, last_embedding_2d) |
| | predChangeIndices_nearest = evaluate_isNearestNeighbour(embedding_2d, last_embedding_2d) |
| | |
| | intersection = set(predChangeIndices_align).intersection(predChangeIndices_nearest) |
| | |
| | predChangeIndices = list(intersection) |
| |
|
| | else: |
| | print("wrong method") |
| |
|
| |
|
| | return predChangeIndices |
| |
|
| |
|
| | def getContraVisChangeIndicesSingle(context, iterationLeft, iterationRight, method, left_selected, right_selected): |
| | |
| | train_data = context.train_representation_data(iterationLeft) |
| | test_data = context.test_representation_data(iterationLeft) |
| | all_data = np.concatenate((train_data, test_data), axis=0) |
| |
|
| | embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(iterationLeft), "embedding.npy") |
| | if os.path.exists(embedding_path): |
| | embedding_2d = np.load(embedding_path) |
| | else: |
| | embedding_2d = context.strategy.projector.batch_project(iterationLeft, all_data) |
| | np.save(embedding_path, embedding_2d) |
| |
|
| | last_train_data = context.train_representation_data(iterationRight) |
| | last_test_data = context.test_representation_data(iterationRight) |
| | last_all_data = np.concatenate((last_train_data, last_test_data), axis=0) |
| |
|
| | last_embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(iterationRight), "embedding.npy") |
| | if os.path.exists(last_embedding_path): |
| | last_embedding_2d = np.load(last_embedding_path) |
| | else: |
| | last_embedding_2d = context.strategy.projector.batch_project(iterationRight, last_all_data) |
| | np.save(last_embedding_path, last_embedding_2d) |
| |
|
| | predChangeIndicesLeft = [] |
| | predChangeIndicesRight = [] |
| | predChangeIndicesLeft_Left = [] |
| | predChangeIndicesLeft_Right = [] |
| | predChangeIndicesRight_Left = [] |
| | predChangeIndicesRight_Right = [] |
| |
|
| | if (method == "align"): |
| | predChangeIndicesLeft, predChangeIndicesRight = evaluate_isAlign_single(embedding_2d, last_embedding_2d, left_selected, right_selected) |
| | elif (method == "nearest neighbour"): |
| | predChangeIndicesLeft_Left, predChangeIndicesLeft_Right,predChangeIndicesRight_Left, predChangeIndicesRight_Right= evaluate_isNearestNeighbour_single(embedding_2d, last_embedding_2d, left_selected, right_selected) |
| |
|
| |
|
| | return predChangeIndicesLeft, predChangeIndicesRight, predChangeIndicesLeft_Left, predChangeIndicesLeft_Right, predChangeIndicesRight_Left, predChangeIndicesRight_Right |
| |
|
| | def getCriticalChangeIndices(context, curr_iteration, last_iteration): |
| |
|
| | predChangeIndices = [] |
| | |
| | train_data = context.train_representation_data(curr_iteration) |
| | test_data = context.test_representation_data(curr_iteration) |
| | all_data = np.concatenate((train_data, test_data), axis=0) |
| |
|
| | embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(curr_iteration), "embedding.npy") |
| | if os.path.exists(embedding_path): |
| | embedding_2d = np.load(embedding_path) |
| | else: |
| | embedding_2d = context.strategy.projector.batch_project(curr_iteration, all_data) |
| | np.save(embedding_path, embedding_2d) |
| |
|
| | last_train_data = context.train_representation_data(last_iteration) |
| | last_test_data = context.test_representation_data(last_iteration) |
| | last_all_data = np.concatenate((last_train_data, last_test_data), axis=0) |
| |
|
| | last_embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(last_iteration), "embedding.npy") |
| | if os.path.exists(last_embedding_path): |
| | last_embedding_2d = np.load(last_embedding_path) |
| | else: |
| | last_embedding_2d = context.strategy.projector.batch_project(last_iteration, last_all_data) |
| | np.save(last_embedding_path, last_embedding_2d) |
| |
|
| |
|
| | high_pred = context.strategy.data_provider.get_pred(curr_iteration, all_data).argmax(1) |
| | last_high_pred = context.strategy.data_provider.get_pred(last_iteration, last_all_data).argmax(1) |
| |
|
| |
|
| | predChangeIndices = np.where(high_pred != last_high_pred)[0] |
| |
|
| |
|
| | return predChangeIndices |
| |
|
| | def getConfChangeIndices(context, curr_iteration, last_iteration, confChangeInput): |
| | |
| | train_data = context.train_representation_data(curr_iteration) |
| | test_data = context.test_representation_data(curr_iteration) |
| | all_data = np.concatenate((train_data, test_data), axis=0) |
| |
|
| | embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(curr_iteration), "embedding.npy") |
| | if os.path.exists(embedding_path): |
| | embedding_2d = np.load(embedding_path) |
| | else: |
| | embedding_2d = context.strategy.projector.batch_project(curr_iteration, all_data) |
| | np.save(embedding_path, embedding_2d) |
| |
|
| | last_train_data = context.train_representation_data(last_iteration) |
| | last_test_data = context.test_representation_data(last_iteration) |
| | last_all_data = np.concatenate((last_train_data, last_test_data), axis=0) |
| |
|
| | last_embedding_path = os.path.join(context.strategy.data_provider.checkpoint_path(last_iteration), "embedding.npy") |
| | if os.path.exists(last_embedding_path): |
| | last_embedding_2d = np.load(last_embedding_path) |
| | else: |
| | last_embedding_2d = context.strategy.projector.batch_project(last_iteration, last_all_data) |
| | np.save(last_embedding_path, last_embedding_2d) |
| |
|
| |
|
| |
|
| | high_pred = context.strategy.data_provider.get_pred(curr_iteration, all_data) |
| | last_high_pred = context.strategy.data_provider.get_pred(last_iteration, last_all_data) |
| |
|
| | high_conf = softmax(high_pred, axis=1) |
| | last_high_conf = softmax(last_high_pred, axis=1) |
| |
|
| | |
| | high_pred_class = high_conf.argmax(axis=1) |
| | last_high_pred_class = last_high_conf.argmax(axis=1) |
| |
|
| | same_pred_indices = np.where(high_pred_class == last_high_pred_class)[0] |
| | print("same") |
| | print(same_pred_indices) |
| | |
| | conf_diff = np.abs(high_conf[np.arange(len(high_conf)), high_pred_class] - last_high_conf[np.arange(len(last_high_conf)), last_high_pred_class]) |
| | print("conf") |
| | print(conf_diff) |
| | significant_conf_change_indices = same_pred_indices[conf_diff[same_pred_indices] > confChangeInput] |
| | print("siginificant") |
| | print(significant_conf_change_indices) |
| |
|
| | return significant_conf_change_indices |
| |
|
| | def add_line(path, data_row): |
| | """ |
| | data_row: list, [API_name, username, time] |
| | """ |
| | now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime()) |
| | data_row.append(now_time) |
| | with open(path, "a+") as f: |
| | csv_write = csv.writer(f) |
| | csv_write.writerow(data_row) |
| |
|
| |
|
| |
|
| |
|
| |
|