Add encoder visualizations

This commit is contained in:
Matt Tancik committed 2022-05-03 16:10:19 -07:00
1 parent 603c85ccd2
commit c09a06e0de
2 files changed
+289 -2

No files matched your search

+2 -2
View File
@@ -121,6 +121,7 @@ class RFFEncoding(Encoding):
if not scale > 0:
raise ValueError("RFF encoding scale should be greater than zero")
self.scale = scale
self.b_matrix = torch.normal(mean=0, std=self.scale, size=(self.in_dim, self.num_frequencies))
def get_out_dim(self) -> int:
return self.num_frequencies * 2
@@ -133,8 +134,7 @@ class RFFEncoding(Encoding):
Returns:
TensorType[..., "output_dim"]: Output values will be between -1 and 1
"""
b_matrix = torch.normal(mean=0, std=self.scale, size=(self.in_dim, self.num_frequencies))
scaled_inputs = in_tensor @ b_matrix # [..., "num_frequencies"]
scaled_inputs = in_tensor @ self.b_matrix # [..., "num_frequencies"]
encoded_inputs = torch.cat([torch.sin(scaled_inputs), torch.cos(scaled_inputs)], axis=-1)
return encoded_inputs
+287
View File
@@ -0,0 +1,287 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"import mediapy as media\n",
"from mattport.nerf.field_modules import encoding\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# NeRF Positional Encoding\n",
"First introduced in the original NeRF paper. This encoding assumes the inputs are between zero and one and can opperate on any dimensional input."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input Values:\n"
]
},
{
"data": {
"text/html": [
"<table class=\"show_images\" style=\"border-spacing:0px;\"><tr><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAABuUlEQVR4nO3aQa7gNgxEQdvqGcwm586lk+85Ri386gQEiCYl2fc/f/694uz3++gaPm2/36Nr+LTtKgHSftUAantvXcOnNYKwGoDt1ACqHYCVAGy7SoC0UwOorbcgqgRgNQDb6RhKdQrCGkFYIwgrAVgNwDZdwce1A7D1T4TVDsBKAFYDsJ0mEFUCsBqANYKwGoDt3K+u4dNKALbzlACpBmA7/RZE7SkBVCMI23l+dA2ftnNKgNQOwBpBWEsY23NKgFQCsD3tAKoljO3pHkA1grBGEFYCsO4BWAnA2gFYr6FYOwBrB2A1AKsBWDsAKwFYx1Bsz/7XNXxaIwirAVgNwPokie0uAVQjCKsB2O52AFUCsBqA7e41lOoxDusegPVBBtvdCKJKANYOwGoA1nM0VgKwbsJYN2GsBGDtAKwEYH0RwxpBWCMIqwFYz9FYCcBqALarYyjVMRRrBGG7agDVUwRWArB2ANYxFGsEYSUAawdgJQBrB2AlANtbA6gSgO1aDZAaQdiuo0v4thKA7Zou4dv2NoKovefWNXza3kYQ1QjC9q4RJLUDsP00gqiWMLa3DzLU3v2na/i0v30YbAheKpYKAAAAAElFTkSuQmCC\"/></td><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAB00lEQVR4nO3RMY7dQAwEUZI9XjjxuX1pe+hAK/jfoJJ6gdDgKKv+9fP3187X5tT8qDnbp+bUpOZsp+ZUp/rspDrV2T7veC6nKtupSj3fStf/0ZXedGU2s5ma73GTnWfMTm5mZ27mTt4xd3Lfvc+ej/vMzvn7cdx+d2ffcWe2505uz05uz+335+/X55jb77Fz+7nn1nus3M7We6zn6WNvtrJ1nlGbrVOb2vQ+4/Smb2pPbe6eP1NCGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmANg/vMBrChrbL84AAAAASUVORK5CYII=\"/></td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Encoded Values:\n"
]
},
{
"data": {
"text/html": [
"<table class=\"show_images\" style=\"border-spacing:0px;\"><tr><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAACMUlEQVR4nO3d25GjQBAFUVpKAWPZurRGrj8DSII1Iz/IY0GFblS/aMH49+fvFA+v5bBruDVey9uu4dYKQMa8NgSZoA5QQZOwCtY6wNQQJONZB6h4Lh+7hlvj0TJUxaMOUDEKQMVYC8DEVAeo6gAZ13zaNdwa01IAJq75smu4Na5XAZg4F7uEe+N6DbuGW+MsABXX0y7h3rioA0x1gIyTlqEmplEAJq5HAZiYHl+7hlt72AXcXQHICkBWADKms52YiXF2FGFifBuFTIwuRahoH+ZifDuKMDGOAjDx6P8ZKsa7DjAx6gAV42gjZmLsbcRMjKMATExbh3EmrqMATEw7dg23xrW97BpujbMAVJwNQSq+dYCKcy8AE58CUPFpCFLVAbICkPEuABXv39mu4dZ4HwVg4mgIUnFsdYCJYy8AUwHI2ApAxV4AKvZWQSq2AlCxHT0RM7HtXUsxsb+7GWfi91MAJvbe26rit/9nqNimEjCx9cYsFcfUJGBiGwVgYi8AVUOQjH30sggT7zpAxdEcoOI9NQSZOApAxaedsKpJWManAFQc7QNUfDuOVvFtElb1QFhWALICkBWAjOfVS/tMPKcCMBWAjFffMlTxah5WQQGooFWQinlqDjA1B8hYWgWp6gBZHSBjvuoAE0tDkIq1DlAVgIyl01AVa7+/qgBk/Dy7F2RiobuhJta5AEysS5/UNrEufc3TxDoXgImlDlCxrLtdw63VATLm5bBruDWWAlD9Bzbwo3ncxRhVAAAAAElFTkSuQmCC\"/></td><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAC8klEQVR4nO3deXLaQBDFYSR+EOO48IZZAhLcJlfKIXOHmC1mMZiycWyzSDnG+6Pfd4JXNUjUzHS3kt8/f1VMh4dspc4QGjfZWp0hNC7zjTpDaFTznTpDaJy7B3WG0Di0UnWG0DhdleoMoVFyUmcIjeSEOkNo1N4SdYbQqK0LdYbQqM4v1BlC4zS9VWcIjffpvTpDaLxMW+oMobGadNQZQmM+66ozhMZ47j9hJR733gkrMUl9HK3EU/qhzhAaay+AFNvkU50hNM6JL2SUaJRVdYbQuCt8GqpEp7xUZwiNwbmhzhAaw8T/AUqMWt4HKJEPXB2tRG+wVGcIjZbL06W4zr0ASlxkW3WG0EiyV3WG0Dj1XJyrxPHWGzElTpdndYbQqKReACXSr7o6Q2jUdi5PV6LmfZgUydwXMkocJ3fqDKHxNnF5uhLbyYM6Q2gsZ+4PUGLmBZBi/NRUZwiNP19u1FZiWv1SZwiNhcvTpXhOvABK7FK/gpQ8LkuMZuH7ACXuS/cHKNEtfBytRHb2E6DEqKaOEBvD7ps6Q2hk7g+QouP+ACnu/f0AKZoeXy9FPXd/gBKVwV6dITSOHQ/rUOJ47QNRJc4NjyxT8s9fjOq77wOUqL+4P0AJln4LKVGZX6kzhMbn2OPrlXj1+HopNtO2OkNoLKYuT1diMvMToMTj6rs6Q2g8Ft6IKTFPPbxbiWX6T50hNDYeXy/FPj2qM4RGtXSTnhI35Td1htDcHyBG7+z+ACXywq8gJUYND+1TYvRjp84QGv3M5elKtN2gIcVd7gVQ4ip/VmcIDbKdOkNolH1PS1Hi0PZhnBJHj4yToqz5PkCJSuEvaChR23sBlKhtfBinBAuPS1GimF6rM4TGx8T9AUrs3B8gxdr9AVL8nXbVGUJjMvcrSInx1lURSowr/pqqErOq7wOUWCXuD1Bi4w4ZKQ6Je8SUqJce1qHErcvTpWgXDXWG0Oh5AaQYlr6QUWLUdFWEEsO+Z0cr0c8W6gyh/QeNsLqFbQuV4gAAAABJRU5ErkJggg==\"/></td><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAADf0lEQVR4nO3d32vNcRzH8b33fe0cY2c1tGaJKUwuRmorLNTMj2JJ+ZH8KEkiu1hqRilXYqzFWjKGpXHhR8kulKVQJCsubBeMrW2YNp1x9uPs7Oz4M14Xr/fjL3hefb+9+/yyD5tPpzkem25fzm6QZtH4InaDNGS/nMVukGbvys6yG6TZjvQWdoM0tIcG2A3SUBFfwG6QZp8qqtgN0iz5ehm7QZrPAWSIPM9mN0izV6Xn2Q3SbGtwh90gDW8yfrIbpGH3RAG7QZp17jrJbpBmyfdL2Q3SfA4gQ+TpbHaDNHtRfIHdIM3KgmZ2gzR04De7QRr2xQvYDdLsy/5j7AZpNvVxCbtBGmKFKXaDNGQ9nMtukGbPiq6wG6RZKZrYDdLQFfxhN0jDocmF7AZp1nvkMLtBmiU+L2Y3SMNYgbEbpCGzNY/dIM0eFV5jN0jDpe4Qu0Eavgcj7AZpOJLw8wFMNnDiALtBmsW/+hzAhHhuwG6QhlBLPrtBmrUWXGc3SEPtgC9JMuG3jbEbpOFYyv8BTDZYtYfdIM0men1fEBMSkXR2gzSkN/uaMJM1z7vFbpCGuqFxdoM0xCzBbpCG40Euu0GaDZ/ZyW6QZmM//JwwE1IZvi+ICdM3fEWMyRrn3GU3SEP93yi7QRqm/RdAhcpMvyuCyUbOb2c3SLPRQZ8DmGC+Jk+FeKO/oMFkdVn32A3S0DA5xG6QhlDK14SZUJUTYTdIs9jFLewGaRYbLmQ3SEMwOs1ukIZYw0p2gzS7EG5lN0hDY+oXu0EaclJhdoM0nMrLYDdIs/H6jewGafYv6nMAE0LDPgcw4c/VYnaDNDsXPGA3SENT0M9ukIb8lD9pzoTqBf4TZrL49XXsBmk2EvN9QUzI7PdPEBMG69eyG6RZtfkcwISboV52gzQUJnPYDdJQvdQvbGKyxO017AZpNjLq9wUxYeY3PyDAhL66DewGaVaZ5nMAE1rCPewGaViR9KcMmVBTNMxukGZTrSXsBmkWHffbUpiQ1emXRTChu7ac3SDNjqbdZzdIw/0ZPewGaVid8KcMmVBTMsBukGbJx6vYDdIsGl/EbpCGSIc/5smErstb2Q3S7KD5OWEmPAn7viAmrJ/0Z6yYULOum90gzZJtRewGaT4HkCH77Qx2gzR8rN3GbpBme83vDWVCW7iP3SANmybnsxukoab8M7tB2n93eMPeWdlx3AAAAABJRU5ErkJggg==\"/></td><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAADWUlEQVR4nO3dS0uUYRjGca+ZZ2YSKwNLGEPKMLXQwgQ17UB4qKhAjCAI2gQtWrRoUeFCiAhTzEzspKWlZUHQIhLaRJbQQiw6CRUFTQspPOR4Gkdnhj7Gtbju3yf4b254n8PLg+G955MMj4vFvOwGaS45JcJukObCk6nsBmludXCc3SDNjf7KYDdIc+tyQ+wGae7bp43sBmmuoHiE3SDNDQ8WshukudLKIXaDNPe6v5zdIM1V1L5iN0hDV/Auu0EaJupq2Q3ScCPtPrtBGsIXDrEbpKFl+QN2gzTMNu5jN0hDQ6CP3SANkdZKdoM01HsfsxukIXprF7tBGs7BJoAJS91l7AZpOJ1kE8CEWF8xu0EaTiY9YjdIQ/zpNnaDNByHrYSZEO/fwm6QhqOw3VAmJF5uZjdIQ42nh90gDfHBPHaDNOz33mM3SEN8KIfdIA0V3i52gzTEPtj1dCbscJ3sBmlYGslmN0hDibvNbpCG6A+bACYU+m6yG6RhIWRfQUzI97WzG6RhftRWwkzI8V1jN0jD3F+bACZs8LeyG6RhdiKX3SANmf4WdoM0zEzZBDAh6G9mN0hDeNa+gpiQFmhkN0hDeM72gpiwKnCZ3SANUxE7D2DCimUN7AZpmIpmsRuk2QSQ2QSQ2QSQ2QSQ2QSQ2QSQ2QSQ2QSQ2V4Qme0Fkdl5AJmdB5AhPdDEbpCG6Wm7FcGEtf4r7AZpmJm0CWDCev9VdoM0zI3ZBDAh22//BzBh/o/djGNCnq+N3SANkd+2EmbCFt91doM0RH/aBDChyP6Up8LiVzsPYEKZ62A3SMPSZ5sAJux2d9gN0hB7Z19BTKj2drMbpCH+1nZDmXDQY6+pMiExsIndIA2HPb3sBmlIvMhnN0jDMTxkN0hD/NlWdoM0nLB3xKgQf1LEbpCGU/aWJBVivaXsBmk4Y+8JU2Gxcye7QRrqPDYBTFho38NukIaLPlsHMGGuuZrdIA1NybYXxISZSwfYDdLQlmrnALine truncated
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"num_frequencies = 4\n",
"min_freq_exp = 0\n",
"max_freq_exp = 6\n",
"include_input = True\n",
"resolution = 128\n",
"\n",
"encoder = encoding.NeRFEncoding(\n",
" in_dim=2,\n",
" num_frequencies=num_frequencies,\n",
" min_freq_exp=min_freq_exp,\n",
" max_freq_exp=max_freq_exp,\n",
" include_input=include_input,\n",
")\n",
"\n",
"x_samples = torch.linspace(0, 1, resolution)\n",
"grid = torch.stack(torch.meshgrid([x_samples, x_samples], indexing=\"ij\"), dim=-1)\n",
"\n",
"encoded_values = encoder(grid)\n",
"\n",
"print(\"Input Values:\")\n",
"media.show_images(torch.moveaxis(grid, 2, 0), cmap=\"plasma\", border=True)\n",
"print(\"Encoded Values:\")\n",
"media.show_images(torch.moveaxis(encoded_values, 2, 0), cmap=\"plasma\", border=True)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Random Fourier Feature (RFF) Encoding\n",
"This encoding assumes the inputs are between zero and one and can opperate on any dimensional input."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input Values:\n"
]
},
{
"data": {
"text/html": [
"<table class=\"show_images\" style=\"border-spacing:0px;\"><tr><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAABuUlEQVR4nO3aQa7gNgxEQdvqGcwm586lk+85Ri386gQEiCYl2fc/f/694uz3++gaPm2/36Nr+LTtKgHSftUAantvXcOnNYKwGoDt1ACqHYCVAGy7SoC0UwOorbcgqgRgNQDb6RhKdQrCGkFYIwgrAVgNwDZdwce1A7D1T4TVDsBKAFYDsJ0mEFUCsBqANYKwGoDt3K+u4dNKALbzlACpBmA7/RZE7SkBVCMI23l+dA2ftnNKgNQOwBpBWEsY23NKgFQCsD3tAKoljO3pHkA1grBGEFYCsO4BWAnA2gFYr6FYOwBrB2A1AKsBWDsAKwFYx1Bsz/7XNXxaIwirAVgNwPokie0uAVQjCKsB2O52AFUCsBqA7e41lOoxDusegPVBBtvdCKJKANYOwGoA1nM0VgKwbsJYN2GsBGDtAKwEYH0RwxpBWCMIqwFYz9FYCcBqALarYyjVMRRrBGG7agDVUwRWArB2ANYxFGsEYSUAawdgJQBrB2AlANtbA6gSgO1aDZAaQdiuo0v4thKA7Zou4dv2NoKovefWNXza3kYQ1QjC9q4RJLUDsP00gqiWMLa3DzLU3v2na/i0v30YbAheKpYKAAAAAElFTkSuQmCC\"/></td><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAB00lEQVR4nO3RMY7dQAwEUZI9XjjxuX1pe+hAK/jfoJJ6gdDgKKv+9fP3187X5tT8qDnbp+bUpOZsp+ZUp/rspDrV2T7veC6nKtupSj3fStf/0ZXedGU2s5ma73GTnWfMTm5mZ27mTt4xd3Lfvc+ej/vMzvn7cdx+d2ffcWe2505uz05uz+335+/X55jb77Fz+7nn1nus3M7We6zn6WNvtrJ1nlGbrVOb2vQ+4/Smb2pPbe6eP1NCGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmANg/vMBrChrbL84AAAAASUVORK5CYII=\"/></td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Encoded Values:\n"
]
},
{
"data": {
"text/html": [
"<table class=\"show_images\" style=\"border-spacing:0px;\"><tr><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,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\"/></td><td style=\"padLine truncated
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"num_frequencies = 8\n",
"scale = 10\n",
"resolution = 128\n",
"\n",
"encoder = encoding.RFFEncoding(in_dim=2, num_frequencies=num_frequencies, scale=scale)\n",
"\n",
"x_samples = torch.linspace(0, 1, resolution)\n",
"grid = torch.stack(torch.meshgrid([x_samples, x_samples], indexing=\"ij\"), dim=-1)\n",
"\n",
"encoded_values = encoder(grid)\n",
"\n",
"print(\"Input Values:\")\n",
"media.show_images(torch.moveaxis(grid, 2, 0), cmap=\"plasma\", border=True)\n",
"print(\"Encoded Values:\")\n",
"media.show_images(torch.moveaxis(encoded_values, 2, 0), cmap=\"plasma\", border=True)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hash Encoding\n",
"The hash incoding was originally introduced in Instant-NGP. The encoding is optimized during training. This is a visualization of the initialization."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Input Values:\n"
]
},
{
"data": {
"text/html": [
"<table class=\"show_images\" style=\"border-spacing:0px;\"><tr><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAABL0lEQVR4nO3RMQ0AIADAMODiQTe2kdGDVcGSzbPviLN0wO8agDUAawDWAKwBWAOwBmANwBqANQBrANYArAFYA7AGYA3AGoA1AGsA1gCsAVgDsAZgDcAagDUAawDWAKwBWAOwBmANwBqANQBrANYArAFYA7AGYA3AGoA1AGsA1gCsAVgDsAZgDcAagDUAawDWAKwBWAOwBmANwBqANQBrANYArAFYA7AGYA3AGoA1AGsA1gCsAVgDsAZgDcAagDUAawDWAKwBWAOwBmANwBqANQBrANYArAFYA7AGYA3AGoA1AGsA1gCsAVgDsAZgDcAagDUAawDWAKwBWAOwBmANwBqANQBrANYArAFYA7AGYA3AGoA1AGsA1gCsAVgDsAZgDcAagDUAawDWAKwBWAOwB1lYAZykwLVxAAAAAElFTkSuQmCC\"/></td><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAABuUlEQVR4nO3aQa7gNgxEQdvqGcwm586lk+85Ri386gQEiCYl2fc/f/694uz3++gaPm2/36Nr+LTtKgHSftUAantvXcOnNYKwGoDt1ACqHYCVAGy7SoC0UwOorbcgqgRgNQDb6RhKdQrCGkFYIwgrAVgNwDZdwce1A7D1T4TVDsBKAFYDsJ0mEFUCsBqANYKwGoDt3K+u4dNKALbzlACpBmA7/RZE7SkBVCMI23l+dA2ftnNKgNQOwBpBWEsY23NKgFQCsD3tAKoljO3pHkA1grBGEFYCsO4BWAnA2gFYr6FYOwBrB2A1AKsBWDsAKwFYx1Bsz/7XNXxaIwirAVgNwPokie0uAVQjCKsB2O52AFUCsBqA7e41lOoxDusegPVBBtvdCKJKANYOwGoA1nM0VgKwbsJYN2GsBGDtAKwEYH0RwxpBWCMIqwFYz9FYCcBqALarYyjVMRRrBGG7agDVUwRWArB2ANYxFGsEYSUAawdgJQBrB2AlANtbA6gSgO1aDZAaQdiuo0v4thKA7Zou4dv2NoKovefWNXza3kYQ1QjC9q4RJLUDsP00gqiWMLa3DzLU3v2na/i0v30YbAheKpYKAAAAAElFTkSuQmCC\"/></td><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAB00lEQVR4nO3RMY7dQAwEUZI9XjjxuX1pe+hAK/jfoJJ6gdDgKKv+9fP3187X5tT8qDnbp+bUpOZsp+ZUp/rspDrV2T7veC6nKtupSj3fStf/0ZXedGU2s5ma73GTnWfMTm5mZ27mTt4xd3Lfvc+ej/vMzvn7cdx+d2ffcWe2505uz05uz+335+/X55jb77Fz+7nn1nus3M7We6zn6WNvtrJ1nlGbrVOb2vQ+4/Smb2pPbe6eP1NCGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmAJgBYAaAGQBmANg/vMBrChrbL84AAAAASUVORK5CYII=\"/></td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Encoded Values:\n"
]
},
{
"data": {
"text/html": [
"<table class=\"show_images\" style=\"border-spacing:0px;\"><tr><td style=\"padding:1px;\"><img width=\"128\" height=\"128\" style=\"border:1px solid black; image-rendering:pixelated; object-fit:cover;\" src=\"data:image/png;base64,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 truncated
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"num_levels = 8\n",
"min_res = 2\n",
"max_res = 128\n",
"hash_table_size = 2**4 # Typically much larger tables are used\n",
"\n",
"resolution = 128\n",
"slice = 0\n",
"\n",
"# Fixing features_per_level to 3 for easy RGB visualization. Typical value is 2 in networks\n",
"features_per_level = 3\n",
"\n",
"encoder = encoding.HashEncoding(\n",
" num_levels=num_levels,\n",
" min_res=min_res,\n",
" max_res=max_res,\n",
" hash_table_size=hash_table_size,\n",
" features_per_level=features_per_level,\n",
" hash_init_scale=0.001,\n",
")\n",
"\n",
"x_samples = torch.linspace(0, 1, resolution)\n",
"grid = torch.stack(torch.meshgrid([x_samples, x_samples, x_samples], indexing=\"ij\"), dim=-1)\n",
"\n",
"encoded_values = encoder(grid)\n",
"\n",
"grid_slice = grid[slice, ...]\n",
"encoded_values_slice = encoded_values[slice, ...]\n",
"\n",
"print(\"Input Values:\")\n",
"media.show_images(torch.moveaxis(grid_slice, 2, 0), cmap=\"plasma\", border=True)\n",
"\n",
"print(\"Encoded Values:\")\n",
"encoded_images = encoded_values_slice.view(resolution, resolution, num_levels, 3)\n",
"encoded_images = torch.moveaxis(encoded_images, 2, 0)\n",
"encoded_images -= torch.min(encoded_images)\n",
"encoded_images /= torch.max(encoded_images)\n",
"media.show_images(encoded_images.detach().numpy(), cmap=\"plasma\", border=True)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"interpreter": {
"hash": "024fe9dea615e4e34961116ff517c7e9f5910440e3d2c8eb4560299f11aaf2e7"
},
"kernelspec": {
"display_name": "Python 3.9.11 ('mattport')",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.11"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}