<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Dennis Kempin</title>
	
	<link>http://www.denniskempin.com</link>
	<description />
	<lastBuildDate>Fri, 18 May 2012 07:48:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/denniskempin" /><feedburner:info uri="denniskempin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>3D Object recognition in 3D scenes using CUDA</title>
		<link>http://www.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/</link>
		<comments>http://www.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 20:39:25 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/</guid>
		<description><![CDATA[At the media computing group I was asked if it would be possible to detect 3D objects in the video stream of the Kinect camera. There is previous work by Chavdar Papazov and Darius Burschk on detecting 3D objects in noisy and occulded scenes, which uses a RANSAC based algorithm to detect objects in depth [...]]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://hci.rwth-aachen.de/">media computing group</a> I was asked if it would be possible to detect 3D objects in the video stream of the <a href="http://en.wikipedia.org/wiki/Kinect">Kinect camera</a>. There is previous work by Chavdar Papazov and Darius Burschk on <a href="http://www6.in.tum.de/Main/Publications/Papazov2010.pdf">detecting 3D objects in noisy and occulded scenes</a>, which uses a <a href="http://en.wikipedia.org/wiki/RANSAC">RANSAC</a> based algorithm to detect objects in depth images.<a href="http://blog.denniskempin.com/wp-content/uploads/2011/09/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.denniskempin.com/wp-content/uploads/2011/09/image_thumb.png" width="619" height="182" /></a></p>
<p><span id="more-366"></span><br />
<h4>Identifying the bottleneck</h4>
<p>This can be applied to the depth data provided by the Kinect, however a pure CPU based implementation is far too slow for real-time application. After some profiling we found out that most steps of the online recognition phase are very efficient, except for step 6: Testing and accepting the hypothesis. Which can take up to <strong>70 seconds in high quality recognition settings</strong>.</p>
<h4></h4>
<h4>Implementation on CUDA</h4>
<p>For one recognition phase there are about 100.000 hypotheses that need to be tested, each of them independently. So this is a scenario which fits very well with the SIMD structure of GPUs. </p>
<p>So my last project for the media computing group was to port this algorithm to utilize the GPU with <a href="http://en.wikipedia.org/wiki/CUDA">Nvidia CUDA</a>. Actually the CUDA part was very comfortable, the hypothesis testing algorithm does not require complicated data structures so I could just upload all information to the GPU and execute nearly the original C code on the GPU. </p>
<h4></h4>
<h4>Eigendecomposition on CUDA</h4>
<p>But there was one big challenge for me. The algorithm requires a <a href="http://en.wikipedia.org/wiki/Polar_decomposition">polar decomposition</a> of a real 3&#215;3 matrix. Which is based on a <a href="http://en.wikipedia.org/wiki/Singular_value_decomposition">singular value decomposition</a>, which then can be implemented using <a href="http://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix">eigen decompositions</a> of real, symmetric 3&#215;3 matrices. In the original code this is done using <a href="http://opencv.willowgarage.com/wiki/">OpenCV</a>, which cannot be ported to CUDA easily. </p>
<p>So I had to implement this from scratch. To be honest it was not very easy for me as I haven’t been using any linear algebra after the exam ~5 years ago. But as always with math, Wikipedia is a great help!</p>
<p>I based my implementation on an example by <a href="http://www.melax.com/diag">S. Melax</a>, and implemented some Matrix, Vector and Quaternion classes to get this running. A few days and nights later I was testing my CUDA based algorithm on millions of matrices and compared them to the OpenCV results. It works perfectly. Interestingly only in ~<strong>99.9975%</strong> of the cases, but for this application this is sufficient. </p>
<h4>Speedup</h4>
<p>Long story short. After putting it all together I achieved an approximate <strong>speedup of factor 7.</strong> Please remark that the test machine was using an very old Geforce 8600GT, one of the first CUDA capable devices. I believe much higher speedups can be expected on more modern GPUs. </p>
<p>The groundwork for real-time recognition is done, and I already have a hell lot of ideas how to further improve performance of this algorithm. Unfortunately my contract ends and my job here is over, but I am curious to see which further improvements will be made on this technique.&#160; </p>
<p>PS: You can download my <a href="http://dl.dropbox.com/u/346381/Static/SVD.h">C++ decomposition code</a>, it does not have any requirements except CUDA and the standard C math library. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Talk: User Experience Design in Games</title>
		<link>http://www.denniskempin.com/2011/07/talk-user-experience-design-in-games/</link>
		<comments>http://www.denniskempin.com/2011/07/talk-user-experience-design-in-games/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 11:08:57 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2011/07/talk-user-experience-design-in-games/</guid>
		<description><![CDATA[Back in 2009 I have attended the first Devmania conference. The Devmania is the successor of the famous Dusmania conference of hobby and indie game developers, and there were a lot of interesting people and cool talks. I decided to get over myself and give a talk on my passion: User Experience Design. So I [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2009 I have attended the first Devmania conference. The Devmania is the successor of the famous Dusmania conference of hobby and indie game developers, and there were a lot of interesting people and cool talks. </p>
<p>I decided to get over myself and give a talk on my passion: User Experience Design.</p>
<p>So I wrote a lot of emails to game developer gurus and teams of professional UX designers to receive some great stories about how UX design is applied in computer games. I received a few answers and with some more research I put up a nice talk about my findings. </p>
<p>I gave a short glimpse into the work of professional user testing studios like Microsoft User Research and Bolt Peters, followed by a few tools that could be applied by the audience in their own games. </p>
<p>These tools were taken from a very diverse set of professions. The first is inspired by <a href="http://headrush.typepad.com/">Katy Sierras</a> talk on <strong>creating passionate users</strong>, which was held on the south by southwest conference. The second one is based <a href="http://sethgodin.typepad.com/">Seth Godin’s</a> concept of <strong>tribes</strong> in modern marketing, while the last one is taken from <strong>robotics</strong>, where the phenomenon of the <a href="http://en.wikipedia.org/wiki/Uncanny_valley">uncanny valley</a> was first observed.</p>
<p>The slides look very simplistic, but it was a hell lot of work to achieve this. I still think this is my best presentation design so far. </p>
<div style="width: 425px" id="__ss_8675557"><strong style="margin: 12px 0px 4px; display: block"><a title="Ux talk final" href="http://www.slideshare.net/denniskempin/ux-talk-final">Ux talk final</a></strong><object id="__sse8675557" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=uxtalkfinal-110724060135-phpapp01&amp;stripped_title=ux-talk-final&amp;userName=denniskempin" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse8675557" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=uxtalkfinal-110724060135-phpapp01&amp;stripped_title=ux-talk-final&amp;userName=denniskempin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>Unfortunately the video recording of this talk is not online anymore. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.denniskempin.com/2011/07/talk-user-experience-design-in-games/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Talk: Progressive Photon Mapping</title>
		<link>http://www.denniskempin.com/2011/07/talk-progressive-photon-mapping/</link>
		<comments>http://www.denniskempin.com/2011/07/talk-progressive-photon-mapping/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 10:24:37 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2011/07/talk-progressive-photon-mapping/</guid>
		<description><![CDATA[A few weeks ago I had to give a talk at the seminar of the computer graphics and multimedia institute of Prof. Leif Kobbelt. He chose the topic Progressive Photon Mapping for me and it turned out to be a really interesting technique for global illumination. I used my usual presentation template as I really [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I had to give a talk at the seminar of the <a href="http://www.graphics.rwth-aachen.de/">computer graphics and multimedia institute</a> of Prof. Leif Kobbelt. He chose the topic Progressive Photon Mapping for me and it turned out to be a really interesting technique for global illumination.</p>
<p>I used my usual presentation template as I really like the style and up to now it proved to be very well accepted. The hardest part was to visualize the algorithms, especially the light paths. But I think I did a pretty good job, as people told me that this was much easier to understand than the usual bullet point and textual description.</p>
<p>You can find the original paper for this technique at the website of the University of San Diego: <a href="http://graphics.ucsd.edu/~henrik/papers/progressive_photon_mapping/">http://graphics.ucsd.edu/~henrik/papers/progressive_photon_mapping/</a></p>
<p>And here are my slides:</p>
<div style="width:425px" id="__ss_8611931"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/denniskempin/progressive-photon-mapping" title="Progressive photon mapping">Progressive photon mapping</a></strong><object id="__sse8611931" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=progressivephotonmapping-110716052051-phpapp02&amp;stripped_title=progressive-photon-mapping&amp;userName=denniskempin" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse8611931" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=progressivephotonmapping-110716052051-phpapp02&amp;stripped_title=progressive-photon-mapping&amp;userName=denniskempin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.denniskempin.com/2011/07/talk-progressive-photon-mapping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interactive Particle Tracing for Ventricular Assist Devices</title>
		<link>http://www.denniskempin.com/2011/07/interactive-particle-tracing-for-ventricular-assist-devices/</link>
		<comments>http://www.denniskempin.com/2011/07/interactive-particle-tracing-for-ventricular-assist-devices/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 09:56:14 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/?p=345</guid>
		<description><![CDATA[&#160; This was one of my first big projects during my work at the Virtual Reality Group RWTH-Aachen. The DeBakey ventricular assist device (VAD) is basically a blood pump which is implanted on a human heart and the big challenge for engineers is to provide a pump layout that does as little damage to the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.denniskempin.com/wp-content/uploads/2011/07/bloodpump_view1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="bloodpump_view" border="0" alt="bloodpump_view" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/bloodpump_view_thumb1.png" width="699" height="134" /></a>&#160;
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 18px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture1" border="0" alt="Picture1" align="left" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/Picture11.png" width="192" height="241" />This was one of my first big projects during my work at the <a href="http://www.vr.rwth-aachen.de">Virtual Reality Group RWTH-Aachen</a>. The DeBakey ventricular assist device (VAD) is basically a blood pump which is implanted on a human heart and the big challenge for engineers is to provide a pump layout that does as little damage to the blood cells as possible, while still providing enough flow to assist the heart. </p>
<p>To improve the engineering workflow the Virtual Reality Group developed technologies to visualize the blood damage of cells flowing through the VAD. As the blood damage estimation is a complex calculation, the software was not able to allow interactive seeding of particles, i.e. placing new blood cells into the device while the application is running. This had to be defined beforehand followed by a few hours of pre-computation.</p>
<p><span id="more-345"></span><br />
<h3>Interactive Particle Seeding</h3>
<p>The goal of me and a dear colleague of mine was to prove that this can be done in real-time, using the vast computational power in modern graphics accelerators. For this we had to reduce the complexity of the blood damage estimation and implement all calculations using NVidia CUDA. </p>
<p>In the end we were able to trace 65.000 particles in real-time on a cheap low end graphics card, but there were strong numeric instabilities as we apparently went too far with the removal of complexity. </p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2011/07/screenshot.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="screenshot" border="0" alt="screenshot" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/screenshot_thumb.png" width="700" height="271" /></a></p>
<p>But we were very optimistic that by iteratively introducing more accurate algorithms, the visualization can be done in real-time. We still had very big performance reserves, first of all because our target device had only 1/25th of the peak performance of more modern GPUs and due to the strong parallelism more complex calculations have a very small impact on the rendering speed. This approach is still further investigated by other people at the VR Group. </p>
<h3>GI Workshop VR/AR</h3>
<p>We presented this technique on the <a href="www.gi-workshop-vrar.org/">GI Workshop VR/AR</a> at the <a href="http://www.dlr.de/dlr/en/desktopdefault.aspx/tabid-10002/">DLR</a> in Braunschweig where we got great feedback from the German Virtual Reality Community.</p>
<p>Feel free to have a look at the paper: <a href="https://docs.google.com/viewer?a=v&amp;pid=explorer&amp;chrome=true&amp;srcid=0BzcW2jGrJ55LNmU4Yzc5MzUtM2M1Ny00OTkwLWEwMWEtODIzNWRlZTU3MmEw&amp;hl=en_US">Interactive Particle Tracing with Cumulative Blood Damage Computation for Ventricular Assist Devices</a></p>
<p>I have also put a lot of effort into the design of a good presentation. Bullet point free presentations are still pretty uncommon in Germany but we got great feedback for this. </p>
<div style="width: 425px" id="__ss_8611808"><strong style="margin: 12px 0px 4px; display: block"><a title="Talk GI Workshop VR/AR" href="http://www.slideshare.net/denniskempin/talk-gi-workshop-vrar">Talk GI Workshop VR/AR</a></strong><object id="__sse8611808" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=talkgiworkshop09-110716045147-phpapp02&amp;stripped_title=talk-gi-workshop-vrar&amp;userName=denniskempin" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse8611808" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=talkgiworkshop09-110716045147-phpapp02&amp;stripped_title=talk-gi-workshop-vrar&amp;userName=denniskempin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.denniskempin.com/2011/07/interactive-particle-tracing-for-ventricular-assist-devices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->

