Buckets:

hf-doc-build/doc-dev / transformers /pr_41992 /en /tasks /instance_segmentation.html
download
raw
72.5 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Instance segmentation&quot;,&quot;local&quot;:&quot;instance-segmentation&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Load the dataset&quot;,&quot;local&quot;:&quot;load-the-dataset&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Load the model and image processor&quot;,&quot;local&quot;:&quot;load-the-model-and-image-processor&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Preprocess the data&quot;,&quot;local&quot;:&quot;preprocess-the-data&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Data collator&quot;,&quot;local&quot;:&quot;data-collator&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Define evaluation metric&quot;,&quot;local&quot;:&quot;define-evaluation-metric&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Training&quot;,&quot;local&quot;:&quot;training&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Inference&quot;,&quot;local&quot;:&quot;inference&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}">
<link href="/docs/transformers/pr_41992/en/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/entry/start.6ac19d43.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/scheduler.0dad8db1.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/singletons.9505f7e3.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/index.595571e0.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/paths.a2014728.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/entry/app.42da82bd.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/preload-helper.43417560.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/index.855abf52.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/nodes/0.dc15b4bc.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/each.e59479a4.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/nodes/686.17ce4771.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/CopyLLMTxtMenu.9e1f0f49.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/MermaidChart.svelte_svelte_type_style_lang.bf05d4d8.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/IconCopy.ffdeebb6.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/CodeBlock.b28b91fa.js">
<link rel="modulepreload" href="/docs/transformers/pr_41992/en/_app/immutable/chunks/DocNotebookDropdown.ec6eafcf.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Instance segmentation&quot;,&quot;local&quot;:&quot;instance-segmentation&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Load the dataset&quot;,&quot;local&quot;:&quot;load-the-dataset&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Load the model and image processor&quot;,&quot;local&quot;:&quot;load-the-model-and-image-processor&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Preprocess the data&quot;,&quot;local&quot;:&quot;preprocess-the-data&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Data collator&quot;,&quot;local&quot;:&quot;data-collator&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Define evaluation metric&quot;,&quot;local&quot;:&quot;define-evaluation-metric&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Training&quot;,&quot;local&quot;:&quot;training&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Inference&quot;,&quot;local&quot;:&quot;inference&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"><div class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg></span> <span>Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg></button></div> </div> <div class="flex space-x-1 " style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"> <div class="relative colab-dropdown "> <button class=" " type="button"> <img alt="Open In Colab" class="!m-0" src="https://colab.research.google.com/assets/colab-badge.svg"> </button> </div> <div class="relative colab-dropdown "> <button class=" " type="button"> <img alt="Open In Studio Lab" class="!m-0" src="https://studiolab.sagemaker.aws/studiolab.svg"> </button> </div></div> <h1 class="relative group"><a id="instance-segmentation" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#instance-segmentation"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Instance segmentation</span></h1> <p data-svelte-h="svelte-1fjgriu">Instance segmentation is the computer vision task of detecting objects in an image and segmenting each one at the pixel level. Unlike object detection (which outputs bounding boxes), instance segmentation produces a precise mask for every detected object, allowing you to distinguish individual instances even when they overlap.</p> <p data-svelte-h="svelte-1xy9go1">In this guide, you will learn how to:</p> <ol data-svelte-h="svelte-1vgxa6b"><li>Load an instance segmentation dataset from the Hugging Face Hub.</li> <li>Fine-tune <a href="https://huggingface.co/Roboflow/rf-detr-seg-medium" rel="nofollow">RF-DETR-Seg</a>, a transformer-based instance segmentation model, using the Transformers <a href="/docs/transformers/pr_41992/en/main_classes/trainer#transformers.Trainer">Trainer</a>.</li> <li>Evaluate your model with mean IoU.</li> <li>Run inference and visualize predictions.</li></ol> <p data-svelte-h="svelte-8zh7hr">We’ll use the <a href="https://huggingface.co/datasets/merve/satellite-building-segmentation" rel="nofollow">satellite-building-segmentation</a> dataset, which contains ~9.6k satellite images annotated with building instance masks.</p> <blockquote class="tip" data-svelte-h="svelte-1htntmn"><p>To see all architectures and checkpoints compatible with this task, we recommend checking the <a href="https://huggingface.co/tasks/image-segmentation" rel="nofollow">task-page</a>.</p></blockquote> <p data-svelte-h="svelte-1bsa9o2">Before you begin, install all the necessary libraries:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-bash "><!-- HTML_TAG_START -->pip install -Uq <span class="hljs-string">&quot;transformers&gt;=5.9&quot;</span> datasets torchvision<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-a8xn47">We encourage you to share your model with the community. Log in to your Hugging Face account to upload it to the Hub when training is complete:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login
<span class="hljs-meta">&gt;&gt;&gt; </span>notebook_login()<!-- HTML_TAG_END --></pre></div> <h2 class="relative group"><a id="load-the-dataset" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#load-the-dataset"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Load the dataset</span></h2> <p data-svelte-h="svelte-5jobzx">The <a href="https://huggingface.co/datasets/merve/satellite-building-segmentation" rel="nofollow">satellite-building-segmentation</a> dataset is in native Hugging Face Datasets format, so load it directly with <code>load_dataset</code>. Each row contains:</p> <ul data-svelte-h="svelte-1lp49yl"><li><code>image</code>: the satellite image (PIL)</li> <li><code>image_id</code>: unique identifier for the image</li> <li><code>width</code> / <code>height</code>: image dimensions</li> <li><code>objects</code>: a dict of per-instance annotations with <code>id</code>, <code>category</code>, <code>bbox</code>, <code>area</code>, <code>segmentation</code> (polygon coordinates), and <code>iscrowd</code></li></ul> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
<span class="hljs-meta">&gt;&gt;&gt; </span>MODEL_ID = <span class="hljs-string">&quot;Roboflow/rf-detr-seg-medium&quot;</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>DATASET_ID = <span class="hljs-string">&quot;merve/satellite-building-segmentation&quot;</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>ds = load_dataset(DATASET_ID)
<span class="hljs-meta">&gt;&gt;&gt; </span>train_ds = ds[<span class="hljs-string">&quot;train&quot;</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span>valid_ds = ds[<span class="hljs-string">&quot;validation&quot;</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Train: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(train_ds)}</span> images, Valid: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(valid_ds)}</span> images&quot;</span>)<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-ovav6z">Inspect a single example. Each record has an <code>image</code>, an <code>image_id</code>, and an <code>objects</code> dict containing per-instance annotations. Each instance has a <code>bbox</code> in <code>[x, y, width, height]</code> format and a <code>segmentation</code> field with polygon coordinates:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span>sample = train_ds[<span class="hljs-number">0</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Image ID: <span class="hljs-subst">{sample[<span class="hljs-string">&#x27;image_id&#x27;</span>]}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Image size: <span class="hljs-subst">{sample[<span class="hljs-string">&#x27;image&#x27;</span>].size}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Number of instances: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(sample[<span class="hljs-string">&#x27;objects&#x27;</span>][<span class="hljs-string">&#x27;id&#x27;</span>])}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;\nObjects keys: <span class="hljs-subst">{<span class="hljs-built_in">list</span>(sample[<span class="hljs-string">&#x27;objects&#x27;</span>].keys())}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;First bbox: <span class="hljs-subst">{sample[<span class="hljs-string">&#x27;objects&#x27;</span>][<span class="hljs-string">&#x27;bbox&#x27;</span>][<span class="hljs-number">0</span>]}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;First category: <span class="hljs-subst">{sample[<span class="hljs-string">&#x27;objects&#x27;</span>][<span class="hljs-string">&#x27;category&#x27;</span>][<span class="hljs-number">0</span>]}</span>&quot;</span>)<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-17vhg5f">Visualize an example with its ground-truth masks:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> matplotlib.pyplot <span class="hljs-keyword">as</span> plt
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> PIL <span class="hljs-keyword">import</span> Image, ImageDraw
<span class="hljs-meta">&gt;&gt;&gt; </span>sample = train_ds[<span class="hljs-number">0</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span>image = sample[<span class="hljs-string">&quot;image&quot;</span>].convert(<span class="hljs-string">&quot;RGB&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>fig, axes = plt.subplots(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, figsize=(<span class="hljs-number">14</span>, <span class="hljs-number">6</span>))
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">0</span>].imshow(image)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">0</span>].set_title(<span class="hljs-string">&quot;Original image&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">0</span>].axis(<span class="hljs-string">&quot;off&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>overlay = image.copy()
<span class="hljs-meta">&gt;&gt;&gt; </span>draw = ImageDraw.Draw(overlay, <span class="hljs-string">&quot;RGBA&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>objects = sample[<span class="hljs-string">&quot;objects&quot;</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">for</span> seg <span class="hljs-keyword">in</span> objects[<span class="hljs-string">&quot;segmentation&quot;</span>]:
<span class="hljs-meta">... </span> <span class="hljs-keyword">for</span> poly <span class="hljs-keyword">in</span> seg:
<span class="hljs-meta">... </span> coords = <span class="hljs-built_in">list</span>(<span class="hljs-built_in">zip</span>(poly[<span class="hljs-number">0</span>::<span class="hljs-number">2</span>], poly[<span class="hljs-number">1</span>::<span class="hljs-number">2</span>]))
<span class="hljs-meta">... </span> color = <span class="hljs-built_in">tuple</span>(np.random.randint(<span class="hljs-number">50</span>, <span class="hljs-number">255</span>, <span class="hljs-number">3</span>)) + (<span class="hljs-number">100</span>,)
<span class="hljs-meta">... </span> draw.polygon(coords, fill=color, outline=<span class="hljs-string">&quot;red&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">1</span>].imshow(overlay)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">1</span>].set_title(<span class="hljs-string">f&quot;Ground truth (<span class="hljs-subst">{<span class="hljs-built_in">len</span>(objects[<span class="hljs-string">&#x27;id&#x27;</span>])}</span> buildings)&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">1</span>].axis(<span class="hljs-string">&quot;off&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>plt.tight_layout()
<span class="hljs-meta">&gt;&gt;&gt; </span>plt.show()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-1ci4823"><img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/satellite-dataset.png" alt="Dataset Sample"></p> <h2 class="relative group"><a id="load-the-model-and-image-processor" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#load-the-model-and-image-processor"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Load the model and image processor</span></h2> <p data-svelte-h="svelte-1616n7u">Use <a href="/docs/transformers/pr_41992/en/model_doc/auto#transformers.AutoImageProcessor">AutoImageProcessor</a> and <a href="/docs/transformers/pr_41992/en/model_doc/auto#transformers.AutoModelForInstanceSegmentation">AutoModelForInstanceSegmentation</a> to load the RF-DETR-Seg model. When loading the model, pass <code>id2label</code> and <code>label2id</code> mappings to configure the classification head for the single “building” class. Since the pretrained model was trained on COCO (91 classes), set <code>ignore_mismatched_sizes=True</code> to reinitialize the classification head with the correct number of outputs.</p> <p data-svelte-h="svelte-1smf65x">The image processor handles all the preprocessing: resizing images while maintaining aspect ratio, normalizing with ImageNet statistics, padding to a uniform size, and — crucially for instance segmentation — converting polygon annotations to binary masks, resizing those masks, and normalizing bounding boxes to the <code>[cx, cy, w, h]</code> format in <code>[0, 1]</code> range that the model expects.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoImageProcessor, AutoModelForInstanceSegmentation
<span class="hljs-meta">&gt;&gt;&gt; </span>id2label = {<span class="hljs-number">0</span>: <span class="hljs-string">&quot;building&quot;</span>}
<span class="hljs-meta">&gt;&gt;&gt; </span>label2id = {<span class="hljs-string">&quot;building&quot;</span>: <span class="hljs-number">0</span>}
<span class="hljs-meta">&gt;&gt;&gt; </span>image_processor = AutoImageProcessor.from_pretrained(MODEL_ID)
<span class="hljs-meta">&gt;&gt;&gt; </span>model = AutoModelForInstanceSegmentation.from_pretrained(
<span class="hljs-meta">... </span> MODEL_ID,
<span class="hljs-meta">... </span> id2label=id2label,
<span class="hljs-meta">... </span> label2id=label2id,
<span class="hljs-meta">... </span> ignore_mismatched_sizes=<span class="hljs-literal">True</span>,
<span class="hljs-meta">... </span>)<!-- HTML_TAG_END --></pre></div> <h2 class="relative group"><a id="preprocess-the-data" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#preprocess-the-data"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Preprocess the data</span></h2> <p data-svelte-h="svelte-alfijr">To fine-tune the model, you must preprocess the data to match the format the model expects. The <code>RfDetrImageProcessor</code> does all the heavy lifting when you pass it images and COCO-format annotations with <code>return_segmentation_masks=True</code>:</p> <ol data-svelte-h="svelte-1jxcl74"><li>Rasterizes polygon segmentations into binary masks</li> <li>Resizes images, bounding boxes, and masks to the model’s input size</li> <li>Normalizes pixel values with ImageNet mean/std</li> <li>Converts bounding boxes from <code>[x, y, w, h]</code> to normalized <code>[cx, cy, w, h]</code></li> <li>Pads images to a uniform size and creates a <code>pixel_mask</code></li></ol> <p data-svelte-h="svelte-12r0pbw">The transform reconstructs the COCO-style annotation dicts that the image processor expects from the dataset’s <code>objects</code> column.</p> <p data-svelte-h="svelte-43zeiu">Use <code>with_transform</code> to apply preprocessing lazily (on-the-fly when samples are loaded), which avoids storing the entire processed dataset in memory.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> functools <span class="hljs-keyword">import</span> partial
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> typing <span class="hljs-keyword">import</span> <span class="hljs-type">Any</span>
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">transform_batch</span>(<span class="hljs-params">examples: <span class="hljs-built_in">dict</span>[<span class="hljs-built_in">str</span>, <span class="hljs-type">Any</span>], image_processor</span>) -&gt; <span class="hljs-built_in">dict</span>[<span class="hljs-built_in">str</span>, <span class="hljs-type">Any</span>]:
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;&quot;&quot;Convert HF dataset rows into COCO-style dicts and pass to the processor.&quot;&quot;&quot;</span>
<span class="hljs-meta">... </span> images, targets = [], []
<span class="hljs-meta">... </span> <span class="hljs-keyword">for</span> image, img_id, objects <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(
<span class="hljs-meta">... </span> examples[<span class="hljs-string">&quot;image&quot;</span>], examples[<span class="hljs-string">&quot;image_id&quot;</span>], examples[<span class="hljs-string">&quot;objects&quot;</span>]
<span class="hljs-meta">... </span> ):
<span class="hljs-meta">... </span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> objects[<span class="hljs-string">&quot;id&quot;</span>]:
<span class="hljs-meta">... </span> <span class="hljs-keyword">continue</span>
<span class="hljs-meta">... </span> annotations = [
<span class="hljs-meta">... </span> {
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;id&quot;</span>: ann_id,
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;image_id&quot;</span>: img_id,
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;category_id&quot;</span>: cat,
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;bbox&quot;</span>: bbox,
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;area&quot;</span>: area,
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;segmentation&quot;</span>: seg,
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;iscrowd&quot;</span>: crowd,
<span class="hljs-meta">... </span> }
<span class="hljs-meta">... </span> <span class="hljs-keyword">for</span> ann_id, cat, bbox, area, seg, crowd <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(
<span class="hljs-meta">... </span> objects[<span class="hljs-string">&quot;id&quot;</span>],
<span class="hljs-meta">... </span> objects[<span class="hljs-string">&quot;category&quot;</span>],
<span class="hljs-meta">... </span> objects[<span class="hljs-string">&quot;bbox&quot;</span>],
<span class="hljs-meta">... </span> objects[<span class="hljs-string">&quot;area&quot;</span>],
<span class="hljs-meta">... </span> objects[<span class="hljs-string">&quot;segmentation&quot;</span>],
<span class="hljs-meta">... </span> objects[<span class="hljs-string">&quot;iscrowd&quot;</span>],
<span class="hljs-meta">... </span> )
<span class="hljs-meta">... </span> ]
<span class="hljs-meta">... </span> images.append(image.convert(<span class="hljs-string">&quot;RGB&quot;</span>))
<span class="hljs-meta">... </span> targets.append({<span class="hljs-string">&quot;image_id&quot;</span>: img_id, <span class="hljs-string">&quot;annotations&quot;</span>: annotations})
...
<span class="hljs-meta">... </span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> images:
<span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> {}
<span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> image_processor(
<span class="hljs-meta">... </span> images=images, annotations=targets, return_segmentation_masks=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>
<span class="hljs-meta">... </span> )
<span class="hljs-meta">&gt;&gt;&gt; </span>transform = partial(transform_batch, image_processor=image_processor)
<span class="hljs-meta">&gt;&gt;&gt; </span>train_ds = train_ds.shuffle(seed=<span class="hljs-number">42</span>).with_transform(transform)
<span class="hljs-meta">&gt;&gt;&gt; </span>valid_ds = valid_ds.with_transform(transform)<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-1j90u0y">Verify a preprocessed example. It contains <code>pixel_values</code> (the normalized image tensor), <code>pixel_mask</code> (indicating real pixels vs padding), and <code>labels</code> (a dict with <code>class_labels</code>, <code>boxes</code> in normalized center format, and binary <code>masks</code>):</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span>example = train_ds[<span class="hljs-number">0</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;pixel_values shape: <span class="hljs-subst">{example[<span class="hljs-string">&#x27;pixel_values&#x27;</span>].shape}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;pixel_mask shape: <span class="hljs-subst">{example[<span class="hljs-string">&#x27;pixel_mask&#x27;</span>].shape}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;labels keys: <span class="hljs-subst">{<span class="hljs-built_in">list</span>(example[<span class="hljs-string">&#x27;labels&#x27;</span>].keys())}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot; class_labels: <span class="hljs-subst">{example[<span class="hljs-string">&#x27;labels&#x27;</span>][<span class="hljs-string">&#x27;class_labels&#x27;</span>]}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot; boxes shape: <span class="hljs-subst">{example[<span class="hljs-string">&#x27;labels&#x27;</span>][<span class="hljs-string">&#x27;boxes&#x27;</span>].shape}</span>&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot; masks shape: <span class="hljs-subst">{example[<span class="hljs-string">&#x27;labels&#x27;</span>][<span class="hljs-string">&#x27;masks&#x27;</span>].shape}</span>&quot;</span>)<!-- HTML_TAG_END --></pre></div> <h2 class="relative group"><a id="data-collator" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#data-collator"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Data collator</span></h2> <p data-svelte-h="svelte-9phkgk">Since each image has a different number of object instances, labels are variable-length dictionaries and cannot be stacked into a single tensor. Define a custom collate function that stacks <code>pixel_values</code> and <code>pixel_mask</code> normally, but keeps <code>labels</code> as a list of per-image dicts:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> torch
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">collate_fn</span>(<span class="hljs-params">batch: <span class="hljs-built_in">list</span>[<span class="hljs-built_in">dict</span>[<span class="hljs-built_in">str</span>, <span class="hljs-type">Any</span>]]</span>) -&gt; <span class="hljs-built_in">dict</span>[<span class="hljs-built_in">str</span>, <span class="hljs-type">Any</span>]:
<span class="hljs-meta">... </span> out = {
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;pixel_values&quot;</span>: torch.stack([x[<span class="hljs-string">&quot;pixel_values&quot;</span>] <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> batch]),
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;labels&quot;</span>: [x[<span class="hljs-string">&quot;labels&quot;</span>] <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> batch],
<span class="hljs-meta">... </span> }
<span class="hljs-meta">... </span> <span class="hljs-keyword">if</span> <span class="hljs-string">&quot;pixel_mask&quot;</span> <span class="hljs-keyword">in</span> batch[<span class="hljs-number">0</span>]:
<span class="hljs-meta">... </span> out[<span class="hljs-string">&quot;pixel_mask&quot;</span>] = torch.stack([x[<span class="hljs-string">&quot;pixel_mask&quot;</span>] <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> batch])
<span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> out<!-- HTML_TAG_END --></pre></div> <h2 class="relative group"><a id="define-evaluation-metric" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#define-evaluation-metric"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Define evaluation metric</span></h2> <p data-svelte-h="svelte-fsgsaa">To track segmentation quality during training, compute a <em>union-based mean IoU</em> at each evaluation epoch. For each image:</p> <ol data-svelte-h="svelte-1b8tsa9"><li>Merge all predicted instance masks into a single binary “buildings” map (binarize each query’s mask logits with <code>sigmoid &gt; 0.5</code>)</li> <li>Merge all ground-truth instance masks into a single binary map</li> <li>Compute Intersection-over-Union between the two maps</li></ol> <p data-svelte-h="svelte-16tfh83">RF-DETR-Seg’s query masks are not gated by a class-score threshold, so the metric ignores class scores and unions the per-query mask logits directly. Unmatched queries produce near-empty masks, so they do not pollute the union.</p> <p data-svelte-h="svelte-cmjz59">This gives a per-image metric of “how well does the model cover the buildings”, which is averaged over the full validation set.</p> <blockquote class="tip" data-svelte-h="svelte-q6brmm"><p>Instance segmentation benchmarks (such as COCO) usually report mask mean average precision (mAP), which scores each predicted instance mask against the ground truth across a range of IoU thresholds and therefore rewards correctly separating individual objects. The union-based mean IoU used here is a simpler, faster proxy: it measures overall pixel coverage rather than per-instance quality, which makes it convenient for tracking progress during training. For a standard, instance-aware evaluation, compute mask mAP instead, for example with <code>torchmetrics</code><a href="https://lightning.ai/docs/torchmetrics/stable/detection/mean_average_precision.html" rel="nofollow"><code>MeanAveragePrecision(iou_type=&quot;segm&quot;)</code></a>.</p></blockquote> <p data-svelte-h="svelte-1j0g66y">Pass this to the <a href="/docs/transformers/pr_41992/en/main_classes/trainer#transformers.Trainer">Trainer</a> as a <code>compute_metrics</code> function instead of subclassing the trainer. With <code>eval_do_concat_batches=False</code> (set in the <a href="/docs/transformers/pr_41992/en/main_classes/trainer#transformers.TrainingArguments">TrainingArguments</a> below), the predictions and labels produced by the standard evaluation pass are handed to <code>compute_metrics</code> as a list of per-batch outputs, so the metric reuses those predictions and no second forward pass over the validation set is needed. In the model output tuple, index <code>3</code> holds <code>pred_masks</code>:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> torch.nn.functional <span class="hljs-keyword">as</span> F
<span class="hljs-meta">&gt;&gt;&gt; </span>@torch.no_grad()
<span class="hljs-meta">... </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_mean_iou</span>(<span class="hljs-params">pred_masks, gt_masks, target_size</span>):
<span class="hljs-meta">... </span> <span class="hljs-string">&quot;&quot;&quot;Union-based IoU: merge all instances per image, then compute IoU.&quot;&quot;&quot;</span>
<span class="hljs-meta">... </span> pred_masks = F.interpolate(pred_masks[<span class="hljs-literal">None</span>], size=target_size, mode=<span class="hljs-string">&quot;bilinear&quot;</span>, align_corners=<span class="hljs-literal">False</span>)[<span class="hljs-number">0</span>]
<span class="hljs-meta">... </span> pred_union = (pred_masks.sigmoid() &gt; <span class="hljs-number">0.5</span>).<span class="hljs-built_in">any</span>(dim=<span class="hljs-number">0</span>)
...
<span class="hljs-meta">... </span> gt_union = gt_masks.<span class="hljs-built_in">any</span>(dim=<span class="hljs-number">0</span>).<span class="hljs-built_in">bool</span>()
...
<span class="hljs-meta">... </span> intersection = (pred_union &amp; gt_union).<span class="hljs-built_in">sum</span>().<span class="hljs-built_in">float</span>()
<span class="hljs-meta">... </span> union = (pred_union | gt_union).<span class="hljs-built_in">sum</span>().<span class="hljs-built_in">float</span>()
<span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> (intersection / union.clamp(<span class="hljs-built_in">min</span>=<span class="hljs-number">1</span>)).item()
<span class="hljs-meta">&gt;&gt;&gt; </span>@torch.no_grad()
<span class="hljs-meta">... </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">evaluation_results</span>):
<span class="hljs-meta">... </span> predictions, targets = evaluation_results.predictions, evaluation_results.label_ids
<span class="hljs-meta">... </span> ious = []
<span class="hljs-meta">... </span> <span class="hljs-keyword">for</span> pred_batch, target_batch <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(predictions, targets):
<span class="hljs-meta">... </span> batch_masks = pred_batch[<span class="hljs-number">3</span>]
<span class="hljs-meta">... </span> <span class="hljs-keyword">for</span> i, gt_label <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(target_batch):
<span class="hljs-meta">... </span> gt_masks = torch.as_tensor(gt_label[<span class="hljs-string">&quot;masks&quot;</span>])
<span class="hljs-meta">... </span> <span class="hljs-keyword">if</span> gt_masks.numel() == <span class="hljs-number">0</span>:
<span class="hljs-meta">... </span> <span class="hljs-keyword">continue</span>
<span class="hljs-meta">... </span> target_size = gt_masks.shape[-<span class="hljs-number">2</span>:]
<span class="hljs-meta">... </span> pred_masks = torch.as_tensor(batch_masks[i])
<span class="hljs-meta">... </span> ious.append(compute_mean_iou(pred_masks, gt_masks, target_size))
...
<span class="hljs-meta">... </span> mean_iou = <span class="hljs-built_in">sum</span>(ious) / <span class="hljs-built_in">len</span>(ious) <span class="hljs-keyword">if</span> ious <span class="hljs-keyword">else</span> <span class="hljs-number">0.0</span>
<span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;mean_iou&quot;</span>: mean_iou}<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-10f2h">The <a href="/docs/transformers/pr_41992/en/main_classes/trainer#transformers.Trainer">Trainer</a> automatically prefixes the returned keys with <code>eval_</code>, so this produces the <code>eval_mean_iou</code> metric used below for checkpoint selection.</p> <h2 class="relative group"><a id="training" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#training"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Training</span></h2> <p data-svelte-h="svelte-hmxltb">With the data, model, and metrics ready, set up training. A few important notes on the <a href="/docs/transformers/pr_41992/en/main_classes/trainer#transformers.TrainingArguments">TrainingArguments</a>:</p> <ul data-svelte-h="svelte-1lgwfcz"><li><code>remove_unused_columns=False</code>: Required because the default behavior would drop columns before our transform runs.</li> <li><code>eval_do_concat_batches=False</code>: Instance segmentation labels are variable-length dicts, they cannot be concatenated across batches. This also keeps predictions grouped per batch so <code>compute_metrics</code> can match them to their labels.</li> <li><code>metric_for_best_model=&quot;eval_mean_iou&quot;</code>: Select the best checkpoint by segmentation quality, not just loss.</li> <li><code>fp16=True</code>: Mixed precision training significantly speeds up training on modern GPUs.</li></ul> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer, TrainingArguments
<span class="hljs-meta">&gt;&gt;&gt; </span>training_args = TrainingArguments(
<span class="hljs-meta">... </span> output_dir=<span class="hljs-string">&quot;rf-detr-seg-satellite-buildings&quot;</span>,
<span class="hljs-meta">... </span> num_train_epochs=<span class="hljs-number">10</span>,
<span class="hljs-meta">... </span> per_device_train_batch_size=<span class="hljs-number">16</span>,
<span class="hljs-meta">... </span> per_device_eval_batch_size=<span class="hljs-number">16</span>,
<span class="hljs-meta">... </span> learning_rate=<span class="hljs-number">1e-4</span>,
<span class="hljs-meta">... </span> weight_decay=<span class="hljs-number">1e-4</span>,
<span class="hljs-meta">... </span> lr_scheduler_type=<span class="hljs-string">&quot;cosine&quot;</span>,
<span class="hljs-meta">... </span> warmup_ratio=<span class="hljs-number">0.1</span>,
<span class="hljs-meta">... </span> fp16=<span class="hljs-literal">True</span>,
<span class="hljs-meta">... </span> dataloader_num_workers=<span class="hljs-number">4</span>,
<span class="hljs-meta">... </span> eval_strategy=<span class="hljs-string">&quot;epoch&quot;</span>,
<span class="hljs-meta">... </span> save_strategy=<span class="hljs-string">&quot;epoch&quot;</span>,
<span class="hljs-meta">... </span> save_total_limit=<span class="hljs-number">2</span>,
<span class="hljs-meta">... </span> load_best_model_at_end=<span class="hljs-literal">True</span>,
<span class="hljs-meta">... </span> metric_for_best_model=<span class="hljs-string">&quot;eval_mean_iou&quot;</span>,
<span class="hljs-meta">... </span> greater_is_better=<span class="hljs-literal">True</span>,
<span class="hljs-meta">... </span> remove_unused_columns=<span class="hljs-literal">False</span>,
<span class="hljs-meta">... </span> eval_do_concat_batches=<span class="hljs-literal">False</span>,
<span class="hljs-meta">... </span> push_to_hub=<span class="hljs-literal">True</span>,
<span class="hljs-meta">... </span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>trainer = Trainer(
<span class="hljs-meta">... </span> model=model,
<span class="hljs-meta">... </span> args=training_args,
<span class="hljs-meta">... </span> train_dataset=train_ds,
<span class="hljs-meta">... </span> eval_dataset=valid_ds,
<span class="hljs-meta">... </span> processing_class=image_processor,
<span class="hljs-meta">... </span> data_collator=collate_fn,
<span class="hljs-meta">... </span> compute_metrics=compute_metrics,
<span class="hljs-meta">... </span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>trainer.train()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-1lae6ot">If you set <code>push_to_hub=True</code> in the training arguments, the training checkpoints are pushed to the
Hugging Face Hub. Upon training completion, push the final model to the Hub as well by calling the <a href="/docs/transformers/pr_41992/en/main_classes/trainer#transformers.Trainer.push_to_hub">push_to_hub()</a> method.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span>trainer.push_to_hub(
<span class="hljs-meta">... </span> dataset=DATASET_ID,
<span class="hljs-meta">... </span> tags=[<span class="hljs-string">&quot;instance-segmentation&quot;</span>, <span class="hljs-string">&quot;rf-detr-seg&quot;</span>, <span class="hljs-string">&quot;vision&quot;</span>, <span class="hljs-string">&quot;satellite&quot;</span>, <span class="hljs-string">&quot;building&quot;</span>],
<span class="hljs-meta">... </span>)<!-- HTML_TAG_END --></pre></div> <h2 class="relative group"><a id="inference" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#inference"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Inference</span></h2> <p data-svelte-h="svelte-ekrjrp">Now that you have a fine-tuned model, use it for inference on new satellite images. The workflow is:</p> <ol data-svelte-h="svelte-1n1lgw1"><li>Preprocess the image with the image processor</li> <li>Run a forward pass through the model</li> <li>Post-process outputs with <code>post_process_instance_segmentation</code> to get pixel-level masks</li></ol> <p data-svelte-h="svelte-kauseg">The post-processing step converts the raw query outputs (logits + low-res masks) into full-resolution instance segmentation maps, applying score thresholding and mask binarization.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
<span class="hljs-meta">&gt;&gt;&gt; </span>test_ds = load_dataset(DATASET_ID, split=<span class="hljs-string">&quot;test&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>sample = test_ds[<span class="hljs-number">0</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span>image = sample[<span class="hljs-string">&quot;image&quot;</span>].convert(<span class="hljs-string">&quot;RGB&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>device = <span class="hljs-built_in">next</span>(model.parameters()).device
<span class="hljs-meta">&gt;&gt;&gt; </span>inputs = image_processor(images=image, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>).to(device)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> torch.no_grad():
<span class="hljs-meta">... </span> outputs = model(**inputs)
<span class="hljs-meta">&gt;&gt;&gt; </span>results = image_processor.post_process_instance_segmentation(
<span class="hljs-meta">... </span> outputs, threshold=<span class="hljs-number">0.5</span>, target_sizes=[(image.height, image.width)]
<span class="hljs-meta">... </span>)[<span class="hljs-number">0</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Detected <span class="hljs-subst">{<span class="hljs-built_in">len</span>(results[<span class="hljs-string">&#x27;segments_info&#x27;</span>])}</span> buildings&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">for</span> seg_info <span class="hljs-keyword">in</span> results[<span class="hljs-string">&quot;segments_info&quot;</span>][:<span class="hljs-number">5</span>]:
<span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot; Building (score: <span class="hljs-subst">{seg_info[<span class="hljs-string">&#x27;score&#x27;</span>]:<span class="hljs-number">.3</span>f}</span>)&quot;</span>)<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-bkkamq">Visualize the predictions. The segmentation map assigns each pixel a segment ID (-1 for background). Overlay each detected building with a random color:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class="language-py "><!-- HTML_TAG_START --><span class="hljs-meta">&gt;&gt;&gt; </span>fig, axes = plt.subplots(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, figsize=(<span class="hljs-number">14</span>, <span class="hljs-number">6</span>))
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">0</span>].imshow(image)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">0</span>].set_title(<span class="hljs-string">&quot;Input satellite image&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">0</span>].axis(<span class="hljs-string">&quot;off&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>seg_map = results[<span class="hljs-string">&quot;segmentation&quot;</span>].cpu().numpy()
<span class="hljs-meta">&gt;&gt;&gt; </span>overlay = np.array(image).copy()
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">for</span> seg_info <span class="hljs-keyword">in</span> results[<span class="hljs-string">&quot;segments_info&quot;</span>]:
<span class="hljs-meta">... </span> mask = seg_map == seg_info[<span class="hljs-string">&quot;id&quot;</span>]
<span class="hljs-meta">... </span> color = np.random.randint(<span class="hljs-number">0</span>, <span class="hljs-number">255</span>, <span class="hljs-number">3</span>)
<span class="hljs-meta">... </span> overlay[mask] = (overlay[mask] * <span class="hljs-number">0.4</span> + color * <span class="hljs-number">0.6</span>).astype(np.uint8)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">1</span>].imshow(overlay)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">1</span>].set_title(<span class="hljs-string">f&quot;Predicted masks (<span class="hljs-subst">{<span class="hljs-built_in">len</span>(results[<span class="hljs-string">&#x27;segments_info&#x27;</span>])}</span> buildings)&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>axes[<span class="hljs-number">1</span>].axis(<span class="hljs-string">&quot;off&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>plt.tight_layout()
<span class="hljs-meta">&gt;&gt;&gt; </span>plt.show()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-18eet01"><img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/finetuned-results.png" alt="Fine-tuning Result"></p> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/transformers/blob/main/docs/source/en/tasks/instance_segmentation.md" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg> <span data-svelte-h="svelte-zjs2n5"><span class="underline">Update</span> on GitHub</span></a> <p></p>
<script>
{
__sveltekit_1cvdjju = {
assets: "/docs/transformers/pr_41992/en",
base: "/docs/transformers/pr_41992/en",
env: {}
};
const element = document.currentScript.parentElement;
const data = [null,null];
Promise.all([
import("/docs/transformers/pr_41992/en/_app/immutable/entry/start.6ac19d43.js"),
import("/docs/transformers/pr_41992/en/_app/immutable/entry/app.42da82bd.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 686],
data,
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
72.5 kB
·
Xet hash:
ea43742a6adface55c4e422e8feb6315cc326435aea77ac2c4c703954befae48

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.