def __init__(self): self.rotation_speed = 1 # higher is faster, positive is right self.cam_z = -2 self.values = [] for x in range(7): for r in range(23): if x == 6 and r > 21: break Label(text=r + 1 + (x * 23), relief=RIDGE, width=5).grid(row=r, column=0 + (x * 2)) s = Scale(master, from_=0., to=1., resolution=0.1, orient=HORIZONTAL) s.set(1) s.grid(row=r, column=1 + (x * 2)) # length=10, self.values.append(s) Button(master, text='max', command=self.max).grid(row=16, column=14, columnspan=2) Button(master, text='randomize', command=self.randomize).grid(row=17, column=14, columnspan=2) Button(master, text='rotate right', command=self.right).grid(row=18, column=14, columnspan=2) Button(master, text='rotate left', command=self.left).grid(row=19, column=14, columnspan=2) Button(master, text='cam up', command=self.cam_up).grid(row=20, column=14, columnspan=2) Button(master, text='cam down', command=self.cam_down).grid(row=21, column=14, columnspan=2) Button(master, text='print config', command=self.print_config).grid(row=22, column=14, columnspan=2) self.b = Button(master, text="enter values", command=self.popup) self.b.grid(row=17, column=14, columnspan=2) width = 512 height = 512 self.renderer = Renderer(width, height) self.image = Image.fromarray(np.zeros((width, height), dtype=np.uint8)) self.canvas = Canvas(master, height=height, width=width) self.canvas.grid(row=0, column=14, rowspan=15) # image = image.resize((basewidth, hsize), PIL.Image.ANTIALIAS) self.photo = ImageTk.PhotoImage(self.image) self.photo_holder = self.canvas.create_image( width - (self.image.size[0] / 2), height - (self.image.size[1] / 2), image=self.photo) self.rot = 0 self.render()
self.conv1 = nn.Conv2d(3, 32, (3, 3), (1, 1), (1, 1)) self.conv2 = nn.Conv2d(32, 64, (3, 3), (2, 2), (1, 1)) self.linear3 = nn.Linear(64 * 32 * 32, num_outputs) self.linear3_ = nn.Linear(64 * 32 * 32, num_outputs) def forward(self, inputs): x = self.relu(self.conv1(inputs)) x = self.relu(self.conv2(x)) x = x.view(-1, 64 * 32 * 32) mu = torch.sigmoid(self.linear3(x)) sigma_sq = torch.tanh(self.linear3_(x)) return mu, sigma_sq env = Renderer(WIDTH, HEIGHT) data_generator = ConstantShapeGenerator(WIDTH, HEIGHT) torch.manual_seed(SEED) np.random.seed(SEED) agent = REINFORCE(HIDDEN_SIZE, WIDTH * HEIGHT * 3, 160, Policy) if not os.path.exists(exp_dir): os.mkdir(exp_dir) reward_avg = [] for i_episode in range(NUM_EPISODES): target = data_generator.sample()
x = self.relu(self.conv3(x)) # mu, logprob return torch.sigmoid(self.linear1_mu(x.view( -1, 128 * 16 * 16))), torch.sigmoid( self.linear1_stddev(x.view(-1, 128 * 16 * 16))) def decode(self, z): x = self.relu(self.linear2(z)) return torch.sigmoid(self.linear3(x)) def forward(self, x): raise NotImplementedError("shouldn't use this directly") env = Renderer(params["WIDTH"], params["HEIGHT"]) # data_generator = CubeSingleViewGenerator(params["WIDTH"], params["HEIGHT"]) data_generator = RotatingRandomShapeGenerator(params["WIDTH"], params["HEIGHT"]) torch.manual_seed(params["SEED"]) np.random.seed(params["SEED"]) policy = Policy(params["LATENT_SIZE"], 160).to(device) optimizer = torch.optim.Adam(policy.parameters(), lr=params["LR"]) eps = np.finfo(np.float32).eps.item() if not os.path.exists(exp_dir): os.mkdir(exp_dir)
def __init__(self, width, height): self.cube = Renderer(width, height, "cube", False) self.sphere = Renderer(width, height, "sphere", True) self.shape = np.ones(160) * 0.9
def __init__(self, width, height, radius=.5): self.renderer = Renderer(width, height, "sphere", True) self.shape = np.ones(160) * radius
def __init__(self, width, height): self.renderer = Renderer(width, height, "sphere", True) self.cam = np.random.uniform(-1, 1, 3)
def __init__(self, width, height, smin=.4, smax=.8): self.renderer = Renderer(width, height, "sphere", True) self.shape = np.random.uniform(smin, smax, 160) self.cam = None
def __init__(self, width, height, smin=0, smax=1): self.renderer = Renderer(width, height, "sphere", True) self.cam = np.random.uniform(-1, 1, 3) self.min = smin self.max = smax
def __init__(self, width, height): self.renderer = Renderer(width, height, "cube", False) self.cam = None
def __init__(self, width, height): self.renderer = Renderer(width, height, "cube", False) self.cam = np.random.uniform(-1, 1, 3)
def __init__(self, width, height, smin=.5, smax=1): self.renderer = Renderer(width, height, "iqtt", True) self.shape = np.random.uniform(smin, smax, 160)
wandb.init(project="rezende-30", config=params) # experiment = Experiment(api_key="ZfKpzyaedH6ajYSiKmvaSwyCs", # project_name="rezende", workspace="fgolemo") # experiment.log_parameters(params) # experiment.set_name(exp_name) # experiment.add_tag("v3") def normal(x, mu, sigma_sq): a = (-1 * (x - mu).pow(2) / (2 * sigma_sq)).exp() b = 1 / (2 * sigma_sq * pi.expand_as(sigma_sq)).sqrt() return a * b env = Renderer(params["WIDTH"], params["HEIGHT"], shape="ijcv") data_generator = CubeLoader() torch.manual_seed(params["SEED"]) np.random.seed(params["SEED"]) policy = ReinforcePolicy(params["LATENT_SIZE"], 160).to(device) if LOGGING: wandb.watch(policy) optimizer = torch.optim.Adam(policy.parameters(), lr=params["LR"]) eps = np.finfo(np.float32).eps.item() if not os.path.exists(exp_dir): os.mkdir(exp_dir)
from threedee_tools.datasets import CubeLoader from threedee_tools.renderer import Renderer import numpy as np import matplotlib.pyplot as plt env = Renderer(128, 128, shape="ijcv") gen = CubeLoader() imga = gen.sample() print(gen.cam) print(gen.light) env.base_light = -gen.light + 1 imgb = env.render(np.ones((160)), np.array([0, 0, 0]), cam_pos=gen.cam + .7) imgb = np.array(imgb, dtype=np.float32) / 255 imgab = np.zeros((128, 128 * 2, 3), dtype=np.float32) imgab[:, :128, :] = imga imgab[:, 128:, :] = imgb plt.imshow(imgab) plt.show()