<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://www.vidhanjain.com/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    
    <title>Vidhan Jain</title>
    <link>https://www.vidhanjain.com/</link>
    <atom:link href="https://www.vidhanjain.com/feed.xml" rel="self" type="application/rss+xml" />
    <description>Notes on machine learning, computer vision and whatever else I&#39;m learning.</description>
    <language>en</language>
    <item>
      <title>Why tiny humans are hard to find in thermal images</title>
      <link>https://www.vidhanjain.com/blog/why-tiny-humans-are-hard/</link><description>&lt;p&gt;For two years, my job was to find people in images where a person is sometimes smaller than the cursor you&#39;re reading this with. Here&#39;s why that&#39;s harder than it sounds, and what kind of ideas help.&lt;/p&gt;
&lt;h2&gt;The setup&lt;/h2&gt;
&lt;p&gt;A drone flies over a field, a road, or a forest at night with a thermal (long-wave infrared) camera. Warm things glow; cool things don&#39;t. From high up, a standing person might cover a patch of just a few pixels. The task: draw a box around every person.&lt;/p&gt;
&lt;p&gt;Benchmarks like TinyPerson exist precisely because this is where normal detectors fall apart.&lt;/p&gt;
&lt;h2&gt;Why it&#39;s hard&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;There&#39;s almost nothing to see.&lt;/strong&gt; A detector recognises a person by shape and texture: head, shoulders, legs. At a few pixels, none of that exists. You get a warm blob, and plenty of other things are warm blobs too: rocks that soaked up sunlight, car engines, animals.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The network throws the evidence away.&lt;/strong&gt; Most detectors shrink the image step by step (downsampling) to build up high-level features. Each step halves the resolution. A person who was 8 pixels wide at the input is a fraction of a pixel a few layers later, and their signal gets averaged into the background.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contrast isn&#39;t guaranteed.&lt;/strong&gt; Thermal contrast depends on the temperature difference between the person and their surroundings. On a warm evening, the ground can be almost as warm as a body, and the person nearly disappears.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It has to be light.&lt;/strong&gt; If the detector is going to run on the drone itself, it can&#39;t be a 200 GFLOP model. Every trick you add has to pay for itself.&lt;/p&gt;
&lt;h2&gt;What helps&lt;/h2&gt;
&lt;p&gt;Across the four architectures in my thesis, a few ideas kept showing up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Protect the small signal early.&lt;/strong&gt; Refine and re-weight features in the early, high-resolution layers, before downsampling blurs the evidence away.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Look at the neighbourhood.&lt;/strong&gt; A warm blob on a road is more likely a person than a warm blob in a parking lot full of cars. Context from the surrounding area, compared against the centre, helps separate targets from clutter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use frequency information.&lt;/strong&gt; Tiny targets live in the high-frequency part of the image. Treating high and low frequencies differently helps keep them from being smoothed out.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Merge scales carefully.&lt;/strong&gt; When features from different resolutions are combined, small misalignments hurt tiny objects most. Fusing them with care matters more than stacking more layers.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The details are in the papers on the &lt;a href=&quot;https://www.vidhanjain.com/research/&quot;&gt;research page&lt;/a&gt;, including &lt;a href=&quot;https://www.vidhanjain.com/research/#tsrnet&quot;&gt;TSRNet&lt;/a&gt; and &lt;a href=&quot;https://www.vidhanjain.com/research/#sapnet&quot;&gt;SAPNet&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The part I didn&#39;t expect&lt;/h2&gt;
&lt;p&gt;The biggest lesson wasn&#39;t architectural. It was that careful evaluation matters as much as the model. On tiny-object benchmarks, small changes in how boxes are matched or which scales are counted can move numbers more than a new module does. I&#39;ll write more about that in a future post.&lt;/p&gt;
</description><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate>
      <dc:creator>Vidhan Jain</dc:creator>
      <guid>https://www.vidhanjain.com/blog/why-tiny-humans-are-hard/</guid>
    </item>
    <item>
      <title>Redesign: A new home for my writing</title>
      <link>https://www.vidhanjain.com/blog/a-new-home/</link><description>&lt;p&gt;For a while, &lt;a href=&quot;https://www.vidhanjain.com/&quot;&gt;vidhanjain.com&lt;/a&gt; was a single page: a big gradient headline, a grid of glowing cards, and a &amp;quot;Get in touch&amp;quot; button. It looked fine. It also said almost nothing about me that my resume didn&#39;t already say better.&lt;/p&gt;
&lt;p&gt;So I rebuilt it as a personal website instead of a portfolio.&lt;/p&gt;
&lt;h2&gt;What changed&lt;/h2&gt;
&lt;p&gt;A portfolio is a sales page. It&#39;s written for someone deciding whether to hire you, and it&#39;s done the moment it&#39;s published. A personal site is closer to a notebook that happens to be public. It grows, it has opinions, and it&#39;s allowed to be unfinished.&lt;/p&gt;
&lt;p&gt;The new site is split into a few pages, each with one job:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.vidhanjain.com/blog/&quot;&gt;Blog&lt;/a&gt;&lt;/strong&gt; for notes and longer posts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.vidhanjain.com/research/&quot;&gt;Research&lt;/a&gt;&lt;/strong&gt; for papers, each with a summary in plain words&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.vidhanjain.com/projects/&quot;&gt;Projects&lt;/a&gt;&lt;/strong&gt; for things I&#39;ve built&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.vidhanjain.com/photos/&quot;&gt;Photos&lt;/a&gt;&lt;/strong&gt; for the non-work side of life&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.vidhanjain.com/me/&quot;&gt;About me&lt;/a&gt;&lt;/strong&gt; for everything else, plus a &lt;a href=&quot;https://www.vidhanjain.com/now/&quot;&gt;now page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How it&#39;s built&lt;/h2&gt;
&lt;p&gt;It&#39;s a static site built with &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt; and hosted on Vercel. Blog posts are Markdown files. Research papers and projects each live in a small JSON file, and the photos page pulls in whatever I upload to Pinterest, so adding a paper means adding a few lines instead of copying a block of HTML around.&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;src/
├── _data/          # publications, projects, photos, site info
├── _includes/      # layouts and shared pieces (sidebar, footer)
├── blog/           # one Markdown file per post
├── assets/         # CSS, JS, images, photos
└── *.njk           # one file per page&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No framework, no client-side routing, one stylesheet. Pages load fast and should keep working for a long time.&lt;/p&gt;
&lt;h2&gt;What&#39;s next&lt;/h2&gt;
&lt;p&gt;Mostly writing. I have a backlog of things I learned during my M.Tech that never made it out of my lab notebook: why tiny objects are so hard for detectors, what actually moved the needle in my ablations, and how I set up experiments in MMDetection. Those are coming.&lt;/p&gt;
&lt;p&gt;If you want to follow along, there&#39;s an &lt;a href=&quot;https://www.vidhanjain.com/feed.xml&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate>
      <dc:creator>Vidhan Jain</dc:creator>
      <guid>https://www.vidhanjain.com/blog/a-new-home/</guid>
    </item>
  </channel>
</rss>