1<!DOCTYPE html> 2<html> 3 4<head> 5 6 <!-- Google tag (gtag.js) -->
vendor: 66 bytes, lines 6-7
6 7 <script async src="https://www.googletagmanager.com/gtag/js?id=
7G-MM5PQ9VB6G
vendor: 14 bytes, lines 7-8
7"></script> 8
8<script> 9
vendor: 140 bytes, lines 9-13
9window.dataLayer = window.dataLayer || []; 10 function gtag(){dataLayer.push(arguments);} 11 gtag('js', new Date()); 12 13 gtag('config', '
13G-MM5PQ9VB6G
vendor: 6 bytes, lines 13-14
13'); 14
14</script>
14 15 16 <meta charset="utf-8"> 17 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 18 <title>Affordance Policy Learning</title> 19 20 <link href="https://fonts.googleapis.com/css?family=Google+Sans|Noto+Sans|Castoro" rel="stylesheet"> 21 22 <link rel="stylesheet" href="./static/css/bulma.min.css"> 23 <link rel="stylesheet" href="./static/css/bulma-carousel.min.css"> 24 <link rel="stylesheet" href="./static/css/bulma-slider.min.css"> 25 <link rel="stylesheet" href="./static/css/fontawesome.all.min.css"> 26 <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css"> 27 <link rel="stylesheet" href="./static/css/index.css"> 28 <link rel="icon" href="./static/images/vlmaps_icon.svg"> 29
29<script src="https://kit.fontawesome.com/7a7a763338.js" crossorigin="anonymous"></script>
29 30 31
31<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
31 32
32<script defer src="./static/js/fontawesome.all.min.js"></script>
32 33
33<script src="./static/js/bulma-carousel.min.js"></script>
33 34
34<script src="./static/js/bulma-slider.min.js"></script>
34 35
35<script src="./static/js/index.js"></script>
35 36 37 <style> 38 .img-responsive { 39 max-width: 100%; 40 height: auto; 41 } 42 .video-responsive { 43 width: 100%; 44 height: auto; 45 } 46 47 .gradient-text { 48 background: linear-gradient(to right, red,yellow, cyan, blue); 49 -webkit-background-clip: text; 50 -webkit-text-fill-color: transparent; 51} 52 53 </style> 54</head> 55 56<body> 57 <!-- Google Tag Manager (noscript) -->
vendor: 70 bytes, lines 57-58
57 58 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
58GTM-PFJ2DFW
vendor: 91 bytes, lines 58-60
58" height="0" width="0" 59 style="display:none;visibility:hidden"></iframe></noscript> 60
60<!-- End Google Tag Manager (noscript) --> 61 62 <section class="hero"> 63 <div class="hero-body"> 64 <div class="container is-max-desktop"> 65 <div class="columns is-centered"> 66 <div class="column has-text-centered"> 67 <h1 class="title is-1 publication-title" style="font-size: 2.5em;"> 68 Learning from 10 Demos: </br> 69 <span style="font-size: 0.7em;">Generalisable and Sample-Efficient Policy Learning with Oriented Affordance Frames</span> 70 </h1> 71 72 <div class="is-size-5 publication-authors"> 73 <span class="author-block"> 74 <a href="https://krishanrana.github.io">Krishan Rana</a><sup>1</sup>,</span> 75 <span class="author-block"> 76 <a href="https://jadchakra.github.io/">Jad Abou-Chakra</a><sup>1</sup>,</span> 77 <span class="author-block"> 78 <a href="https://oravus.github.io/">Sourav Garg</a><sup>2</sup>, 79 </span> 80 <span class="author-block"> 81 <a href="https://scholar.google.com.au/citations?user=1Vqlm0kAAAAJ&hl=en">Robert Lee</a><sup></sup>, 82 </span> 83 <span class="author-block"> 84 <a href="https://cs.adelaide.edu.au/~ianr/">Ian Reid</a><sup>2</sup>, 85 </span> 86 <span class="author-block"> 87 <a href="https://nikosuenderhauf.github.io/">Niko Suenderhauf</a><sup>1</sup>, 88 </span> 89 </div> 90 91 <div class="is-size-5 publication-authors"> 92 <span class="author-block"><sup>1</sup>QUT Centre for Robotics</span> 93 <span class="author-block"><sup>2</sup>University of Adelaide</span> 94 </div> 95 96 97 <div class="column has-text-centered"> 98 <div class="publication-links"> 99 <!-- PDF Link. --> 100 <span class="link-block"> 101 <a href="https://openreview.net/pdf?id=1K3kjo91Q1" 102 class="external-link button is-normal is-rounded is-dark"> 103 <span class="icon"> 104 <i class="fas fa-file-pdf"></i> 105 </span> 106 <span>Paper</span> 107 </a> 108 </span> 109 110 <!-- <span class="link-block"> 111 <a href=" " 112 class="external-link button is-normal is-rounded is-dark"> 113 <span class="icon"> 114 <i class="ai ai-arxiv"></i> 115 </span> 116 <span>arXiv</span> 117 </a> 118 </span> --> 119 <!-- Video Link. --> 120<!-- <span class="link-block"> 121 <a href="#" 122 class="external-link button is-normal is-rounded "> 123 <span class="icon"> 124 <i class="fab fa-youtube"></i> 125 </span> 126 <span>Video</span> 127 </a> 128 </span> --> 129 <!-- Code Link. --> 130 <!-- <span class="link-block"> 131 <a href="#" 132 class="external-link button is-normal is-rounded "> 133 <span class="icon"> 134 <i class="fab fa-github"></i> 135 </span> 136 <span>Code</span> 137 </a> 138 </span> --> 139 <!-- Dataset Link. --> 140 <span class="link-block"> 141 <a href="https://x.com/krshnrana/status/1812517940790689852" 142 class="external-link button is-normal is-rounded "> 143 <span class="icon"> 144 <i class="fa-brands fa-x-twitter"></i> 145 </span> 146 <span>Thread</span> 147 </a> 148 </div> 149 </div> 150 151 <br> 152 153 154 155 156 157 <section class="hero teaser"> 158 <div class="container is-max-desktop"> 159 <div class="hero-body"> 160 <!-- First video, spans full width --> 161 <div class="full-width-video" style="margin-bottom: 20px;"> 162 <video id="teaser1" autoplay controls muted loop playsinline width="100%"> 163 <source src="Images/main1.mp4" type="video/mp4"> 164 </video> 165 </div> 166 167 <!-- Two videos in a row underneath --> 168 <div class="two-videos-row" style="display: flex; justify-content: space-between;"> 169 <div class="carousel-item" style="flex: 1; margin-right: 10px;"> 170 <video id="teaser2" autoplay controls loop playsinline width="100%"> 171 <source src="Images/coffee_making_FINAL_compressed.mp4" type="video/mp4"> 172 </video> 173 </div> 174 <div class="carousel-item" style="flex: 1; margin-left: 10px;" > 175 <video id="teaser3" autoplay controls muted loop playsinline width="100%"> 176 <source src="Images/shoe_racking_compressed.mp4" type="video/mp4"> 177 </video> 178 </div> 179 </div> 180 181 <p class="has-text-centered" style="color:gray; margin-top: 20px;"> 182 Diffusion Policy solving <b>long-horizon, multi-object</b> tasks using the equivalent of only <b>10 full task demonstrations</b>. The colour <span class="gradient-text">gradient</span> of the diffused trajectory represents the predicted <b>self-progress</b> of the sub-policy for the current sub-task. We additionally overlay the current affordance-centric task frame that the sub-policy is operating with respect to. 183 </p> 184 </div> 185 </div> 186 </section> 187 188 189 190 191 192 193 <section class="section"> 194 <div class="container is-max-desktop"> 195 <div class="columns is-centered has-text-centered"> 196 </div> 197 <br> 198 <div class="columns is-centered has-text-centered"> 199 <div class="column is-four-fifths"> 200 <h2 class="title is-3">Abstract</h2> 201 <div class="content has-text-justified"> 202 <p> 203 Imitation learning has unlocked the potential for robots to exhibit highly dexterous behaviours. However, it still struggles with long-horizon, multi-object tasks due to poor sample efficiency and limited generalisation. Existing methods require a substantial number of demonstrations to cover possible task variations, making them costly and often impractical for real-world deployment. We address this challenge by introducing oriented affordance frames, a structured representation for state and action spaces that improves spatial and intra-category generalisation and enables policies to be learned efficie
203ntly from only 10 demonstrations. More importantly we show how this abstraction allows for compositional generalisation of independently trained sub-policies to solve long-horizon, multi-object tasks. To seamlessly transition between sub-policies, we introduce the notion of self-progress prediction, which we directly derive from the duration of the training demonstrations. We validate our method across three real-world tasks, each requiring multi-step, multi-object interactions. Despite the small dataset, our policies generalise robustly to unseen object appearances, geometries, and spatial arrangements, achieving high success rates without reliance on exhaustive training data. 204 </p> 205 </div> 206 </div> 207 </div> 208 <br><br> 209 <div class="columns is-centered"> 210 <div class="column is-full-width"> 211 <h2 class="title is-3" style="text-align: left;">Overview</h2> 212 <div class="content has-text-justified"> 213 <p style="text-align:center;"> 214 <img src="Images/main.png" class="img-responsive"> 215 </p> 216 217 <p class="has-text-centered" style="color:gray;"> 218 We factorise <b>multi-object</b>, <b>long-horizon</b> manipulation tasks into a series of sub-policies trained with respect to an oriented affordance-centric task frame. The relative task frame allows us to learn policies that are spatially invariant, while the specifc placement of the frames at a task-relevant affordance-centric region on an object allows for intra-category invariance. Each diffusion policy is trained to additionally predict <b>self-progress</b> across a sub-task enabling it to autonomously transition between sub-tasks in order to complete longer-horizon tasks. 219 </p> 220 <p> 221 </p> 222 223 <!-- <h6> Affordance-Centric Policy Decomposition </h6> 224 225 <p>In order to learn sample effient, and generalisable policies for long-horizon, multi-object manipulation tasks, we propose a novel method that leverages <b>affordance-centric task-frames</b>. We decompose policy learning for such tasks into a series of sub-policies each of which is trained to solve a sub-task with respect to an affordance-centric task-frame. To improve data efficiency, we re-orient this frame such that it's <b>funnel axis</b> always points towards the current tool-frame of the robot ensuring the robot consistently operates within the data support of the subsequent sub-policy. The relative task frame allows us to learn policies that are spatially invariant, while the specifc placement of the frames at a task-relevant affordance-centric region on an object allows for intra-category invariance. Each sub-policy is trained using Diffusion Policy from only 10 demonstrations using a fixed set of object instances.</p> 226 227 <h6> Affordance-Centric Policy Chaining </h6> 228 229 <p> To autonomously chain the sub-policies to solve longer-horizon tasks, we introduce the concept of <b>self-progress</b> to each sub-policy's action-space. This allows the sub-policy to autonomously transition to the next sub-policy upon completion of the current sub-task. This eliminates the need for a learned arbitrator and allows for seamless composition of sub-policies to solve complex, long-horizon, multi-object tasks.</p> --> 230 231 232 </div> 233 <br/> 234 235 <h2 class="title is-small" style="text-align: left; font-size: 1.8 rem;" >Key Insights</h2> 236 237 <h2 id="oaf" class="title is-small" style="text-align: left; font-size: 1.2rem;">Oriented Affordance Frame</h2> 238 239 <div class="columns is-centered"> 240 <div class="column"> 241 <p class="has-text-justified" style="color:gray;font-size: 0.9rem;"> 242 We introduce the <b>oriented affordance task frame</b> for training sample efficient and composable diffusion policies. Using an affordance-centric task frame for policy learning enables spatial and intra-category generalisation. By orienting this task frame towards the tool frame of the robot at the start of each episode, we can concentrate the data support of the sub-policy around a known 'funnel axis'. This allows us to maximise the utility of only 10 demonstrations, with the ability to compose sub-policies to solve longer-horizon tasks. Empirical results additionally show that the oriented frame anchors the task frame in tasks where the object is dynamic, preventing the robot from hitting joint limit violations. 243 </p> 244 245 <br> 246 </div> 247 <div class="column"> 248 <img src="Images/oriented_frame_gif_crop.gif" class="img-responsive" style="height: 250px; width: auto;"> 249 <br> 250 </div> 251 </div> 252 253 <h2 id="selfprogress" class="title is-small" style="text-align: left; font-size: 1.2rem;">Policy Self-Progress</h2> 254 255 256 <div class="columns is-centered"> 257 <div class="column"> 258 <p class="has-text-justified" style="color:gray;font-size: 0.9rem;"> 259 <br> 260 We introduce a simple introspective mechanism for policy learning based on the idea of predicting <b>self-progress</b> across a sub-task as an additional action output. This allows us to train sub-policies that can autonomously transition between sub-tasks in order to complete longer-horizon tasks without the need to train an additional arbitrator policy. Given the expressive multi-modality of diffusion policies, we found that a simple linspace() operator over the length of each demonstration served as a well-behaved signal for self-progress prediction as shown in the video. 261 </p> 262 263 <br> 264 </div> 265 <div class="column"> 266 <img id="progress" src="Images/progress_ablation.gif" class="img-responsive"> 267 <br> 268 </div> 269 </div> 270 271 272 273 <h2 class="title is-small" style="text-align: left; font-size: 1.8 rem;" >Results</h2> 274 <h2 class="title is-small" style="text-align: left; font-size: 1.2rem;">Simplifying Data Collection</h2> 275 <div class="columns is-centered"> 276 <div class="column"> 277 <p class="has-text-justified" style="color:gray;font-size: 0.9rem;"> 278 We simplify data collection for long-horizon, multi-object tasks by training simpler, spatially invariant sub-policies. This approach allows us to collect demonstrations from a subset of the full workspace. The spatial invariance and state-based representation enable compositional generalisation to longer horizon tasks with more objects and spatial variations. We use fiducial markers during data collection to track affordance frames on objects which simplifies dataset processing, later replacing them with keypoint detectors and tracking algorithms. <b>Note:</b> All video demonstrations below use a single set of sub-policies trained from just 10 demonstrations with the objects and spatial variations shown on the right. 279 </p> 280 281 282 </div> 283 <div class="column"> 284 <img src="Images/data_collection.png" class="img-responsive"> 285 <br> 286 </div> 287 </div> 288 289 290 291 292 <h2 class="title is-small" style="text-align: left; font-size: 1.2rem;">Long-Horizon Manipulation</h2> 293 294 295 296 <div class="content has-text-justified"> 297 <p style="text-align:center;"> 298 <img src="Images/task_composition.png" class="img-responsive"> 299 300 <p class="has-text-centered" style="color:gray;font-size: 0.9rem;"> 301 We demonstrate the ability to compose the resulting sub-policies to solve <b>long-horizon, multi-object</b> tasks involving prehensile and non-prehensile manipulation actions such as scooping, pouring and pushing. The spatial invariance exhibited by each policy allows for generalisation to compositional variations when solving longer-horizon tasks with multiple objects. 302 </p> 303 304 </p> 305 </div> 306 307 308 309 <h2 class="title is-small" style="text-align: left; font-size: 1.2rem;">Spatial Generalisation</h2> 310 <div class="content has-text-justified"> 311 <p style="text-align:center;"> 312 <img src="Images/spatial.png" class="img-responsive"> 313 </p> 314 </div> 315 316 <div class="columns is-centered"> 317 <div class="column"> 318 <video class="video-responsive" autoplay controls muted loop playsinline> 319 <source src="Images/spatial_1.mp4" type="video/mp4"> 320 </video> 321 </div> 322 <div class="column"> 323 <video class="video-responsive" autoplay controls muted loop playsinline> 324 <source src="Images/spatial_2.mp4" type="video/mp4"> 325 </video> 326 </div> 327 <div class="column"> 328 <video class="video-responsive" autoplay controls muted loop playsinline> 329 <source src="Images/spatial_3.mp4" type="video/mp4"> 330 </video> 331 </div> 332 333 </div> 334 335 <p class="has-text-centered" style="color:gray;font-size: 0.9rem;"> 336 All policies are trained using demonstrations collected within a small workspace. We demonstrate the ability to generalise to a wide range of spatial variations beyond this training workspace, including object and intra-object placement variations. 337 </p> 338 339 <br> 340 341 342 343 344 <h2 class="title is-small" style="text-align: left; font-size: 1.2rem;">Intra-Category Generalisation</h2> 345 <div class="content has-text-justified"> 346 <p style="text-align:center;"> 347 <img src="Images/intra_cat.png" class="img-responsive"> 348 </p> 349 </div> 350 351 352 353 354 355 <div class="columns is-centered"> 356 <div class="column"> 357 <video class="video-responsive" autoplay controls muted loop playsinline> 358 <source src="Images/teapot_floral.mp4" type="video/mp4"> 359 </video> 360 </div> 361 <div class="column"> 362 <video class="video-responsive" autoplay controls muted loop playsinline> 363 <source src="Images/cup_pink.mp4" type="video/mp4"> 364 </video> 365 </div> 366 <div class="column"> 367 <video class="video-responsive" autoplay controls muted loop playsinline> 368 <source src="Images/cup_blue.mp4" type="video/mp4"> 369 </video> 370 </div> 371 <div class="column"> 372 <video class="video-responsive" autoplay controls muted loop playsinline> 373 <source src="Images/red_teapot.mp4" type="video/mp4"> 374 </video> 375 </div> 376 <div class="column"> 377 <video class="video-responsive" autoplay controls muted loop playsinline> 378 <source src="Images/cup_tasmania.mp4" type="video/mp4"> 379 </video> 380 </div> 381 <div class="column"> 382 <video class="video-responsive" autoplay controls muted loop playsinline> 383 <source src="Images/red_cup.mp4" type="video/mp4"> 384 </video> 385 </div> 386 </div> 387 388 389 390 391 <p class="has-text-centered" style="color:gray;font-size: 0.9rem;"> 392 The specific placement of our affordance centric task frames allows us to capture the important task relevant regions on objects required for manipulation for a wide range of intra-category object variations. This allows us to abstract away from using images and learn state-based policies with the ability to generalise to a wide range of intra-category object variations from the 10 demonstrations collected on a single object category instance. 393 </p> 394 395 396 397 <br> 398 <h2 class="title is-small" style="text-align: left; font-size: 1.2rem;">Policy Robustness</h2> 399 400 <div class="columns is-centered"> 401 <div class="column"> 402 <p class="has-text-centered" style="color:gray;font-size: 1.0rem;"> 403 Perturbations 404 </p> 405 <video class="video-responsive" autoplay controls muted loop playsinline> 406 <source src="Images/dynamic_final.mp4" type="video/mp4"> 407 </video> 408 <p class="has-text-centered" style="color:gray;font-size: 0.9rem;"> 409 By training a closed-loop diffusion policy that operates on tracked affordance centric task frames, our policies can handle dynamic object disturbances during deployment. 410 </p> 411 </div> 412 413 <div class="column"> 414 <p class="has-text-centered" style="color:gray;font-size: 1.0rem;"> 415 Distractor Objects 416 </p> 417 <video class="video-responsive" autoplay controls muted loop playsinline> 418 <source src="Images/distractor_tea_pour.mp4" type="video/mp4"> 419 </video> 420 <p class="has-text-centered" style="color:gray;font-size: 0.9rem;"> 421 Our simplified state representation allows us to learn policies that are robust to distractor objects in the environment. 422 </p> 423 </div> 424 </div> 425 <br> 426 <p class="has-text-centered" style="color:gray;font-size: 1.0rem;"> 427 Robot Base Movements 428 </p> 429 <div class="columns is-centered"> 430 <div class="column"> 431 <video class="video-responsive" autoplay controls muted loop playsinline>
432 <source src="Images/teacup_place_moving_base.mp4" type="video/mp4"> 433 </video> 434 </div> 435 436 <div class="column"> 437 <video class="video-responsive" autoplay controls muted loop playsinline> 438 <source src="Images/teapot_pour_mobile_base.mp4" type="video/mp4"> 439 </video> 440 </div> 441 </div> 442 <p class="has-text-centered" style="color:gray;font-size: 0.9rem; margin-top: -20px;"> 443 By training policies with respect to a relative task frame located on objects, we can learn policies that are robust to robot base movements during deployment with applicability to mobile manipulation. 444 </p> 445 446 <br> 447 448 449 <h2 class="title is-small" style="text-align: left; font-size: 1.2rem;">Related Works</h2> 450 451 <br> 452 453 <p class="has-text-justified" style="color:gray;font-size: 0.9rem; margin-top: -20px;"> 454 This work is motivated and enabled by the significant progress made in prior works developing generalist vision systems for keypoint extraction, pose tracking and policy learning.<br> </p> 455 456 <br> 457 458 459 <div class="columns is-centered"> 460 <div class="column"> 461 <br> 462 <img id=foundationpose src="Images/foundation_pose.gif" alt="Foundation Pose" class="image-responsive"> 463 464 </div> 465 466 <div class="column"> 467 <br> 468 <p class="has-text-justified" style="color:gray;font-size: 0.9rem; margin-top: -30px;"> 469 470 Keypoint identification:<br> <a href="https://arxiv.org/abs/1903.06684" target="_blank" style="color:rgb(88, 88, 244);">kPAM</a>, <a href="https://arxiv.org/abs/1806.08756" target="_blank" style="color:rgb(88, 88, 244);">Dense Object Nets</a>, <a href="https://arxiv.org/abs/2112.05814" target="_blank" style="color:rgb(88, 88, 244);">DINO ViT Features</a>, <a href="https://robopil.github.io/d3fields/" target="_blank" style="color:rgb(88, 88, 244);">D3Fields</a><br> 471 472 <br> 473 474 Pose estimation and tracking:<br> <a href="https://nvlabs.github.io/FoundationPose/" target="_blank" style="color:rgb(88, 88, 244);">Foundation Pose</a>, <a href="https://bundlesdf.github.io/" target="_blank" style="color:rgb(88, 88, 244);">BundleSDF</a><br> 475 476 <br> 477 478 Policy Learning:<br> <a href="https://diffusion-policy.cs.columbia.edu/" target="_blank" style="color:rgb(88, 88, 244);">Diffusion Policy</a>, <a href="https://umi-gripper.github.io/" target="_blank" style="color:rgb(88, 88, 244);">Universal Manipulation Interface</a><br> 479 480 <br> 481 482 <b>Left:</b> We leverage off-the-shelf foundation models for affordance frame localisation (DINO-ViT) and pose tracking (Foundation Pose) in our policy learning framework. This allows use to take advantage of the generalisation capabilities exhibited by these models for robot learning. <br> 483 484 485 </div> 486 </div> 487 488 489 </div> 490 </div> 491 492 </div> 493 </section> 494 </div> 495 </div> 496 </div> 497 </div> 498 </section> 499 500 501 <section class="section" id="BibTeX"> 502 <div class="container is-max-desktop content"> 503 <h2 class="title">BibTeX</h2> 504 <pre><code> 505 @inproceedings{ 506 rana2025learning, 507 title={Learning from 10 Demos: Generalisable and Sample-Efficient Policy Learning with Oriented Affordance Frames}, 508 author={Krishan Rana and Jad Abou-Chakra and Sourav Garg and Robert Lee and Ian Reid and Niko Suenderhauf}, 509 booktitle={9th Annual Conference on Robot Learning}, 510 year={2025}, 511 url={https://openreview.net/forum?id=1K3kjo91Q1} 512 } 513 }</code></pre> 514 </div> 515 </section> 516 517 <footer class="footer"> 518 <div class="container"> 519 <div class="content has-text-centered"> 520 <!-- <a class="icon-link" href="https://github.com/keunhong" class="external-link" disabled> 521 <i class="fab fa-github"></i> 522 </a> --> 523 </div> 524 525 <div class="columns is-centered"> 526 <div class="column is-8"> 527 <div class="content has-text-centered"> 528 <img src="./Images/qcr.png" alt="Institute 1" style="width:200
528px; margin:20px;"> 529 <img src="./Images/uoa.png" alt="Institute 2" style="width:200px; margin:20px;"> 530 </div> 531 </div> 532 </div> 533 534 535 <div class="columns is-centered"> 536 <div class="column is-8"> 537 <div class="content has-text-centered"> 538 <p> 539 Website template borrowed from <a href="https://github.com/nerfies/nerfies.github.io">here</a>. 540 </p> 541 </div> 542 </div> 543 </div> 544 545 </div> 546 </footer> 547 548 549 550 551</body> 552 553</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.