{ "metadata": { "name": "", "signature": "sha256:b470c46e64a6b0da85e81fc0e58864f785cca59c3c45a2c672095a3f4a74a6cd" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LBP for image segmentation\n", "\n", "This notebook shows how to set up an MRF for a vision problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "To segment an image into foreground and background, we can try to label each pixel as `'0'` (background), or `'1'` (foreground).\n", "We therefore have one random variable for each observed pixel, and one random variable for for each unobserved pixel label.\n", "\n", "If we assume that labels are independent of pixel values and other labels given their neighbours, we get a grid of labels. Let us also assume that the observed pixel values are independent given the labels." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parameters example\n", "Since we will have many factors of the same form, let's template them.\n", "\n", "Here is an example to show how templates can be used.\n", "Each entry in the potential table can be associated with a parameter, for example:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "from pyugm.factor import DiscreteFactor\n", "from pyugm.factor import DiscreteBelief\n", "\n", "# Specify the parameters (should be the same shape as the potential table would have been)\n", "factor_parameters = np.array([['theta_0', 'theta_1'], ['theta_2', 'theta_3']]) \n", "variables_names_and_cardinalities = [(1, 2), (2, 2)]\n", "# Construct the factor\n", "factor = DiscreteFactor(variables_names_and_cardinalities, parameters=factor_parameters)\n", "print factor" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "F{1, 2}\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "# The factor still has its default potential table (all ones)\n", "factor.data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "array([[ 1., 1.],\n", " [ 1., 1.]])" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "# Create a belief based on the factor\n", "belief = DiscreteBelief(factor)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can set the parameters..." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Potentials are filled with the exponent of the parameters.\n", "belief.set_parameters({'theta_0': np.log(2), 'theta_1': np.log(0.2), 'theta_2': np.log(5), 'theta_3': np.log(1)})\n", "belief.data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "array([[ 2. , 0.2],\n", " [ 5. , 1. ]])" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "...and later reset them to something else:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "belief.set_parameters({'theta_0': np.log(1), 'theta_1': np.log(2), 'theta_2': np.log(1), 'theta_3': np.log(1)})\n", "belief.data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "array([[ 1., 2.],\n", " [ 1., 1.]])" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parameter tying example\n", "\n", "The same parameter name can also be specified more than once to force the table to fill different cells with the same value. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "factor_parameters = np.array([['theta_0', 'theta_1'], ['theta_0', 'theta_0']]) \n", "factor = DiscreteFactor([(1, 2), (2, 2)], parameters=factor_parameters)\n", "belief = DiscreteBelief(factor)\n", "belief.set_parameters({'theta_0': np.log(3), 'theta_1': np.log(5)})\n", "print belief.data" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 3. 5.]\n", " [ 3. 3.]]\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Baseline model\n", "\n", "For a baseline, let's classify pixels as background and foreground based only on their intensity." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pickle\n", "import matplotlib.pyplot as plt\n", "import matplotlib\n", "%matplotlib inline\n", "import seaborn\n", "\n", "seaborn.set_style(\"dark\")\n", "# Load pre-discretized image. Each pixel value is an integer between 0 and 32.\n", "image = pickle.load(open('test_image.pkl'))\n", "plt.figure(figsize=(14, 3))\n", "plt.subplot(1, 2, 1)\n", "_ = plt.imshow(image, cmap=matplotlib.cm.Greys_r, interpolation='nearest')\n", "_ = plt.title('Image')\n", "seaborn.set_style(\"darkgrid\")\n", "plt.subplot(1, 2, 2)\n", "_ = plt.hist(image.flatten(), bins=32, color=(0.5, 0.5, 0.5))\n", "_ = plt.title('Pixel intensity histogram')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAsEAAADVCAYAAAC2aS3QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcVWX+B/DPZXEZxQW4XlTEFB3XcFfELS8oIW6UVjO/\nKLWRKB1UXEZTfr6s1Jx+Y/5yavSONU7Zq1dTKNjgZCnmMqam40RjWqKGGMJFlty9COf3h79zfJBz\nF+Du9/P+p8Nztufcm9yH7/0+30cjSZIEIiIiIiIf4ufqDhARERERORsHwURERETkczgIJiIiIiKf\nw0EwEREREfkcDoKJiIiIyOdwEExEREREPoeDYCIi8lkDBgzApUuXGnWNjRs3YvHixar7jh8/jkcf\nfbRR17e3oqIiDBgwAPaqkNqzZ08UFhaq7tu5cyeee+45u9yHyN44CLZAr9fjq6++cnU3iIioEfR6\nPfr164cBAwZgxIgRWLZsGW7evAkAOHnyJMLDwxt1fY1GY3bf4MGD8dlnn9l0naNHj2LMmDGN6ost\nOnTogJMnTyr9Tk5Oxscff+yQe02ePBnvvPOO1eOWLl2KDRs2OKQPROZwEExERF5v06ZNOHnyJLZv\n347//Oc/+NOf/mS3a3PNKfd29+5dV3eB3BQHwTbYvn07nnrqKaxduxZDhgzBuHHj8K9//QuZmZl4\n5JFHEBMTg6ysLOX4L7/8ElOnTsWgQYPwyCOP4I9//GOt62VlZWHs2LEYNmwY3n777VoRZ0mSYDAY\nMG7cOAwbNgzz58/Hzz//7NTnJSLyVjqdDiNHjsTZs2cB3P8q32QyYerUqdi2bRsAoLq6Gk899RTe\nfvttAEBJSQl++9vfYvjw4YiNjcX7779v0/0ejO7q9Xq8++67mDx5MgYPHowFCxbAZDLh5s2bmD17\nNoxGIwYMGICBAweitLTU4mfCpUuX0LNnT+UzJTo6Gps2bVLulZeXh8ceewyDBg3CiBEj8Nprr9U6\nr7q6Gm+88QZOnDiBV155BQMGDMArr7yCl19+GevWrav1HKmpqdi6davZ5/znP/+J+Ph4DBkyBC+/\n/LLSvn37dvz6178GcO/zbc2aNYiJicGgQYMwadIknD17Fh999BH+/ve/Y8uWLRgwYABeeOEFAMC5\nc+eQnJyMIUOGYOLEicjNzVWuW1FRgdTUVAwaNAjTpk3DG2+8odxHfl8/+OADjB8/XklHefXVV/HI\nI49g0KBBeOyxx3D8+HHl+I0bNyItLQ2LFy/GwIEDMWnSJPz444/YvHkzYmJiMHbsWPzzn/+06T0n\nDyKRWWPHjpUOHz4sZWZmSr1795a2b98u1dTUSG+88YY0atQo6eWXX5ZMJpN06NAhacCAAdLNmzcl\nSZKko0ePSj/88IMkSZJ05swZKSYmRvriiy8kSZKks2fPSv3795dOnDghmUwm6bXXXpP69OkjHT58\nWJIkSdq6dav05JNPSsXFxZLJZJIyMjKk9PR017wAREReQP5dLkmSVFRUJCUmJkr/+7//K0mSJPXo\n0UO6ePGiJEmS9MMPP0hDhgyR8vPzpbffflt68sknpZqaGqm6ulpKSkqS3nrrLamqqkq6ePGiFBsb\nKx08eFCSJEl68803pUWLFqne+8iRI9Lo0aNr9WX69OmS0WiUKisrpYSEBOnDDz+UJOneZ4d4rCRZ\n/kwoLCyUevToIWVkZEh37tyRTp8+LfXt21c6d+6cJEmS9MQTT0jZ2dmSJEnSzZs3pX//+9+1zquu\nrpYkSZKefvpp6eOPP1bu+c0330gjR46UampqJEmSpLKyMqlfv35SWVmZ6jP26NFDev7556Vr165J\nRUVFUnR0tHTgwAFJkiQpMzNT+tWvfiVJkiQdOHBASkpKkq5duyZJkiSdO3dOMhqNkiRJ0tKlS6UN\nGzYo1zSZTFJcXJy0efNmqaqqSvrqq6+kAQMGSOfPn5ckSZLmz58vpaenS7dv35by8/OlMWPGSL/+\n9a9r9WnWrFnSzz//LN25c0eSJEnKzs6WKisrperqaundd9+VRowYoex78803pYcfflg6dOiQdPfu\nXWnJkiXS2LFjpU2bNkl3796V/va3v0l6vV71+clzMRJso/DwcCQlJUGj0SAhIQFGoxFz5sxBYGAg\nRowYgcDAQBQUFAAAhg4diu7duwMAevTogQkTJuDrr78GAHz22WfQ6/UYOHAgAgMDMW/evFr3+eij\njzBv3jzodDoEBgZi7ty52L17N2pqapz7wEREXuTFF1/EkCFD8F//9V8YOnQoUlNT6xzTvXt3vPDC\nC3jxxRexdetW/P73v4dGo8G3336LiooKvPjiiwgICECnTp0wffp05OTkNKgvycnJ0Gq1aN26NcaO\nHYvTp08DUE+rsOUzYc6cOWjSpAl69uyJnj174syZMwCgfC6Vl5ejefPm6Nevn9k+ifeOiopCUFCQ\n8g3lrl27MGzYMAQHB5s9PyUlBS1btkT79u0xbNgw5ZlEAQEBuHHjBs6dO4eamhp07doVWq1WtQ/f\nfPMNbt26hZSUFAQEBCA6Ohpjx45FTk4Oqqur8cUXX+C3v/0tmjZtisjISEydOrXO65eSkoJWrVqh\nSZMmAO7lJ7du3Rp+fn6YOXMmTCYTLly4oBw/ZMgQjBgxAv7+/oiPj0dFRQVSUlLg7++PhIQE/PTT\nT7h+/brZ14A8T4CrO+ApQkJClO1mzZoBQK1fCM2aNVMmWnzzzTf4n//5H+Tn56OqqgomkwkJCQkA\nAKPRiLCwsFrntWnTRvn5p59+wty5c+Hnd//vE39/f1y5cgXt2rVzzMMREXm5t99+G8OHD7d63JQp\nU/DGG28gPj4eERERAO79XjYajRgyZIhyXHV1da2f6yM0NFTZbtasGYxGo9ljLX0myMSBpPhZtHr1\narz55puYMGECwsPDMXfuXDzyyCOq93lwct/UqVOxc+dOxMTEYOfOnZgxY4bFZxL70Lx5c9y6davO\nMcOHD8fTTz+NVatWoaioCOPHj8eSJUvQsmXLOsc++FkJ3JvQZzQaUVFRgbt376J9+/bKvgePBVBr\nPwC88847yMzMhNFohEajwfXr11FRUaHsf/AzvW3btsrrIn/u37hxQ7W/5Jk4CHaAhQsXIjk5Ge+8\n8w6aNGmCNWvWoLKyEgDQrl27Wn953r59W9kH3PtHu3btWgwYMMDp/SYi8nWrVq3CI488goMHD+LE\niRMYNGgQ2rdvj/DwcOzevVv1HEvVIepD7TqWPhOslXbr3Lkz/vCHPwAAdu/ejbS0NBw7dsym+06e\nPBmTJk3CmTNncP78ecTFxdn6GBYlJycjOTkZ5eXlmDdvHt55550634gC9z4ri4uLIUmS0r+ioiJ0\n6dIFwcHBCAgIwOXLl/HQQw8BAC5fvmzxuY4fP4533nkHf/3rX5VvaocOHcpJjT6O6RAOcPPmTbRu\n3RpNmjRBXl4e/v73vyv74uPjsW/fPpw8eRImkwkbN26sde5TTz2F9evXo6ioCABQXl6OvXv3OrX/\nRES+KCsrC6dPn8a6deuwYsUKLF26FDdv3kRUVBRatGiBP//5z7h9+zaqq6vxww8/4NtvvwVgv+oQ\nISEhqKysrPWVe2M+E7Kzs1FeXg4ACAoKgkajqRVRloWGhtap8xsWFoa+fftiyZIliI+PV1IKbCFJ\nkupr8u233+Kbb75BVVUVmjVrhqZNm8Lf31+1D/369UOzZs3w5z//GVVVVTh69Cj27duHxMRE+Pn5\nYdy4cdi4cSNu376Nc+fOYefOnRb/GLlx4wb8/f3Rtm1bmEwm/PGPf2RqA3EQbAuNRlPnH5elf2wr\nV67Em2++iYEDB+Ltt9/GhAkTlH3du3dHRkYG0tPTMWrUKLRo0QLBwcHKL5hnn30WsbGxmDVrFgYO\nHIgnn3wSeXl5jnkwIiIfJ0YZ165di3Xr1qF58+aYOHEi+vbti9deew3+/v7YtGkTzpw5g7i4OAwf\nPhz//d//rQyi1D4j1O5hbp+8PzIyEomJiYiNjcXQoUNRWlpq9TPB0rUPHTqEiRMnYsCAAVi7di3W\nr1+vfNaI5z3zzDP47LPPMHToUKxevVppnzp1Kn744QdMmTLF0kuo+vkot4nb169fR0ZGBoYOHQq9\nXo+2bdsqC2lMmzYN586dw5AhQzB37lwEBgZi06ZNOHjwIIYPH45XXnkFv//979GlSxcAQEZGBq5f\nv44RI0Zg6dKlSExMRGBgoNk+jRo1CqNGjUJ8fDz0ej2aNWtWK13Cls95e0X8yX1oJH4X4FI3btzA\n0KFD8fnnn6Njx46u7g6R1zl//jzS09OVnwsLCzFv3jxMnjwZCxYsQFFRETp27IgNGzagVatWAIDN\nmzcjMzMTfn5+WLFiBUaOHOmq7hO5zPHjx7F48WLs27fP1V2x6vXXX0d5eTnWrl3r6q6QB2Ek2AVy\nc3Nx69Yt3Lx5E+vWrUOPHj04ACZykK5duyIrKwtZWVnYvn07mjdvjnHjxsFgMCAmJga7d+9GdHQ0\nDAYDACA/Px+7du1CTk4OtmzZglWrVrE6C/mcqqoq/PWvf8X06dNd3RVV58+fx5kzZyBJEvLy8pCZ\nmWm3vGXyHY0aBB84cACPPvooxo8fr3yAkHW5ubkYPXo0Ro8ejcLCQqxfv97VXSLyCYcPH0ZERATa\nt2+P3NxcJCUlAQCSkpKwZ88eAMDevXuVr1bDw8MRERHBlCTyKefOncPQoUNx5coVPPvss67ujqob\nN24gLS0NAwYMwIIFCzBr1izExsa6ulvkYRpcHaK6uhqvvPIK/vKXv0Cn02HatGmIjY1FZGSkPfvn\nlV599VW8+uqrru4Gkc/JyclBYmIiAKCsrEwpVRUaGoqysjIA90ozifVUw8LCUFJS4vzOErlIZGQk\nTp486epuWPTwww/j888/d3U3yMM1eBCcl5eHiIgIhIeHAwASExOxd+9es4NgtTydFi1aWLzHL37x\ni4Z2z6zS0lJlW66X2LZtW6WtQ4cOyracH1hVVWXxmmIy/tWrVwEAb731ltIm1k+U7y+2yTUdzT2v\npXPE88S2Gzdu1DlHrbahPWfHqj3Hb37zG7tdn6gxTCYT9u3bh8WLF9fZ15iJTWIJJyIi8hwNHgSX\nlJTUmlmp0+n4lSERua0DBw6gT58+SkH8kJAQlJaWQqvVwmg0Ku06nQ7FxcXKecXFxdDpdGavq9Fo\nUFp6zbGddxNabRCf1Uv50vPyWb2TVhtU73MaPAiub+RDjEhaIkYzRXIUsyGRS/GaYvRZXuZYXGlG\nvH7z5s1tur4YKZajwtai3I0lR3qBxkXMxeiw+OxcEYe8TU5ODiZOnKj8rNfrsWPHDqSkpCArK0uZ\nVKPX67Fw4ULMmDEDJSUlKCgoQFRUlKu6TUREDtLgiXE6na7WCi3WoiVERK5y8+ZNHD58GOPGjVPa\nUlJScPjwYcTHx+PIkSNISUkBAHTr1g0JCQlITEzE7NmzsXLlSqY7EBF5oQZHgvv27YuCggJcunQJ\n7dq1w65duyxWORBzcdWYiwDLGhPtFK8tRqTVosp37txp8H0AICDg3kvqiHzmhhBfd2vvgcja+yET\nI9JE7uoXv/gFjh49WqutTZs22Lp1q+rxqampSE1NdULPiIjIVRo8CA4ICEBGRgaee+451NTUYNq0\naawMQUREREQeocGDYAAYM2YMxowZY6++EBERERE5RaMGwfUhfhXfkEljtn4935Br/vzzz0pb69at\nle27d+8CuJ/iUB/ixDKj0Viv/gCOSadQe93NpTM0Js3BEe8VERERkT1x2WQiIiIi8jkcBBMRERGR\nz3FaOsRDDz3krFtZJKYZyF/bV1RUKG1iOoRc/7ch6RBiuTgxHcJSKog9UyDk+7Rr185u15RZq9XM\ndAgiIvdlMplQWFhQq62ioiXKy+v+bu/UqTOaNGnirK4ROZXTBsFERETkeoWFBXjrrTfQpk0bi8dV\nVlZizpwFiIzs7qSeETmXSwbBjljhTI1aRFKt7dy5c8q2GLGWI8G2rhwnatu2bb3PaaiGRF7lSLE4\nAU6MUqtNjLN1tT53qZFMRETq2rRpg9DQUFd3g8ilmBNMRERERD6Hg2AiIiIi8jkuSYdozMQp8Vxr\ntWzV7iMumyx/bV9QcH+CgLhsckOWUJbrIWdmZqre88cff6zTJqch2LNOsPza2Fqj2Nz5DcGJcURE\nROTuGAkmIiIiIp/jkhXj3I0Y9fz3v/+tbA8bNsym8wMDA5XtEydOAAByc3OVtsjISGVbjsx26dJF\naevVq1c9e2y7+kR0xYlx9VldjoiIiMjTMBJMRERERD6Hg2AiIiIi8jkuXSyjIZO/LK24Zo74Nb7a\nPa1d8+7du8q2tdXjLly4UKetoZPTLLHW58auGKdWR1hma71gIndw9epVrFixAmfPnoVGo8HatWvR\nuXNnLFiwAEVFRejYsSM2bNiAVq1aAQA2b96MzMxM+Pn5YcWKFRg5cqSLn4CIiByBkWAi8mqrV6/G\n6NGj8Y9//AM7d+5E165dYTAYEBMTg927dyM6OhoGgwEAkJ+fj127diEnJwdbtmzBqlWrUFNT4+In\nICIiR+AgmIi81rVr13D8+HFMmzYNwL1vcoKCgpCbm4ukpCQAQFJSEvbs2QMA2Lt3LxITExEYGIjw\n8HBEREQgLy/PZf0nIiLHcVo6hFgXV9aQdIj6LJts633E/WqpC/LyyYD1dAi1ewUFBSnb165dA9Cw\npZjrQ61OsLXXQXxtS0pK6uy3tf4vq0iQu7h06RKCg4OxbNkynDlzBn369MFLL72EsrIyZcnY0NBQ\nlJWVAbj376Vfv37K+WFhYar/FoiIyPNZHQQvW7YM+/fvR0hICD799FMAQGVlpdl8OiIid3H37l18\n9913yMjIQFRUFFavXq2kPsg0Gg00Go3Za1jaJ9Nqg6we4y34rJ6voqKl9YP+X3BwS698Hbzxmczx\npWetL6uD4McffxzJycn43e9+p7TJ+XSzZ8+GwWCAwWDAokWLbL5pY1ZDMxf9VYtSqkUkxQllav0Q\nz5FXjBMjwdYiuGJNYFlRUZHFfjiSufrMas8uHstV38gbhIWFQafTISoqCgAQHx8Pg8GA0NBQlJaW\nQqvVwmg0Ijg4GACg0+lQXFysnF9cXAydTmf1PqWl1xzzAG5Gqw3is3qB8nLbJzeXl1/3utfBm9/b\nB/nas9aX1ZzgwYMH14nymsunIyJyJ1qtFu3bt1eqtnz11Vfo1q0bxo4dix07dgAAsrKyEBcXBwDQ\n6/XIycmByWRCYWEhCgoKlAE0ERF5lwblBJvLpyMicjcZGRlYtGgRqqqqEBERgbVr16K6uhrz589H\nZmamktIFAN26dUNCQgISExPh7++PlStX2pQOQUREnqfRE+Os5dPJxDQDR0ycsvXrezENwdo5FRUV\nANQn9Znz0EMPAQA6dOigtMmT4USdO3e2uR+NUZ++iyzVCbaGqRTkTnr27InMzMw67Vu3blU9PjU1\nFampqQ7uFRERuVqDSqSFhIQo+aNiPh0RERERkSdo0CBYr9er5tMREREREXkCq+kQ6enpOHbsGCor\nKzFmzBikpaUhJSVFNZ/OEvErckvVIax9lW7uXFsrTojHqd1LTJcoKCgAUDt1QY1YPSI8PBwAMGrU\nKKVNTClwRFUI+ZnE57G2bLKt6Q5iNQ6xjrCt5xARERG5I6uD4PXr16u2m8unIyIiIiJyd05bMc5a\nNLUh1CKTYhRSjozWpy6xeKxcVmnYsGFK261btwBYrxf8wgsvKNvnzp1Ttj///PM6fbfXRDKx72LO\ndkPOl4l944pxRERE5C0alBNMREREROTJOAgmIiIiIp/jtHQIka0TrJx1b3Nf38tf///8889Km7x6\nnrV0iMDAQGW7adOmyracpmBtyWZ7qc81zS2xTERERORtGAkmIiIiIp/DQTARERER+RynpUOIX7U3\nphqCtUoP4rXlVABrKQHWavcWFhYq261bt7bYD7lm8NWrV1X321olQ7y+3P/6VJSQn0m8jrVqGiJL\n16/Pe0BERETkjlySE0xERET2ZTKZUFhYYPW4ixetH0PkC1w6CFZbSc3c6mpq0Vy1NjEKqdVq6xwn\n7ldbTU2Mlsrnh4aGKm3iJDmZOPHtzp07dY6rqKhQtuVV6ORrm6MW9a3PSmzyM4tRW7XV31w5SZGI\niOynsLAAb731Btq0aWPxuIsXLyIiIsJJvSJyX4wEExEReYk2bdrUCtyoEQMzRL6ME+OIiIiIyOc4\nLRJsbfKZI8ipANYmxplLCTh9+jQA4ODBg0pbp06dANROZxBTLOSJb5GRkUrbQw89pGzPnz8fAPDF\nF18obfLSxuI11VIfzE04s1Tf19w+azWB1dJTrGnIOUTOoNfr0aJFC/j7+yMgIACffPIJKisrsWDB\nAhQVFaFjx47YsGGDUgd88+bNyMzMhJ+fH1asWIGRI0e6+AmIiMjeGAkmIp/w/vvvIysrC5988gkA\nwGAwICYmBrt370Z0dDQMBgMAID8/H7t27UJOTg62bNmCVatWoaamxpVdJyIiB+AgmIh8giRJtX7O\nzc1FUlISACApKQl79uwBAOzduxeJiYkIDAxEeHg4IiIikJeX5/T+EhGRYzktHcJc1QdL1GrlmmPr\nNcXryGkIIjFN4MKFCwCAoKAgpe27776rc06XLl2U7RdeeAHA/SoRAFBcXKxsy+0TJkxQ2nbt2gXA\nfPUHa3V5Le03l/ZgrRqHTEzRkK+l1iZinWByNxqNBjNnzoSfnx+eeuopPPHEEygrK1MmEIWGhqKs\nrAzAvd8L/fr1U84NCwtDSUmJS/pNRESOw+oQROT1PvzwQ7Rr1w7l5eWYOXMmunbtWmu/RqOBRqMx\ne76lfQCg1QZZ3O9N+Kzuq6LC/iUvg4NbetzrYAtvfCZzfOlZ68trBsG2ToITo5TythhJlev4ArUj\nwJba5s2bp2zLkV55gg0A/Pjjj8r27du3AdSO+vbv3x8A8MEHHyht1qK/1iLf8vnOnJAo39Na34mc\nTa4JHhwcjHHjxiEvLw8hISEoLS2FVquF0WhEcHAwAECn09X69qa4uBg6nc7i9UtLrzmu825Eqw3i\ns7qx8nLba8nX55qe9jpY44nvbUP52rPWl9VB8OXLl7FkyRKUl5dDo9HgiSeewDPPPGNxZjURkbu4\ndesWqqur0bJlS9y8eROHDh3C3LlzodfrsWPHDqSkpCArKwtxcXEA7lWSWLhwIWbMmIGSkhIUFBQg\nKirKxU9B5HzV1dU2ry7XqVNnNGnSxME9IrIvq4PggIAAvPTSS+jVqxdu3LiBxx57DCNGjEBmZiZi\nYmIwe/ZsGAwGGAwGLFq0yBl9JiKy2ZUrVzB37lwA9z7UJ02ahJEjR6Jv376YP38+MjMzlT/kAaBb\nt25ISEhAYmIi/P39sXLlSqvpEETe6OrVq/j00+1WV6CrrKzEnDkLEBnZ3Uk9I7IPq4NgrVarTIRq\n0aIFIiMjUVJSgtzcXGzbtg3AvZnVycnJFgfBtn59b26JY2vkY62dI35Vr9anW7du2XS/gQMHKttq\nE8XEqHh0dLSyHRBw7yW/dOmS0iYfK17HWlqHtSWjXZEOQeSOOnXqhOzs7Drtbdq0wdatW1XPSU1N\nRWpqqoN7RuT+bFmBjshT1atE2qVLl3D69GlERUWZnVlNREREROTubJ4Yd+PGDaSlpWH58uV1Vliz\nNrPamcRIr1pUWIyMypNl5FJoAHDt2v0EcrVJcLKEhARlWyyHdvny5TrHiqvHyUJCQpRt+Q+Ihx9+\nWGn79ttvlW35maxFudWivuZeD1snr4nvtbVV5oiIiIg8hU2R4KqqKqSlpWHy5MnK5BF5ZjWAWjOr\niYiIiIjcndVBsCRJWL58OSIjIzFjxgylXZ5ZDaDWzGoiIiIiIndnNR3ixIkT2LlzJ3r06IGpU6cC\nANLT05GSkqI6s9pV1CbWqbWprRh38eJFm+8j50F36tRJaTt8+LCy/Z///KfOOWoTBsUcarkmafv2\n7ZU2MR1Cxvq7RERERPZhdRA8ePBgnDlzRnWfuZnVRERERETurF7VIYiIiIiIvIHHLZsspgRYq6Ur\nE6siqJ1z5coVi+eLFSPk+sBiRYi+ffsq23I1hXXr1iltc+bMUbabN28OoHZ1CDXmUjhsJVeKsJZC\nIV6bNYWJiIjIVzASTEREREQ+x2mRYGsRx/qsDteYe4vEFdpklmoDA0CXLl3qtIWFhSnbahHeU6dO\nKdt9+vQBcD8iLJ5z/fp1pU18jRoS8ZbVZzKdWk1hsU9ERERE3oKRYCIiIiLyORwEExEREZHPcVo6\nhLVJV2o1fR1xb/H6BQUFAGxfKhkAdDqdxf1ymsOECROUto8//rjOfjktwhx5SWegYSkJcjpDQ5Za\ntoZLKRMREZGnYySYiIiIiHwOB8FERERE5HPcpjqEI6ilAog1ga3VB1bTrFmzOm0BAXVfxvHjxyvb\na9asqbP/6tWryrZaBQfxNZLTIRxRQUNtmWmRWuoDK0aQp6mursbjjz+OsLAwbNq0CZWVlViwYAGK\nioqUZd9btWoFANi8eTMyMzPh5+eHFStWYOTIkS7uPREROQIjwUTk9d577z1ERkYqPxsMBsTExGD3\n7t2Ijo6GwWAAAOTn52PXrl3IycnBli1bsGrVKtTU1Liq20RE5EBus2KcrVHO+kRDT58+XaetIfV3\nxclyYn1fS+SoEgDcunVL2V6/fj0A4LXXXlPa1CKwYt8aM/nMnlF3+VqcGEeepLi4GPv370dqaiq2\nbt0KAMjNzcW2bdsAAElJSUhOTsaiRYuwd+9eJCYmIjAwEOHh4YiIiEBeXh769+/vwicgIiJHYCSY\niLzamjVrsGTJEvj53f91V1ZWhtDQUABAaGgoysrKAABGo7HW4jdhYWEoKSlxboeJiMgp3CYSTERk\nb/v27UNISAh69+6No0ePqh6j0Wig0WjMXsPSPplWa7m0ojfhs7qvioqW1g9ykODglh71enlSXxvL\nl561vrxmEKyWJiGnLogT4OToz4PttpInxokT20RNmzats1+852effQbgXsRJJtcrFlMtxDQGebs+\nSyDbaxLGVIWpAAAeQElEQVQdJ8GRJzt58iRyc3Oxf/9+mEwmXL9+HYsXL0ZISAhKS0uh1WphNBoR\nHBwM4F4d8OLiYuX84uJiq7XBAaC09JrVY7yBVhvEZ3Vj5eWu+31dXn7dY14vT3xvG8rXnrW+mA5B\nRF4rPT0d+/fvR25uLtavX4/o6Gi8/vrr0Ov12LFjBwAgKysLcXFxAAC9Xo+cnByYTCYUFhaioKAA\nUVFRrnwEIiJyEK+JBBMR2SolJQXz589HZmamUiINALp164aEhAQkJibC398fK1eutCkdgoiIPI/F\nQfCdO3fw9NNPw2QyoaqqCrGxsVi4cKHFGpvu5KGHHgJQuzqDuN0Yt2/fVm3v0KFDnTax0kNSUhKA\n2ssi37lzp9Z/gdoVGOQ0CLFNLU1B3O+ImsJEnmzo0KEYOnQoAKBNmzZKpYgHpaamIjU11Yk9IyIi\nV7CYDtG0aVO89957yM7Oxs6dO3H06FEcP37cbI1NIiIiIiJPYDUdQp6sVVVVherqarRu3dpsjc3G\nsLVmb33IEVRxwlljI8FyBFiM5Gq12jrHXb58WfWeKSkpAO5PoAOAtm3bAgAqKiqUtrNnzyrb1qK6\n8n53if46a0VAIiIiooayOjGupqYGU6ZMQUxMDIYNG4bu3bubrbFJREREROQJrEaC/fz8kJ2djWvX\nruG5557DkSNHau23VmOTiIiIiMjd2FwdIigoCGPGjMGpU6fM1ti0xNpX5PJ+MS1CrIvbkHQJOT1A\nTEcQUyPk7WvXLNfQE/erpVPcvXu3Ttu6deuU7TFjxtTZHxgYqGxXVVXV2S8+r7xdn9egsSkJ8r3U\n3gNztYPdJR2DiIiIyBqL6RDl5eXKog+3b9/G4cOH0bt3b7M1NomIiIiIPIHFSHBpaSmWLl2Kmpoa\nJTd4+PDh6NWrl2qNTSIiIiIiT2BxENyjRw8l4iuyVGOzoeSv3R1RJUIkpgnIqQ1BQfeX2hNTH8R2\nmVp94ICA+y/jqVOnAADff/+90jZnzpw656tVrBDrBIvk6hPW0g3UXjsxnYHpCkRERET3cNlkIiIi\nIvI5Tls2WYxSOquOrBwFlcu5iW0AEBERUadv1ibJlZSUALgXJZeJE+MyMzMB3K8HDNSeGKc2qUxt\nYpxIXglOXBFOJF9TLerL6C8RERFRXYwEExEREZHP4SCYiIiIiHyO09IhXLmUrpgmoNYPc31TS424\ncOECAGDYsGFKm5hy0KdPHwDAhAkTVK8pL5csl54DgLy8PAC1Uyzk+4j9MzfJzdJkwsa+7mIKRmlp\naaOuRUREROQuGAkmIiIiIp/jtEiwGldGhwGgXbt2AGpHUsUIrJrTp0/XaROjuv379wdQe0U4kdwu\nToZr3759neuoTWgT+ynuFyPED2psiTRzq8MREREReTJGgonIa925cwfTp0/HlClTMGHCBPzhD38A\nAFRWVmLmzJmIj4/HrFmzav0BunnzZowfPx6PPvooDh065KquExGRg3EQTEReq2nTpnjvvfeQnZ2N\nnTt34ujRozh+/DgMBgNiYmKwe/duREdHw2AwAADy8/Oxa9cu5OTkYMuWLVi1ahVqampc/BREROQI\nLk2HcAW11IEuXboo2//617+UbbWJcUajEQBQXFystKmt/ta5c2eb+yRPlvvxxx+VNnmVOHN9tpYu\n4Qj1mVRI5C7kf59VVVWorq5G69atkZubi23btgEAkpKSkJycjEWLFmHv3r1ITExEYGAgwsPDERER\ngby8PCXNiYiIvAcjwUTk1WpqajBlyhTExMRg2LBh6N69O8rKypRFdEJDQ1FWVgbg3h+5YWFhyrlh\nYWHKAjlERORdfC4STES+xc/PD9nZ2bh27Rqee+45HDlypNZ+jUYDjUZj9nxL+2RabVCj++kp+Kzu\nq6JCfVVRZwgObulRr5cn9bWxfOlZ68ulg2Dx63v5K39Hf70u1rpVSykQl1i2tITyl19+qWw/++yz\nyvadO3cAAAEB919a8Z7yfpGcDnHu3DmlTUyBUFsuWWyTUzSYmkBkXlBQEMaMGYNTp04hJCQEpaWl\n0Gq1MBqNCA4OBgDodLpaqU7FxcXQ6XRWr11aanm5dW+h1QbxWd1YebnrqvmUl1/3mNfLE9/bhvK1\nZ60vpkMQkdcqLy9XKj/cvn0bhw8fRu/evaHX67Fjxw4AQFZWFuLi4gAAer0eOTk5MJlMKCwsREFB\nAaKiolzWfyIichyPSYdoSJTTWl1cORItHidOcpMjwUFBdf+6ECfQJSUl1dkvRnVFZ8+eBQAMGjRI\naZMjuQUFBUqbODGuISu1OSIqLL9eluoSE7mT0tJSLF26FDU1NUpu8PDhw9GrVy/Mnz8fmZmZ6Nix\nIzZs2AAA6NatGxISEpCYmAh/f3+sXLnSpnQIIiLyPB4zCCYiqq8ePXooEV9RmzZtsHXrVtVzUlNT\nkZqa6uCeERGRqzEdgoiIiIh8jk2R4Orqajz++OMICwvDpk2bUFlZiQULFqCoqEj5KrFVq1aO7iuA\n2l/FW6uLKx9rbrlhOf1Aru37ILU0CLlNnDQnF9oHgOXLlwOovQTyzz//rGyLaRCyzZs31+mnuC2n\nRogpDo6uCWwrtX42ZHlmIiIiImeyKRL83nvvITIyUvnZ3GpLRERERESewOoguLi4GPv378f06dOV\nttzcXGUyWFJSEvbs2eO4HhIRERER2ZnVdIg1a9ZgyZIluH79fv1Bc6stuZvvvvuu1n8B4KefflK2\nbU3hKCoqUrY7dOgAoHaqxNGjR5XtFStWAADmzZuntHXt2lXZPn/+PABg/fr1SptcHUKk1iYu76yW\nVuGKNATWJiYiIiJPZDESvG/fPoSEhKB3796QJEn1GGurLRERERERuRuLkeCTJ08iNzcX+/fvh8lk\nwvXr17F48WKzqy25A7F+7/Hjxy0eK0a31cirsomrs8kT3sTosEhuP3TokNLWsWNHZVuORNt6b5EY\nxb5w4YKyPWTIEAC1awu7oqYvJ8QRERGRp7AYCU5PT8f+/fuRm5uL9evXIzo6Gq+//rrZ1ZaIiIiI\niDxBg+oEp6Sk4PDhw4iPj8eRI0eQkpJi734RERERETmMzSvGDR06FEOHDgVgebUlV5FTH7788ss6\n+8x9TW8tVUBOWQgLC6vTJk+QA2rXBFYj1hSWiekO8jXFFAlxYpzcT/Gc77//vs72qFGjlLZevXpZ\n7BMRERGRL+OKcURERETkczgIJiIiIiKfY3M6hDsS0xwOHjxodr94nFoKhFpqAgD88pe/rHOsXOlB\nrBMspkaYqxrx4PliioRcr9jcuWrPoeYf//iHsi3X7xUrRhARERHRPYwEExEREZHPcZtIsFqUU2yT\n696Krly5omxbqrsrr24H1I76ihFcmRiNlSe8iXV+xQiwGnm/GOkVJ87J+9WuY26yXXFxMQDrkWBx\nf15eHgDzE+RY05eIiIh8GSPBROS1Ll++jOTkZCQmJmLixIl47733AACVlZWYOXMm4uPjMWvWrFp/\ndG7evBnjx4/Ho48+WmvRGyIi8i4cBBOR1woICMBLL72EnJwcfPTRR/jggw9w7tw5GAwGxMTEYPfu\n3YiOjobBYAAA5OfnY9euXcjJycGWLVuwatUq1NTUuPgpiIjIEdwmHUImpj3Ik7vMEdMh1KjV11Vb\njlhkbb8atTrAaqkWwP2lj8UUC2vU+mQtnUFO66jP60nkbbRarTI5tEWLFoiMjERJSQlyc3Oxbds2\nAEBSUhKSk5OxaNEi7N27F4mJiQgMDER4eDgiIiKQl5eH/v37u/IxiIjIARgJJiKfcOnSJZw+fRpR\nUVEoKytT5gqEhoairKwMwL1FasTFccLCwlBSUuKS/hIRkWO5XSS4Ps6cOaNsy5HRdu3aKW1yBFWc\nNGdpAp0t1KK+1o5TmwQnR4SB+yXSrK08Zy6irfZM8opzFy9eVNq4ihz5qhs3biAtLQ3Lly+v882K\nRqOBRqMxe66lfTKt1vKEWW/CZ3VfFRX1/ybTXoKDW3rU6+VJfW0sX3rW+vLoQTARkTVVVVVIS0vD\n5MmTERcXBwAICQlBaWkptFotjEYjgoODAQA6nU6pxgLcq8yi0+ms3qO01LY/jj2dVhvEZ3Vj5eWN\nC/I09t6e8np54nvbUL72rPXFdAgi8lqSJGH58uWIjIzEjBkzlHa9Xo8dO3YAALKyspTBsV6vR05O\nDkwmEwoLC1FQUICoqChXdJ2IiBzMpZHgxk7UEtMA5HQIOQ1A3C/m+KmR0xGA2ikJ8vlqqQsitXQH\na/WE1VIfzPWjR48eAMzXHraU4nHhwgVluyHpEOIEPPn9Er9OZr1hcmcnTpzAzp070aNHD0ydOhUA\nkJ6ejpSUFMyfPx+ZmZno2LEjNmzYAADo1q0bEhISkJiYCH9/f6xcudKmdAgiIvI8TIcgIq81ePDg\nWnMHRFu3blVtT01NRWpqqgN7RURE7oDpEERERETkc9wuEiymSMh1foH79W7FurdqaQBqX8+LE13U\nKiyINX3N1feVyWWVmjdvrrTJdUgf7L+a0tJSALWrWKi5deuWsq1WkUJ8JkspCWIqh/jayX0W29RS\nH0TysY2tsEFERETkaowEExEREZHPsSkSrNfr0aJFC/j7+yMgIACffPIJKisrsWDBAhQVFSkTS9Qm\njdWXGJkUI8FyZFKOpALqEVDxHLXjxG21iKb4DHJUWIz6qlHrh7WIsLhfXvlOXuXtwW25n+YivpZe\nB7XJg5auRUREROQLbI4Ev//++8jKysInn3wCADAYDIiJicHu3bsRHR0Ng8HgsE4SEREREdmTzYNg\nSZJq/Zybm4ukpCQAQFJSEvbs2WPfnhEREREROYhN6RAajQYzZ86En58fnnrqKTzxxBMoKytTJomF\nhoairKzMoR2VFRQUWNwvfs2vlhqhdqy5ZZXlWrzW0jzEmsDyJDaxTW2/Ws1fc/2wlrogP6faceJ1\n1CbGqV0HuJ92IqZtNLauMxEREZG7sGkQ/OGHH6Jdu3YoLy/HzJkz0bVr11r7NRoNC8oTERERkcew\nKR1CLucVHByMcePGIS8vDyEhIUq00Gg0Ijg42HG9JCIiIiKyI6uR4Fu3bqG6uhotW7bEzZs3cejQ\nIcydOxd6vR47duxASkoKsrKyEBcX54z+1loW2dbqEPUh1hGW0yDEdAb5DwIxNUBOCwHup2uI/RSr\nS6ilSzREQypjiLWHG3JNVpQgIiIib2F1EHzlyhXMnTsXAFBdXY1JkyZh5MiR6Nu3L+bPn4/MzEyl\nRBoRERERkSewOgju1KkTsrOz67S3adMGW7dudUSfVMmTutRWTwMaFwEWJ4+JkWB5wppIjuCKkWBx\nwpk18vnmnsNW1qK+aurTz8ZobDSeiIiIyNHcbtlkIiIi8hzV1dW4eNFy5SZZp06d0aRJEwf3iMg2\nHAQTEXk4k8mEwkIOQsg1rl69ik8/3Y42bdpYPK6yshJz5ixAZGR3J/WMyDKPGwSLywk3ltrX9uZS\nIx5kLbWgsRPf1O6ttsyzNdYmxpmr/cuawESeo7CwAG+99QYHIeQybdq0qTVJnMgTeNwgmIioPpYt\nW4b9+/cjJCQEn376KYB7g8EFCxagqKhImdgrV4PZvHkzMjMz4efnhxUrVmDkyJGu7L7NOAipy1si\n5LY+h60pCUR0DwfBROTVHn/8cSQnJ+N3v/ud0mYwGBATE4PZs2fDYDDAYDBg0aJFyM/Px65du5CT\nk4OSkhLMnDkTu3fvhp+fzSvMkxvxlgi5rc9x8eJFREREOKlXRJ7PpYNgMaXA1q/fxZQAe1UhEFMP\n1OoEi+SqDmLERawDLLNWk1dt2eT69LMhqRGNrUhhK9YTJncyePBgXLp0qVZbbm4utm3bBgBISkpC\ncnIyFi1ahL179yIxMRGBgYEIDw9HREQE8vLy0L9/f1d03WXMRR4rKlqivLz27x5XRFDrExn1lgi5\nLc9RUVHhpN4QeQdGgonI55SVlSkDitDQUJSVlQG4t8hNv379lOPCwsJQUlLikj66kq2Rx7KyMkyd\nOh0REZ2tXtOeg2VGRonIHlwyCLYUwRUjwmJE0RXRRTlCK0aE5QlvYhRbLRLsLsTX+qeffnLavYg8\nhUajgUajsbjfGq22cRNhG6uiwvwk3gcFB7e02t+KipY2Rx5trQqQkZGBjh1/aXM/7dU/W6m9Lq5+\nX2X1eX/dnS3//zmDO/TBWXzpWeuLkWAi8jkhISEoLS2FVquF0WhEcHAwAECn06G4uFg5rri4GDqd\nzur1Skudk2pkzoMpCtaOtdbf+lzP1nQDW+5rq/r0rz7XFPun1Qa5/H2VOeJ5XcWe/x80lDu9t47m\na89aX5ztQUQ+R6/XY8eOHQCArKwsxMXFKe05OTn/n3NaiIKCAkRFRbmyq0RE5CAuiQQ3JLVBTj+4\ncuWK6v6GfBVvqQ4woD4xTo3aJDgxRUJM8bA2YU6N3M+GTIYTnT9/XtmWX0+xb+Jr2Jj0E06MI3eS\nnp6OY8eOobKyEmPGjEFaWhpSUlIwf/58ZGZmKiXSAKBbt25ISEhAYmIi/P39sXLlSpvSIcgyrihG\nRO6I6RBE5NXWr1+v2r5161bV9tTUVKSmpjqwR76HK4oRkTviIJiIyEfYGpF1xKIL3lKqjIjq8tSF\naZw2CLa2zLA1hYWFduqJZWopBx07dqz3dcQ0g8Y+e2OYSxORUxa0Wq3F88XUBrVrsSIEkeewNSLL\n0mJEVB+eujANI8FERD6Eiy4QkSN44rc9LhkEy1HShqwY5+jIo9pkOXGlNblOsLkJbmrP1pDJcCJr\nE+LUJqLJr5O1yX/W9jf0WCIiIiJ3xhJpRERERORzbBoEX716FWlpaUhISMCECRPwzTffoLKyEjNn\nzkR8fDxmzZqlrK5GREREROTubEqHWL16NUaPHo0333wTd+/exa1bt/CnP/0JMTExmD17NgwGAwwG\nAxYtWmT2GmoTsByR2qB2TXN1a+U0g7CwMJuvL6ZGWOLoFAgxNaEhaQpyvWWj0WjzOdbq/8opIKwT\nTETeyFNnwBOROquD4GvXruH48eNYt27dvRMCAhAUFITc3Fxs27YNAJCUlITk5GSLg2AiIiJ3pFY6\nrqKiZZ3lii9eLGC9YyIvYnUQfOnSJQQHB2PZsmU4c+YM+vTpg5deegllZWXKLMDQ0FCUlZVZvI6t\n0UFz0WG1CKy1SLIcIbUWKS0uLq5zjqPYGknu0KFDnTYx5USMFNu6opy1/Wql3GydsChi2TQi8iT1\nLR3naTPgiUid1UHw3bt38d133yEjIwNRUVFYvXo1DAZDrWM0Gg2XFiUiIo/F0nFkT/ZOnWEqjmNY\nHQSHhYVBp9MhKioKABAfHw+DwYDQ0FCUlpZCq9XCaDQiODjY4Z0lIiIicnf2XjzCUxejcHdWB8Fa\nrRbt27fHhQsX0KVLF3z11Vfo1q0bunXrhh07diAlJQVZWVmIi4uzeB1bV00zVzvY1jSC+tTFbdWq\nVZ39ch1g8Z5qqQnmWIskiCkkMvmZ5clqQO0Ja2rP3ti0jebNmwMA2rVr16jrqLGWdkFE5M1sXZ4a\nYNTO09gakb14scDui0d44mIU7s6m6hAZGRlYtGgRqqqqEBERgbVr16K6uhrz589HZmYmOnbsiA0b\nNji6r0RERG7P1hxjRu08j60RWXdfepzpFffYNAju2bMnMjMz67Rv3brV3v0hIqL/d/36tVrfEJlz\n+fJlJ/SG6oNRO89i7wivu+eP2zqYLysrw9Sp0xER0dnicbZ+8+FunLZssiuXRbaWOiCmO8hpAoB6\nqoD8HOI/gM6d7//PId/L3PPKqQ8XLlxQ2uQPOXO1hcUUDZm5ShEPMvfs8r0asiSzOfJ7xzrBRPaR\nnb0d+flnrB538WIhOnd236gTEWD/NBFbB662XMtbIrwPvsZqpf6A+g3m61M5xdM4bRBMROQpDhw4\ngDVr1qCmpgbTpk1DSkqKS/rh5+evutDQgyoqKp3QG6LGsXeaiC0DV7VIprka0N4Q4a1vuT9beMPr\nYo7TBsGurB2rVlPXHFtXehMjxmLkU+364mQ/uS+lpaU23QewPilQrU6wteeU+2SuH4zmkq+qrq7G\nK6+8gr/85S/Q6XSYNm0aYmNjERkZ6equEXk8Z08W8/ZIphp3HrS626RRRoKJiAR5eXmIiIhAeHg4\nACAxMRF79+7lIJjIQ7nzoNDXuNukUQ6CiYgEJSUlaN++vfKzTqdDXl6eS/ri5+dXa0VLcyorf4af\nn/UFi65du2bTwkauOq6ystKmKNHFiwWorLSeAsLn9czj7Pm6+NKzOqJ/jjhOrTytq2gkSZJc3Qki\nInexe/duHDx4EK+++ioAIDs7G3l5ecjIyHBxz4iIyJ78XN0BIiJ3otPpapUcKy4uhk6nc2GPiIjI\nETgIJiIS9O3bFwUFBbh06RJMJhN27dqF2NhYV3eLiIjsjDnBRESCgIAAZGRk4LnnnlNKpHFSHBGR\n92FOMBERERH5HKZDEBEREZHP4SCYiIiIiHwOB8FERERE5HOcNjHuwIEDWLNmjTLRJCUlxS7XXbZs\nGfbv34+QkBB8+umnAO4Vn16wYAGKiorQsWNHbNiwodHFmS9fvowlS5agvLwcGo0GTzzxBJ555hm7\n3+vOnTt4+umnYTKZUFVVhdjYWCxcuNAhzwTcW8Lw8ccfR1hYGDZt2uSw+xB5I0f9XnNHer0eLVq0\ngL+/PwICAvDJJ5+4ukt246zPEXeg9qwbN27Exx9/jODgYABAeno6Ro8e7cpu2oWzPrfdgbln9db3\n1m5jJckJ7t69K8XFxUmFhYWSyWSSJk+eLOXn59vl2l9//bV06tQpaeLEiUrbunXrJIPBIEmSJG3e\nvFl6/fXXG30fo9Eofffdd5IkSdL169el8ePHS/n5+Q65182bNyVJkqSqqipp+vTp0tdff+2Q+0iS\nJL377rtSenq69Pzzz0uS5JjXjsgbOfL3mjsaO3asVFFR4epuOISzPkfcgdqzbty4UXr33Xdd2CvH\ncObntquZe1ZvfW8lyT5jJaekQ+Tl5SEiIgLh4eEIDAxEYmIi9u7da5drDx48uM4oPzc3F0lJSQCA\npKQk7Nmzp9H30Wq16NWrFwCgRYsWiIyMRElJiUPu1bx5cwBAVVUVqqur0bp1a4fcp7i4GPv378f0\n6dOVNkfch8gbOfL3mruSvLSYkLM+R9yB2rMC3vneOvNz29XMPSvgne8tYJ+xklMGwSUlJWjfvr3y\ns06nU94cRygrK0NoaCgAIDQ0FGVlZXa9/qVLl3D69GlERUU55F41NTWYMmUKYmJiMGzYMHTv3t0h\n91mzZg2WLFkCP7/7/xs4+rUj8hbO/r3mahqNBjNnzsRjjz2Gv/3tb67ujsP52u/Cbdu2YfLkyXjp\npZdw9epVV3fH7hz9ue1O5Gft168fAO99b+0xVnLKIFij0TjjNmbvbc/737hxA2lpaVi+fDlatmzp\nkHv5+fkhOzsbBw4cwPHjx3HkyBG732ffvn0ICQlB7969zf6VaO/Xjsib+Nq/jQ8//BBZWVnYsmUL\nPvjgAxw/ftzVXXIab/9d+Ktf/Qp79+5FdnY2tFotXnvtNVd3ya6c8bntLsRnbdGihVe/t/YYKzll\nEKzT6XD58mXl5+LiYuh0OofdLyQkBKWlpQAAo9GoJIQ3VlVVFdLS0jB58mTExcU59F4AEBQUhDFj\nxuDUqVN2v8/JkyeRm5sLvV6PhQsX4siRI1i8eLFDn4fImzj795qrtWvXDgAQHByMcePGIS8vz8U9\ncixf+l0YEhKiDBimT5+Ob7/91tVdshtnf267krln9db3VtaYsZJTBsF9+/ZFQUEBLl26BJPJhF27\ndiE2NtZh99Pr9dixYwcAICsrS/mfoTEkScLy5csRGRmJGTNmOOxe5eXlytcVt2/fxuHDh9G7d2+7\n3yc9PR379+9Hbm4u1q9fj+joaLz++usOee2IvJGzf6+50q1bt3D9+nUAwM2bN3Ho0CH88pe/dHGv\nHMuXfhcajUZle8+ePV7z3jrrc9sdmHtWb31v7TVWctqyyfv3769VSuj555+3y3XT09Nx7NgxVFZW\nIiQkBGlpaYiNjcX8+fNx+fJlu5U/OX78OJ5++mn06NFDCa+np6cjKirKrvf6/vvvsXTpUtTU1Cj5\nLr/5zW9QWVlp92eSHTt2DO+++65SIs1R9yHyNo76veZuCgsLMXfuXAD3yipOmjTJq57VWZ8j7uDB\nZ/3tb3+LY8eO4fTp09BoNAgPD8fLL7+s5FV6Mmd9brsDtWddsGABcnJyvPK9tddYyWmDYCIiIiIi\nd8EV44iIiIjI53AQTEREREQ+h4NgIiIiIvI5HAQTERERkc/hIJiIiIiIfA4HwURERETkczgIJiIi\nIiKf839DZxCPPTVuIwAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 83 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a template where the probability that a pixel is foreground or background is different \n", "given that the pixels intensities are either between 13 and 17 or not." ] }, { "cell_type": "code", "collapsed": false, "input": [ "observation_template = np.array([['obs_low'] * 32,\n", " ['obs_high'] * 32])\n", "observation_template[0, 13:17] = 'obs_high'\n", "observation_template[1, 13:17] = 'obs_low'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 85 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each observed pixel variable occurs in the same factor as its label." ] }, { "cell_type": "code", "collapsed": false, "input": [ "I, J = image.shape\n", "factors = []\n", "evidence = {}\n", "\n", "# Add observation factors\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " label_variable_name = 'label_{}_{}'.format(i, j)\n", " observation_variable_name = 'obs_{}_{}'.format(i,j)\n", " factors.append(DiscreteFactor([(label_variable_name, 2), (observation_variable_name, 32)], parameters=observation_template))\n", " evidence[observation_variable_name] = image[i, j]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 86 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build the model" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from pyugm.model import Model\n", "model = Model(factors)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 87 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Choose parameters and set the evidence\n", "\n", "Give a higher probability of seeing background pixel intensities of 13 to 17 than foreground intensities in that range." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from pyugm.infer_message import LoopyBeliefUpdateInference\n", "from pyugm.infer_message import FloodingProtocol\n", "\n", "order = FloodingProtocol(model, max_iterations=30)\n", "inference = LoopyBeliefUpdateInference(model, order)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 88 }, { "cell_type": "code", "collapsed": false, "input": [ "parameters = {'obs_high': 0.1, 'obs_low': -1.0}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 89 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run belief updates\n", "\n", "(Doesn't really do belief updates because none of the factors are connected - but let's go through the process to see how it works)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "inference.calibrate(evidence, parameters)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 90, "text": [ "" ] } ], "prompt_number": 90 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualise" ] }, { "cell_type": "code", "collapsed": false, "input": [ "labels = np.zeros(image.shape)\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " variable_name = 'label_{}_{}'.format(i, j)\n", " label_factor = inference.get_marginals(variable_name)[0]\n", " labels[i, j] = label_factor.normalized_data[0] " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 91 }, { "cell_type": "code", "collapsed": false, "input": [ "seaborn.set_style(\"dark\")\n", "plt.figure(figsize=(14, 3))\n", "plt.subplot(1, 3, 1)\n", "_ = plt.imshow(image, cmap=matplotlib.cm.Greys_r, interpolation='nearest')\n", "_ = plt.title('Original image')\n", "plt.subplot(1, 3, 2)\n", "_ = plt.imshow(labels, cmap=matplotlib.cm.Greys, interpolation='nearest')\n", "_ = plt.title('Inferred labels (white=foreground, black=background)')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nS3eBWKNV68ESW9cpr0friaFyukB5KmqTJk3UeT///LPZe+677z51WnkaqnLXCABkZ2er08r8qKgo\ndd6OHTszWjgUAAAZ4ElEQVQAWL4bRK+uhLXXLaU/9O7OUcipGmVdWvNkrHNBrsaetEZlXrdVTbpD\nhVwbIxdERERkqGqtc2EkWwdvylfVyrR85a/UoQBMIxbW5s2ePVudViITygPOAOD8+fPqdHFxMQDT\nKMVDDz0EAPj000/VeXrRCr1IjfJ+Zw6kVbap13YiV1CdD1Ujqm66JxeXLl3CCy+8gCtXrsDNzQ3j\nxo3Dk08+iYKCAsydOxdZWVkIDAzEqlWrTP6gEhHJ2JcQuQ7dtIiHhwdeeuklbN++HZs3b8ann36K\n9PR0xMfHIzw8HLt27UJYWBji4+Od0V4iqqXYlxC5Dt3IRYsWLdQBfI0aNUL79u2Rk5ODlJQUfPLJ\nJwCA6OhoTJo0CfPmzbO4HlvD+JZKdetRltV7jxyy12pTUVGRTdvr3r27Oq01wFG+8goLC1OnPTzu\nHvKMjAx1nrKsvB699I5e6fPqSIsQWWNUX1IXaZXSJqrNKjWgMyMjA2lpaejWrRvy8/PVZ274+voi\nPz/fIQ0korqHfQlR3WbzgM7CwkLExsbi5ZdfNqto6ebmVmNue5IjE1pRDPlKXnlwmXLLKQDcuHFD\nndYavKkYPny4Oi3fdnrp0iWzZeVqnQofHx91WulM//znP6vzfvrpJ3Va2SdbH7Mus3Q8bB10KX/W\nelU9iWxRW/qSynDE48urqibelloT20SOYVPkorS0FLGxsRg1ahQiIyMB3P3jqPyxyc3Nhbe3t+Na\nSUR1AvsSItege3IhhMDLL7+M9u3bY/Lkyer8iIgIJCYmAgCSkpLUjoKISAv7EiLXoZsWOXHiBLZt\n24aOHTvi0UcfBQDExcUhJiYGc+bMQUJCgnr7WHXSGhCqNU+rQufvv/9u83aU3LDyADMAOHz4sDp9\n6tQps/doDU6T88pKBc9WrVqp8+S0iIL1I6g2qy19iT0cMSBTK23AwZ5UW+ieXPTs2RNnzpzRfG3D\nhg1Gt4eI6ij2JUSug+W/iYiIyFC1rvx3ZR5mppDvktB6z+XLl62+X76DRKlvId8h0rVrV3VaGf2+\nfPlydd7MmTPVaS8vLwCmd4tosZTKsZVy54heKsWeB8oRUdXvfNBLpTAFQrUZIxdERERkqBrzyHVH\n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\n", "text": [ "" ] } ], "prompt_number": 92 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Connecting some of the labels\n", "\n", "Now we can start to think how the factors must be filled to nudge neighbouring labels to be similar and smooth out the baseline a bit.\n", "\n", "In addition to having label and pixel-value variables in the same factor, let's also add factors where neighbouring label variables occur together.\n", "\n", "Let's add one parameter for when these two variables' labels are the same and one for when they are different." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Template" ] }, { "cell_type": "code", "collapsed": true, "input": [ "label_template = np.array([['same', 'different'], \n", " ['different', 'same']])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 93 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Factors\n", "\n", "Before building a model where each label is connected to all four of its neighbours, let's first only connect the top and bottom neighbour. Pixel columns are thus connected." ] }, { "cell_type": "code", "collapsed": false, "input": [ "evidence = {}\n", "factors = []" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "# Add observation factors\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " label_variable_name = 'label_{}_{}'.format(i, j)\n", " observation_variable_name = 'obs_{}_{}'.format(i, j)\n", " factors.append(DiscreteFactor([(label_variable_name, 2), (observation_variable_name, 32)], parameters=observation_template))\n", " evidence[observation_variable_name] = image[i, j] \n", " \n", "# Add label factors\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " variable_name = 'label_{}_{}'.format(i, j)\n", " if i + 1 < I:\n", " neighbour_down_name = 'label_{}_{}'.format(i + 1, j)\n", " factors.append(DiscreteFactor([(variable_name, 2), (neighbour_down_name, 2)], parameters=label_template))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 95 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model\n", "\n", "Add the factors to a model." ] }, { "cell_type": "code", "collapsed": false, "input": [ "model = Model(factors)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "from pyugm.infer_message import LoopyBeliefUpdateInference\n", "from pyugm.infer_message import FloodingProtocol\n", "\n", "# Get some feedback on how inference is converging by listening in on some of the label beliefs.\n", "var_values = {'label_1_1': [], 'label_10_10': [], 'label_20_20': [], 'label_30_30': [], 'label_40_40': []}\n", "changes = []\n", "def reporter(infe, orde):\n", " for var in var_values.keys():\n", " marginal = infe.get_marginals(var)[0].data[0]\n", " var_values[var].append(marginal)\n", " change = orde.last_iteration_delta\n", " changes.append(change)\n", " energy = infe.partition_approximation()\n", " print '{:3} {:8.2f} {:5.2f} {:8.2f}'.format(orde.total_iterations, change, marginal, energy)\n", " \n", "order = FloodingProtocol(model, max_iterations=15)\n", "inference = LoopyBeliefUpdateInference(model, order, callback=reporter)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 99 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Choose parameters\n", "\n", "Lets choose parameters so that neighbouring labels are encouraged to be the same, and observations between 13 and 17 more likely\n", "to be background." ] }, { "cell_type": "code", "collapsed": false, "input": [ "parameters = {'same': 2.0, 'different': -1.0, 'obs_high': 1.0, 'obs_low': -0.0}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 100 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run belief updates" ] }, { "cell_type": "code", "collapsed": false, "input": [ "inference.calibrate(evidence, parameters)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " 1 19715.74 0.73 8207.46\n", " 2 982.23 0.97 8668.57" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 3 347.46 0.99 8831.12" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 4 143.23 0.99 8881.90" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 5 68.94 1.00 8890.86" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 6 39.42 1.00 8893.96" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 7 24.94 1.00 8891.35" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 8 13.82 1.00 8891.82" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 9 8.19 1.00 8891.47" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 10 4.60 1.00 8892.31" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 11 2.94 1.00 8892.65" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 12 1.85 1.00 8893.02" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 13 1.13 1.00 8892.81" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 14 0.62 1.00 8892.83" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 15 0.34 1.00 8892.83" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 101, "text": [ "" ] } ], "prompt_number": 101 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualise" ] }, { "cell_type": "code", "collapsed": false, "input": [ "labels = np.zeros(image.shape)\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " variable_name = 'label_{}_{}'.format(i, j)\n", " label_factor = inference.get_marginals(variable_name)[0]\n", " labels[i, j] = label_factor.normalized_data[0] " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 102 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.figure(figsize=(14, 3))\n", "plt.subplot(1, 3, 1)\n", "_ = plt.imshow(image, cmap=matplotlib.cm.Greys_r, interpolation='nearest')\n", "_ = plt.title('Original image')\n", "plt.subplot(1, 3, 2)\n", "_ = plt.imshow(labels, cmap=matplotlib.cm.Greys, interpolation='nearest')\n", "_ = plt.title('Label beliefs \\n(darker=higher background belief,\\n lighter=higher foreground belief')\n", "plt.subplot(1, 3, 3)\n", "_ = plt.imshow(labels > 0.5, cmap=matplotlib.cm.Greys, interpolation='nearest')\n", "_ = plt.title('Thresholded beliefs')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 103 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Connecting more of the labels\n", "\n", "Let's also connect up the rows, to form a grid of labels." ] }, { "cell_type": "code", "collapsed": false, "input": [ "evidence = {}\n", "factors = []\n", "# Add observation factors\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " label_variable_name = 'label_{}_{}'.format(i, j)\n", " observation_variable_name = 'obs_{}_{}'.format(i, j)\n", " factors.append(DiscreteFactor([(label_variable_name, 2), (observation_variable_name, 32)], parameters=observation_template))\n", " evidence[observation_variable_name] = image[i, j]\n", " \n", "# Add label factors\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " variable_name = 'label_{}_{}'.format(i, j)\n", " if i + 1 < I:\n", " neighbour_down_name = 'label_{}_{}'.format(i + 1, j)\n", " factors.append(DiscreteFactor([(variable_name, 2), (neighbour_down_name, 2)], parameters=label_template))\n", " if j + 1 < J:\n", " neighbour_right_name = 'label_{}_{}'.format(i, j + 1)\n", " factors.append(DiscreteFactor([(variable_name, 2), (neighbour_right_name, 2)], parameters=label_template))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 104 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model\n", "\n", "Build the model." ] }, { "cell_type": "code", "collapsed": false, "input": [ "model = Model(factors)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 105 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run belief updates" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from pyugm.infer_message import LoopyBeliefUpdateInference\n", "from pyugm.infer_message import FloodingProtocol, LoopyDistributeCollectProtocol\n", "\n", "# Get some feedback on how inference is converging by listening in on some of the label beliefs.\n", "var_values = {'label_1_1': [], 'label_10_10': [], 'label_20_20': [], 'label_30_30': [], 'label_40_40': []}\n", "changes = []\n", "partitions = []\n", "def reporter(infe, orde):\n", " for var in var_values.keys():\n", " marginal = infe.get_marginals(var)[0].data[0]\n", " var_values[var].append(marginal)\n", " change = orde.last_iteration_delta\n", " changes.append(change)\n", " energy = infe.partition_approximation()\n", " partitions.append(energy)\n", " print '{:3} {:8.2f} {:5.2f} {:8.2f}'.format(orde.total_iterations, change, marginal, energy)\n", " \n", "order = FloodingProtocol(model, max_iterations=15)\n", "inference = LoopyBeliefUpdateInference(model, order, callback=reporter)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 106 }, { "cell_type": "code", "collapsed": true, "input": [ "parameters = {'same': 0.1, 'different': -1.0, 'obs_high': 1.0, 'obs_low': -0.0}\n", "inference.calibrate(evidence, parameters)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " 1 9774.11 0.89 2175.63\n", " 2 2280.77 0.86 2816.06" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 3 791.25 0.83 3259.23" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 4 244.91 0.91 3360.01" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 5 93.39 0.91 3383.34" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 6 44.46 0.91 3390.13" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 7 22.15 0.91 3392.01" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 8 12.15 0.91 3393.14" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 9 8.79 0.91 3393.88" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 10 5.80 0.91 3394.42" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 11 4.05 0.91 3394.82" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 12 2.47 0.91 3394.97" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 13 1.80 0.91 3395.17" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 14 0.98 0.91 3395.32" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", " 15 0.70 0.91 3395.39" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 107, "text": [ "" ] } ], "prompt_number": 107 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Is BP converging?\n", "\n", "We can check that the total change in belief becomes less after each iteration, and that the free enery converges:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "seaborn.set_style(\"darkgrid\")\n", "ax1 = plt.axes()\n", "ax2 = ax1.twinx()\n", "_ = ax1.plot([np.log(change) for change in changes])\n", "seaborn.set_style('dark')\n", "_ = ax2.plot(partitions, color='g')\n", "ax2.set_yticks(np.linspace(ax2.get_yticks()[0], ax2.get_yticks()[-1], len(ax1.get_yticks())))\n", "_ = ax1.set_ylabel('Log of total belief change')\n", "_ = ax2.set_ylabel('Log of the approximation to the partition function Z')\n", "_ = ax1.set_xlabel('Iteration number')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAa0AAAEYCAYAAADvUanxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlclNX+wPHPMzPs+44oqOxuuK+pKJnmvpuZmml1b2Vq\n3p90XcosbbN7u6X3lraZtlooLqgZYpoLqKgoAioqKMomiwiIMMzz+4OYQsEZWRwGz7uXL+GZ55zn\nC+F8ec5zzvdIsizLCIIgCIIRUBg6AEEQBEHQl0hagiAIgtEQSUsQBEEwGiJpCYIgCEZDJC1BEATB\naIikJQiCIBgNkbQEQRAEoyGSliAIgvBAvPbaa6Smptb4mj5E0hIEQRAeiB07djBlyhR2795912un\nT5/Wqw+RtARBEIQHwtPTk//+978sX76cd999l/Ly8vvuQyQtQRAE4YHp1KkT4eHhnDt3jmnTppGZ\nmXlf7UXSEgRBEB4oR0dHPv/8c/r06cP48eM5fPiw3m0bPGktXLiQPn36MHLkSO2x/Px8nnnmGYYM\nGcLMmTMpKCho6DAEQRCEO9y+fZuJEycyevRohg0bxr/+9a8qr3/55ZcEBgaSn5+vPbZmzRoGDx7M\n448/zoEDB7TH4+PjGTlyJIMHD2b58uU6r61QKJg9ezYrV65kwYIFNU7QuIvcwI4ePSqfOXNGHjFi\nhPbYe++9J69du1aWZVles2aNvHLlyoYOQxAEQahGcXGxLMuyXFZWJk+cOFE+evSoLMuyfO3aNXnm\nzJnywIED5by8PFmWZfn8+fPyqFGj5NLSUvnKlSvyoEGDZI1GI8uyLI8fP16Oi4uTZVmWn332WXnf\nvn13XevWrVvVxpCRkSGvWrVKr3gb/E6rW7du2NraVjkWFRXF2LFjARg7diyRkZENHYYgCIJQDQsL\nCwDKysooLy/H3t4egHfeeYcFCxZUOXfPnj0MHz4cExMTWrRogZeXF3FxcWRlZVFUVERQUBAAY8aM\nqfZ93dzcvNoY3NzcmD17tl7xGuSZVk5ODs7OzgA4OzuTk5NjiDAEQRAeehqNhtGjR9OnTx969uyJ\nr68vkZGRuLu7ExgYWOXcrKws3N3dtZ+7u7uTmZl513E3NzeysrIaJF5Vg/R6HyRJQpIkQ4chCILw\nUFIoFGzZsoWbN28ya9Ys9u3bx9q1a/nyyy+158iNaK9ggyQtJycnsrOzcXFxISsrC0dHR51tZFkW\nya2RkmWZ0vJSCksLKSwtpKisqOLv0qK7jv31eOWx4rJi1Bo1ao2acrmcck15lb/VGnWtj5VrypFp\nPP/gBOFBk5fq9/NvY2NDcHAwZ86cIS0tjVGjRgGQmZnJ+PHj2bhxI25ubmRkZGjbZGRk4O7uXu1x\nV1fXGq9148YNtm3bVmWCB6DXEKFBklZISAibN2/m+eefJzw8nEGDBulsI0kS2dk3H0B0DcPFxcZo\n4i8tLyXlxiXO558jOe8cKQWXKJVukVuYT1FZEcXqYorKKpJOcVnFx+Xy/S8SvBelpKz4o1CilFR/\n/K1A8cdxlUKFUlJiKqlQmij/cr7qj4//OFehxNzUFI0aJEmBQpJQSAoUKCr+lhQgSVU+rzxHqnLs\nzz8Vx6W/fC5p+6n8TyEpKkYRqnwOEpL2etrXq/lc+qNfCQkba3OKikq17bXnUDlK8efnwF2vV9+G\nP8+v5niVj+84r/JjqOH8Oz62s7WgoOBWlf+/lf382Vf1r1X3One+XkNfdTr+l48dHKzIzy+uPr57\nxF71Ond+BTV//brc+f25FxOFyT1fz83NRaVSYWtrS0lJCYcOHWL27Nm8+OKL2nNCQkLYtGkT9vb2\nhISE8I9//IMZM2aQmZlJamoqQUFBSJKEtbU1cXFxBAUFsWXLFqZNm1bjdefOnYutrS1+fn73/fU3\neNKaP38+R44cIT8/n+DgYObMmcPzzz/PvHnzCAsLo3nz5vznP/9p6DCEauSV5HI+7zzJ+ec4n3dO\n+3dqQco9k5Clygork4o/juZOWJlYYamyxMrEuuJjkz9frzzX0uQvr99xzFJlgVKhQvVHclJI9fuo\n1Zh+YaiOiN+wXFxsyLY03vjvJTs7m3/+859oNBrts63evXtXOeevScXX15ehQ4cyfPhwlEolS5cu\n1b6+dOlSFi5cSElJCcHBwfTv37/G6+bk5LBu3bpaxSzJjWmwUgej/8E3QPzlmnIu30wlOe8c5/PP\n//H3OS7kn+f6ret3ne9g5oCvgz9+9v4Vfzv4423ng29zT4pvaLBQWdR7UmloTeJNU8RvME0h/sYm\nNDSUmTNn3jXRQx8Gn4gh1I/C0psk55//yx1TxR3UxfwLlGpKq5yrkBS0tG1FF9du+Nj74efgr01U\nThZO1fbvYmVDdrHx/sMVBKHxOHfuHGPHjsXJyQlTU1Og4o5uz549OtuKpGXktiZv5q3opaQWpNz1\n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\nQB577DE2bNjA6dOn9YpZZ9JycXHBxsYGf39/EhMT6dWrF8nJyXp1fi83b97k2LFjTJgwAaj45tnY\nNK6V23sv7+FmaQEjfcY0+HM8hUJi2pAARj3Siuz8Et7+5jiXM413Fb4gCI2fi4sLbdq0AcDKygof\nHx8yMzNJTU2lW7duAPTp04fdu3cDYG5urq05W1JSgo2NDUqlUtseoKysjNLSUhwcHGq8rr29PQCt\nW7fm7Nmz2NjYkJeXp1fMOpOWtbU14eHhtG3blm3btnHixAlycnL06vxe0tLScHR0ZOHChYwdO5Yl\nS5Zw69atOvdbnyprDY5poKHBO0l/bG/y1GP+3Cwq5b3vjnP2sn7/IwVBEOoiLS2NxMREgoKC8PX1\nJTIyEoBdu3aRnp6uPe/UqVMMHz6cESNG8M9//rNKH7NmzeKRRx7B3Nz8nsN9vXr1Ys6cOfTt25cv\nv/yS119/HVNTU/0ClXXIyMiQv/jiC1mWZfmdd96RR44cKW/fvl1XM51OnTolt23bVo6Li5NlWZaX\nL18u/+c//6lzv/WluLRYtn7bWm79n9ayRqMxdDiCIAgNprCwUB47dqz866+/yrIsyxcuXJBnzpwp\njx07Vl61apXco0ePu9okJyfLAwcOlAsKCqocv337tvzCCy/ImzZtuuc1U1NTZVmW5fj4ePmrr76S\nMzIy9IpV50QMNzc3Zs6cCXBXVq0Ld3d33NzcCAoKAmDIkCF89tln92zzIItWbr+wlcLSQp5p9xzX\nrxfWub/aFN08cymX1ZtOU6ou5+nHA+nf0aPOcdSWMRcNNebYQcRvaE0h/nspKytjzpw5jBo1SrvZ\nr7e3t/Y51qVLl9i3b99d7Xx8fPD09CQ1NZX27dtrj5uamjJ48GBOnTrF2LHVl70rLS0lKiqK6Oho\nlEolwcHBuLq66vX16Bwe3LhxI7179yYwMFD7p3IMtC5cXFxo1qwZly5dAuDw4cP4+vrWud/68ueC\n4gczNFiddq0dCZ3SGStzE9btTGL7oRRRPUMQhHojyzKLFy/Gx8eHGTNmaI/n5uYCoNFo+OSTT3jy\nySeBiiFEtVoNwNWrV0lNTaVVq1YUFxeTlZUFgFqt5rfffrtnnliyZAknTpxg0qRJjB07lt9//50V\nK1boFbPOO61PP/2U9evX4+vrW++TEV577TX+7//+j7KyMry8vBpNlY2isiJ+Td2Ft50P7Z2DDBpL\n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\n", "text": [ "" ] } ], "prompt_number": 129 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here are the beliefs for a few variables:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for key, value in var_values.items():\n", " plt.plot(value, label=key)\n", "_ = plt.ylabel('Normalized belief that the variable equals 0')\n", "_ = plt.xlabel('Iteration number')\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 130, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 130 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualise the beliefs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "labels = np.zeros(image.shape)\n", "for i in xrange(I):\n", " for j in xrange(J):\n", " variable_name = 'label_{}_{}'.format(i, j)\n", " label_factor = inference.get_marginals(variable_name)[0]\n", " labels[i, j] = label_factor.normalized_data[0] " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "seaborn.set_style(\"dark\")\n", "plt.figure(figsize=(14, 3))\n", "plt.subplot(1, 3, 1)\n", "_ = plt.imshow(image, cmap=matplotlib.cm.Greys_r, interpolation='nearest')\n", "_ = plt.title('Origin image')\n", "plt.subplot(1, 3, 2)\n", "_ = plt.imshow(labels, cmap=matplotlib.cm.Greys, interpolation='nearest')\n", "_ = plt.title('Label beliefs \\n(darker=higher background belief,\\n lighter=higher foreground belief')\n", "plt.subplot(1, 3, 3)\n", "_ = plt.imshow(labels > 0.5, cmap=matplotlib.cm.Greys, interpolation='nearest')\n", "_ = plt.title('Thresholded beliefs')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nqqKiAjExMfj4448RGhpq68uxe1u2bEF2djYmTpxo60shIgvwoZiISEV6ejoiIiJQWVmJDz74AD/8\n8AO++uorW19WtcnMzESHDh3g7u6OZcuW4csvv8S3335bLRO4EBHZIw60IyJSkZ6ejqlTp6KyshJP\nPvkk5s6da+tLqlbHjx/Hq6++itLSUrRp0waLFi3iAzERORRGiomIiIjI4XGgHRERERE5PD4UA1iy\nZAnefPNNq29b1dtvv43PPvvMrH2J7ElgYCB+//13AKb9Xr/22muYP39+dV6a0WJjY7WmqxaysrLQ\nu3dvo45z6NAhxMTEWPPStMybNw/h4eGIioqq1vPYG32/L1999RX+8pe/mHXcqvt26tRJqYFtyL//\n/W9ERkYiKCgI169fN+v8VHstXLgQU6ZMqfbzWPL7bega9bV9hujb15L2Xd7XlPYXAF5//XWEhoZi\n8ODBZp1bVudyir/66iusXLkSv//+Ox544AHExcXh1VdfRaNGjXTuM2rUKKOPb8q2Vc2YMcPsfYns\nlSm/14bKkQUGBuKbb75Rpny2leDgYOzYscOm1yDk5eUhNTUVe/bsQdOmTW19OTXK2IlOLHXs2DGj\ntistLcWHH36IdevWsfxaHSVPBFRcXIz69esrs2vOnDmzRn4fLWWra7Tk+yrva0r7m5WVhf379yMj\nIwP169c369yyOhUpXrFiBT7++GNMnToVR48exdq1a5GXl4fExESlLmVV5eXlNXyVRKSPucMcysrK\nrHwlNU/tPeTl5aFJkyZmPRBb+57Y4h7b07CXK1eu4N69e8osflT3yBP/+Pv7Y/HixcrP/fr1M+n3\n0VZtki2/M5ac25x9c3NzERAQYJUHYqAOPRTfunULCxcuxPTp0xEVFQUXFxcEBARg/vz5yM3NxZYt\nWwDc71YYP348pkyZgs6dO+Orr77S6mrYtGkTunXrhrCwMHz22Wca3QXythcuXEBgYKCyfXh4OBYv\nXqzzGuXugUOHDiE6OhrLli1DREQEoqKisGvXLuzduxe9evVCWFgYUlJSlH1PnDiB559/HiEhIYiK\nisKsWbM0HvQzMzPRq1cvBAcHY8aMGXjppZewbt065fX169ejb9++CA0NxYgRI7Sm6SUyV9Uus6VL\nlyIqKgrR0dFYt26dRqoFAFy/fh2jRo1CUFAQBg8erLz24osvArg/cUinTp2wfft2AMDu3bvRv39/\n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\n1R11lSQAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 80 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "To recap:\n", "\n", "- We compared three models on a simple segmentation task to demonstrate loopy belief propagation (LBP):\n", " 1. Baseline segmenting only using pixel intensities.\n", " 2. Labels columns connected pairwise.\n", " 3. Pairwise grid model.\n", "- The column-connected and grid-connected models smoothed out the noise nicely.\n", "- LBP found reasonable beliefs, although it overestimated many of them. (For example, quite a few beliefs went to exactly 1.0, while we know that none of them should be that high.)" ] } ], "metadata": {} } ] }