About Data Set:
I have been working on classification of a Kaggle plant seedling dataset with 12 classes, here are some manually picked examples from each class :
Black Grass:
Charlock:
Cleavers:
Common Chickweed:
Common Wheat:
Fat Hen:
Loose Silky Bent:
Maize:
Scentless Mayweed:
Shepherd's purse:
Small Flowered Cranesbill:
Sugar Beet:
A ResNet18 pre-trained on imageNet have been fine tuned on this data set, achieving about 99% prediction accuracy.
Deep dream x ResNet18:
This week, I used deep dream to visualize each layer of the network, here is some result I find interesting:
Original image and Maximizing 'add layer' following stage2, 3, 4:
Spiral (maize seedling) and grey vertical line (bar code?) are encoded in stage 2; Star-like shape (intersect of thin leaves) and green color are encoded in stage 3; Line, curves and angles are encoded in stage 4;
Comparing with the result of mixed4c layer in Inception V3:
No higher level structure about plants emerged in any layer no matter how I change the parameters. (Probably due to the monotony of the dataset, no high level structure is necessary to classify the dataset?)
Input, 2 conv layers, output of Stage2 unit2:
Input, 2 conv layers, output of Stage3 unit2:
The output becomes the ''weighted mixture'' of mainstream and shortcut. (Can this explain the high performance of ResNet?)
Class Activation Map:
I also tried the class activation map of some randomly picked data samples, most of the sample have expected Heat map like this:
Several pictures have rather unexpected activation map:
For the sample on the left, the flower-like leaves should be a very good indication of clever class, but the network only looks at cotyledons. For the samples on the right, the network ignore the leaves on the center.