Skip to content

Instantly share code, notes, and snippets.

@groakat
Last active December 18, 2015 11:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save groakat/5774959 to your computer and use it in GitHub Desktop.
Save groakat/5774959 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "Descriptor - HOG"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# A Practical Guide towards Performance in Research Code\n",
"\n",
"## \"Premature optimization is the root of all evil\" (Donald Knuth)\n",
"\n",
"> We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.\n",
" \n",
"* The most important goal to achieve in programming scientific code to to write code that produces correct output. (My oppinion anyway). \n",
"* Second to that is to *write* the code fast. That means you need to be able to tap in, debug and verify (intermediate) results as you go along and write your functions. \n",
"* Thirdly the code should be readable as much as possible, because that allows other people and yourself understand it and modify it.\n",
"* Then it should be fast/ efficient\n",
"\n",
"## Optimized Code, its fast, but\n",
"\n",
"Optimized code usually does not satisfy the above criteria. Although it might be correct at the end, it takes very long time to write, because\n",
"\n",
"* debugging tools are not as good\n",
"* code (logic) has arcane structure\n",
"* code is longer (its harder to keep track, make alterations)\n",
"\n",
"## Exploiting the benefits of all \n",
"\n",
"Develop in highlevel (e.g. Python, Matlab) -> profile -> optimize only bottlenecks or \"embarrassingly parallel/lowlevel\"\n",
"\n",
"This part of the tutorial is intented to be a practical approach to the development of efficient code using python.\n",
"\n",
"\n",
"\n",
"## links\n",
"There are a few benchmarks out there, but they tend to be rather old. An interesting writeup is (because it includes Numba, a relativly new approach)\n",
"\n",
"http://nbviewer.ipython.org/4271861/\n",
" \n",
" \n",
"## Getting started\n",
"We load an example image and extract a patch from it. Then we show both.\n",
"\n",
"For this tutorial we are going to compute the first part of the histogram of oriented gradients descriptor. (see http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab inline\n",
"\n",
"import numpy as np\n",
"import skimage.data as skiD\n",
"import skimage.color as clr\n",
"from time import time\n",
"\n",
"\n",
"img = skiD.lena()\n",
"img = clr.rgb2grey(img)\n",
"\n",
"###################\n",
"p = img[100:200, 400:]\n",
"\n",
"figure()\n",
"imshow(img, cmap='gray')\n",
"figure()\n",
"imshow(p, cmap='gray')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n",
"For more information, type 'help(pylab)'.\n"
]
},
{
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<matplotlib.image.AxesImage at 0x3948e50>"
]
},
{
"output_type": "display_data",
"png": "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\nQ/OSRx0AAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x35d7e50>"
]
},
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAARcAAAD8CAYAAABdJ+AhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnduvZdl11sc+l6pTVaequ23SVUo6qOOOY8cOoKBYgBQU\nk1YnMhKRpYCDQFELJTwCQTwkfwHuCCRICE/IilpESvADCh2weOgHIkQUQDhSUGjcseVO3+pede73\nczYPzbfqt7/zjbWPTeo0oJrS1t57XeZlzDG+8c0x55prMp1Op/UkPUlP0pP0x5wWPuwKPElP0pP0\n/2d6Ai5P0pP0JD2W9ARcnqQn6Ul6LOkJuDxJT9KT9FjSE3B5kp6kJ+mxpCfg8iQ9SU/SY0n/R+Dy\n7//9v69PfvKT9fGPf7x+8Rd/8Y+rTk/Sk/Qk/X+QJt/uOpfj4+P6xCc+Ua+//np913d9V33mM5+p\nX//1X6/v//7v/+Ou45P0JD1J/w+mb5u5/Jf/8l/qe7/3e+v555+v5eXl+ut//a/Xv/k3/+aPs25P\n0pP0JP0/nJa+3Rvfe++9+u7v/u7h/3PPPVf/+T//55lrJpPJt1+zJ+lJepL+n0lpAPRtg8tZgeN7\nvud76nu+53uG3x/72Mfq5OSkTk5OZq5bWFioyWRSCwsLtbi4OFR2Op0OvyeTSU0mkzo+Pq7j4+Na\nXFyspaWl4Tqd54fnvP4sS9csLCzUV77ylfrc5z5XJycnQ1nb29u1s7NTm5ubtbGxUWtra/Xw4cNa\nX1+vjY2N2traqqOjozo6OqqTk5OZ/JKsdE6ymE6nw7VLS0tDvSQnz2NhYWH47Ozs1LVr12bK8m8l\nyXJxcbEmk8lQdpI3r+c5yXY6nQ7yYTt4j9qpuql929vb9cwzz9TCwsLQTt6n/JS/64HyXFxcHI6x\nLpLnxYsX6+LFi0Nerkusl9Lx8XEdHR3N9MX9+/fr2rVrtbi4eErOCwsLtbS0VBcvXqyVlZW6cOFC\nXbhwoS5evFgXLlyoS5cuDR/VZ3l5uZaWlmb0fmHh0UDC5X5ycjK0V33Huusa6eDx8XG9/vrr9eKL\nLw5lLS0tDb+Xl5eHfFiey8LrUlX1P/7H/6g33nhjuO5f/+t/XSl92+DyXd/1XfXOO+8M/9955516\n7rnnTl33sY99rH70R390Rim9Mfqva05OTmaOu4G5glMYriw0GuWRwEfnaSAqW0p7dHRU+/v7tbOz\n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\nL5ZnQFd5pGl5p9p8wtwNXceUD1+rojw4G9WxTT4rlRTXjZPg4hMA3bDD7+U5OQ6+xyrl4eDlXtx1\noGMTyVDPasyUi+sg80nG7vV0IKMtdPrMvLz/xwA2pXNjLjTajY2NevjwYb377rv19ttv1/vvv1+b\nm5szM0PJqyq54nUeUP+Vp9PzNAWdxrbMJyXWp+sEzsh4GZ636pr2Z/H1Lf5iNObhRunPNHVDkJSc\nTbjs3SmkdrKsdJ0zxTQL5PUhped19NYEy3mGleSQyna5eb1T3vzf6ZMzH9enxES7drCe3jcds+ry\nduecmKinc2UuGg6tr6/X+++/X++88069/fbbdfPmzdre3j419OGQISmjb4/pwnCl1lSyT+cxjXW8\ne0R6N7IXKoJ3isc9PE/dp4D1lStXBnaixyccWDiEdG8/mUxm2F8aGqZgeycb7tjG+9hWtteHI8lg\nqh4NbemZu5iBM4Y03OiGOZ0xpGA2Acn/d2zThzVnARYHP9a1Yyep7qnP3AF4exhD8vyTjrKdHVAr\nnQtzUeUPDw9rd3e37t69W2+99Va9/fbbde/evdre3h6eAtY9VY8a71PFHnxKxu4GnDo7KROv7zyT\nn0/xDbIklil6nuribRcgcvrZZ4z0zXiTs5YukO1tSnIhkFAWnRccY2RkJwzQJy/q9aKndO/srHWe\nd+2M0K91ppPycWP19o8BSZIl28U6dMxqrJ3ej972VE6SCe87K2upquof8/zf6Ytf/GJ9+tOfrj/1\np/5U/Y2/8TeGGZ6XXnqpvu/7vq9+7Md+rNbW1tr7KQQ9P3Tr1q36wz/8w3r77bdrY2NjZj0Lp2JJ\n//2/9jJxw+E0LpOzIZbl17lh8ZkdMgVdp+0PfHZHBsSZIbEIzhIlb+3HfYik+EpXJ7ZZ7U2sgQbh\nM0neDwnUk2ExLwcetZ2ySDNVlEEHBuob9qHfkwA3tZf97+W4Ebp8/duXFzij4zf10PsnydmBIoFp\nklU61oF552g6sOzSKLi89dZb9S/+xb+or371q/Xf//t/r+Pj4/qN3/iNeuWVV+qll16qN998s158\n8cV65ZVXxrIZDGx7e7vu379fN2/erLfffrtu3bo1vPeZjXEB++wH948laHQeTXXwa5JQaRBenm+2\n7VO/7lXZ9qRwY/Sd9RJY+XJ/f6TClYCsJeWbFN1lzgcku1mDsyg5ZcN6uYEnEPAyvK4JKL0tY+wl\n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\n/bT19PTYjz/+aG1tbTXNc39/v3300Ud28uRJ++mnn2x8fNz2799fUzxv377durq6Cq5F/HV3d9uB\nAwesu7vburq6bMeOHckl5H+NsgrQ0aNHs3Xr1uW/d3Z2Zp2dnZVo6l+lZ555Jvvmm2+y1tbWbHBw\nMMuyLLt06VLW2tp6lzm7QwMDA9natWuzI0eOZOvXr8+yLKtpfoeHh7MFCxYUXa9lnq9du5YtXrw4\nGxoaym7dupWtX78+O3ToUM3x3NfXly1dujT/PeJv165d2e7du/Pl1q1blx07dqzi/FUkcrlw4YLN\nnz8//33evHl24cKFSjT1r1F/f7/98MMP9vjjj9vly5dtzpw5ZmY2Z84cu3z58l3m7g699dZb9u67\n7xbsGaplfvv6+uy+++6z7du326pVq+zVV1+1P//8s6Z5njlzpr399tv24IMP2gMPPGD33nuvdXR0\n1DTPZrEeXLx40ebNm5cvVy17rAi4/F/b33Lz5k177rnnbO/evTZjxoyC38rZLFQt+uqrr2z27Nm2\ncuXK5Ka3WuHX7K+Dwk6ePGk7duywkydP2vTp04umE7XGc29vr73//vvW399vFy9etJs3b9pnn31W\nUKbWeGYqZ5Njpaki4DJ37lwbGBjIfx8YGChAzlqiW7du2XPPPWdbt261TZs2mdlfqD84OGhmZpcu\nXbLZs2ffTRbzdPToUfvyyy9twYIF9uKLL9qRI0ds69atNcuv2V9ect68efboo4+amdmWLVvs5MmT\n1tLSUrM8nzhxwtasWWOzZs2ypqYm27x5sx07dqymeTaL9Zbt8fz58zZ37tyK81MRcFm9erWdPXvW\n+vv7LZfL2YEDB2zjxo2VaOofUZZl9sorr1h7e7u9+eab+esbN260ffv2mZnZvn378qBzt2nXrl02\nMDBgfX19tn//fnvyySft008/rVl+zcxaWlps/vz5+Sd0Dx8+bEuWLLENGzbULM9tbW12/PhxGxkZ\nsSzL7PDhw9be3l7TPJvFertx40bbv3+/5XI56+vrs7Nnz9pjjz1WeYYqlcw5ePBgtnjx4mzhwoXZ\nrl27KtXMP6Lvvvsua2hoyJYvX56tWLEiW7FiRfb1119n165dy9auXZstWrQo6+joyK5fv363WS2i\nb7/9NtuwYUOWZVnN83vq1Kls9erV2SOPPJI9++yz2fDwcM3zvGfPnqy9vT1bunRptm3btiyXy9UU\nzy+88EJ2//33Z5MnT87mzZuXffLJJ0n+3nnnnWzhwoVZa2tr1tXVVRUeK/psUZ3qVKf/Xqrv0K1T\nnepUEaqDS53qVKeKUB1c6lSnOlWE6uBSpzrVqSJUB5c61alOFaE6uNSpTnWqCP0H09PyqFaZSqwA\nAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x38248d0>"
]
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Naive Numpy Implementation\n",
"\n",
"For this naive histogram of oriented gradients (HOG) implementation we compute\n",
"\n",
"* gradient in x and y direction\n",
"* magnitude and angle of the gradient\n",
"* discretize the gradient angle\n",
"* summing up the magnitudes of all angles in the image\n",
" "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def calcHOGNaive(img, binSize):\n",
" # calculate gradient\n",
" dx, dy = np.gradient(img)\n",
" \n",
" # calculate magnitude of gradient\n",
" mag = np.sqrt(dx ** 2 + dy ** 2).flatten()\n",
" \n",
" # calculate angles and round them into bins\n",
" ## plain angle 0 .. 2pi\n",
" # >>>> angle = np.arctan2(dy, dx) + np.pi)\n",
" ## normalization to 0 .. binSize-0.000000000001\n",
" # >>>> normAngle = angle / (2 * np.pi + np.spacing(10000)) * binSize)\n",
" ## binning and flatting\n",
" # >>>> np.floor(normAngle).flatten() \n",
" \n",
" ang = (np.floor((np.arctan2(dy, dx) + np.pi) \\\n",
" / (2 * np.pi + np.spacing(10000)) * binSize)).flatten()\n",
" \n",
" # initialize histogram\n",
" hog = np.zeros((binSize, ))\n",
" \n",
" # fill histogram\n",
" for i in range(ang.shape[0]):\n",
" hog[ang[i]] += mag[i]\n",
" \n",
" # normalize\n",
" return hog / ang.shape[0]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"hog = calcHOGNaive(p, 9)\n",
"%timeit calcHOGNaive(p, 9)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10 loops, best of 3: 28.3 ms per loop\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Profiling\n",
"\n",
"## links\n",
"http://pynash.org/2013/03/06/timing-and-profiling.html\n",
" \n",
" \n",
"## Profile function calls using IPython"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%prun -s cumulative calcHOGNaive(p, 9)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Profile lines using line_profiler\n",
"https://github.com/certik/line_profiler\n",
"\n",
"Since the function above does not have many function calls and spends the most of the time within itself, we need to analize how long it takes to compute each line.\n",
" \n",
"This profiler does not give sensible output if it is used on notebook cells. Therefore I just put the function in a module and import it back.\n",
"\n",
"This is an example of using the line_profiler magic."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pyTools.sandbox.lineProfExample as lPE\n",
"\n",
"%load_ext line_profiler_ext\n",
"%lprun -f lPE.calcHOGNaive lPE.calcHOGNaive(p, 9)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Alternatively, one can also use the API to profile a function"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import line_profiler\n",
"lP = line_profiler.LineProfiler(lPE.calcHOGNaive)\n",
"res = lP.runcall(lPE.calcHOGNaive, p, 9)\n",
"lP.print_stats()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Timer unit: 1e-06 s\n",
"\n",
"File: /home/peter/code/pyTools/sandbox/lineProfExample.py\n",
"Function: calcHOGNaive at line 3\n",
"Total time: 0.153876 s\n",
"\n",
"Line # Hits Time Per Hit % Time Line Contents\n",
"==============================================================\n",
" 3 def calcHOGNaive(img, binSize):\n",
" 4 # calculate gradient\n",
" 5 1 1771 1771.0 1.2 dx, dy = np.gradient(img)\n",
" 6 \n",
" 7 # calculate magnitude of gradient\n",
" 8 1 535 535.0 0.3 mag = np.sqrt(dx ** 2 + dy ** 2).flatten()\n",
" 9 \n",
" 10 # calculate angles and round them into bins\n",
" 11 ## plain angle 0 .. 2pi\n",
" 12 # >>>> angle = np.arctan2(dy, dx) + np.pi)\n",
" 13 ## normalization to 0 .. binSize-0.000000000001\n",
" 14 # >>>> normAngle = angle / (2 * np.pi + np.spacing(10000)) * binSize)\n",
" 15 ## binning and flatting\n",
" 16 # >>>> np.floor(normAngle).flatten() \n",
" 17 \n",
" 18 1 6 6.0 0.0 ang = (np.floor((np.arctan2(dy, dx) + np.pi) \\\n",
" 19 1 3129 3129.0 2.0 / (2 * np.pi + np.spacing(10000)) * binSize)).flatten()\n",
" 20 \n",
" 21 # initialize histogram\n",
" 22 1 15 15.0 0.0 hog = np.zeros((binSize, ))\n",
" 23 \n",
" 24 # fill histogram\n",
" 25 11201 36855 3.3 24.0 for i in range(ang.shape[0]):\n",
" 26 11200 111471 10.0 72.4 hog[ang[i]] += mag[i]\n",
" 27 \n",
" 28 # normalize\n",
" 29 1 94 94.0 0.1 return hog / ang.shape[0]\n",
"\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Embedding C++ to speed up loop\n",
"Loops are the obvious performance bottle necks. In this case it is only type-checking that slows this loop down, if functions are called there is likely some range-checking overhead, too.\n",
"\n",
"Lets just embed the loop in C++ and compute the rest in numpy. It could quickly get messy if we converted the rest into C++, because each of the lines of numpy code would expand into two nested loops. Sometimes, however, it might pay off to put even vectorized numpy expressions in C. That is usually the case if several operations are performed sequencially and temporary results are reused. In such cases the fact that the data stays in the L1 or L2 cache might speed up the program enormously."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#import scipy.weave as weave\n",
"\n",
"def calcHOGWeaveCpp(img, binSize):\n",
" import scipy.weave as weave\n",
" import numpy as np\n",
" dx, dy = np.gradient(img)\n",
" \n",
" mag = np.sqrt(dx ** 2 + dy ** 2).flatten()\n",
" ang = (np.floor((np.arctan2(dy, dx) + np.pi) \\\n",
" / (2 * np.pi + np.spacing(10000)) * binSize)).flatten()\n",
" \n",
" hog = np.zeros((binSize, ))\n",
" \n",
"# for i in range(ang.shape[0]):\n",
"# hog[ang[i]] += mag[i]\n",
" code = \"\"\"\n",
" int pos;\n",
" for (int i = 0; i < Nang[0]; ++i){\n",
" pos = ang[i];\n",
" hog[pos] += mag[i];\n",
" }\n",
" \"\"\" \n",
" weave.inline(code, ['ang', 'hog', 'mag'], \n",
" extra_compile_args=['-O3'], compiler='gcc')\n",
" \n",
" return hog / ang.shape[0]\n",
"\n",
"hogCpp = calcHOGWeaveCpp(p, 9)\n",
"%timeit calcHOGWeaveCpp(p, 9)\n",
"print \"numpy and cpp version are the same: \", np.allclose(hog, hogCpp)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"100 loops, best of 3: 4.83 ms per loop\n",
"numpy and cpp version are the same: True\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Using Fortran subroutine to speed up computations after gradient\n",
"\n",
"The advantage of fortran is not the speed (compared to optimized C code, which can be slightly faster) rather than the simplicity of the syntax of the logic which is very close to Matlab/Numpy expressions. However, the variable declaration makes it easily look cumbersome. Also in plain fortran code much of the structural syntax is quite verbose and debugging is limited. In combination with Python, the logic is the biggest part, therefore fortran can be a fast way of converting already vectorized expressions from numpy into a compiled language. Gaining impressive speed-ups.\n",
"\n",
"### code\n",
"\n",
"For simplicity this code is just implementing the easy part. Namely the part that relies on the standard library of fortran and can be almost copy-pasted.\n",
"\n",
".. code-block:: fortran\n",
" \n",
" !file hog.f90\n",
" \n",
" module hog\n",
" \n",
" contains \n",
" \n",
" subroutine angHist(dx, dy, binSize, hist)\n",
" ! compute simple hog from gradients\n",
" implicit none\n",
" ! I/O\n",
" real(kind=8), dimension(:,:), intent(in) :: dx, dy\n",
" integer, intent(in) :: binSize\n",
" real(kind=8), dimension(binSize), intent(out) :: hist\n",
" \n",
" ! dummy variables\n",
" real(kind=8), dimension(size(dx,1), size(dx,2)) :: mag\n",
" integer, dimension(size(dx,1), size(dx,2)) :: ang\n",
" real(kind=8) :: pi, eps\n",
" integer :: i, m, p\n",
" \n",
" ! constants\n",
" pi = 3.14159265358979323846\n",
" eps = 0.0000000000000000001\n",
" \n",
" \n",
" ! magnitude and angles\n",
" mag = sqrt(dx ** 2 + dy ** 2)\n",
" ang = floor((atan2(dy, dx) + pi) / (2 * pi + eps) * binSize)\n",
" \n",
" ! initialize hist as zero\n",
" hist = 0.0_8\n",
" \n",
" do i=1,size(ang,1)\n",
" do m=1,size(ang,2)\n",
" p = ang(i,m) + 1 ! fortran counts from 1 to end (incl)\n",
" hist(p) = hist(p) + mag(i,m)\n",
" enddo\n",
" enddo\n",
" \n",
" ! normalize hist\n",
" hist = hist / (size(ang,1) * size(ang,2))\n",
" \n",
" end subroutine angHist\n",
" \n",
" end module hog\n",
" \n",
"### Compilation\n",
" $f2py -c -m hog hog.f90"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pyTools.imgProc.hog as fHog\n",
"\n",
"dx, dy = np.gradient(p)\n",
"hogF = fHog.hog.anghist(dx, dy, 9)\n",
"%timeit dx, dy = np.gradient(p); fHog.hog.anghist(dx, dy, 9)\n",
"\n",
"print \"Naive and Fortran (1) equal: \", np.allclose(hog, hogF)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"100 loops, best of 3: 1.42 ms per loop\n",
"Naive and Fortran (1) equal: True\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Fortran code including gradient calculation\n",
"\n",
"We can also go a step further and replicate numpys gradient function in fortran. This is not much work, as the syntax is almost the same.\n",
"\n",
"You can find the code also in https://gist.github.com/groakat/5775099\n",
"\n",
"### numpy code\n",
"https://github.com/numpy/numpy/blob/v1.7.0/numpy/lib/function_base.py#L829\n",
"\n",
" for axis in range(N):\n",
" # select out appropriate parts for this dimension\n",
" out = np.empty_like(f, dtype=otype)\n",
" slice1[axis] = slice(1, -1)\n",
" slice2[axis] = slice(2, None)\n",
" slice3[axis] = slice(None, -2)\n",
" # 1D equivalent -- out[1:-1] = (f[2:] - f[:-2])/2.0\n",
" out[slice1] = (f[slice2] - f[slice3])/2.0\n",
" slice1[axis] = 0\n",
" slice2[axis] = 1\n",
" slice3[axis] = 0\n",
" # 1D equivalent -- out[0] = (f[1] - f[0])\n",
" out[slice1] = (f[slice2] - f[slice3])\n",
" slice1[axis] = -1\n",
" slice2[axis] = -1\n",
" slice3[axis] = -2\n",
" # 1D equivalent -- out[-1] = (f[-1] - f[-2])\n",
" out[slice1] = (f[slice2] - f[slice3])\n",
"\n",
" # divide by step size\n",
" outvals.append(out / dx[axis])\n",
"\n",
" # reset the slice object in this dimension to \":\"\n",
" slice1[axis] = slice(None)\n",
" slice2[axis] = slice(None)\n",
" slice3[axis] = slice(None)\n",
"\n",
"### code\n",
"\n",
".. code-block:: fortran90\n",
" \n",
" subroutine angHist2(img, binSize, hist) \n",
" ! compute simple hog from image\n",
" implicit none\n",
" ! I/O variables\n",
" real(kind=8), dimension(:,:), intent(in) :: img\n",
" integer, intent(in) :: binSize\n",
" real(kind=8), dimension(binSize), intent(out) :: hist\n",
" \n",
" ! dummy variables\n",
" real(kind=8), dimension(size(img,1),size(img,2)) :: dx, dy, mag\n",
" integer, dimension(size(img,1),size(img,2)) :: ang\n",
" real(kind=8) :: pi, eps\n",
" integer :: i, m, p, l\n",
" \n",
" ! constants\n",
" pi = 3.14159265358979323846\n",
" eps = 0.0000000000000000001\n",
" \n",
" ! initialize hist\n",
" hist = 0.0_8\n",
" \n",
"*****\n",
" ! compute dx as numpy.gradient does\n",
" dx(1,:) = img(2,:) - img(1,:)\n",
" do i=3,size(img,1)\n",
" dx(i-1,:) = (img(i,:) - img(i-2,:)) / 2.0\n",
" enddo\n",
" l = size(img,1)\n",
" dx(l,:) = img(l,:) - img(l-1,:)\n",
" \n",
" ! compute dy as numpy.gradient does\n",
" dy(:,1) = img(:,2) - img(:,1)\n",
" do i=3,size(img,2)\n",
" dy(:, i-1) = (img(:,i) - img(:,i-2)) / 2.0\n",
" enddo\n",
" l = size(img,2)\n",
" dy(:,l) = img(:,l) - img(:,l-1) \n",
"*****\n",
"\n",
" ! compute magnitude and angle of gradients \n",
" mag = sqrt(dx ** 2 + dy ** 2)\n",
" ang = floor((atan2(dy, dx) + pi) / (2 * pi + eps) * binSize)\n",
" \n",
" ! bin them\n",
" do i=1,size(ang,1)\n",
" do m=1,size(ang,2)\n",
" p = ang(i,m) + 1 ! fortran counts from 1 to end (incl)\n",
" hist(p) = hist(p) + mag(i,m)\n",
" enddo\n",
" enddo\n",
" \n",
" ! normalize hist\n",
" hist = hist / (size(ang,1) * size(ang,2))\n",
" \n",
" end subroutine angHist2\n",
" \n",
"### Compilation\n",
" $f2py -c -m hog hog.f90"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pyTools.imgProc.hog as fHog\n",
"\n",
"hogF2 = fHog.hog.anghist2(p, 9)\n",
"%timeit fHog.hog.anghist2(p, 9)\n",
"\n",
"print \"Naive and Fortran (2) equal: \", np.allclose(hog, hogF2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1000 loops, best of 3: 1.19 ms per loop\n",
"Naive and Fortran (2) equal: True\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Numba\n",
"\n",
"Uses LLVM to runtime-compile the code. Here the overhead of the compilation is relatively large compared with the exectuted code length. This compiler seems to be intended to be used with completely \"unrolled\" and not vectorized functions. I.e. if the code looks more like a C program"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numba.decorators import jit\n",
"from numba import float64, int32\n",
"\n",
"@jit(argtypes=[float64[:,:], int32])\n",
"def calcHOGNumba(img, binSize):\n",
" # calculate gradient\n",
" d = np.gradient(img)\n",
" \n",
" dx = d[0]\n",
" dy = d[1]\n",
" \n",
" # calculate magnitude of gradient\n",
" mag = np.sqrt(dx ** 2 + dy ** 2).flatten()\n",
" \n",
" # calculate angles and round them into bins \n",
" \n",
" ang = (np.floor((np.arctan2(dy, dx) + np.pi) \\\n",
" / (2 * np.pi + np.spacing(10000)) * binSize)).flatten()\n",
" \n",
" # initialize histogram\n",
" hog = np.zeros((binSize, ))\n",
" \n",
" # fill histogram\n",
" for i in range(ang.shape[0]):\n",
" hog[ang[i]] += mag[i]\n",
" \n",
" # normalize\n",
" return hog / ang.shape[0]\n",
"\n",
"hogN = calcHOGNumba(p, 9)\n",
"%timeit calcHOGNumba(p, 9)\n",
"print \"Naive and Numba equal: \", np.allclose(hog, hogN)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10 loops, best of 3: 70.2 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Naive and Numba equal: True\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The LLVM jit struggles to compile the numpy functions fast. Since the compiled output is not cached it is a real overhead. The following code shows that numba can be competitive to weave/C++ if only the loop is compiled."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numba.decorators import jit\n",
"from numba import float64, int32\n",
"\n",
"@jit(argtypes=[float64[:], int32[:], float64[:]])\n",
"def fillHist(hog, ang, mag): \n",
" # fill histogram\n",
" for i in range(ang.shape[0]):\n",
" hog[ang[i]] += mag[i]\n",
" \n",
" return hog\n",
" \n",
" \n",
"def calcHOGNumba2(img, binSize):\n",
" # calculate gradient\n",
" d = np.gradient(img)\n",
" \n",
" dx = d[0]\n",
" dy = d[1]\n",
" \n",
" # calculate magnitude of gradient\n",
" mag = np.sqrt(dx ** 2 + dy ** 2).flatten()\n",
" \n",
" # calculate angles and round them into bins \n",
" \n",
" ang = np.int32(np.floor((np.arctan2(dy, dx) + np.pi) \\\n",
" / (2 * np.pi + np.spacing(10000)) * binSize)).flatten()\n",
" \n",
" # initialize histogram\n",
" hog = np.zeros((binSize, ))\n",
" \n",
" hog = fillHist(hog, ang, mag)\n",
" \n",
" # normalize\n",
" return hog / ang.shape[0]\n",
"\n",
"hogN2 = calcHOGNumba2(p, 9)\n",
"%timeit calcHOGNumba2(p, 9)\n",
"print \"Naive and Numba equal: \", np.allclose(hog, hogN2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"100 loops, best of 3: 4.88 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Naive and Numba equal: True\n"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Final consistency check"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"p = img[100:200, 400:]\n",
"dx, dy = np.gradient(p)\n",
"hog = calcHOGNaive(p, 9)\n",
"hogCpp = calcHOGWeaveCpp(p, 9)\n",
"hogF = fHog.hog.anghist(dx, dy, 9)\n",
"hogF2 = fHog.hog.anghist2(p, 9)\n",
"hogN = calcHOGNumba(p, 9)\n",
"hogN2 = calcHOGNumba2(p, 9)\n",
"\n",
"print \"all results are equal:\", all([np.allclose(hog, hogCpp), \n",
" np.allclose(hog, hogF), \n",
" np.allclose(hog, hogF2), \n",
" np.allclose(hog, hogN), \n",
" np.allclose(hog, hogN2)])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"all results are equal: True\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Benchmark Summary"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# patch 100x112\n",
"p = img[100:200, 400:]\n",
"dx, dy = np.gradient(p)\n",
"print \"naive\"\n",
"%timeit -n 100 calcHOGNaive(p, 9)\n",
"print \"\\nweave cpp\"\n",
"%timeit -n 100 calcHOGWeaveCpp(p, 9)\n",
"print \"\\nfortran (1)\"\n",
"%timeit -n 100 dx, dy = np.gradient(p); fHog.hog.anghist(dx, dy, 9)\n",
"print \"\\nfortran (2)\"\n",
"%timeit -n 100 fHog.hog.anghist2(p, 9)\n",
"print \"\\nnumba (1)\"\n",
"%timeit -n 100 calcHOGNumba(p, 9)\n",
"print \"\\nnumba (2)\"\n",
"%timeit -n 100 calcHOGNumba2(p, 9)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"naive\n",
"100 loops, best of 3: 40.4 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"weave cpp\n",
"100 loops, best of 3: 4.79 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"fortran (1)\n",
"100 loops, best of 3: 4.1 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"fortran (2)\n",
"100 loops, best of 3: 2.88 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"numba (1)\n",
"100 loops, best of 3: 62.1 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"numba (2)\n",
"100 loops, best of 3: 4.79 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# over entire image\n",
"print \"naive\"\n",
"%timeit -n 100 calcHOGNaive(img, 9)\n",
"print \"\\nweave cpp\"\n",
"%timeit -n 100 calcHOGWeaveCpp(img, 9)\n",
"print \"\\nfortran (1)\"\n",
"%timeit -n 100 dx, dy = np.gradient(img); fHog.hog.anghist(dx, dy, 9)\n",
"print \"\\nfortran (2)\"\n",
"%timeit -n 100 fHog.hog.anghist2(img, 9)\n",
"print \"\\nnumba (1)\"\n",
"%timeit -n 100 calcHOGNumba(img, 9)\n",
"print \"\\nnumba (2)\"\n",
"%timeit -n 100 calcHOGNumba2(img, 9)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"naive\n",
"100 loops, best of 3: 406 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"weave cpp\n",
"100 loops, best of 3: 31.4 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"fortran (1)\n",
"100 loops, best of 3: 39.7 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"fortran (2)\n",
"100 loops, best of 3: 36.3 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"numba (1)\n",
"100 loops, best of 3: 470 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"numba (2)\n",
"100 loops, best of 3: 31.4 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Parallelism\n",
"\n",
"## IPython Parallel\n",
"\n",
"Lets compute the HOG descriptors for non-overlapping patches in the image.\n",
"\n",
"Start some clusters and get socket connection to them"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.parallel import Client\n",
"# open clients\n",
"rc = Client()\n",
"print rc.ids"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[0, 1, 2, 3]\n"
]
}
],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Get direct view of the remote clients (used later for clean up) and load balanced view (used to asyncronously add jobs to the clusters)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dview = rc[:] \n",
"lbview = rc.load_balanced_view()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we are ready to put stuff on the clusters\n",
"\n",
" lbview.apply_async(func, **args)\n",
" \n",
"But we need to have some data to feed. In our example we split the image into parts and process them individually."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"splits = np.split(img, 16)\n",
"\n",
"results = []\n",
"for split in splits:\n",
" results += [lbview.apply_async(calcHOGWeaveCpp, split, 9)]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We could add more jobs to the cluster that are other functions. Now, however, we have to wait until all results came in and continue processing."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from time import sleep\n",
"\n",
"allReady = False\n",
"while not allReady:\n",
" allReady = True\n",
" for ar in results:\n",
" allReady = allReady and ar.ready()\n",
" \n",
" sleep(0.01)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we copy the data back and clean up on the cluster (data on the cluster will not be deleted/ garbage collected and will cause a memory leak)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"hogs = []\n",
"\n",
"for ar in results:\n",
" # copy data\n",
" data = ar.get()\n",
" hogs += [data]\n",
" # delete data from cluster\n",
" msgId = ar.msg_id\n",
" #~ del lbview.results[msgId]\n",
" del rc.results[msgId]\n",
" del rc.metadata[msgId]\n",
" \n",
"\n",
"# close client to close socket connections\n",
"rc.close()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# General Threading using Qt\n",
"\n",
"Normally, one should do it by subclassing QObject and using moveToThread() as described in the article http://labs.qt.nokia.com/2007/07/05/qthreads-no-longer-abstract/ . But that did not work for me, because there needs to be a QMainLoop around (if I remember correctly). Anyway the old style subclassing of QThread still works.\n",
" \n",
"The BaseThread idea comes from http://pythonchem.blogspot.co.uk/2012/06/threaded-pyqt-gui-and-particles.html .\n",
" \n",
"This QThread example replicates the IPython Parallel interface, but it creates a thread for each object with might not be desired. This is an untested toy example. I cannot guarantee that it would not break in some circumstances."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from PyQt4.QtCore import * \n",
"\n",
"class BaseThread(QThread):\n",
" \"\"\" Provides infrastructure for save deleting of thread.\n",
" Check self.exiting in heavy operations frequently and \n",
" abort exectution of run(), to allow the thread to get \n",
" deleted.\n",
" \"\"\"\n",
" def __init__(self):\n",
" QThread.__init__(self)\n",
" self.exiting = False\n",
"\n",
" def __del__(self): \n",
" self.exiting = True\n",
" self.wait()\n",
" \n",
"class Worker(BaseThread): \n",
" def __init__(self, func, *args):\n",
" \"\"\"\n",
" This object will exectute `func` with `args` in a\n",
" separate thread. You can query ready() to check\n",
" if processing finished and get() to get the result.\n",
"\n",
" Args:\n",
" func (function pointer)\n",
" function will be called asyncroneously\n",
" args (arguments)\n",
" arguments for func\n",
" \"\"\"\n",
" BaseThread.__init__(self) \n",
" \n",
" self.func = func\n",
" self.args = args \n",
" self.result = None\n",
" self.isReady = False\n",
" \n",
" self.start()\n",
" \n",
" def run(self):\n",
" self.result = self.func(*self.args)\n",
" self.isReady = True\n",
" \n",
" def ready(self):\n",
" return self.isReady\n",
" \n",
" def get(self):\n",
" if self.isReady:\n",
" return self.result\n",
" else:\n",
" return None"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"w = Worker(calcHOGWeaveCpp, p, 9)\n",
"w.ready()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 21,
"text": [
"False"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"working = True\n",
"while working:\n",
" isReady = w.ready()\n",
" if isReady:\n",
" res = w.get()\n",
" working = False\n",
" \n",
" # clean up, otherwise the object will\n",
" # stay in memory for ever (similar to\n",
" # clients in IPython parallel)\n",
" del w\n",
" \n",
"print res"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0.00134604 0.00474881 0.00305021 0.00114426 0.00127909 0.00407113\n",
" 0.00395126 0.00130679 0.00104403]\n"
]
}
],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Appendix: example how the Python syntax of *args works"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def test(a, *args):\n",
" print a\n",
" print args\n",
" test2(*args)\n",
" \n",
"def test2(a,b):\n",
" print a\n",
" print b"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"test(4,5,6)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"4\n",
"(5, 6)\n",
"5\n",
"6\n"
]
}
],
"prompt_number": 24
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment