diff --git a/notebooks/aug1demos/slam_color_room.ipynb b/notebooks/aug1demos/slam_color_room.ipynb index 491789ef..556b2901 100644 --- a/notebooks/aug1demos/slam_color_room.ipynb +++ b/notebooks/aug1demos/slam_color_room.ipynb @@ -132,43 +132,33 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[64148.992 64148.992 64148.992 64148.992 64148.72 64138.473 64074.863\n", - " 63920.66 63702.61 63478.688 63288.047 63135.72 63011.062 62903.82\n", - " 62806.684 62714.773 62625.15 62536.133 62446.81 62356.742 62265.703\n", - " 62173.66 62080.695 61986.92 61892.527 61797.742 61702.78 61607.883\n", - " 61513.266 61419.1 61325.555 61232.727 61140.703 61049.51 60959.19\n", - " 60869.73 60781.117 60693.34 60606.375 60520.21 60434.848 60350.266\n", - " 60266.445 60183.41 60101.15 60019.69 59939.027 59859.17 59780.15\n", - " 59701.96 59624.633 59548.195 59472.65 59398.023 59324.355 59251.65\n", - " 59179.945 59109.266 59039.65 58971.11 58903.688 58837.406 58772.3\n", - " 58708.402 58645.734 58584.324 58524.188 58465.36 58407.85 58351.684\n", - " 58296.863 58243.414 58191.33 58140.625 58091.29 58043.33 57996.734\n", - " 57951.496 57907.61 57865.043 57823.797 57783.844 57745.156 57707.72\n", - " 57671.508 57636.492 57602.637 57569.92 57538.312 57507.79 57478.305\n", - " 57449.836 57422.344 57395.81 57370.195 57345.465 57321.594 57298.555\n", - " 57276.31 57254.836]\n" + "[26975.96 26975.96 26976.023 26991.326 27073.22 27171.703 27243.037\n", + " 27292.375 27326.016 27346.416 27355.047 27353.271 27342.432 27323.75\n", + " 27298.328 27267.105 27230.904 27190.414 27146.22 27098.822 27048.646\n", + " 26996.047 26941.34 26884.781 26826.61 26767.025 26706.215 26644.34\n", + " 26581.562 26518.049 26453.943 26389.422 26324.643 26259.78 26195.002\n", + " 26130.484 26066.398 26002.906 25940.166 25878.316 25817.496 25757.824\n", + " 25699.395 25642.303 25586.62 25532.398 25479.684 25428.506 25378.879\n", + " 25330.814 25284.309 25239.35 25195.922 25153.996 25113.547 25074.54\n", + " 25036.94 25000.709 24965.805 24932.184 24899.805 24868.629 24838.605\n", + " 24809.7 24781.861 24755.057 24729.238 24704.375 24680.422 24657.344\n", + " 24635.105 24613.67 24593.004 24573.078 24553.863 24535.324 24517.434\n", + " 24500.168 24483.5 24467.4 24451.852 24436.828 24422.309 24408.271\n", + " 24394.7 24381.566 24368.863 24356.57 24344.668 24333.145 24321.98\n", + " 24311.162 24300.682 24290.521 24280.666 24271.111 24261.84 24252.844\n", + " 24244.11 24235.633]\n" ] }, { "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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YVi3bh0GDx6M8vJy/P3vf8fEiRORk5MDBwcHqeP1OCw5RL3AwoULkZOTw3P3N2jw4MHIzs6GWq3GN998g8cffxy//vori44RiouL8fzzzyM5ORnW1tZSxzFZU6dO1f334cOHIywsDP7+/ti8eTNPn14FS04X6tOnDywtLVFZWak3v7KyEp6enhKlot7umWeeQVJSElJSUuDr6yt1HJOkUCgwcOBAAMDo0aORkZGBDz74AKtWrZI4menIyspCVVUVRo0apZvX0dGBlJQUfPTRR2hpaYGlpaWECU2Tk5MTAgICcPr0aamj9Ei8JqcLKRQKjB49Gnv27NHN02q12LNnD8/f0y0nhMAzzzyD7777Dnv37kX//v2ljmQ2tFotWlpapI5hUu6++24cP34c2dnZuik0NBQxMTHIzs5mwblB9fX1OHPmDLy8vKSO0iPxSE4Xe+mll/D4448jNDQUY8eOxfvvv4+GhgbMnTtX6mgmo76+Xu9fJYWFhcjOzoaLiwv69u0rYTLTsnDhQmzcuBHff/89HBwcUFFRAQBwdHSEjY2NxOlMx+LFizF16lT07dsXdXV12LhxI3755Rfs3r1b6mgmxcHB4Yrrwezs7ODq6srrxIzwyiuv4L777oO/vz/KysqwZMkSWFpaIjo6WupoPRJLThebPXs2Lly4gNdffx0VFRUYOXIkdu3adcXFyHRtmZmZuPPOO3V/v/TSSwCAxx9/HOvWrZMolelJSEgAANxxxx1689euXYsnnnji1gcyUVVVVXjsscdQXl4OR0dHDB8+HLt378af/vQnqaNRL1RSUoLo6GhcunQJbm5umDBhAtLS0uDm5iZ1tB6Jz8khIiIis8RrcoiIiMgsseQQERGRWWLJISIiIrPEkkNERERmiSWHiIiIzBJLDhEREZkllhwiIiIySyw5REREZJZYcoiIiMgsseQQERGRWWLJISIiIrPEkkNERERm6f8DDC+IINK/puMAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -191,7 +181,7 @@ " return kernel / jnp.sum(kernel)\n", "\n", "\n", - "def apply_gaussian_blur(image: jnp.ndarray, sigma, kernel_size=5) -> jnp.ndarray:\n", + "def _apply_blur(image: jnp.ndarray, sigma, kernel_size=5) -> jnp.ndarray:\n", " \"\"\"Applies Gaussian blur to an image.\"\"\"\n", " kernel = gaussian_kernel(kernel_size, sigma)\n", " # Convolve the image with the kernel\n", @@ -201,66 +191,82 @@ " return blurred_image\n", "\n", "\n", - "apply_gaussian_blur_rgbd = jax.vmap(\n", - " apply_gaussian_blur, in_axes=(-1, None, None), out_axes=-1\n", - ")\n", - "\n", - "kernel_size = 25\n", - "sigma = 1.0\n", - "\n", - "rgbd_blurred = apply_gaussian_blur_rgbd(rgbd, 1.1, kernel_size)\n", - "b3d.viz_rgb(rgbd_blurred)\n", - "\n", + "apply_blur = jax.vmap(_apply_blur, in_axes=(-1, None, None), out_axes=-1)\n", "\n", - "b3d.rr_log_rgb(\"image\", rgb1)\n", - "b3d.rr_log_rgb(\"image/2\", rgb2)\n", + "observed_camera_pose = Pose.from_translation(jnp.array([0.81, 0.0, 0.21]))\n", + "latent_camera_pose = Pose.from_translation(jnp.array([0.83, 0.0, 0.21]))\n", + "observed_rgb = renderer.render_rgbd_from_mesh(\n", + " world_mesh.transform(observed_camera_pose.inv())\n", + ")[..., :3]\n", + "latent_rgb = renderer.render_rgbd_from_mesh(\n", + " world_mesh.transform(latent_camera_pose.inv())\n", + ")[..., :3]\n", "\n", - "rgb1_blurred = apply_gaussian_blur_rgbd(rgb1, 5.1, kernel_size)\n", - "b3d.rr_log_rgb(\"image/blur\", rgb1_blurred)\n", - "\n", - "\n", - "gt_camera_pose1 = Pose.from_translation(jnp.array([0.81, 0.0, 0.21]))\n", - "gt_camera_pose2 = Pose.from_translation(jnp.array([0.84, 0.0, 0.21]))\n", - "\n", - "rgb1 = renderer.render_rgbd_from_mesh(world_mesh.transform(gt_camera_pose1.inv()))[\n", - " ..., :3\n", - "]\n", - "rgb2 = renderer.render_rgbd_from_mesh(world_mesh.transform(gt_camera_pose2.inv()))[\n", - " ..., :3\n", - "]\n", + "kernel_size = 25\n", "\n", "\n", - "def error_function(observed_rgb, latent_rgb, blur):\n", - " observed_rgb_blurred = apply_gaussian_blur_rgbd(observed_rgb, blur, kernel_size)\n", - " latent_rgb_blurred = apply_gaussian_blur_rgbd(latent_rgb, blur, kernel_size)\n", + "def likelihood(observed_rgb, latent_rgb, blur):\n", + " observed_rgb_blurred = apply_blur(observed_rgb, blur, kernel_size)\n", + " latent_rgb_blurred = apply_blur(latent_rgb, blur, kernel_size)\n", "\n", - " outlier_prob = 0.01\n", + " outlier_prob = 0.001\n", "\n", " scores_inlier = genjax.truncated_normal.logpdf(\n", - " observed_rgb_blurred, latent_rgb_blurred, 0.1, 0.0, 1.0\n", + " observed_rgb_blurred, latent_rgb_blurred, 0.3, 0.0, 1.0\n", " ) + jnp.log(1.0 - outlier_prob)\n", - " scores_outlier = (\n", - " genjax.truncated_normal.logpdf(observed_rgb_blurred, 0.5, 1000.1, 0.0, 1.0)\n", - " + jnp.log(outlier_prob) * 0.0\n", - " )\n", - "\n", + " scores_outlier = genjax.truncated_normal.logpdf(\n", + " observed_rgb_blurred, 0.5, 10.1, 0.0, 1.0\n", + " ) + jnp.log(outlier_prob)\n", " scores = jnp.logaddexp(scores_inlier, scores_outlier)\n", " return scores.sum()\n", "\n", "\n", - "error_function_vmap_blur = jax.vmap(error_function, in_axes=(None, None, 0))\n", - "blur_sweep = jnp.linspace(0.000001, 5.5, 100)\n", + "likelihood_vmap_blur = jax.vmap(likelihood, in_axes=(None, None, 0))\n", + "blur_sweep = jnp.linspace(0.01, 10.5, 100)\n", "\n", - "scores = error_function_vmap_blur(rgb1, rgb2, blur_sweep)\n", + "scores = likelihood_vmap_blur(observed_rgb, latent_rgb, blur_sweep)\n", "print(scores)\n", - "plt.plot(blur_sweep, scores)" + "plt.plot(blur_sweep, scores)\n", + "\n", + "b3d.rr_log_rgb(\"image\", observed_rgb)\n", + "b3d.rr_log_rgb(\n", + " \"image/latent\", apply_blur(latent_rgb, blur_sweep[scores.argmax()], kernel_size)\n", + ")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 155, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.4934343\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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zTfdrlafFovFdNddd6mkpEQ5OTm64IILdO+99/7d+xYh3V/+8hd94xvfUHFxsTwej/7rv/4r7bwxRosWLdLQoUOVk5Oj8vJyvffee+5UtocQcnrQc889p+rqai1evFhbtmzRxIkTVVFRocbGRrer1metX79eVVVVeuONN1RTU6P29nZdeeWVamlpcbtqGWPz5s16/PHHNWHCBLer0ucdOXJEl112mbKysvTSSy9px44deuCBB3Teeee5XbU+7Wc/+5kee+wx/frXv9bOnTv1s5/9TEuXLtWvfvUrt6vWp7S0tGjixIlatmzZSc8vXbpUjzzyiJYvX66NGzcqLy9PFRUVamtrc7imPcigx0ybNs1UVVVZr2OxmCkuLjZLlixxsVaZpbGx0Ugy69evd7sqGaG5udlcdNFFpqamxnz1q181t956q9tV6tPuuOMOc/nll7tdjYxTWVlprr/++rRj11xzjZk5c6ZLNer7JJnf//731ut4PG6KiorMz3/+c+vY0aNHTTAYNL/97W9dqGHPoCenh0SjUdXX16u8vNw65vV6VV5errq6OhdrllmampokSQMGDHC5JpmhqqpKlZWVaf/e4sz98Y9/1NSpU/Xtb39bQ4YM0aWXXqonn3zS7Wr1eV/+8pdVW1urd999V5L01ltv6fXXX9dVV13lcs0yx969e9XQ0JD234KCggKVlpb26TbsnL5BZ086dOiQYrGYCgsL044XFhZq165dLtUqs8Tjcc2fP1+XXXaZxo0b53Z1+rxnn31WW7Zs0ebNm92uSsb44IMP9Nhjj6m6ulr/9m//ps2bN+uHP/yhAoGAZs+e7Xb1+qwf//jHCofDGj16tHw+n2KxmH76059q5syZblctYzQ0NEjSSduw1Lm+iJCDPqOqqkpvv/22Xn/9dber0uft379ft956q2pqapSdne12dTJGPB7X1KlTdd9990mSLr30Ur399ttavnw5IecsrF69WqtWrdIzzzyjsWPHauvWrZo/f76Ki4v5XfG5GK7qIYMGDZLP59PBgwfTjh88eFBFRUUu1Spz3HLLLVqzZo3+/Oc/a9iwYW5Xp8+rr69XY2OjJk+eLL/fL7/fr/Xr1+uRRx6R3+9XLBZzu4p90tChQzVmzJi0Y5dccon27dvnUo0yw2233aYf//jH+pd/+ReNHz9es2bN0oIFC7RkyRK3q5YxUu1UprVhhJweEggENGXKFNXW1lrH4vG4amtrVVZW5mLN+jZjjG655Rb9/ve/16uvvqqSkhK3q5QRpk+fru3bt2vr1q3WY+rUqZo5c6a2bt0qn8/ndhX7pMsuu+yELQ7effddjRw50qUaZYbW1lZ5venNlc/nUzwed6lGmaekpERFRUVpbVg4HNbGjRv7dBvGcFUPqq6u1uzZszV16lRNmzZNDz30kFpaWjRnzhy3q9ZnVVVV6ZlnntEf/vAH5efnW2PDBQUFysnJcbl2fVd+fv4J85ry8vI0cOBA5judhQULFujLX/6y7rvvPn3nO9/Rpk2b9MQTT+iJJ55wu2p92je+8Q399Kc/1YgRIzR27Fj99a9/1S9/+Utdf/31bletTzl27Jjef/996/XevXu1detWDRgwQCNGjND8+fP1H//xH7roootUUlKiu+66S8XFxbr66qvdq/TZcnt5V6b51a9+ZUaMGGECgYCZNm2aeeONN9yuUp8m6aSP//zP/3S7ahmHJeQ944UXXjDjxo0zwWDQjB492jzxxBNuV6nPC4fD5tZbbzUjRoww2dnZ5vzzzzf//u//biKRiNtV61P+/Oc/n/S/p7NnzzbGJJaR33XXXaawsNAEg0Ezffp0s3v3bncrfZY8xrBlJAAAyDzMyQEAABmJkAMAADISIQcAAGQkQg4AAMhIhBwAAJCRCDkAACAjEXIAAEBGIuQAAICMRMgBAAAZiZADAAAyEiEHAABkJEIOAADISP8PoRe4x4GFFzIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import functools\n", "\n", @@ -268,6 +274,15 @@ "import jax.numpy as jnp\n", "\n", "\n", + "def log_gaussian_kernel(size: int, sigma: float) -> jnp.ndarray:\n", + " \"\"\"Creates a 2D Gaussian kernel.\"\"\"\n", + " ax = jnp.arange(-size // 2 + 1.0, size // 2 + 1.0)\n", + " xx, yy = jnp.meshgrid(ax, ax)\n", + " kernel = -(xx**2 + yy**2) / (2.0 * sigma**2)\n", + " kernel = kernel - jax.nn.logsumexp(kernel)\n", + " return kernel\n", + "\n", + "\n", "###########\n", "@functools.partial(\n", " jnp.vectorize,\n", @@ -277,18 +292,14 @@ " 2,\n", " 3,\n", " 4,\n", - " 5,\n", - " 6,\n", " ),\n", ")\n", "def per_pixel(\n", " ij,\n", " observed_rgb,\n", " latent_rgb_padded,\n", - " variance,\n", - " outlier_prob: float,\n", - " outlier_volume: float,\n", - " filter_size: int,\n", + " log_kernel,\n", + " filter_size,\n", "):\n", " latent_rgb_padded_window = jax.lax.dynamic_slice(\n", " latent_rgb_padded,\n", @@ -296,61 +307,217 @@ " (2 * filter_size + 1, 2 * filter_size + 1, 3),\n", " )\n", " scores_inlier = genjax.truncated_normal.logpdf(\n", - " observed_rgb, latent_rgb_padded, 0.1, 0.0, 1.0\n", - " )\n", + " observed_rgb[ij[0], ij[1], :], latent_rgb_padded_window, 0.1, 0.0, 1.0\n", + " ).sum(-1)\n", + " return jax.nn.logsumexp(scores_inlier + log_kernel)\n", "\n", - " probabilities = jax.scipy.stats.norm.logpdf(\n", - " distances, loc=0.0, scale=jnp.sqrt(variance)\n", - " ).sum(-1) - jnp.log(observed_xyz.shape[0] * observed_xyz.shape[1])\n", - " return jnp.logaddexp(\n", - " probabilities.max() + jnp.log(1.0 - outlier_prob),\n", - " jnp.log(outlier_prob) - jnp.log(outlier_volume),\n", - " )\n", "\n", + "filter_size = 10\n", "\n", - "def threedp3_likelihood_per_pixel_old(\n", - " observed_xyz: jnp.ndarray,\n", - " rendered_xyz: jnp.ndarray,\n", - " variance,\n", - " outlier_prob,\n", - " outlier_volume,\n", - " filter_size,\n", - "):\n", - " rendered_xyz_padded = jax.lax.pad(\n", - " rendered_xyz,\n", - " -100.0,\n", + "\n", + "@jax.jit\n", + "def likelihood_per_pixel(observed_rgb: jnp.ndarray, latent_rgb: jnp.ndarray, blur):\n", + " latent_rgb_padded = jnp.pad(\n", + " latent_rgb,\n", " (\n", - " (\n", - " filter_size,\n", - " filter_size,\n", - " 0,\n", - " ),\n", - " (\n", - " filter_size,\n", - " filter_size,\n", - " 0,\n", - " ),\n", - " (\n", - " 0,\n", - " 0,\n", - " 0,\n", - " ),\n", + " (filter_size, filter_size),\n", + " (filter_size, filter_size),\n", + " (0, 0),\n", " ),\n", + " mode=\"edge\",\n", " )\n", " jj, ii = jnp.meshgrid(\n", - " jnp.arange(observed_xyz.shape[1]), jnp.arange(observed_xyz.shape[0])\n", + " jnp.arange(observed_rgb.shape[1]), jnp.arange(observed_rgb.shape[0])\n", " )\n", " indices = jnp.stack([ii, jj], axis=-1)\n", - " log_probabilities = gausssian_mixture_vectorize_old(\n", + "\n", + " log_kernel = log_gaussian_kernel(2 * filter_size + 1, blur)\n", + "\n", + " log_probabilities = per_pixel(\n", " indices,\n", - " observed_xyz,\n", - " rendered_xyz_padded,\n", - " variance,\n", - " outlier_prob,\n", - " outlier_volume,\n", + " observed_rgb,\n", + " latent_rgb_padded,\n", + " log_kernel,\n", " filter_size,\n", " )\n", - " return log_probabilities" + " return log_probabilities\n", + "\n", + "\n", + "filter_size = 10\n", + "\n", + "\n", + "@jax.jit\n", + "def likelihood(observed_rgb: jnp.ndarray, latent_rgb: jnp.ndarray, blur):\n", + " return likelihood_per_pixel(observed_rgb, latent_rgb, blur).sum()\n", + "\n", + "\n", + "likelihood_vmap_blur = jax.vmap(likelihood, in_axes=(None, None, 0))\n", + "\n", + "observed_camera_pose = Pose.from_translation(jnp.array([0.81, 0.0, 0.21]))\n", + "latent_camera_pose = Pose.from_translation(jnp.array([0.83, 0.0, 0.21]))\n", + "observed_rgb = renderer.render_rgbd_from_mesh(\n", + " world_mesh.transform(observed_camera_pose.inv())\n", + ")[..., :3]\n", + "latent_rgb = renderer.render_rgbd_from_mesh(\n", + " world_mesh.transform(latent_camera_pose.inv())\n", + ")[..., :3]\n", + "\n", + "b3d.rr_log_rgb(\"image\", observed_rgb)\n", + "b3d.rr_log_rgb(\"image/latent\", latent_rgb)\n", + "\n", + "\n", + "b3d.rr_log_depth(\"b\", likelihood_per_pixel(observed_rgb, latent_rgb, 0.01))\n", + "b3d.rr_log_depth(\"b/higher_noise\", likelihood_per_pixel(observed_rgb, latent_rgb, 10.0))\n", + "# b3d.rr_log_depth(\"b/diff\", likelihood_per_pixel(observed_rgb, latent_rgb, 0.01) - likelihood_per_pixel(observed_rgb, latent_rgb, 1.0))\n", + "\n", + "blur_sweep = jnp.linspace(0.01, 10.5, 100)\n", + "scores = likelihood_vmap_blur(observed_rgb, latent_rgb, blur_sweep)\n", + "print(blur_sweep[scores.argmax()])\n", + "plt.plot(blur_sweep, scores)" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15.189407\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "latent_rgb_padded = jnp.pad(\n", + " latent_rgb,\n", + " (\n", + " (filter_size, filter_size),\n", + " (filter_size, filter_size),\n", + " (0, 0),\n", + " ),\n", + " mode=\"edge\",\n", + ")\n", + "jj, ii = jnp.meshgrid(\n", + " jnp.arange(observed_rgb.shape[1]), jnp.arange(observed_rgb.shape[0])\n", + ")\n", + "indices = jnp.stack([ii, jj], axis=-1)\n", + "ij = jnp.array([54, 65])\n", + "\n", + "\n", + "latent_rgb_padded_window = jax.lax.dynamic_slice(\n", + " latent_rgb_padded,\n", + " (ij[0], ij[1], 0),\n", + " (2 * filter_size + 1, 2 * filter_size + 1, 3),\n", + ")\n", + "scores_inlier = genjax.truncated_normal.logpdf(\n", + " observed_rgb[ij[0], ij[1], :], latent_rgb_padded_window, 0.03, 0.0, 1.0\n", + ").sum(-1)\n", + "plt.imshow(latent_rgb_padded_window)\n", + "plt.matshow(scores_inlier)\n", + "plt.colorbar()\n", + "\n", + "blur = 0.01\n", + "log_kernel = gaussian_kernel(2 * filter_size + 1, blur)\n", + "averaged_prob = jax.nn.logsumexp(jax.nn.logsumexp(scores_inlier + log_kernel))\n", + "averaged_prob = jax.nn.logsumexp(jax.nn.logsumexp(scores_inlier + log_kernel))\n", + "print(averaged_prob)" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 148, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(log_kernel)\n", + "plt.colorbar()" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-1656.8243\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 133, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAAGkCAYAAACckEpMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAef0lEQVR4nO3df2hdhf3/8df9naRJbo21STNbbf3VTW0H1caiDp2haT5QrJah4h9VxIFLhRpEKEyrTgg62MTR1X82O//w5x9WFOlw0abI2ooVGcIobcloS5tUo8nNj+b+PN8/nNk3s7rE876+c2+fDzho7j193/c9Oee87klu7jsSBEEgAAAcRb0bAACAMAIAuCOMAADuCCMAgDvCCADgjjACALgjjAAA7ggjAIA7wggA4I4wAgC4q8gw2r59uy6++GLV1NSora1NH374oXdLVeHxxx9XJBKZtixfvty7rYq2d+9erV+/Xq2trYpEItq1a9e0+4Mg0GOPPaZFixaptrZW7e3tOnz4sE+zFep/beN77rnnG/v1unXrfJqtQD09Pbr22mvV0NCghQsXasOGDTp06NC0dSYnJ9XV1aXzzz9f9fX12rhxowYHB2f1OBUXRq+++qq6u7u1bds2ffzxx1q5cqU6Ojp0+vRp79aqwpVXXqlTp05NLR988IF3SxVtfHxcK1eu1Pbt2896/zPPPKPnnntOzz//vA4cOKB58+apo6NDk5OTP3Cnlet/bWNJWrdu3bT9+uWXX/4BO6xsfX196urq0v79+/Xuu+8qn89r7dq1Gh8fn1rnoYce0ltvvaXXX39dfX19OnnypG6//fbZPVBQYVavXh10dXVNfV0sFoPW1tagp6fHsavqsG3btmDlypXebVQtScEbb7wx9XWpVApaWlqC3/72t1O3DQ8PB6lUKnj55ZcdOqx8/72NgyAINm3aFNx6660u/VSj06dPB5KCvr6+IAi+2mcTiUTw+uuvT63zz3/+M5AU7Nu3b8Z1K+rKKJfL6eDBg2pvb5+6LRqNqr29Xfv27XPsrHocPnxYra2tWrZsme6++24dO3bMu6Wq1d/fr4GBgWn7czqdVltbG/uzsT179mjhwoW64oor9MADD2hoaMi7pYo1MjIiSWpqapIkHTx4UPl8ftp+vHz5ci1ZsmRW+3FFhdHnn3+uYrGo5ubmabc3NzdrYGDAqavq0dbWpp07d2r37t3asWOH+vv7deONN2p0dNS7tar09T7L/lxe69at04svvqje3l49/fTT6uvrU2dnp4rFondrFadUKmnLli26/vrrddVVV0n6aj9OJpOaP3/+tHVnux/HLRtFZevs7Jz6/xUrVqitrU0XXXSRXnvtNd13332OnQHf35133jn1/1dffbVWrFihSy65RHv27NEtt9zi2Fnl6erq0qefflqW3yVX1JXRggULFIvFvvEujcHBQbW0tDh1Vb3mz5+vyy+/XEeOHPFupSp9vc+yP/+wli1bpgULFrBfz9LmzZv19ttv6/3339eFF144dXtLS4tyuZyGh4enrT/b/biiwiiZTGrVqlXq7e2duq1UKqm3t1dr1qxx7Kw6jY2N6ejRo1q0aJF3K1Vp6dKlamlpmbY/ZzIZHThwgP25jE6cOKGhoSH26xkKgkCbN2/WG2+8offee09Lly6ddv+qVauUSCSm7ceHDh3SsWPHZrUfV9yP6bq7u7Vp0yZdc801Wr16tZ599lmNj4/r3nvv9W6t4j388MNav369LrroIp08eVLbtm1TLBbTXXfd5d1axRobG5v2Cry/v1+ffPKJmpqatGTJEm3ZskVPPfWULrvsMi1dulSPPvqoWltbtWHDBr+mK8x3beOmpiY98cQT2rhxo1paWnT06FE98sgjuvTSS9XR0eHYdeXo6urSSy+9pDfffFMNDQ1TvwdKp9Oqra1VOp3Wfffdp+7ubjU1NamxsVEPPvig1qxZo+uuu27mD2T9tr8fwh/+8IdgyZIlQTKZDFavXh3s37/fu6WqcMcddwSLFi0Kkslk8KMf/Si44447giNHjni3VdHef//9QNI3lk2bNgVB8NXbux999NGgubk5SKVSwS233BIcOnTIt+kK813beGJiIli7dm1wwQUXBIlEIrjooouC+++/PxgYGPBuu2KcbdtKCl544YWpdc6cORP86le/Cs4777ygrq4uuO2224JTp07N6nEi/34wAADcVNTvjAAA1YkwAgC4I4wAAO4IIwCAO8IIAOCOMAIAuKvIMMpms3r88ceVzWa9W6labOPyYvuWH9u4vKy3b0X+nVEmk1E6ndbIyIgaGxu926lKbOPyYvuWH9u4vKy3b0VeGQEAqgthBABwN+c+KLVUKunkyZNqaGhQJBI56zqZTGbaf2GPbVxebN/yYxuX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print(\n", + " genjax.truncated_normal.logpdf(\n", + " jnp.array([1.0, 1.0, 0.0]), jnp.array([0.0, 0.0, 1.0]), 0.03, 0.0, 1.0\n", + " ).sum(-1)\n", + ")\n", + "\n", + "log_kernel = gaussian_kernel(2 * filter_size + 1, blur)\n", + "plt.matshow(log_kernel)" ] }, { @@ -360,6 +527,50 @@ "outputs": [], "source": [] }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [], + "source": [ + "b3d.rr_log_depth(\"b\", likelihood_per_pixel(observed_rgb, latent_rgb, 0.01))\n", + "b3d.rr_log_depth(\"b/higher_noise\", likelihood_per_pixel(observed_rgb, latent_rgb, 10.0))\n", + "# b3d.rr_log_depth(\"b/diff\", likelihood_per_pixel(observed_rgb, latent_rgb, 0.01) - likelihood_per_pixel(observed_rgb, latent_rgb, 1.0))" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-2696.628\n", + "0.9999998\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "blur = 10.0\n", + "kernel = log_gaussian_kernel(2 * filter_size + 1, blur)\n", + "print(kernel.sum())\n", + "plt.matshow(jnp.exp(kernel))\n", + "plt.colorbar()\n", + "print(jnp.exp(kernel).sum())" + ] + }, { "cell_type": "code", "execution_count": 16,