Skip to content

Instantly share code, notes, and snippets.

@ducha-aiki
Created July 29, 2019 18:07
Show Gist options
  • Save ducha-aiki/85afbefa8dd603a26a0ac5f1ef822e75 to your computer and use it in GitHub Desktop.
Save ducha-aiki/85afbefa8dd603a26a0ac5f1ef822e75 to your computer and use it in GitHub Desktop.
kornia spatial grad bug
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fb0f3971a20>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import torch\n",
"import kornia\n",
"import numpy as np\n",
"\n",
"inp = torch.tensor([[[\n",
" [0., 0., 0., 0., 0.],\n",
" [0., 0., 1., 0., 0.],\n",
" [0., 1., 1., 1., 0.],\n",
" [0., 0., 1., 0., 0.],\n",
" [0., 0., 0., 0., 0.],\n",
"]]])\n",
"plt.imshow(kornia.utils.tensor_to_image(inp.squeeze()))\n",
"grad = kornia.filters.spatial_gradient(inp)\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad[0,0,0].squeeze()))\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad[0,0,1].squeeze()))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fb0f3837a90>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPUAAAD4CAYAAAA0L6C7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAI7klEQVR4nO3dz2ucBR7H8c9nZyMKLsjWHLQpWw8iW4StEIrQWxFaf6BXBT0JvaxQQRA9+g+IFy9FiwuKIuhBxCUUVERw1ahR7EahSJeWCq0tol50Gz97mDl03aTzzGSeeWa++35BIMmEmQ8h7zwzk/CMkwhAHb/regCAySJqoBiiBoohaqAYogaK+X0bV3r9H3vZvWuhjasGIOnU6X/ru4sb3uyyVqLevWtBH63sauOqAUjad/D0lpdx9xsohqiBYogaKIaogWKIGiiGqIFiiBoohqiBYogaKIaogWKIGiiGqIFiiBoohqiBYogaKIaogWKIGiimUdS2D9n+2vZJ20+0PQrA+IZGbbsn6VlJd0raI+kB23vaHgZgPE2O1PsknUzyTZJfJL0i6b52ZwEYV5Ood0q6/CxnZwaf+y+2D9tetb16/sLGpPYBGFGTqDc7Den/vKpekqNJlpMsL+7obX8ZgLE0ifqMpMvP97sk6Ww7cwBsV5OoP5Z0s+2bbF8l6X5Jb7Q7C8C4hp7MP8kl249IWpHUk3QsyYnWlwEYS6NX6EjylqS3Wt4CYAL4jzKgGKIGiiFqoBiiBoohaqAYogaKIWqgGKIGiiFqoBiiBoohaqAYogaKIWqgGKIGiiFqoBiiBoppdJIEzI6DN+7tesJIVs6udT3h/w5HaqAYogaKIWqgGKIGiiFqoBiiBoohaqAYogaKIWqgGKIGiiFqoBiiBoohaqAYogaKIWqgGKIGiiFqoJihUds+Zvuc7S+nMQjA9jQ5Ur8g6VDLOwBMyNCok7wn6eIUtgCYAB5TA8VMLGrbh22v2l49f2FjUlcLYEQTizrJ0STLSZYXd/QmdbUARsTdb6CYJn/SelnSB5JusX3G9sPtzwIwrqGv0JHkgWkMATAZ3P0GiiFqoBiiBoohaqAYogaKIWqgGKIGiiFqoBiiBoohaqAYogaKIWqgGKIGiiFqoBiiBoohaqCYoSdJqO7gjXu7nlDaPH1/V86udT1hIjhSA8UQNVAMUQPFEDVQDFEDxRA1UAxRA8UQNVAMUQPFEDVQDFEDxRA1UAxRA8UQNVAMUQPFEDVQDFEDxRA1UMzQqG3vsv2O7XXbJ2wfmcYwAONpco6yS5IeS/Kp7T9I+sT28ST/bHkbgDEMPVIn+TbJp4P3f5S0Lmln28MAjGekx9S2d0u6TdKHm1x22Paq7dXzFzYmsw7AyBpHbftaSa9JejTJD7+9PMnRJMtJlhd39Ca5EcAIGkVte0H9oF9K8nq7kwBsR5Nnvy3peUnrSZ5ufxKA7WhypN4v6SFJB2yvDd7uankXgDEN/ZNWkvcleQpbAEwA/1EGFEPUQDFEDRRD1EAxRA0UQ9RAMUQNFEPUQDFEDRRD1EAxRA0UQ9RAMUQNFEPUQDFEDRRD1EAxTc77XdrK2bWuJ4zk4I17u54wknn7/lbAkRoohqiBYogaKIaogWKIGiiGqIFiiBoohqiBYogaKIaogWKIGiiGqIFiiBoohqiBYogaKIaogWKIGihmaNS2r7b9ke3PbZ+w/dQ0hgEYT5PTGf0s6UCSn2wvSHrf9t+T/KPlbQDGMDTqJJH00+DDhcFb2hwFYHyNHlPb7tlek3RO0vEkH7Y7C8C4GkWdZCPJXklLkvbZvvW3X2P7sO1V26vnL2xMeieAhkZ69jvJ95LelXRok8uOJllOsry4ozeheQBG1eTZ70Xb1w3ev0bSHZK+ansYgPE0efb7Bkl/s91T/5fAq0nebHcWgHE1efb7C0m3TWELgAngP8qAYogaKIaogWKIGiiGqIFiiBoohqiBYogaKIaogWKIGiiGqIFiiBoohqiBYogaKIaogWKIGiimyZlPMENWzq51PQEzjiM1UAxRA8UQNVAMUQPFEDVQDFEDxRA1UAxRA8UQNVAMUQPFEDVQDFEDxRA1UAxRA8UQNVAMUQPFEDVQDFEDxTSO2nbP9me232xzEIDtGeVIfUTSeltDAExGo6htL0m6W9Jz7c4BsF1Nj9TPSHpc0q9bfYHtw7ZXba+ev7AxkXEARjc0atv3SDqX5JMrfV2So0mWkywv7uhNbCCA0TQ5Uu+XdK/tU5JekXTA9outrgIwtqFRJ3kyyVKS3ZLul/R2kgdbXwZgLPydGihmpJfdSfKupHdbWQJgIjhSA8UQNVAMUQPFEDVQDFEDxRA1UAxRA8UQNVAMUQPFEDVQDFEDxRA1UAxRA8UQNVAMUQPFEDVQjJNM/krt85L+NeGrvV7SdxO+zjbN09552irN1962tv4pyeJmF7QSdRtsryZZ7npHU/O0d562SvO1t4ut3P0GiiFqoJh5ivpo1wNGNE9752mrNF97p751bh5TA2hmno7UABogaqCYuYja9iHbX9s+afuJrvdcie1jts/Z/rLrLcPY3mX7Hdvrtk/YPtL1pq3Yvtr2R7Y/H2x9qutNTdju2f7M9pvTus2Zj9p2T9Kzku6UtEfSA7b3dLvqil6QdKjrEQ1dkvRYkj9Lul3SX2f4e/uzpANJ/iJpr6RDtm/veFMTRyStT/MGZz5qSfsknUzyTZJf1H/lzfs63rSlJO9Jutj1jiaSfJvk08H7P6r/w7ez21WbS99Pgw8XBm8z/Syv7SVJd0t6bpq3Ow9R75R0+rKPz2hGf/Dmme3dkm6T9GG3S7Y2uCu7JumcpONJZnbrwDOSHpf06zRvdB6i9iafm+nf0PPG9rWSXpP0aJIfut6zlSQbSfZKWpK0z/atXW/aiu17JJ1L8sm0b3seoj4jaddlHy9JOtvRlnJsL6gf9EtJXu96TxNJvlf/1Vdn+bmL/ZLutX1K/YeMB2y/OI0bnoeoP5Z0s+2bbF+l/gvfv9HxphJsW9LzktaTPN31niuxvWj7usH710i6Q9JX3a7aWpInkywl2a3+z+zbSR6cxm3PfNRJLkl6RNKK+k/kvJrkRLertmb7ZUkfSLrF9hnbD3e96Qr2S3pI/aPI2uDtrq5HbeEGSe/Y/kL9X/THk0ztz0TzhH8TBYqZ+SM1gNEQNVAMUQPFEDVQDFEDxRA1UAxRA8X8Bx0R4/DSHn+SAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"inv_inp = 1 - inp\n",
"plt.imshow(kornia.utils.tensor_to_image(inv_inp.squeeze()))\n",
"inv_grad = kornia.filters.spatial_gradient(inv_inp)\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(inv_grad[0,0,0].squeeze()))\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(inv_grad[0,0,1].squeeze()))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fb0f370a668>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#The gradients of (image) and (inverted image) are not inverted versions of each other\n",
"# because of border effects of zero-padding\n",
"grad_sum = grad + inv_grad\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad_sum[0,0,0].squeeze()))\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad_sum[0,0,1].squeeze()))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"#To fix:\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"\n",
"def _get_sobel_kernel_3x3() -> torch.Tensor:\n",
" \"\"\"Utility function that returns a sobel kernel of 3x3\"\"\"\n",
" return torch.tensor([\n",
" [-1., 0., 1.],\n",
" [-2., 0., 2.],\n",
" [-1., 0., 1.],\n",
" ])\n",
"\n",
"class SpatialGradientFix(nn.Module):\n",
" r\"\"\"Computes the first order image derivative in both x and y using a Sobel\n",
" operator.\n",
" Return:\n",
" torch.Tensor: the sobel edges of the input feature map.\n",
" Shape:\n",
" - Input: :math:`(B, C, H, W)`\n",
" - Output: :math:`(B, C, 2, H, W)`\n",
" Examples:\n",
" >>> input = torch.rand(1, 3, 4, 4)\n",
" >>> output = kornia.filters.SpatialGradient()(input) # 1x3x2x4x4\n",
" \"\"\"\n",
"\n",
" def __init__(self) -> None:\n",
" super(SpatialGradientFix, self).__init__()\n",
" self.kernel: torch.Tensor = self.get_sobel_kernel()\n",
"\n",
" @staticmethod\n",
" def get_sobel_kernel() -> torch.Tensor:\n",
" kernel_x: torch.Tensor = _get_sobel_kernel_3x3()\n",
" kernel_y: torch.Tensor = kernel_x.transpose(0, 1)\n",
" return torch.stack([kernel_x, kernel_y])\n",
"\n",
" def forward(self, input: torch.Tensor) -> torch.Tensor: # type: ignore\n",
" if not torch.is_tensor(input):\n",
" raise TypeError(\"Input type is not a torch.Tensor. Got {}\"\n",
" .format(type(input)))\n",
" if not len(input.shape) == 4:\n",
" raise ValueError(\"Invalid input shape, we expect BxCxHxW. Got: {}\"\n",
" .format(input.shape))\n",
" # prepare kernel\n",
" b, c, h, w = input.shape\n",
" tmp_kernel: torch.Tensor = self.kernel.to(input.device).to(input.dtype)\n",
" kernel: torch.Tensor = tmp_kernel.repeat(c, 1, 1, 1, 1)\n",
"\n",
" # convolve input tensor with sobel kernel\n",
" kernel_flip: torch.Tensor = kernel.flip(-3)\n",
" padded_inp = F.pad(F.pad(input,(1,1,1,1),'replicate')[:,:,None], \n",
" (0,0,0,0,1,1), 'constant')\n",
" return F.conv3d(padded_inp, kernel_flip, padding=0, groups=c)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fb0f2e68cf8>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"grad = SpatialGradientFix()(inp)\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad[0,0,0].squeeze()))\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad[0,0,1].squeeze()))\n",
"\n",
"\n",
"inv_grad = SpatialGradientFix()(inv_inp)\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(inv_grad[0,0,0].squeeze()))\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(inv_grad[0,0,1].squeeze()))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fb0f33a55c0>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#Now there is no such problem\n",
"grad_sum = grad + inv_grad\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad_sum[0,0,0].squeeze()))\n",
"plt.figure()\n",
"plt.imshow(kornia.utils.tensor_to_image(grad_sum[0,0,1].squeeze()))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment