H EXA C ONV
Anonymous authors
Paper under double-blind review
A BSTRACT
The effectiveness of Convolutional Neural Networks stems in large part from their ability to exploit the translation invariance that is inherent in many learning problems.
Recently, it was shown that CNNs can exploit other invariances, such as rotation invariance, by using group convolutions instead of planar convolutions.
However, for reasons of performance and ease of implementation, it has been necessary to limit the group convolution to transformations that can be applied to the ﬁlters without interpolation.
Thus, for images with square pixels, only integer translations, rotations by multiples of 90 degrees, and reﬂections are admissible.
Whereas the square tiling provides a 4-fold rotational symmetry, a hexagonal tiling of the plane has a 6-fold rotational symmetry.
In this paper we show how one can efﬁciently implement planar convolution and group convolution over hexagonal lattices, by re-using existing highly optimized convolution routines.
We ﬁnd that, due to the reduced anisotropy of hexagonal ﬁlters, planar HexaConv provides better accuracy than planar convolution with square ﬁlters, given a ﬁxed parameter budget.
Furthermore, we ﬁnd that the increased degree of symmetry of the hexagonal grid increases the effectiveness of group convolutions, by allowing for more parameter sharing.
We show that our method signiﬁcantly outperforms conventional CNNs on the AID aerial scene classiﬁcation dataset, even outperforming ImageNet pre-trained models.
I NTRODUCTION
For sensory perception tasks, neural networks have mostly replaced handcrafted features.
Instead of deﬁning features by hand using domain knowledge, it is now possible to learn them, resulting in improved accuracy and saving a considerable amount of work.
However, successful generalization is still critically dependent on the inductive bias encoded in the network architecture, whether this bias is understood by the network architect or not.
The canonical example of a successful network architecture is the Convolutional Neural Network (CNN, ConvNet).
Through convolutional weight sharing, these networks exploit the fact that a given visual pattern may appear in different locations in the image with approximately equal likelihood.
Furthermore, this translation symmetry is preserved throughout the network, because a translation of the input image leads to a translation of the feature maps at each layer: convolution is translation equivariant.
Very often, the true label function (the mapping from image to label that we wish to learn) is invariant to more transformations than just translations.
Rotations are an obvious example, but standard translational convolutions cannot exploit this symmetry, because they are not rotation equivariant.
As it turns out, a convolution operation can be deﬁned for almost any group of transformation — not just translations.
By simply replacing convolutions with group convolutions (wherein ﬁlters are not just shifted but transformed by a larger group; see Figure 1), convolutional networks can be made equivariant to and exploit richer groups of symmetries (Cohen & Welling, 2016).
Furthermore, this technique was shown to be more effective than data augmentation.
Although the general theory of such group equivariant convolutional networks (G-CNNs) is applicable to any reasonably well-behaved group of symmetries (including at least all ﬁnite, inﬁnite discrete, and continuous compact groups), the group convolution is easiest to implement when all the transformations in the group of interest are also symmetries of the grid of pixels.
For this reason, G-CNNs were initialy implemented only for the discrete groups p 4 and p 4 m which include integer [Figure] ⋆ translations, rotations by multiples of 90 degrees, and, in the case of p 4 m , mirror reﬂections — the symmetries of a square lattice.
The main hurdle that stands in the way of a practical implementation of group convolution for a continuous group, such as the roto-translation group SE(2) , is the fact that it requires interpolation in order to rotate the ﬁlters.
Although it is possible to use bilinear interpolation in a neural network (Jaderberg et al., 2015), it is somewhat more difﬁcult to implement, computationally expensive, and most importantly, may lead to numerical approximation errors that can accumulate with network depth.
This has led us to consider the hexagonal grid, wherein it is possible to rotate a ﬁlter by any multiple of 60 degrees, without interpolation.
This allows use to deﬁne group convolutions for the groups p 6 and p 6 m , which contain integer translations, rotations with multiples of 60 degrees, and mirrorings for p 6 m .
To our surprise, we found that even for translational convolution, a hexagonal pixelation appears to have signiﬁcant advantages over a square pixelation.
Speciﬁcally, hexagonal pixelation is more efﬁcient for signals that are band limited to a circular area in the Fourier plane (Petersen & Middleton, 1962), and hexagonal pixelation exhibits improved isotropic properties such as twelve-fold symmetry and six-connectivity, compared to eight-fold symmetry and four-connectivty of square pixels (Mersereau, 1979; Condat & Van De Ville, 2007).
Furthermore, we found that using small, approximately round hexagonal ﬁlters with 7 parameters works better than square 3 × 3 ﬁlters when the number of parameters is kept the same.
As hypothesized, group convolution is also more effective on a hexagonal lattice, due to the increase in weight sharing afforded by the higher degree of rotational symmetry.
Indeed, the general pattern we ﬁnd is that the larger the group of symmetries being exploited, the better the accuracy: p 6 -convolution outperforms p 4 -convolution, which in turn outperforms ordinary translational convolution.
In order to use hexagonal pixelations in convolutional networks, a number of challenges must be addressed.
Firstly, images sampled on a square lattice need to be resampled on a hexagonal lattice.
This is easily achieved using bilinear interpolation.
Secondly, the hexagonal images must be stored in a way that is both memory efﬁcient and allows for a fast implementation of hexagonal convolution.
To this end, we review various indexing schemes for the hexagonal lattice, and show that for some of them, we can leverage highly optimized square convolution routines to perform the hexagonal convolution.
Finally, we show how to efﬁciently implement the ﬁlter transformation step of the group convolution on a hexagonal lattice.
We evaluate our method on the CIFAR-10 benchmark and on the Aerial Image Dataset (AID) (Xia et al., 2017).
Aerial images are one of the many image types where the label function is invariant to rotations:
One expects that rotating an aerial image does not change the label.
In situations where the number of examples is limited, data efﬁcient learning is important.
Our experiments demon- strate that group convolutions systematically improve performance.
The method outperforms the baseline model pretrained on ImageNet, as well as comparable architectures with the same number of parameters.
The remainder of this paper is organized as follows:
In Section 2 we summarize the theory of group equivariant networks.
Section 3 provides an overview of different coordinate systems on the hexagonal grid, Section 4 discusses the implementation details of the hexagonal G-convolutions, in Section 5 we introduce the experiments and present results, Section 6 gives an overview of other related work after which we discuss our ﬁndings and conclude.
G ROUP E QUIVARIANT CNN S
In this section we review the theory of G-CNNs, as presented by Cohen & Welling (2016).
To begin, recall that normal convolutions are translation equivariant.
More formally, let L t denote the operator that translates a feature map f : Z 2 → R K by t ∈ Z 2 , and let ψ denote a ﬁlter.
Translation equivariance is then expressed as:
[Equation]
In words: translation followed by convolution equals convolution followed by a translation.
If instead we apply a rotation r , we obtain:
[Equation]
That is, the convolution of a rotated image L r f by a ﬁlter ψ equals the rotation of a convolved image f by a inversly rotated ﬁlter L r − 1 ψ .
There is no way to express [ L r f ] (cid:63) ψ in terms of f (cid:63) ψ , so convolution is not rotation equivariant.
The convolution is computed by shifting a ﬁlter over an image.
By changing the translation to a transformation from a larger group G, a G-convolution is obtained.
Mathematically, the GConvolution for a group G and input space X (e.g. the square or hexagonal lattice) is deﬁned as:
[Equation]
where k denotes the input channel, f k and ψ k are signals deﬁned on X , and g is a transformation in G .
The standard (translational) convolution operation is a special case of the G-convolution for X =
G =
Z 2 , the translation group.
In a typical G-CNN, the input is an image, so we have X =
Zfor the ﬁrst layer, while G could be a larger group such as a group of rotations and translations.
Because the feature map f (cid:63) ψ is indexed by g ∈ G , in higher layers the feature maps and ﬁlters are functions on G , i.e. we have X = G .
One can show that the G-convolution is equivariant to transformations u ∈ G :
[Equation]
Because all layers in a G-CNN are equivariant, the symmetry is propagated through the network and can be exploited by group convolutional weight sharing in each layer.
2. I MPLEMENTATION OF G ROUP C ONVOLUTIONS
Equation 3 gives a mathematical deﬁnition of group convolution, but not an algorithm.
To obtain a practical implementation, we use the fact that the groups of interest can be split 1 into a group of translations ( Z 2 ), and a group H of transformations that leaves the origin ﬁxed (e.g. rotations and/or reﬂections about the origin 2 ).
The G-Conv can then be implemented as a two step computation: ﬁlter transformation ( H ) and planar convolution ( Z 2 ).
G-CNNs generally use two kinds of group convolutions: one in which the input is a planar image and the output is a feature map on the group G (for the ﬁrst layer), and one in which the input and output u v 1 0 2 0 30-1-1100211322(a) Axial x yz 01 - 32 - 13 -22 -10 - 13 - 20 - 13 - 2 - (b) Cube u v 2 0 4 0 6101323545767(c) Double Width q r 1 0 2 0 3000111222333(d) Offset are both feature maps on G .
We can provide a uniﬁed explanation of the ﬁlter transformation step by introducing H in and H out .
In the ﬁrst-layer G-Conv, H in = { e } is the trivial group containing only the identity transformation, while H out
= H is typically a group of discrete rotations ( 4 or 6 ).
For the second-layer G-Conv, we have H in
= H out = H .
The input for the ﬁlter transformation step is a learnable ﬁlterbank Ψ of shape C × K · | H in | × S × S , where C, K, S denote the number of output channels, input channels, and spatial length, respectively.
The output is a ﬁlterbank of shape C ·| H out |× K ·| H in |× S × S , obtained by applying each h ∈ H out to each of the C ﬁlters.
In practice, this is implemented as an indexing operation Ψ
[ I ] using a precomputed static index array I .
The second step of the group convolution is a planar convolution of the input f with the transformed ﬁlterbank Ψ[ I ] .
In what follows, we will show how to compute a planar convolution on the hexagonal lattice (Section 3), and how to compute the indexing array I used in the ﬁlter transformation step of G-HexaConv (Section 4).
H EXAGONAL C OORDINATE S YSTEMS
The hexagonal grid can be indexed using several coordinate systems (see Figure 2).
These systems vary with respect to three important characteristics: memory efﬁciency, the possibility of reusing square convolution kernels for hexagonal convolution, and the ease of applying rotations and ﬂips.
As shown in Figure 3, some coordinate systems cannot be used to represent a rectangular image in a rectangular memory region.
In order to store a rectangular image using such a coordinate system, extra memory is required for padding.
Moreover, in some coordinate systems, it is not possible to use standard planar convolution routines to perform hexagonal convolutions.
Speciﬁcally, in the Offset coordinate system, the shape of a hexagonal ﬁlter as represented in a rectangular memory array changes depending on whether it is centered on an even or odd row (see Figure 4).
Because no coordinate system is ideal in every way, we will deﬁne four useful ones, and discuss their merits.
Figures 2, 3 and 4 should sufﬁce to convey the big picture, so the reader may skip to Section 4 on a ﬁrst reading.
3. A XIAL
Perhaps the most natural coordinate system for the hexagonal lattice is based on the lattice structure itself.
The lattice contains all points in the plane that can be obtained as an integer linear combination of two basis vectors e 1 and e 2 , which are separated by an angle of 60 degrees.
The Axial coordinate system simply represents the pixel centered at ue 1 + ve 2 by coordinates ( u, v ) (see Figure 2a).
Both the square and hexagonal lattice are isomorphic to Z 2 .
The planar convolution only relies on the additive structure of Z 2 , and so it is possible to simply apply a convolution kernel developped for rectangular images to a hexagonal image stored in a rectangular buffer using axial coordinates.
As shown in Figure 3a, a rectangular area in the hexagonal lattice corresponds to a parallelogram in memory.
Thus the axial system requires additional space for padding in order to store an image, [Figure] [Figure] which is its main disadvantage.
When representing an axial ﬁlter in memory, the corners of the array need to be zeroed out by a mask (see Figure 4a).
3. C UBE
The cube coordinate system represents a 2D hexagonal grid inside of a 3D cube (see Figure 5).
Although representing grids in three dimensional structures is very memory-inefﬁcient, the cube system is useful because rotations and reﬂections can be expressed in a very simple way.
Furthermore, the conversion between the axial and cube systems is straightforward: x = v , y = − ( u + v ) , z = u .
Hence, we only use the Cube system to apply transformations to coordinates, and use other systems for storing images.
A counter-clockwise rotation by 60 degrees can be performed by the following formula:
[Equation]
Similarly, a mirroring operation over the vertical axis through the origin is computed with:
[Equation]
3. D OUBLE W IDTH
The double width system is based on two orthogonal axes.
Stepping to the right by 1 unit in the hexagonal lattice, the u -coordinate is incremented by 2 (see Figure 2c).
Furthermore, odd rows are offset by one unit in the u direction.
Together, this leads to a checkerboard pattern (Figure 3b) that doubles the image and ﬁlter size by a factor of two.
xy z 1 1 00 -1 1 -20- - -211 -  -1x y z x
y z The good thing about this scheme is that a hexagonal convolution can be implemented as a rectangular convolution applied to checkerboard arrays, with checkerboard ﬁlter masking.
This works because the checkerboard sparsity pattern is preserved by the square convolution kernel: if the input and ﬁlter have this pattern, the output will too.
As such, HexaConv is very easy to implement using the double width coordinate system.
It is however very inefﬁcient, so we recommend it only for use in preliminary experiments.
3. O FFSET
Like the double width system, the offset coordinate system uses two orthogonal axes.
However, in the offset system, a one-unit horizontal step in the hexagonal lattice corresponds to a one-unit increment in the u -coordinate.
Hence, rectangular images can be stored efﬁciently and without padding in the offset coordinate system (see Figure 3c).
The downside to offset coordinates is that hexagonal convolutions cannot be expressed as a single 2D convolution (see Figure 4c and 4d), because the shape of the ﬁlters is different for even and odd rows.
Given access to a convolution kernel that supports strides, it should be possible to implement hexagonal convolution in the offset system using two convolution calls, one for the even and one for the odd row.
Ideally, these two calls would write to the same output buffer (using a strided write), but unfortunately most convolution implementations do not support this feature.
Hence, the result of the two convolution calls has to be copied to a single buffer using strided indexing.
We note that a custom HexaConv kernel for the offset system would remove these difﬁculties.
Were such a kernel developed, the offset system would be ideal because of its memory efﬁciency.
I MPLEMENTATION
The group convolution can be factored into a ﬁlter transformation step and a hexagonal convolution step, as was mentioned in Section 2 and visualized in Figure 1.
In our implementation, we chose to use the Axial coordinate system for feature maps and ﬁlters, so that the hexagonal convolution can be performed by a rectangular convolution kernel.
In this section, we explain the ﬁlter transformation and masking in general, for more details see Appendix A.
The general procedure described in Section 2.1 also applies to hexagonal group convolution ( p 6 and p 6 m ).
In summary, a ﬁlter transformation is applied to a learnable ﬁlter bank Ψ resulting in a ﬁlter bank Ψ (cid:48) than can be used to compute the group convolution using (multiple) planar convolutions (see the top of Figure 1 for a visual portrayal of this transformation).
In practice this transformation is implemented as an indexing operation Ψ
[ I ] , where I is a constant indexing array based on the structure of the desired group.
Hence, after computing Ψ[ I ] , the convolution routines can be applied as usual.
Although convolution with ﬁlters and feature maps layed out according to the Axial coordinate system is equivalent to convolution on the hexagonal lattice, both the ﬁlters and the feature maps contain padding (See Figure 3 and 4), since the planar convolution routines operate on rectangular arrays.
As a consequence, non-zero output may be written to the padding area of both the feature maps or the ﬁlters.
To address this, we explicitly perform a masking operation on feature maps and ﬁlters after every convolution operation and parameter update, to ensure that values in the padding area stay strictly equal to zero. [Table] [Table]
E XPERIMENTS
We perform experiments on the CIFAR-10 and the AID datasets.
Speciﬁcally, we compare the accuracy of our G-HexaConvs ( p 6 - and p 6 m -networks) to that of existing G-networks ( p 4 - and p 4 m -networks) (Cohen & Welling, 2016) and standard networks ( Z 2 ).
Moreover, the effect of utilizing an hexagonal lattice is evaluated in experiments using the HexaConv network (hexagonal lattice without group convolutions [Table] or Z 2 Axial).
Our experiments show that the use of an hexagonal lattice improves upon the conventional square lattice, both when using normal or p 6 -convolutions.
5. CIFAR-
CIFAR-10 is a standard benchmark that consists of 60000 images of 32 by 32 pixels and 10 different target classes.
We compare the performance of several ResNet (He et al., 2016) based G-networks.
Speciﬁcally, every G-ResNet consists of 3 stages, with 4 blocks per stage.
Each block has two 3 by 3 convolutions
[Table]
and a skip connection from the input to the output.
Spatial pooling is applied to the penultimate layer, which leaves the orientation channels intact and allows the network to maintain orientation equivariance.
Moreover, the number of feature maps is scaled such that all G-networks are made up of a similar number of parameters.
For hexagonal networks, the input images are resampled to the hexagonal lattice using bilinear interpolation (see Figure 6).
From a qualitative inspection of these hexagonal interpolations we conclude that no information is lost during the sampling procedure.
The CIFAR-10 results are presented in Table 1.
We note that the the HexaConv CNN ( Z 2 Axial) outperforms the standard CNN ( Z 2 ).
Moreover, we ﬁnd that p 4 - and p 4 m -ResNets are outperformed by our p 6 - and p 6 m -ResNets, respectively.
We also ﬁnd a general pattern: using groups with an increasing number of symmetries consistently improves performance.
5. AID
The Aerial Image Dataset (AID) (Xia et al., 2017) is a dataset consisting of 10000 satellite images of 400 by 400 pixels and 30 target classes.
The labels of aerial images are typically invariant to rotations, i.e., one does not expect labels to change when an aerial image is rotated.
For each experiment, we split the data set into random 80% train/20% test sets.
This contrasts the 50% train/test split by Xia et al.
Since the test sets are smaller, experiments are performed multiple times with randomly selected splits to obtain better estimates.
All models are evaluated on identical randomly selected splits, to ensure that the comparison is fair.
As a baseline, we take the best performing model from Xia et al.
(2017), which uses VGG16 as a feature extractor and an SVM for classiﬁcation.
Because the baseline was trained on 50%/50% splits, we re-evaluate the model trained on the same 80%/20% splits.
We again test several G-networks with ResNet architectures.
The ﬁrst convolution layer has stride two, and the ResNets take resized 64 by 64 images as input.
The networks are widened to account for the increase in the number of classes.
Similar to the CIFAR-10 experiments, the networks still consist of 3 stages, but have two blocks per stage.
In contrast with the CIFAR-10 networks, pooling is applied to the spatial dimensions and the orientation channels in the penultimate layer.
This allows the network to become orientation invariant.
[Figure] The results for the AID experiment are presented in Table 2.
The error decreases from an error of 19.3% on a Z 2 -ResNet, to an impressive error of 8.6% on a p 6 -ResNet.
We found that adding mirror symmetry did not meaningfully affect performance ( p 4 m 10.2% and p 6 m 9.3% error).
This suggests that mirror symmetry is not an effective inductive bias for AID.
It is worth noting that the baseline model has been pretrained on ImageNet, and all our models were trained from random initialization.
These results demonstrate that group convolutions can improve performance drastically, especially when symmetries in the dataset match the selected group.
R ELATED W ORK
Transformational equivariant representations have received signiﬁcant research interest over the years.
Methods for invariant representations in hand-crafted features include pose normalization (Lowe, 1999; Dalal & Triggs, 2005) and projections from the plane to the sphere (Kondor, 2007).
Although approximate transformational invariance can be achieved through data augmentation (Van Dyk & Meng, 2001), in general much more complex neural networks are required to learn the invariances that are known to the designer a-priori.
As such, in recent years, various approaches for obtaining equivariant or invariant CNNs — with respect to speciﬁc transformations of the data —were introduced.
A number of recent works propose to either rotate the ﬁlters or the feature maps followed and subsequent channel permutations to obtain equivariant (or invariant) CNNs (Cohen & Welling, 2016;
Dieleman et al., 2016; Zhou et al., 2017; Li et al., 2017).
Cohen & Welling (2017) describe a general framework of equivariant networks with respect to discrete and continuous groups, based on steerable ﬁlters, that includes group convolutions as a special case.
Harmonic Networks (Worrall et al., 2016) apply the theory of Steerable CNNs to obtain a CNN that is approximately equivariant with respect to continuous rotations.
Deep Symmetry Networks (Gens & Domingos, 2014) are approximately equivariant CNN that leverage sparse high dimensional feature maps to handle high dimensional symmetry groups.
Marcos et al.
(2016) obtain rotational equivariance by rotating ﬁlters followed by a pooling operation that maintains both the angle of the maximum magnitude and the magnitude itself, resulting in a vector ﬁeld feature map.
Ravanbakhsh et al.
(2017) study equivariance in neural networks through symmetries in the network architecture, and propose two parameter-sharing schemes to achieve equivariance with respect to discrete group actions.
Instead of enforcing invariance at the architecture level, Spatial Transformer Networks (Jaderberg et al., 2015) explicitly spatially transform feature maps dependent on the feature map itself resulting in invariant models.
Similarly, Polar Transformer Networks (Esteves et al., 2017) transform the feature maps to a log-polar representation conditional on the feature maps such that subsequent convolution correspond to group (SIM(2)) convolutions.
Henriques & Vedaldi (2016) obtain invariant CNN with respect to spatial transformations by warping the input and ﬁlters by a pre-deﬁned warp.
Due to the dependence on global transformations of the input, these methods are limited to global symmetries of the data.
C ONCLUSION
We have introduced G-HexaConv, an extension of group convolutions for hexagonal pixelations.
Hexagonal grids allow 6-fold rotations without the need for interpolation.
We review different coordinate systems for the hexagonal grid, and provide a description to implement hexagonal (group) convolutions.
To demonstrate the effectiveness of our method, we test on an aerial scene dataset where the true label function is expected to be invariant to rotation transformations.
The results reveal that the reduced anisotropy of hexagonal ﬁlters compared to square ﬁlters, improves performance.
Furthermore, hexagonal group convolutions can utilize symmetry equivariance and invariance, which allows them to outperform other methods considerably
A I MPLEMENTATION D ETAILS
To understand the ﬁlter transformation step intuitively we highly recommend studying Figure 1.
Below we give a precise deﬁnition that makes explicit the relation between the mathematical model and computational practice.
Recall that in our mathematical model ﬁlters and feature maps are considered functions ψ : X → R K where X =
Z 2 or X = G .
In the ﬁlter transformation step we need to compute the transformed ﬁlter L r ψ for each rotation r ∈ H and each ﬁlter ψ , thus increasing the number of output channels by a factor | H | .
The rotation operator L r is deﬁned by the equation [ L r ψ ]( h ) =
ψ ( r − 1 h ) .
Our goal is to implement this as a single indexing operation Ψ
[ I ] , where Ψ is an array storing our ﬁlter, and I is a precomputed array of indices.
In order to compute I , we need to relate the elements of the group, such as r − 1 h to indices.
To simplify the exposition, we assume there is only one input channel and one output channel; K = C = 1 .
A ﬁlter ψ will be stored in an n -dimensional array Ψ , where n = 2 if X = Z 2 and n = 3 if X = G .
An n -dimensional array has a set of valid indices I ⊂ Z n .
Thus, we can think of our array as a function that eats an index and returns a scalar, i.e. Ψ : I → R .
If in addition we have an invertible indexing function ι : X → I , we can consider the array Ψ as a representation of our function ψ : X → R , by setting ψ ( x ) =
Ψ[ ι ( x )] .
Conversely, we can think of ψ as a representation of Ψ , because Ψ[ i ] = ψ ( ι − 1 ( i )) .
This is depicted by the following diagram:
[Equation]
With this setup in place, we can implement the transformation operator L r by moving back and forth between I (the space of valid indices) and X (where inversion and composition of elements are deﬁned).
Speciﬁcally, we can deﬁne:
[Equation]
That is, we convert our index i to group element h =
ι [Equation] 1 ( i ) .
Then, we compose with r − 1 to get r − 1 h , which is where we want to evaluate ψ .
To do so, we convert r − 1 h back to an index using ι , and use it to index Ψ .
To perform this operation in one indexing step as Ψ[ I ] , we precompute indexing array I :
[Equation]
Finally, we need choose a representation of our group elements h that allows us to compose them easily, and choose an indexing map ι .
An element h ∈ p 6 can be written as a rotation-translation pair ( r (cid:48) , t (cid:48) ) .
The rotation component can be encoded as an integer 0 , . . .
, 5 , and the translation can be encoded in the Axial coordinate frame (Section 3.1) as a pair of integers u, v .
To compute r − 1 h , we use that r − 1 ( r (cid:48) , t (cid:48) )
=
( r − 1 r (cid:48) , r − 1 t (cid:48) ) .
The rotational composition reduces to addition modulo(which results in the orientation channel cycling behaviour pictured in Figure 1), while r − 1 t (cid:48) can be computed by converting to the Cube coordinate system and using Equation 5 (which rotates the orientation channels).