diff --git a/.gitignore b/.gitignore index 54fef41b07624c6f484c693ab899f438183ef923..24fc066ae94c736ff15116af88e24899177ff374 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ /workspace.xml /.idea /venv -/CA **/__pycache__/ \ No newline at end of file diff --git a/CA-ES/es.py b/CA-ES/es.py index 0615eadc3fdc680799707388eeaf2e1b9939372f..f86f76d58e8a8330e89f9c2852ccabf27d8728e2 100644 --- a/CA-ES/es.py +++ b/CA-ES/es.py @@ -258,13 +258,12 @@ class ES: mpos_x, mpos_y = event.pos mpos_x, mpos_y = mpos_x // cellsize, mpos_y // cellsize x_eval[:, mpos_y:mpos_y + dmg_size, mpos_x:mpos_x + dmg_size, :] = 0 - damaged = 100 # the number of steps to record loss after damage hass occurred + damaged = 100 # number of steps to record loss after damage has occurred x_eval = model(x_eval) image = to_rgb(x_eval).permute(0, 3, 1, 2) - # Very quick hack to get rid of the batch dimension in tensor + save_image(image, imgpath, nrow=1, padding=0) - image = np.asarray(Image.open(imgpath)) if damaged > 0: loss= self.net.loss(x_eval, self.pad_target) @@ -277,6 +276,9 @@ class ES: losses.clear() damaged -= 1 + # Saving and loading each image as a quick hack to get rid of the batch dimension in tensor + image = np.asarray(Image.open(imgpath)) + self.game_update(surface, image, cellsize) time.sleep(0.05) pygame.display.update() diff --git a/CA-ES/main.py b/CA-ES/main.py index a4a36c2c767408be5b533ce21c1b5f63049bdb46..3468f92f7b03d94a641e7e86586e6b1075de0cd1 100644 --- a/CA-ES/main.py +++ b/CA-ES/main.py @@ -17,7 +17,7 @@ if __name__ == '__main__': parser = argparse.ArgumentParser() - parser.add_argument("--mode", type=str, default="graphic", metavar="train/interactive/graphic", help="Decides mode to run e.g. train or damage") + parser.add_argument("--mode", type=str, default="graphic", metavar="train/interactive/graphic", help="Decides mode to run") parser.add_argument("--population_size", type=int, default=16, metavar=128, help="Population size") parser.add_argument("--n_iterations", type=int, default=100, help="Number of iterations to train for.") diff --git a/damage_ca/damage.py b/damage_ca/damage.py index 98dbb68987e39a362d446c4657b8fab6bf30f5ca..668afdb00ad5abcc6773a8266b354b8ce1eecd5b 100644 --- a/damage_ca/damage.py +++ b/damage_ca/damage.py @@ -17,6 +17,7 @@ class Damage(): self.size = args.size+2 +self.padding self.logdir = args.logdir self.load_model_path = args.load_model_path + self.n_channels = args.n_channels self.target_img = load_emoji(args.img, self.size) #rgba img p = self.padding @@ -38,14 +39,24 @@ class Damage(): self.net.double() def run(self): + imgpath = '%s/damaged.png' % (self.logdir) self.load_model(self.load_model_path) # model loaded x = self.x0.clone() for i in range(self.n_iterations): # fully grow first x_eval = self.net(x) - loss=self.net.loss(x_eval, self.pad_target) + loss = self.net.loss(x_eval, self.pad_target) self.writer.add_scalar("dmg/loss", loss, i) if i % self.dmg_freq == 0: # do damage - x_eval + #lower half + y_pos = (self.size // 2) + 1 + dmg_size = self.size + x_eval[:, y_pos:y_pos + dmg_size, 0:0 + dmg_size, :] = 0 + image = to_rgb(x_eval).permute(0, 3, 1, 2) + save_image(image, imgpath, nrow=1, padding=0) + + imgpath = '%s/done.png' % (self.logdir) + image = to_rgb(x_eval).permute(0, 3, 1, 2) + save_image(image, imgpath, nrow=1, padding=0) \ No newline at end of file diff --git a/damage_ca/main.py b/damage_ca/main.py index 79bf829b816208b85c511ad874cf7b33d1db4cf2..84e9f58619fdce7b70d94b75fa0c710bc0780d33 100644 --- a/damage_ca/main.py +++ b/damage_ca/main.py @@ -12,7 +12,8 @@ if __name__ == '__main__': parser.add_argument("--n_iterations", type=int, default=100, help="Number of iterations to test for.") parser.add_argument("--batch_size", type=int, default=1, help="Batch size.") - parser.add_argument("--dmg_freq", type=int, default=500, help="Frequency for damaging",) + parser.add_argument("--n_channels", type=int, default=16, help="Number of channels of the input tensor") + parser.add_argument("--dmg_freq", type=int, default=51, help="Frequency for damaging",) parser.add_argument("--alpha", type=float, default=0.005, metavar=0.005, help="Alpha for how much noise to add") parser.add_argument("--padding", type=int, default=0, help="Padding for image") @@ -39,4 +40,5 @@ if __name__ == '__main__': #dmg here dmg = Damage(args) + dmg.run() \ No newline at end of file