January 01, 1970
Comparing object orientations and positions across different instances requires their poses to be expressed in a shared canonical frame. Establishing such frames has traditionally required manual annotation, creating a scaling bottleneck that limits category and instance diversity. We show that a shared canonical frame can instead emerge from self-supervised training on object-centric videos captured in the wild, using only noisy camera poses from Structure-from-Motion. Our key idea is to route all training sequences through a shared geometric bottleneck: a coarse canonical mesh that carries no category-specific detail. By learning dense correspondences from image pixels to this mesh, and estimating per-sequence alignments from noisy SfM geometry, a common canonical frame emerges from multi-view consistency and the semantic priors of the feature extractor, without any canonical pose labels or category conditioning. Trained in a self-supervised manner on \(160{,}000\) in-the-wild object videos, our method achieves competitive accuracy on category-level pose estimation benchmarks compared to methods that rely on canonical pose supervision. The code and checkpoint is available on GitHub.
A shared canonical frame enables consistent reasoning about object orientation across different instances. This is essential in applications like augmented reality [1], robotic manipulation [2], [3], category-level pose estimation [4], shape retrieval [5], and controlled 3D generation [6], [7]. However, establishing canonical frames has traditionally required substantial manual supervision, either via aligned CAD models [8], [9], controlled rendering of synthetic assets [10], [11], or careful real-world pose annotation [4], [12], [13]. This reliance on canonical supervision creates a scaling bottleneck: synthetic data introduces a domain gap, while annotated real data remains limited in category and instance diversity. Learning canonical object representations that generalize broadly across real-world data therefore remains an open challenge.
A natural question is whether canonical frames can emerge from self-supervised training on readily available data, following trends in representation learning where scale and data diversity drive generalization [14], [15]. Object-centric videos of rigid objects are abundant, and Structure-from-Motion (SfM) can recover camera poses and coarse geometry from them without manual annotation. However, SfM reconstructions are sequence-specific: each video yields internally consistent poses, but in an arbitrary coordinate system. Two videos of different cars may each produce accurate relative poses, yet their coordinate frames bear no relation to each other or to any shared notion of canonical orientation. Learning a shared frame therefore requires alignment across sequences, which cannot be resolved from per-sequence geometry alone.
In this work, we show that a shared canonical frame can emerge from object-centric videos without canonical pose labels (see Figure 1). Our approach routes all training sequences through a shared geometric bottleneck: a coarse canonical mesh defined in a fixed coordinate frame. A correspondence network learns to map image pixels to vertices of this mesh, while estimated per-sequence alignments transform noisy SfM camera poses into the mesh’s frame before each loss computation. Because the canonical mesh carries no category-specific detail, similar object parts across different instances consistently map to the same surface regions, and a common canonical frame emerges from multi-view consistency and the semantic priors of the feature extractor. At inference, our model takes a single RGB image and predicts the object’s 6D pose in a canonical frame shared across all categories.
We demonstrate the utility of the learned correspondences on category-level pose estimation, achieving accuracy competitive with methods trained using canonical pose labels across multiple benchmarks. Our training uses \({\sim}\)160k in-the-wild object-centric videos without category conditioning or canonical pose annotations, enabling generalization to object categories not seen during training. In summary, our contributions are as follows:
Self-supervised canonical frame emergence. We show that a shared canonical frame can emerge from object-centric videos using only noisy SfM camera poses, without any canonical pose annotation.
Geometric bottleneck. We show that routing all training sequences through a shared, coarse canonical mesh induces cross-sequence consistency and enables a common reference frame to emerge through a combination of multi-view alignment and strong pre-trained features.
Category-agnostic generalization. Without canonical pose supervision, our self-supervised approach achieves competitive performance with canonically supervised methods across multiple pose estimation benchmarks, including categories unseen during training.
Canonical frames for pose supervision. Category-level pose estimation typically assumes a shared canonical object frame across instances. Wang et al. [4] introduced NOCS, which predicts normalized correspondences and recovers pose via Umeyama [16]. Subsequent work improves accuracy using RGB-D cues such as shape priors and deformation models [17]–[19], or stronger architectures [20], [21]. RGB-only methods [22]–[26] operate on appearance alone, enabling shape-agnostic representations at the cost of metric accuracy. Neural mesh models [27]–[29] attach learned features to a geometric scaffold and recover pose by aligning rendered features to image observations, with extensions to full 6D and joint detection-and-pose [25], [30]. Recent open-world orientation estimation methods [31], [32] demonstrate impressive generalization across diverse categories, but still rely on canonical supervision through large-scale synthetic data with predefined canonical frames. Across these approaches, the dependence on canonical pose labels creates a scaling bottleneck: real-world datasets remain limited in category and instance diversity [4], [12], [13], [33], [34], and synthetic pipelines inherit a domain gap. We show that canonical frames can instead emerge from category-agnostic training on noisy in-the-wild data, without canonical pose labels or synthetic samples.
Novel object pose estimation without canonical frames. A separate line of work addresses pose estimation for objects unseen during training, but relies on additional object information at test time. Onboarding-based methods use CAD renderings [35]–[37] or multi-view captures [38]–[41] to build object-specific templates or reconstructions, and then estimate pose by matching test images to these references. Reference-based methods instead predict relative transformations between a test image and a reference view, either directly [42]–[44] or via single-view 3D reconstructions [45], [46]. Recent methods such as MFOS [47] and BoxDreamer [48] also use a cuboid primitive for generalizable pose estimation, but work in the reference view setting rather than recovering a shared canonical frame. Both families avoid canonical supervision, but the resulting coordinate frame is instance- or reference-defined: two different chairs yield unrelated orientations that are not directly comparable across objects. We instead seek a shared canonical frame consistent across instances and categories, without canonical labels or test-time onboarding.
Emergence of canonical frames from object-centric videos. The most closely related line of work reduces supervision by exploiting multi-view geometry from object-centric videos. SHIC [49] predicts 2D-3D correspondences by conditioning features on detailed templates. UOP3D [50] shows that such templates can instead be reconstructed from video, removing the need for manual template design, and Common3D [51] extends this to category-specific morphable models learned entirely from object-centric sequences. While these methods progressively reduce supervision, they still require category labels and train separate models per category, introducing a scaling bottleneck as the number of categories grows. Canonical shape learning [52], [53] shows that consistent frames can emerge without supervision on 3D point clouds, but does not extend to RGB. Multi-Path Encoders [54] learn shared latent spaces from RGB without pose supervision, but scale linearly with object count.
Self-supervised correspondence learning has shown that vision foundation features can produce semantically meaningful correspondences without manual keypoint annotation [55], and recent work couples features to geometric primitives such as spheres to reduce ambiguities [56], [57]. While these methods share our use of a geometric bottleneck, they target pairwise keypoint matching rather than canonical pose recovery, which additionally requires a globally coherent 3D frame.
Summary. Existing approaches either (a) assume canonical frames as supervision targets, (b) adopt instance-specific reference frames or test-time onboarding, or (c) use self-supervised training to recover canonical frames, but only within category-specific pipelines. Our work addresses the gap among these directions: a shared canonical frame emerges from self-supervised training on in-the-wild object-centric video through a geometric bottleneck, enabling category-agnostic pose estimation that transfers to unseen object categories.
Our method learns dense correspondences from image pixels to the surface of a shared canonical mesh. Because this mesh is fixed and shared across all training sequences regardless of object category, it acts as a geometric bottleneck: consistent correspondences give rise to a shared canonical frame from which object pose can be recovered.
Training relies on object-centric video sequences with SfM camera poses and off-the-shelf segmentation masks. No canonical pose annotations or category labels are used to condition our model. The method has three components: (a) the canonical mesh that defines the coordinate frame, (b) a correspondence network that maps image pixels to vertices of this mesh, and (c) a per-sequence alignment step that transforms SfM camera poses into the mesh’s frame before loss computation. An overview is shown in Figure 3.
The canonical mesh \(\mathbf{M}=(\mathbf{V}, \mathbf{F}, \mathbf{f})\) is a coarse 3D shape with \(M\) vertices uniformly sampled on its surface and a set of triangular faces \(\mathbf{F}\) (see Figure 3 (a)). Each vertex \(\mathbf{v}_j\in\mathbf{V}\) carries a learnable embedding \(\mathbf{f}_j\in\mathbb{R}^D\) that serves as a query in the correspondence network (3.2). The mesh defines a fixed canonical frame \(\mathcal{F}^c\): once the correspondence network maps object pixels to mesh vertices consistently, an object’s orientation can be recovered from the resulting 2D-3D correspondences.
To generate supervision for the correspondence network during training, we need to know which 3D point on the mesh surface is visible at each pixel under a given camera pose. We obtain this by rasterizing the mesh under camera pose \(P\) (denoted \(\Pi(\mathbf{M}, P)\)) and interpolating vertex positions via barycentric coordinates over the mesh faces. This produces a dense coordinate map \(\mathbf{X} \in \mathbb{R}^{N \times 3}\), where each visible pixel stores a 3D point on the mesh surface, along with a binary visibility mask.
The key requirement for the canonical mesh is that it carries no category- or instance-specific geometric detail, so that the correspondence network must rely on appearance rather than shape matching. The specific choice of mesh shape is a design decision. In our experiments we use a unit cube as the default and ablate against a sphere in Section 4.4.
Given an input image \(\mathbf{I}\), the correspondence network predicts, for each pixel, a distribution over the \(M\) vertices of the canonical mesh (see Figure 3 (b)). From these distributions, we obtain dense 2D-3D correspondences between image pixels and 3D locations on the mesh surface.
A feature extractor produces dense features \(\mathbf{F} \in \mathbb{R}^{N \times D}\), where \(N\) is the number of pixels and \(D\) is the feature dimension. To obtain per-vertex features, we use a transformer decoder that takes the pixel features \(\mathbf{F}\) as keys and values, and learnable vertex embeddings \(\mathbf{f} \in \mathbb{R}^{M \times D}\) as queries. Vertex positions \(\mathbf{V} \in \mathbb{R}^{M \times 3}\) provide positional encoding for the queries, grounding each to a specific location on the canonical mesh. Given the decoded vertex features \(\tilde{\mathbf{f}} \in \mathbb{R}^{M \times D}\), a soft correspondence matrix is computed as: \[\label{eq:C} \mathbf{C} = \mathrm{softmax}\left( \frac{(\mathbf{F} \mathbf{W}_F)(\tilde{\mathbf{f}} \mathbf{W}_f)^\top}{\tau} \right) \in \mathbb{R}^{N \times M},\tag{1}\] where \(\mathbf{W}_F, \mathbf{W}_f \in \mathbb{R}^{D \times D'}\) are learned projections and \(\tau\) is a temperature parameter. Each row \(\mathbf{C}(u,:)\) is a distribution over mesh vertices for pixel \(u\), and the expected canonical 3D coordinate is: \[\hat{\mathbf{x}}^c_u = \sum_{j=1}^{M} \mathbf{C}(u,j)\,\mathbf{v}_j \quad \text{or} \quad \hat{\mathbf{X}}^c = \mathbf{C}\mathbf{V} \in \mathbb{R}^{N \times 3}.\] We frame correspondence as classification over discrete vertices rather than regression of continuous 3D coordinates; under a softmax, the cross-entropy objective concentrates probability on the target vertex while suppressing all others, encouraging discriminative correspondences.
Each SfM reconstruction lives in an arbitrary coordinate frame \(\mathcal{F}^s\). To supervise the correspondence network, we need to express SfM camera poses in the canonical mesh frame \(\mathcal{F}^c\). This requires estimating, for each training sequence, a rotation \(\hat{\mathbf{R}}\) that maps \(\mathcal{F}^s\) to \(\mathcal{F}^c\). The process is illustrated in Figure 3 (c)).
We initialize each sequence’s alignment via PCA on the masked SfM point cloud, which assigns consistent axes based on geometric extent (e.g., elongated objects share a dominant axis). This geometric prior captures coarse canonical structure but cannot resolve semantic orientation (e.g., front-vs-back) and fine-grained alignment. The per-sequence alignment refines this initialization during training using the correspondence network’s predictions.
Concretely, for each of \(K\) sampled views, every pixel where the canonical mesh is visible provides a 3D–3D correspondence pair: one point from rasterizing the mesh under the SfM pose \(P_k^s\) (in \(\mathcal{F}^s\)), and one from the networks dense prediction \(\hat{\mathbf{X}}_k^c = \mathbf{C}\mathbf{V}\) (in \(\mathcal{F}^c\)). Since all views in a sequence share the same SfM frame, we estimate a single rotation from these pairs jointly across views. Since the mesh is centered around the origin and at the same scale, we normalize each 3D vector to unit length and solve: \[\hat{\mathbf{R}} = \mathop{\mathrm{arg\,min}}_{\mathbf{R} \in \mathrm{SO}(3)} \sum_{k=1}^{K} \sum_{u=1}^{N_k} w_{ku} \left\| \hat{\mathbf{x}}^c_{k,u} - \mathbf{R} \, \mathbf{x}^s_{k,u} \right\|^2,\] where \(w_{ku} = H(\mathbf{C}_k(u,:))^{-1}\) with \(H(\mathbf{p})=-\sum_j p_j\log p_j\) is the inverse entropy of the correspondence distribution at pixel \(u\), so that confident predictions contribute more to the alignment. We add a small constant (\(\epsilon=1e-8\)) for numerical stability in the entropy computation and normalize weights within each view to unit mean. This is Wahba’s problem [58] and admits a closed-form solution via SVD.
The estimated rotation transforms the SfM poses into the canonical frame: \(P^{c}_k = \hat{\mathbf{R}} P^s_k\). These aligned poses are then used to rasterize the canonical mesh and generate pseudo-labels for the correspondence loss, as described in Section 3.4. Since the alignment depends on the network’s current predictions, and the resulting pseudo-labels in turn update the network, both improve together during training.
Once the SfM poses have been transformed into the canonical frame, we use them to generate pseudo-labels for the correspondence network. For each view \(k\), we rasterize the canonical mesh under the aligned pose \(P_k^c\), producing a canonical 3D coordinate \(\mathbf{x}_{k,u}^c\) for each visible pixel \(u\). We assign each coordinate to its nearest mesh vertex: \[j^{*}_{k,u} = \mathop{\mathrm{arg\,min}}_{j} \|\mathbf{x}^{c}_{k,u} - \mathbf{v}_j\|_2,\] and supervise the correspondence distribution with cross-entropy: \[\mathcal{L}_{\mathrm{corr}} = \sum_{k=1}^{K} \sum_{u=1}^{N_k} -\log \mathbf{C}_k(u, j^*_{k,u}).\] This encourages the network to predict a distribution that concentrates on the mesh vertex visible at that location under the current alignment. Since the alignment is estimated from the network’s own predictions (Section 3.3), the pseudo-labels and the network co-evolve during training.
We additionally train a mask prediction head to identify which pixels belong to the object. During training, this head is supervised by the binary visibility mask obtained from rasterizing the canonical mesh under the estimated alignment (Section 3.3). At inference, the predicted mask determines the object region from which pose is recovered. The mask head is supervised using binary cross-entropy and Dice loss against the visibility mask \(\mathbf{m}^{c}\) obtained from the same rasterization: \[\mathcal{L}_{\mathrm{mask}} = \mathrm{BCE}(\hat{\mathbf{m}}, \mathbf{m}^{c}) + \mathrm{Dice}(\hat{\mathbf{m}}, \mathbf{m}^{c}),\] where \(\hat{\mathbf{m}}\) is the predicted mask (boundary upweighting details in appendix). The overall training objective is: \[\mathcal{L} = \mathcal{L}_{\mathrm{corr}} + \lambda \mathcal{L}_{\mathrm{mask}},\] where \(\lambda\) controls the relative contribution of the mask loss.
At test time, the correspondence network predicts \(\mathbf{C}\) and the mask head identifies object pixels in a single forward pass. From the 2D-3D correspondences \(\hat{\mathbf{X}}^c = \mathbf{C}\mathbf{V}\), we recover the 6D pose via EPnP [59] with RANSAC. No per-sequence alignment is involved at inference, since the correspondences directly yield a continuous pose in the canonical frame. Since metric scale is ambiguous from a single RGB image, translation is estimated up to a global scale factor, matching the convention of prior RGB-only methods [25], [26], [60]. We consider extending the method to predict metric scale translations through depth cues or metric priors as future work.
We evaluate our method on category-level pose estimation benchmarks, studying transfer performance, the effect of data scale, and the role of regularization choices. Unless stated otherwise, we report rotation metrics since translation is recovered only up to scale and most baselines predict rotation only.
Training. We train on UCO3D [61], which provides \(\sim\)160k object-centric videos with SfM camera poses, sparse point clouds, segmentation masks, and optional PCA-based coordinate alignments. From each sequence, we use the masked point cloud (centered at the origin and normalized to unit scale), the segmentation masks for cropping, and the SfM camera poses. We optionally use the provided PCA alignment as initialization (Section 3.3). We use no canonical pose annotations and train a single model across all categories without category conditioning.
Evaluation. We evaluate on REAL275 [4], Omni6DPose [62], Pascal3D+ [12], ImageNet3D [13], and Objectron [63]. For category-constrained self-supervised comparisons, we use Pascal3D+ and ObjectNet3D [64]. All baselines and our method assume single-object images. For multi-object datasets we therefore use dataset-provided bounding boxes and predict per-object pose from the crop. Integrating an off-the-shelf detector for fully automatic inference is straightforward, but orthogonal to our contribution.
Baselines. For category-agnostic rotation estimation, we compare against OrientAnything V1/V2 [31], [32] and QWEN3-VL [65], all trained with canonical pose supervision (QWEN3-VL prompt details in appendix). For category-specific self-supervised comparisons, we use ZSP [66], UOP3D [50], and Common3D [51], which train separate models per category.
We report median geodesic rotation error (deg) and \(Acc@30^\circ\) with symmetry-aware evaluation following [32]. Symmetry class labels for each category are derived automatically using an LLM (details in appendix), used only at evaluation time and are applied uniformly across all methods. In result tables, Can.indicates whether canonical pose annotations are used during training (/), and Train indicates whether the training data was real (R), synthetic (S), or mixed (R+S).
Our canonical frame can differ from a dataset’s annotation convention by a fixed rotation. We estimate this mapping per category using conjugate rotation averaging [67] on the held-out data from the training split and apply it uniformly to all test predictions. In practice, this mapping is largely consistent across categories (see Figure [fig:canonicalization]). This post-hoc alignment is required for fair evaluation whenever a method’s convention differs from the dataset’s, including the baselines. To ensure fair comparison, we apply the same mapping protocol for the baselines.
Implementation details. We describe all implementational details including architecture, hyperparameters, and training schedule in the appendix.
| Model | Method | Training Videos | Pascal3D+ | ObjectNet3D | Mean |
|---|---|---|---|---|---|
| cat.-specific | ZSP [66] | 50 seq. / cat. | 46.0 | 42.2 | 44.1 |
| UOP3D [50] | 50 seq. / cat. | 69.2 | 52.4 | 60.8 | |
| Common3D [51] | 50 seq. / cat. | 75.3 | 56.8 | 66.1 | |
| cat.-agnostic | \(\text{Ours}^{\text{cat}}_{50}\) | 50 seq. / cat. | 68.1 | 53.6 | 60.9 |
| \(\text{Ours}^{\text{cat}}_{\text{full}}\) | all seq. / cat. | 81.6 | 63.1 | 72.4 | |
| Ours | 164k seq. | 87.6 | 70.0 | 78.5 |
Table ¿tbl:tab:zeroshot95combined? compares our method to OrientAnything V1/V2 and QWEN3-VL across five benchmarks. We train once on UCO3D and evaluate on each benchmark without dataset-specific finetuning. Despite using no canonical pose labels and training only on real video, our method achieves the best average performance. The strongest results appear on Objectron and Pascal3D+, where most categories have distinctive semantic axes that provide clear orientation signals from multi-view consistency. On REAL275, all methods benefit from limited pose variability in the dataset, but our method shows the largest margin. On Omni6DPose, our performance falls behind OrientAnything V2, which we attribute to its large percentage of symmetric objects (see Section 4.5). The methods marked \(\dagger\) were trained on ImageNet3D, which overlaps with Pascal3D+, and therefore have an advantage in the gray metrics. Figure 2 shows qualitative pose predictions across diverse categories and benchmarks
Table 1 compares our category-agnostic model to self-supervised baselines that learn canonical frames without canonical pose labels but train separate models per category (ZSP/UOP3D/Common3D), using category supervision and relatively little per-category multi-view training data (<50 sequences per category). To separate method from data effects, we include two controls trained on the same categories: \(\text{Ours}^{cat}_{50}\) trains with the same 50-sequence cap, while \(\text{Ours}^{cat}_{full}\) trains on all available UCO3D sequences.
Our full model achieves the best average Acc@\(30^\circ\), improving over Common3D on both PASCAL3D+ (\(87.6\%\) vs. \(75.3\%\)) and ObjectNet3D (\(70.0\%\) vs. \(56.8\%\)). Notably, \(\text{Ours}^{cat}_{50}\) remains competitive even without a scale advantage, while scaling within the fixed categories yields substantial gains (\(\text{Ours}^{cat}_{50}\!\rightarrow\!\text{Ours}^{cat}_{full}\)). The strongest results are obtained with category-agnostic training (Ours), which highlights that data scale is critical to learn a generalizable representation.
| Objectron | PASCAL3D+ | ImageNet3D | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 5-6 (lr)7-8 (lr)9-10 Mesh | PCA | Align. | \(K\) | Med\(\downarrow\) | Acc30\(\uparrow\) | Med\(\downarrow\) | Acc30\(\uparrow\) | Med\(\downarrow\) | Acc30\(\uparrow\) |
| Cube | 4 | 15.3 | 69.2 | 15.7 | 79.8 | 25.5 | 55.0 | ||
| Cube | 4 | 17.7 | 65.1 | 17.5 | 76.6 | 27.5 | 53.1 | ||
| Sphere | 4 | 19.6 | 63.3 | 17.6 | 75.5 | 27.1 | 53.8 | ||
| Sphere | 4 | 21.4 | 62.2 | 23.1 | 72.4 | 29.7 | 50.4 | ||
| Cube | 4 | 32.0 | 49.1 | 25.0 | 55.0 | 33.6 | 45.0 | ||
| Cube | 2 | 18.2 | 64.4 | 19.6 | 72.5 | 27.0 | 53.9 | ||
| Cube | 1 | 57.3 | 32.5 | 53.0 | 28.0 | 50.9 | 33.9 | ||
Table 2 ablates the canonical mesh shape (cube vs.sphere), PCA initialization, the per-sequence alignment step, and the number of training views \(K\) per sequence, reporting transfer accuracy on three benchmarks.
PCA and learned alignment are complementary. PCA initialization without per-sequence alignment (row 5) maintains reasonable performance on ImageNet3D (\(45.0\%\) vs.\(\;55.0\%\) for the full model), which contains a high proportion of symmetric objects. When we stratify by symmetry class, PCA-only actually improves on continuously symmetric objects (\(59.1\% \rightarrow 65.0\%\) for \(s{=}\infty\)) while degrading severely on non-symmetric objects (\(59.1\% \rightarrow 41.7\%\) for \(s{=}1\)). This reflects the distinct roles of the two components: PCA captures geometric structure, such as elongation, flatness, spatial extent, which is often sufficient to determine orientation for symmetric objects, but cannot resolve semantic axes such as front-vs-back on objects where multiple orientations are geometrically equivalent. The learned alignment adds this semantic disambiguation through appearance-based correspondences, producing substantial gains on Pascal3D+ and Objectron (\(55.0\% \rightarrow 79.8\%\), \(49.1\% \rightarrow 69.2\%\)), where most categories have distinctive semantic axes. Conversely, removing PCA while keeping learned alignment (row 2) causes smaller but consistent drops of \(2-4\) \(\%\) across benchmarks, confirming that the geometric initialization aids convergence but is not the primary driver, and that the canonical frame emerges from the self-supervised alignment through the bottleneck.
Mesh shape matters, but the bottleneck principle is robust. Using a sphere rather than a cube (rows \(3-4\)) decreases performance by \(2-5\%\), suggesting that axis-bearing geometry provides a useful inductive bias for mapping semantic parts to consistent surface regions. However, the sphere variant remains reasonably effective, indicating that the geometric bottleneck concept generalizes beyond a specific primitive shape.
Multi-view coverage matters. Reducing the number of training views per sequence from \(K{=}4\) to \(K{=}2\) causes moderate drops across benchmarks (e.g., \(79.8\% \rightarrow 72.5\%\) on Pascal3D+), while \(K{=}1\) leads to severe degradation (\(79.8\% \rightarrow 28.0\%\)). With a single view, the per-sequence alignment becomes underconstrained and causes mode collapse as a trivial solution. Two views recover much of the performance, but four views provide the multi-view diversity needed for reliable alignment.
Frame consistency. To assess whether the emerged canonical frame is shared across categories, we estimate per-category convention mappings on ImageNet3D and visualize their agreement. For each category c, we compute the mapping \(\hat{\mathbf{A}}_c\) (Section 8) and apply it to a fixed reference vector \(\mathbf{v} = (\frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}}, \frac{1}{\sqrt{3}})^\top\), plotting the resulting direction \(\hat{\mathbf{A}}_c \mathbf{v}\) on the unit sphere. If the learned frame is consistent, these directions should cluster into a small number of modes. Figure [fig:canonicalization] shows this visualization restricted to non-symmetric categories (\(s {=} 1\)), removing ambiguity due to rotational symmetry. The dominant mode contains 88 of 129 non-symmetric categories, indicating that the learned frame is largely shared across diverse object types. The remaining modes are small and largely correspond to categories with geometrically ambiguous structure (e.g., watches, padlocks), where multiple axis assignments are plausible.
Symmetry. The emerged frame is most consistent for objects with distinctive semantic axes, where appearance and multi-view constraints provide clear orientation signals. Symmetric objects violate this assumption: multiple orientations yield indistinguishable evidence, making pseudo-labels noisy. Methods supervised with canonical poses do not suffer from this problem, making it significantly easier to learn robust defaults for symmetric objects. Figure [fig:symmetry95bars] confirms this: our method falls behind on continuously symmetric objects (\(s{=}\infty\)) but shows consistently stronger performance on non-symmetric objects (\(s{=}1\)). Addressing symmetry without canonical labels likely requires primitives or objectives that represent orientation ambiguity explicitly, rather than forcing consistency.
We showed that a shared canonical frame can emerge from object-centric video without canonical pose labels or category conditioning, by routing all training through a shared geometric bottleneck. Across multiple benchmarks, the resulting frame enables competitive pose estimation compared to methods trained with canonical supervision, and performance scales with data volume and category diversity. Our analysis also clarifies limitations: the emerged frame is largely consistent across categories, but symmetric objects remain challenging because their orientation is not uniquely identifiable from appearance and multi-view constraints alone. Addressing such ambiguities without canonical pose or symmetry labels is a promising direction for future work.
This supplement provides additional details and analyses referenced in the main paper:
Implementation details and training hyperparameters (7)
Evaluation protocol, including symmetry-aware metrics and convention mapping (8)
Full symmetry-class breakdown (9)
Mesh-resolution runtime trade-off (10)
PASCAL3D+ and ObjectNet3D per-category results (11)
Qualitative results (12)
LLM-derived symmetry labels (13)
We train on the train split of UCO3D [61], which provides object-centric video sequences with RGB frames, segmentation masks, SfM camera poses, and sparse point clouds. We undistort images using the provided camera parameters. Per sequence, we apply the dataset’s PCA alignment and normalize the object point cloud using a robust bounding box (10th/90th coordinate quantiles) to fit the unit canonical mesh. For details about the alignment, we refer the reader to the supplemetal material of [61]. During training, we sample \(K{=}4\) frames per sequence using stratified temporal sampling to encourage viewpoint diversity.
We apply photometric augmentation throughout training: color jitter (brightness \(0.4\), contrast \(0.4\), saturation \(0.2\), hue \(0.1\)) with probability \(0.8\), random grayscale with probability \(0.2\), and Gaussian blur with probability \(0.4\). Images are cropped to the object mask with \(10\%\) padding and resized to \(256{\times}256\) with aspect-ratio-preserving padding, followed by ImageNet normalization. After iteration \(7,500\) we enable geometric augmentation: the mask-crop padding is randomly sampled from \([0.1,0.25]\), random recropping is applied with probability \(0.7\), in-plane rotation up to \(30^\circ\) with probability \(0.3\), and random patch occlusion (\(1-2\) small patches of with probability 0.5. All geometric transforms are accompanied by consistent updates to camera intrinsics and extrinsics to preserve multi-view consistency. The staged schedule avoids destabilizing the co-evolutionary alignment loop during early training, where mode collapse could rarely occur.
We use a cube mesh of unit scale with \(M{=}1016\) vertices and \(2028\) triangular faces. The mesh is rasterized at \(64{\times}64\) resolution using nvdiffrast [68], producing per-pixel object coordinates and a visibility mask for the correspondence loss.
The visual backbone is DINOv3 ViT-L/16 [69] with LoRA [70] (rank 8, \(\alpha{=}8\), dropout 0.1) inserted into the fused query/value projections of every transformer block and the remaining backbone parameters are frozen. Features from layers 6, 14, 18, and 23 are aggregated into a feature pyramid and decoded with a UPerNet-style decoder [71] (512 channels) to produce a \(64{\times}64\) feature map. A 6-layer transformer decoder (hidden size 512, 8 heads, feed-forward dimension 2048) decodes one query per mesh vertex. The correspondence head projects both mesh queries and image features to normalized 512-dimensional descriptors and computes vertex-pixel logits via dot product. A separate convolutional head predicts the foreground mask.
We train for 15 epochs (\({\sim}75\) iterations) on four H100 GPUs with batch size 8 sequences (effective 32) and mixed precision. We use AdamW with weight decay 0.05 and gradient clipping at norm 1.0. The learning rate is \(10^{-4}\) for non-backbone parameters and \(10^{-5}\) for LoRA parameters. The correspondence softmax temperature \(\tau\) follows a three-stage cosine schedule: \(0.20 \rightarrow 0.17\) over the first \(30\%\) of training, \(0.17 \rightarrow 0.13\) over the next \(50\%\), and \(0.13 \rightarrow 0.10\) over the final 20%.
The per-sequence rotation is estimated using a robust Wahba solver with RANSAC (100 iterations, 4-point samples, \(25^\circ\) inlier threshold).
The total loss is the per-frame averaged correspondence cross-entropy plus the mask loss (\(\lambda{=}1.0\)). The mask loss combines BCE and Dice loss with boundary-focused weighting: pixels within a 2-pixel band of the mask boundary receive full weight, while non-boundary pixels are downweighted by a factor of \(0.1\). Padded and synthetically occluded regions are excluded from the mask loss.
We use PoseLib [72] for PnP pose recovery with default settings and a maximum reprojection error threshold of 4.0 pixels.
We evaluate category-level orientation by aligning each predicted pose to the target dataset’s coordinate convention and reporting geodesic rotation error and threshold accuracies.
Symmetry-aware rotation error. We measure angular error with the geodesic distance on \(\mathrm{SO}(3)\): \[d(\mathbf{R}^{\text{gt}},\mathbf{R}^{\text{pred}}) = \arccos\!\left(\tfrac{\mathrm{tr}(\mathbf{R}^{\text{gt}\top} \mathbf{R}^{\text{pred}})-1}{2}\right),\] reported in degrees. To account for rotational symmetries about the upright axis, we use the category-specific symmetry label \(s\in\{\infty,1,2,4\}\) (continuous / none / \(180^\circ\) / \(90^\circ\) ambiguity) and report the minimum error over the symmetry group: \[d_{\text{sym}}(\mathbf{R}^{\text{gt}},\mathbf{R}^{\text{pred}}) = \min_{\mathbf{S}\in\mathcal{S}(s)} d(\mathbf{R}^{\text{gt}},\mathbf{S}\mathbf{R}^{\text{pred}}),\] where \(\mathcal{S}(1)=\{\mathbf{I}\}\), \(\mathcal{S}(2)=\{\mathbf{R}_y(0),\mathbf{R}_y(\pi)\}\), \(\mathcal{S}(4)=\{\mathbf{R}_y(k\frac{\pi}{2})\}_{k=0}^{3}\), and \(\mathbf{R}_y(\theta)\) denotes a rotation around the \(y\)-axis. For continuous symmetry (\(s{=}0\)), yaw is unrecoverable and we compare only the transformed upright axes, i.e., the angle between \(\mathbf{R}^{\text{gt}}\mathbf{y}\) and \(\mathbf{R}^{\text{pred}}\mathbf{y}\) with \(\mathbf{y}=(0,1,0)^\top\).
Per-image inference and pose recovery. For each test image, the model predicts dense 2D–3D correspondences from pixels to canonical mesh vertices. We recover a 6D pose via EPnP [59] with RANSAC using dataset-provided camera intrinsics. This yields a predicted rotation \(\mathbf{R}^{\text{pred}}\) and scale-normalized translation \(\mathbf{t}^{\text{pred}}\) expressed in the learned canonical frame.
Convention mapping. Canonical frames are defined only up to a global rotation, and different benchmarks use different coordinate conventions. We estimate a per-category convention mapping \(\hat{\mathbf{A}}_c\) that aligns our predictions to the dataset convention via orthogonal Procrustes on \(\mathrm{SO}(3)\): \[\label{eq:procrustes95align} \hat{\mathbf{A}}_c = \mathop{\mathrm{arg\,min}}_{\mathbf{A}\in\mathrm{SO}(3)} \sum_{i\in c} \, \big\|\mathbf{R}^{\mathrm{gt}}_{i} - \mathbf{A}\,\mathbf{R}^{\mathrm{pred}}_{i}\big\|_F^2,\tag{2}\] which admits a closed-form SVD solution with the \(\det(\hat{\mathbf{A}}_c){=}{+}1\) constraint. This mapping is estimated on the training split of each dataset and applied uniformly to all test predictions. As shown in the main paper (Figure [fig:canonicalization]), these per-category mappings cluster into a small number of modes, indicating that the learned frame is largely shared across categories and the mapping primarily compensates for global axis permutations.
Qwen3-VL baseline. For the QWEN3-VL [65] baseline, we prompt the model with the input image and request an orientation estimate as rotation angles. The prompt was taken from the official GitHub repository of the QWEN Team. We additionally provided the category label in the prompt and bounding box location in the output during our experiments, since we found that this yielded noticeably better results and is likely due to the training paradigm of the model. The prompt template is:
Find the category in this image. Provide its 3D bounding box. The output format required is JSON: ’‘["bbox_3d":[x_center, y_center, z_center, x_size, y_size, z_size, roll, pitch, yaw]]’.’
The main paper (Figure 4) reports symmetry-stratified accuracy for the two most common classes (\(s{=}\infty\) and \(s{=}1\)). Figure 5 provides the complete breakdown across all symmetry classes \(s \in \{\infty, 1, 2, 4\}\) on ImageNet3D and Omni6DPose. Two-fold and four-fold symmetries are rare in both datasets, and performance differences between methods are less systematic for these classes. On two-fold symmetric categories in ImageNet3D (\(n{=}22\)), our method falls slightly behind OrientAnything V2, which was trained on ImageNet3D and has seen all categories during training.
We additionally show the symmetry performance comparison of our full method and the PCA-only ablation that does not do per-sequence alignment. As visible, for categories with full y-axis symmetries the PCA-only model slightly outperforms the full method, showcasing PCA can be effectively used as a gravity prior. For non-symmetric categories, the per-sequence alignment is necessary to disambiguate semantic axes.
Our correspondence target is a fixed primitive mesh with \(M\) surface vertices. Increasing \(M\) can improve correspondence granularity and downstream pose accuracy, but increases compute and memory through the vertex-query decoding and matching steps. Figure 7 quantifies this trade-off by sweeping \(M\) and reporting ImageNet3D Acc@\(30^\circ\) together with inference throughput (FPS). Accuracy improves with mesh resolution and begins to saturate, while FPS decreases monotonically. Higher vertex counts would likely benefit more if we increased the model’s output resolution beyond the \(64{\times}64\) grid, but this would substantially impact runtime. We select \(M{=}1000\) as a practical operating point that captures most of the accuracy gains while maintaining favorable throughput. Runtime was measured on a NVIDIA A6000 GPU.
Figure 8 reports per-category \(Acc@30^\circ\) on the 20-category ObjectNet3D split and the 7-category Pascal3D+ split used by Common3D [51]. Baselines train separate models per category on approximately 50 sequences each. On ObjectNet3D, our full model achieves the highest average (\(70.0\%\)) and leads on 12 of 20 categories. The largest gains appear on categories with distinctive geometric and semantic structure, such as bicycle (\(89.1\%\)), chair (\(98.8\%\)), and couch (\(98.7\%\)), where the combination of geometric and semantic priors provides strong orientation signals. Categories where our method trails tend to be small, geometrically ambiguous objects where category-specific training can exploit shape priors that a shared model cannot. The scaling trend is consistent across most categories: \(\text{Ours}^{\text{cat}}_{50} \rightarrow \text{Ours}^{\text{cat}}_{\text{full}} \rightarrow \text{Ours}\) improves performance progressively, with the full category-agnostic model often substantially outperforming the data-matched \(\text{Ours}^{\text{cat}}_{50}\), indicating that cross-category training transfers useful structure even to categories seen during training.
On Pascal3D+, the pattern is similar: our full model leads on all 7 categories and achieves \(87.6\%\) average. The gains are particularly pronounced on categories like bus (\(95.6\%\)) and car (\(96.7\%\)), where UCO3D provides abundant training sequences with diverse viewpoints. The smallest gain is on TV monitor (\(65.1\%\)), which has near-symmetric geometry that limits the orientation signal available from multi-view consistency.
Figure 9 visualizes predicted poses across the five evaluation benchmarks. For each dataset we show input images overlaid with predicted canonical axes (top) and a ShapeNet [8] mesh rendered under the predicted pose (bottom). Because RGB-only pose is evaluated in a scale-normalized coordinate system, rendered meshes use a fixed canonical scale and translations are comparable only up to a global scale factor. The examples illustrate that the learned canonical frame induces consistent axis conventions across categories and datasets.
Several evaluations use symmetry-aware rotation metrics, where the error for a prediction is the minimum over symmetry-equivalent ground-truth rotations (following [32]). This requires assigning each category a discrete yaw symmetry class. We derive these labels automatically using a large language model to avoid manual annotation. These labels are used only at evaluation time and are applied uniformly across all compared methods; they are not used during training.
We assign each category to one of four classes:
Class \(\infty\) (continuous): rotationally symmetric about the vertical axis; yaw is unrecoverable.
Class 1 (asymmetric): a unique identifiable front; full yaw determination is possible.
Class 2 (\(180^\circ\) ambiguity): front and back are indistinguishable but side views differ.
Class 4 (\(90^\circ\) ambiguity): all four cardinal yaw orientations are indistinguishable.
We generated symmetry labels using ChatGPT (GPT-5.2), queried in February 2026 with default decoding settings. We used a single fixed prompt and queried the model with the full list of categories from all considered datasets. We did not iterate on the prompt or revise individual labels based on downstream results. To simplify the prompt, we replaced symmetry class name \(\infty\) with \(0\) in the prompt. The complete category-to-symmetry mapping is provided as a CSV file with the released code.
Prompt:
I have a list of object categories that I need labeled by their object pose symmetry class. Each object category is assigned a discrete symmetry class based on the degree of pose ambiguity an observer would face when estimating the object’s yaw from a single view:
- Class 0 (Continuous): The object is rotationally symmetric about its vertical axis, making yaw unrecoverable. Applies to cylindrical (bottle, can), spherical (ball, orange), round flat (plate, pizza), and generally blob-shaped objects (pineapple, hamburger, hat) — even if minor surface details exist. - Class 1 (Asymmetric): The object has a unique, identifiable front face, allowing full pose determination. This is the default class and covers most man-made objects including vehicles, electronics, furniture with a clear front, labeled containers, tools, and figures. - Class 2 (180° ambiguity): Front and back views are indistinguishable, but side views differ. Applies to bilaterally symmetric elongated objects (barbell, pen, sausage) and objects symmetric through their dividing plane (bench, pillow, radiator). - Class 4 (90° ambiguity): All four cardinal views are identical. Applies to objects with square cross-sectional symmetry (table, box, dice, stool).
Please label the following categories with their symmetry class (0, 1, 2, or 4) and output the result as a CSV with columns category,symmetry_class:
category,symmetry_class
aeroplane,1
air_hammer,1
airship,1
ambulance,1
ashtray,0
ax,1
backpack,1
ball,0
banana,2
barbell,2
baseball_bat,0
basket,0