Is it possible to recognize images with very large intra-class variation(such as one species within different life cycles)?

Is it possible to recognize images with very large intra-class variation(such as one species within different life cycles)?
If it’s possible, then what CNN learned from this.
Thanks in advance.

Hello Hoody!

Yes, certainly (given good training data, of course).

As an example, consider caterpillars / butterflies. Let’s say you have
monarch caterpillars and butterflies and swallowtail caterpillars and

It would be easy to train a four-class classifier – monarch caterpillar,
monarch butterfly, swallowtail caterpillar, swallowtail butterfly. So all
the network has to do is “learn” to collapse each pair of caterpillar /
butterfly classes together to form a two-class monarch / swallowtail

When you train your two-class monarch / swallowtail classifier, I don’t
think that the butterfly training data is really going to help with the
caterpillar classification (and vice versa) (Well, actually in this example,
there are some coloration clues, but ignore that …), so, under the hood,
the network is, more or less, learning four classes.

That is, after training, the four classes are largely represented as “latent
features” inside of the network. To give some concrete meaning to this
verbiage, I bet that, starting with your well-trained monarch / swallowtail
classifier, you could, with only a little bit of “fine-tuning” training, produce
the four-class classifier mentioned above or a two-class caterpillar /
butterfly classifier.

Or to say this a slightly different way, let’s say you train your monarch /
swallowtail classifier with lots butterfly data, but hardly any caterpillar
data. Your classifier will work well on butterfly images, but will hardly
work at all on caterpillar images. Again, under the hood, you’re training
a four-class classifier, and you didn’t give it enough caterpillar data to
learn the caterpillar classes.


K. Frank

1 Like

Hi, Frank, thanks for your patience and kindness. Sorry for making my question confusing. Actually I mean treating these four classes in the above image(a) as one, cause they belongs to the same category semantically.

Hello Hoody!

I believe that I did answer the question you asked (with a somewhat
simplified example).

In my example, a class showing “very large intra-class variation” would
be “monarch”, with the intra-class variation being caterpillar vs. butterfly.
(“Swallowtail” would be another class showing large intra-class variation
for the same reason.)

To be very specific, in my example “one species” would be monarch,
and the “different life cycles” would be caterpillar and butterfly.

(If your asking about building a binary classifier that recognizes
“monarch” vs. “not monarch” the logic of my previous post still applies.
You can imagine training a three-class classifier, “monarch caterpillar”
“monarch butterfly”, “neither”, that then learns to collapse the two
classes “monarch caterpillar” and “monarch butterfly” into a single
“monarch” class, leaving you with a two-class (binary) “monarch”
vs. “not monarch” classifier.)


K. Frank