Due to their convolutional nature, earlier layers in a CNN are prominent in detecting edges and bars, but cannot
distinguish between edges that belong to a vehicle or an animal, per se. The extracted information is then passed down the network and generalized
in the final layer, where inference occurs. An object or class consists of features which remain invariant
[1]} across domains. For example, a horse still has legs and a mane, whether it is standing aside a person, lying in sand
or galloping through snow. Therefore, by disentangling an input image into distinct features, a causal decision can be made based upon the features present in the image.
Following the above example, the presence of `legs' in an image lead us to believe that an animal is most likely depicted. The presence of a
`mane', `long tail' and `oval-shaped' hoove make us confident that the animal is a horse. We argue that by taking advantage of the early and
intermediate features of a CNN, we can `push' a model to learn these invariant features (i.e edges and bars which correspond to parts of the depicted objects).
For our model, we follow the original Hypercolumns implementation and select the outputs from intermediate conv layers, pass them through a \({1 \times 1}\)  conv
layer and then upsample the outputs via bilinear interpolation. However, before concatenating the upsampled images to a hyper vector, we pass
them through a \({56 \times 56}\)  MaxPool2D layer, with \({26 \times 26}\)  strides, in an attempt to capture the features of the depicted class. After
the pooling layer, the outputs are concatenated into a hyper vector and passed through a classification head, which consists of a fully connected
layer followed by a softmax activation. Our model architecture is depicted in Figure 1.
