def make_streamer_schedule(self): apps = [] for app, num_frozen, target_fps \ in zip(self.apps, self.num_frozen_list, self.target_fps_list): a = app.copy() a["num_frozen"] = num_frozen a["target_fps"] = target_fps apps.append(a) s = Schedule.StreamerSchedule() num_apps_done = 0 last_shared_layer = 1 parent_net = Schedule.NeuralNet(-1, -1, self.model, end=1) while (num_apps_done < len(apps)): min_frozen = min([app["num_frozen"] \ for app in apps if app["num_frozen"] > last_shared_layer]) min_apps = [app for app in apps \ if app["num_frozen"] == min_frozen] future_apps = [app for app in apps \ if app["num_frozen"] > min_frozen] # Check if we need to share part of the NN, and make a base NN # If so, we make it and set it as the parent if len(future_apps) > 0 or len(apps) == len(min_apps): # Set target_fps depending on children target_fps if len(future_apps) > 0: parent_target_fps = max( [app["target_fps"] for app in future_apps]) else: parent_target_fps = max( [app["target_fps"] for app in min_apps]) net = Schedule.NeuralNet(s.get_id(), -1, self.model, parent_net.net_id, last_shared_layer, min_frozen, True, parent_target_fps, min_apps[0]["model_path"][min_frozen]) s.add_neural_net(net) parent_net = net # Make app-specific NN that is branched off the parent # Parent is either nothing or the last shared branch for app in min_apps: net = Schedule.NeuralNet(s.get_id(), app["app_id"], self.model, parent_net.net_id, parent_net.end, self.model.final_layer, False, app["target_fps"], app["model_path"][min_frozen]) s.add_neural_net(net) num_apps_done += 1 last_shared_layer = parent_net.end return s.schedule
def make_streamer_schedule_no_sharing(self): s = Schedule.StreamerSchedule() for app in self.apps: num_frozen = min(app["accuracies"].keys()) net = Schedule.NeuralNet(s.get_id(), app["app_id"], self.model, -1, 1, self.model.final_layer, False, self.video_desc["stream_fps"], app["model_path"][num_frozen]) s.add_neural_net(net) return s.schedule