Pollenating insect classification (403 classes), simplified workflow

Paris Saclay Center for Data Science¶

RAMP on Pollinating insect classification¶

Mehdi Cherti (CNRS), Romain Julliard (MNHN), Gregoire Lois (MNHN), Balázs Kégl (CNRS)


Pollinating insects play a fundamental role in the stability of ecosystems. An insect is said to be pollinator when it transports pollen from one flower to another, helping them to accomplish fertilization. The vast majority of plants pollinates using insects, and at the same time, these insects depend on plants for their survival. However, because of human intensified agrigulture, urbanisation and climate change, these species are threatened. 35% of human alimentation is based on plants pollinated by insects. Diversity of these insects is also important, the more diverse they are the best overall assistance is provided by these insects.

The SPIPOLL (Suivi Photographique des Insectes POLLinisateurs) project proposes to quantitatively study pollinating insects in France. For this, they created a crowdsourcing platform where anyone can upload pictures of insects and identify their species through a series of questions. These data are then used by specialists for further analyses.


In this RAMP, we propose a dataset of pictures of insects from different species gathered from the SPIPOLL project and labeled by specialists. The dataset contains a set of 72939 labeled pictures of insects coming from 403 different insect species. Each picture is a color image. The size of the images (number of pixels) vary.

The prediction task¶

The goal of this RAMP is to classify correctly the species of the insects. For each submission, you will have to provide an image preprocessor (to standardize, resize, crop, augment images) and batch classifier, which will fit a training set and predict the classes (species) on a test set. The images are big so loading them into the memory at once is impossible. The batch classifier therefore will access them through a generator which can be "asked for" a certain number of training and validation images at a time. You will typically run one minibatch of stochastique gradient descent on these images to train a deep convolutional neural networks which are the state of the art in image classification.


First of all, even though 72K images is relatively small compared to industrial level data sets, to achieve state-of-the-art performance, you will need big networks which will take ages (days) to train on a CPU. If you want to have a faster turnaround for tuning your net, you will need a GPU-equipped server of could instance. Setting up an AWS instance is easy, just follow this tutorial. If you want to have the starting kit preinstalled, use the community AMI pollenating_insects_users_3_simplified (available at the Oregon AWS site).

If you have access to other resources, we have an install.sh script in the starting kit that we used to install the libraries and the starting kit on an Ubuntu 16.04 server.

Your main bottleneck is memory. E.g., increasing the resolution to 128x128, you will need to decrease batch size. You should always run ramp_test_submission on the AWS node before submitting.

For learning the nuts and bolts of convolutional nets, we suggest that you follow Andrej Karpathy’s excellent course.

You have some trivial "classical" options to explore. You should set the epoch size to something more than three (in the starting kit). You should check when the validation error curve flattens because you will also be graded on training and test time. You can change the network architecture, apply different regularization techniques to control overfitting, optimization options to control underfitting.

You can use pretrained nets from here. There are a couple of examples in the starting kit. Your options are the following.

  • Retrain or not the weights. If you do not, you are using the pretrained net as fixed a feature extractor. You can add some layers on the top of the output of the pretrained net, and only train your layers. If you retrain all the layers, you use the pretrained net as an initialization. Again, your goal is not only to increase accuracy but also to be frugal. Retraining the full net is obviously more expensive.
  • You can "read out" the activations from any layer, you do not need to keep the full net, not even the full convolutional stack.
  • The starting kit contains examples with the VGG16 net, but feel free to use any of the other popular nets. Just note that there is no way to change the architecture of these nets. In particular, each net expects images of a given dimension so your image preprocessing needs to resize or crop the images to the right size.

You can also adjust the image preprocessing. Resizing to small (64x64 or even 32x32) will make the training faster so you can explore more hyperparameters, but the details will be lost so your final result will probably be suboptimal. Insects are mostly centered in the images but there are a lot of smaller insects which could be cropped for a better performance. You can also rotate the images or apply other data augmentation tricks (google "convolutional nets data augmentation"). You should also look at the actual images to get some inspiration to find meaningful preprocessing ideas.

Data challenge rules¶

This RAMP was prepared primarily for the collaborative phase of the data challenge organized by the CDS and the Journées Nationales de l'Ingénieur, running between 18 September and 12 November 2017. You can sign up to the challenge on the event page. Here are the competition rules.

  • Submissions will be trained on the ~70K training examples given in the starting kit, and tested on a hidden test set of the same size. The training and test sets were created using a stratified split.
  • The challenge will comprise a competitive phase, ending on October 15 2017 at 20h EDT, and a subsequent collaborative phase, ending on November 5 2017 at 20h EDT.
  • All models will be trained on single GPU g3.4xlarge instances at the Oregon site of AWS. We will try to launch the training as soon as possible after submission but we give no gurantee on the minimum delay.
  • Participants will be given a total of 50 machine hours. Submissions of a given participant will be ordered by submission timestamp. We will make an attempt to train all submissions, but starting from (and including) the first submission that makes the participant's total training time exceed 50 hours, all submissions will be disqualified from the competitive phase (but can enter into the collaborative phase). Testing time will not count towards the limit. Train time will be displayed on the leaderboard for all submissions, rounded to second. If a submission raises an exception, its training time will not count towards the total. Training on the backend will be expected to take about 20% more time than the starting kit training because of the difference in training set size.
  • Submissions submitted after the end of the competitive phase will not qualify for prizes in the competitive phase.
  • A submission training can be requested to be killed by contacting the organizers, while in training state. We will make an attempt to kill the jobs, in which case the submission will be put in an error state and its training time will not count against the limit. We cannot guarantee that we can kill the process between the request and the end of the training job. Once a submission is trained, it cannot be deleted. We will also reserve the right not to kill jobs in case a participant abuses this rule.
  • The public leaderboard will display validation scores, measured on about 20% of the starting kit training data. The official scores will be calculated on the hidden test set and will be published after the closing of the competitive phase. We will measure several scores of each submission:
    • Accuracy is the number of correctly classified images divided by the total number of images.
    • F170 is the number of classes with F1-score larger then 0.7, divided by the total number of classes.
    • Cross entropy
    • Training time in seconds.
  • The organizers will do their best so that the provided backend runs flawlessly. We will communicate with participants in case of concerns and will try to resolve all issues, but we reserve the right to make unilateral decisions in specific cases, not covered by this set of minimal rules.
  • The organizers reserve the right to disqualify any participant found to violate the fair competitive spirit of the challenge. Possible reasons, without being exhaustive, are multiple accounts, attempts to access the test data, etc.
  • The challenge is essentially an individual contest, so there is no way to form official teams. Participants can form teams outside the platform before submitting any model individually, contact the organizers to let them know about the team, and submit on a single team member's account. However, submitting on one's own and participating in such a team at the same time is against the "no multiple accounts" rule, so, if discovered, may lead to disqualification.
  • Participants retain copyright on their submitted code and grant reuse under BSD 3-Clause License.

Participants accept these rules automatically when making a submission at the RAMP site.

Prizes of the competitive phase¶

Ties in the competitive scores will be broken by earlier submission time. Each participant can win at most one prize; in case the same person is positioned to win several prizes, he or she will awarded the highest prize, and we will take the next participants among the submissions ordered by the given prize criteria.

  • 2K€: the top submission according to private test accuracy at the end of the competitive phase.
  • 1K€: the runner up submission according to private test accuracy at the end of the competitive phase.
  • 500€: the third place submission according to private test accuracy at the end of the competitive phase.
  • 500€: the top submission according to f170 score at the end of the competitive phase.
  • 500€: the top submission among those with test accuracy greater than $0.75$ according to accuracy divided by GPU training time (in hours) at the end of the competitive phase. If no submission has test accuracy greater than $0.75$, we will select from among those with accuracy greater than $0.5$.

Prizes of the collaborative phase¶

In the collaborative phase we will reward a combination of activity, influence (measured by credits participants give to submissions to other participants), and contribution to the "jumps" of the best score. The exact formulas and the prize structure will be provided shortly.

The organizers retain the right to update the rules in case loopholes are discovered.


Prizes are provided by OVH, IESF, and Paris-Saclay CDS. The computational time is provided by AWS on a research credit granted to the Paris-Saclay CDS.

In [1]:
import os
import numpy as np
import pandas as pd
from skimage.io import imread
from sklearn.model_selection import StratifiedShuffleSplit
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid
from matplotlib import cm

%matplotlib inline

pd.set_option('display.max_rows', 500)

The data¶

If the images are not yet in data/imgs, change the type of the net cell to "Code" and run it.

!python download_data.py
In [2]:
df = pd.read_csv('data/train.csv')
X_df = df['id']
y_df = df['class']
X = X_df.values
y = y_df.values
In [3]:

The class distribution is quite heavy tail.

In [4]:
labels_counts_df = df.groupby('class').count()
labels_counts_df = labels_counts_df.rename(columns={'id': 'count'})
class_codes_df = pd.read_csv('data/class_codes.csv', index_col='class')
labels_counts_df = pd.merge(
    class_codes_df, labels_counts_df, left_index=True, right_index=True)
labels_counts_df = labels_counts_df.sort_values('count', ascending=False)
taxa_name count
202 L'Abeille mellifère <Apis mellifera> 4875
159 Les Eristales (autres) <Eristalis> 4079
57 Les Bourdons noirs à bande(s) jaune(s) et cul ... 2489
134 Les Bourdons à pilosité fauve à grise <Bombus> 1660
94 Le Syrphe ceinturé <Episyrphus balteatus> 1442
131 Les Mouches difficiles à déterminer 1310
27 Les Halictes (femelles) <Halictus, Lasioglossu... 1078
97 Les Oedemères verts <Oedemera> 915
170 Les Mouches aux reflets métalliques <Neomyia, ... 850
15 Les Guêpes Polistes <Polistes> 786
84 Les Coccinelles <Coccinellidae> 742
75 Les Bourdons noirs à cul rouge <Bombus> 728
121 La Coccinelle à 7 points <Coccinella septempun... 679
3 Les Sauterelles <Tettigonoidea> 657
175 Le Drap mortuaire <Oxythyrea funesta> 634
35 L'Araignée crabe Napoléon <Synema globosum> 602
180 Les Bourdons noirs à bande(s) jaune(s) et cul ... 592
163 Les Syrittes <Syritta> 586
148 Les Fourmis à pétiole simple <Formicinae> 576
200 Les Mouches pâles <Scathophaga et autres> 576
20 Les Bombyles <Bombylius, Systoechus> 558
179 Les Halictes (mâles) <Halictidae> 547
72 Les Ichneumons et autres <Ichneumonidae> 521
188 Les Moustiques, Tipules et autres Diptères Ném... 520
39 La Stomorhina <Stomorhina lunata> 513
55 Les Fourmis difficiles à déterminer <Formicidae> 509
108 Les Mordelles <Mordellidae> 500
7 L'Eristale des fleurs <Myathropa florea> 462
112 Les Abeilles Hylaeus à taches blanches <Hylaeus> 456
5 Les Hélophiles <Helophilus, Parhelophilus> 448
150 Le Téléphore fauve et autres <Rhagonycha fulva... 407
160 Les Dermestes <Dermestidae> 394
151 Les Cétoines métalliques à marques blanches <C... 391
66 Les Guêpes Crabronidae difficiles à déterminer... 387
79 Taxon inconnu de la clé 378
140 Les Xylocopes <Xylocopa> 375
167 Les Abeilles difficiles à déterminer <Apidae e... 375
98 Les Syrphes Sphaerophoria (femelle) <Sphaeroph... 365
92 Les Andrènes rayées difficiles à déterminer <A... 352
124 Les Mouches à damier <Sarcophaga> 349
136 Les Guêpes maçonnes à abdomen court <Odynerus ... 336
77 Le Moro-sphinx <Macroglossum stellatarum> 328
25 Le Pentatome rayé <Graphosoma lineatum> 323
1 Les Guêpes Vespula <Vespula, Dolichovespula> 317
33 Les Homoptères autres <Cicadelles, Cercopes et... 305
168 Les Nitidulides <Nitidulidae> 302
0 Les Hespéries fauves <Ochlodes, Thymelicus> 298
122 Les Piérides <Pieris> 294
54 Les Anthidies <Anthidium et autres> 291
197 Les Abeilles coucou noir, jaune et rouge <Noma... 284
102 Les Criquets <Acrididae> 270
14 Les Chenilles et fausses-Chenilles 269
107 Les Bruches <Bruchus et autres> 255
185 Le Vulcain <Vanessa atalanta> 248
76 Les larves de Punaises <Heteroptera> 248
8 Les Pucerons <Aphididae> 248
182 Le Syrphe porte-plume (mâle) <Sphaerophoria sc... 243
100 Les Bibions et autres <Bibio et autres> 242
82 Les Conopides (autres) <Conopidae> 230
18 Les Eristales aux yeux ponctués <Eristalinus> 227
129 Le Paon du jour <Aglais io> 222
42 Les Azurés marrons à chevrons oranges <Polyomm... 220
206 Les Araignées (autres) 217
191 Le Gendarme <Pyrrhocoris apterus> 215
130 Le Xylocope violet (mâle) <Xylocopa violacea> 210
120 Les Cétoines sombres soyeuses <Tropinota> 206
50 Les Tenthrèdes noir et jaune <Tenthredo et aut... 200
172 Le Clairon des ruches <Trichodes alvearius> 198
73 Les Araignées crabes sombres <Xysticus, Coriar... 197
103 Les Araignées sauteuses <Salticidae> 190
133 Les Rhingies <Rhingia> 187
52 Les Tachinaires fauves à abdomen aplati <Ectop... 185
193 Les Gastéruptions <Gasteruption> 180
162 La Lepture tachetée <Rutpela maculata> 178
49 Les Coléoptères difficiles à déterminer 164
74 L'Amaryllis <Pyronia tithonus> 163
157 Les Mégachiles <Megachile> 161
155 Les Tachinaires fauves à abdomen rond <Gymnosoma> 160
99 Le Cuivré commun <Lycaena phlaeas> 155
38 Le Flambé <Iphiclides podalirius> 154
48 Les Taupins unis <Ampedus et autres> 152
58 Les Microlépidoptères difficiles à déterminer ... 152
22 Les Mélitées et Damiers autres <Melitaea et au... 150
41 Les Epeires et autres Araneidae 149
78 Les Syrphes à abdomen fin <Meliscaeva et autres> 147
90 Les Punaises difficiles à déterminer 145
51 Les Syrphes difficiles à déterminer 144
198 Les Fadets sans bande blanche <Coenonympha> 142
26 Le Souci et autres <Colias> 142
89 Le Frelon européen <Vespa crabro> 142
61 La Belle-Dame <Vanessa cardui> 141
173 Les Nacrés et autres <Argynnis et autres> 138
69 Les Chrysides <Chrysididae> 138
62 Les Citrons <Gonepteryx> 137
128 Les Syrphes à l'aspect de bourdon <Merodon et ... 136
44 La Petite Tortue <Aglais urticae> 136
67 Les Sténoptères fauves <Stenopterus> 134
183 Les Malachides à points rouges <Malachius et a... 132
119 Les Andrènes difficiles à déterminer <Andrenidae> 131
154 Les Tenthrèdes noir et fauve/orangé <Allantus,... 131
34 Les Empidides <Empis et autres> 130
70 Les Collètes (autres) <Colletidae> 130
139 Les Dasytides bleus et verts <plusieurs Dasyti... 123
19 Le Tircis <Pararge aegeria> 122
88 Les Chrysopes <Chrysopidae> 122
24 Le Robert-le-Diable <Polygonia> 122
186 La Volucelle zonée <Volucella zonaria> 118
196 Le Demi-Deuil <Melanargia galathea> 117
147 Les Opilions <Phalangiidae> 117
10 Les Terebrants Chalcidiens et autres 116
126 Le Frelon asiatique <Vespa velutina> 116
11 Les Tachinaires fauves velues <Tachina et autres> 115
87 Les Pisaures <Dolomedes, Pisaura> 114
181 Les Mirides <Miridae> 114
40 Les larves de Coccinelles <Coccinellidae> 112
9 Les Téphritides et autres <Tephritidae et autres> 112
165 Les Trichies <Trichius> 112
177 Les Syrphes Syrphus et autres <Syrphus, Dasysy... 111
201 La Valgue hémiptère <Valgus hemipterus> 110
195 Les Scraptides <Scraptiidae> 107
207 Les Panorpes <Panorpidae> 107
171 Les Leptures fauves <Paracorymbia fulva et aut... 106
152 Le Tabac d'Espagne <Argynnis paphia> 101
64 Les Noctuelles <Noctuidae> 101
53 Les Abeilles à abdomen rouge <Sphecodes et aut... 96
59 Les Anthracines Villa <Villa> 96
158 Les Longicornes entièrement noirs <Grammoptera... 96
149 Les Osmies noir et roux (mâles) <Osmia cornuta... 94
65 Les Osmies noir et roux (femelles) <Osmia corn... 94
166 Les Guêpes maçonnes à abdomen long <Delta, Dis... 91
117 Les Pentatomes <Pentatomidae> 90
71 Les Lygées rouges à points blancs <Lygaeus> 89
37 Les Araignées lynx <Oxyopes> 88
63 La Collète du Lierre <Colletes hederae> 87
95 Les Zygènes à taches simples <Zygaena> 86
192 Les Andrènes à pilosité noir et blanc <Andrena> 86
164 Les Araignées crabes Thomisus <Thomisus> 86
205 Les Abeilles à thorax roux <Andrena clarkella ... 85
106 Les Abeilles Ceratina bleutées <Ceratina> 83
161 Le Clairon des abeilles <Trichodes apiarius> 83
80 Les Adèles à motifs <plusieurs Adelidae> 82
208 Le Machaon <Papilio machaon> 81
132 Le Sphégien noir à ailes fumées <Isodontia mex... 79
146 Le Myrtil <Maniola jurtina> 79
127 La Volucelle transparente <Volucella pellucens> 78
144 Les Scolies à taches jaunes (autres) <Scolia e... 78
68 Les Punaises Eurydema <Eurydema> 78
187 Les Anthophores autres et espèces proches <Ant... 78
56 Les Araignées crabes Misumena <Misumena> 78
81 Les Mégachiles de petite taille <Stelis, Heria... 76
16 Les Longicornes rouges au thorax noir <Acmaeop... 74
184 Les Clytes noir et jaune <Clytus et autres> 73
104 Les Anthophores rayés et espèces proches <Ameg... 73
114 Les Longicornes porte-coeur <Stictoleptura cor... 73
189 Le Satyre et autres <Lasiommata> 73
142 Les Azurés bleus à chevrons oranges <Lysandra,... 72
30 Les Araignées crabes Philodromus <Philodromus> 71
153 Les Pompiles <Pompilidae> 71
178 Les Epeires concombre <Araniella> 69
17 Les Syrphes Sphaerophoria (mâle) <Sphaerophoria> 67
203 Les Guêpes fouisseuses <Bembix> 67
123 Les Mylabres à bandes <Hycleus, Mylabris> 67
45 Les Coréides <Coreidae> 67
43 Les Perce-oreilles <Dermaptera> 66
125 Les Syrphes à taches en virgules <Eupeodes, Sc... 64
169 Les Sepsides <Sepsidae> 62
47 Les Chloromyies <Chloromyia> 62
12 L'Eristale taeniops <Eristalinus taeniops> 60
194 L'Athalie des roses <Athalia rosae> 59
141 Les Hannetons <Anisoplia, Phyllopertha> 59
31 La Chrysomèle américaine <Chrysolina americana> 58
4 Les Punaises prédatrices ternes 58
105 Les Ptérophores <Pterophoridae> 58
115 Les Fourmis à double pétiole <Myrmicinae> 58
46 Les Chrysanthies et autres <Chrysanthia, Ischn... 57
118 Photo insuffisante pour aller plus loin dans l... 57
116 La Tiphide aux pattes rouges <Tiphia femorata> 57
91 Les Charançons (autres) <Larinus et autres> 57
110 Les Bourdons (autres) <Bombus> 57
111 La Punaise du Chou <Eurydema oleracea> 55
23 Les Pachytes <Pachyta et autres> 55
138 L'Andrène fauve (femelle) <Andrena fulva> 54
83 Les Réduves <Rhynocoris> 54
174 Les Guêpes Cerceris <Cerceris> 53
156 Les larves de Chrysopes <Chrysopidae> 52
176 Les Asilides <Asilidae> 50
60 L'Abeille Ceratina noire <Ceratina cucurbitina> 50
113 Les Sésies <Sesiidae> 50
86 La Tachinaire corpulente <Tachina grossa> 50
143 L'Ecaille chinée <Euplagia quadripunctaria> 50
204 L'Azuré des Nerpruns (femelle) <Celastrina arg... 47
96 Les Conopides jaune et noir <Conops et autres> 47
28 La Silène <Brintesia circe> 47
29 Les Eucères (mâles) <Eucera et autres> 47
32 Les Araignées Loup <Lycosidae> 47
36 Le Brun des Pélargoniums <Cacyreus marshalli> 47
135 Les Chrysotoxes <Chrysotoxum> 46
199 Les Chloropides jaunes <Thaumatomyia> 46
93 Les Azurés migrateurs <Lampides, Leptotes> 45
13 L'Araignée crabe Ebrechtella <Ebrechtella tric... 45
2 La Mélitée orangée <Melitaea didyma> 43
21 Les Bourdons à thorax fauve et à abdomen noir ... 42
85 Le Gazé <Aporia crataegi> 42
6 La Carte géographique forme sombre <Araschnia ... 40
109 Les Mouches Platystoma <Platystoma> 40
137 Le Dinoptère <Dinoptera collaris> 40
190 Le Criocère du Lis et autres <Exosoma, Lilioce... 40
358 Les Zygènes à taches cerclées <Zygaena> 39
302 L'Hoplie argentée <Hoplia argentea> 39
101 La Punaise de la Jusquiame <Corizus hyoscyami> 39
230 La Viole rouge <Spilostethus pandurus> 39
145 Les Mouches tachetées <Anthomyia et autres> 38
211 Les Tachinaires à abdomen cylindrique <Cylindr... 37
391 La Volucelle vide <Volucella inanis> 37
244 Les Cuivrés <Lycaena> 37
324 Les Blattes <Blattellidae> 37
361 Les Chloropides jaunes à fémurs enflés <Meromyza> 36
313 Les Tenebrions jaunes <Cteniopus> 36
285 Les Abeilles coucou noir et blanc <Thyreus et ... 36
232 Les Piérides nervurées <Pieris> 34
231 Les Téphritides sans taches <Tephritidae et au... 34
249 Les Agrestes <Hipparchia et autres> 34
243 La Punaise à damier <Spilostethus saxatilis> 34
326 Les Tenthrèdes noir et blanc <Allantus, Macrop... 34
357 Les Sylvains <Limenitis> 34
365 Les Osmies (autres) 34
373 Les Mégachiles coucou <Coelioxys et autres> 34
398 Les Anthophores mâles <Anthophora et autres> 33
330 Les Conopides à abdomen rétréci <Physocephala> 33
316 Le Thécla de la Ronce <Callophrys rubi> 31
308 Le Grammoptère couleur de tabac <Alosterna tab... 31
292 Les Piérides marbrées <Euchloe et autres> 31
350 L'Argus myope (mâle) <Lycaena tityrus> 31
240 Les Andrènes à abdomen rouge et noir (autres) ... 31
400 Le Petit Nacré <Issoria lathonia> 31
310 Les Dasytides noirs <plusieurs Dasytidae> 30
301 Les Adèles unies <plusieurs Adelidae> 30
261 Les Oedemères fauves <Anogcodes, Oedemera> 30
213 Les Chrysomèles unies <Cryptocephalus et autres> 30
298 Les Hespéries brunes sans taches <Carcharodus ... 29
225 Le Petit Capricorne <Cerambyx scopolii> 29
370 L'Aurore (mâle) <Anthocharis cardamines> 28
270 Les Mylabres à points <Mylabris et autres> 28
236 Les Syrphes aux fémurs enflés 28
348 L'Araignée crabe Runcinia <Runcinia grammica> 28
255 Les Tachinaires difficiles à déterminer 28
309 Le Pélopée à pattes noir et jaune <Sceliphron ... 27
347 Le Trichopode <Trichopoda pennipes> 27
397 Le Gamma et autres <Autographa gamma et autres> 27
297 Le Citron de Provence (mâle) <Gonepteryx cleop... 27
293 Les Charançons verts <Phyllobius, Polydrusus> 26
389 Les Sphégiens à abdomen orange et noir <Sphex ... 26
392 Les Mouches Mesembrina <Mesembrina> 26
314 La Punaise guitare <Phymata crassipes> 26
214 Les Taons sombres <plusieurs Tabanidae> 26
376 Les Epeires à dessin de feuille de Chêne <Acul... 26
228 La Ferdinandea cuprea <Ferdinandea cuprea> 25
380 Le Grand Damier <Melitaea phoebe> 25
215 Le Clyte varié <Chlorophorus varius> 25
288 Les Piérides à ailes rondes <Leptidea> 25
323 La Milésie frelon <Milesia crabroniformis> 24
226 Les Taons clairs <Atylotus, Silvius> 24
238 Les Mégachiles à pattes blanches (mâles) <Mega... 23
276 Les Abeilles coucou Melecta <Melecta> 23
336 L'Anthaxie demi-cuivrée et autres <Anthaxia> 23
300 Les Théclas marrons (autres) <Satyrium> 23
260 Les Turquoises <Adscita, Jordanita> 23
388 Le Pentatome ponctué <Graphosoma semipunctatum> 23
381 Le Sphinx gazé <Hemaris fuciformis> 22
217 Les Pyrales pourpres aux dessins jaunes <Pyrau... 22
280 Les Géomètres <Geometridae> 22
289 Les Abeilles à culottes <Dasypoda> 22
353 Les Taupins mouchetés <Elateridae> 22
315 La Lepture à 6 taches <Anoplodera sexguttata> 22
304 Le Clyte figuré <Chlorophorus> 22
379 Le juvénile d'Himacerus <Himacerus mirmicoides> 22
216 Le Bibion précoce (femelle) <Bibio hortulanus> 21
306 Les Oedemères noirs <Oedemera> 21
268 Les Oedemères fauves (Alpes et Pyrénées) <Anog... 21
239 La Mélitée du Plantain <Melitaea cinxia> 21
331 Les Graphomyies <Graphomya> 21
256 Les Cantharides <Cantharis> 21
362 Le Tristan <Aphantopus hyperantus> 19
294 Les Araignées crabes velues <Heriaeus> 19
368 Le Satyre et autres (montagne) <Lasiommata> 19
277 Les Ulidides allongés <Dorycera, Otites> 19
235 Le Cardinal à tête rouge <Pyrochroa serraticor... 19
390 Les Scatopsides <Scatopsidae> 18
264 Les Apions <Curculionidae, Apionidae> 18
275 Les Stratiomes métalliques fins <Sargus et aut... 18
233 L'Anthracine morio <Hemipenthes morio> 18
399 Les Criocères bicolores <Oulema> 18
272 Les Ulidides métalliques <Physophora et autres> 18
354 Les Ammophiles <Ammophila, Hoplammophila> 17
339 Les Sciarides <Sciaridae> 17
359 Les Collemboles <Collembola> 17
227 Les Malachides à thorax rouge <Ebaeus> 17
394 La Scolie des jardins (femelle) <Megascolia ma... 16
352 L'Eumène unguiculé <Delta unguiculatum> 16
242 Les Lépidoptères difficiles à déterminer <Lepi... 16
312 Les Chrysomèles bicolores <Chrysomelidae> 16
337 Le Sphinx pygmée <Thyris fenestrella> 16
266 Les Apollons <Parnassius> 15
382 Les Théclas verts (Méditerranée) <Callophrys> 15
344 L'Amaryllis et l'Ocelle de la Canche <Pyronia> 15
329 Les Stratiomes blanc et noir <Nemotelus> 15
290 La Lepture à suture noire <Stenurella melanura> 15
252 Le Céphale <Coenonympha arcania> 15
342 Les Halictes noir et jaune <Nomioides, Celhali... 14
247 La Volucelle enflée <Volucella inflata> 14
401 Les Malachides rouges <Malachius et autres> 14
229 Les Myctères <Mycterus> 14
371 Les Stratiomes verts <Odontomyia, Oplodontha> 14
287 Les Buprestes à points <Acmaeodera et autres> 14
269 Les Abeilles Panurgus <Panurgus> 14
279 L'Arlequinette jaune <Emmelia trabealis> 14
364 Les Lycides <Lycidae> 14
343 L'Echiquier d'Ibérie <Melanargia lachesis> 13
234 Les Bourdons jaune et noir <Bombus> 13
372 La Lepture rouge (femelle) <Stictoleptura rubra> 13
210 Le Grand Nègre des bois <Minois dryas> 13
384 La Grande Tortue <Nymphalis polychloros> 13
340 Les Azurés bleus sans chevrons oranges <Polyom... 13
258 Les Azurés à taches bleues brillantes <Plebeius> 12
311 Les Tenthrèdes (autres) 11
274 L'Andrène des fleurs <Andrena florea> 11
363 Les Syrphes aux antennes à bout blanc <Callicera> 11
325 Le Clairon à 8 points <Trichodes octopunctatus> 11
322 La Virgule <Hesperia comma> 11
333 Le Clairon commun <Trichodes leucopsideus> 11
378 Les Cydnides unis <Cydnidae> 10
212 Les Longicornes noirs au thorax rouge <Canthar... 10
360 Le Myrtil et autres (Méditerranée) <Maniola ju... 10
386 Les Ephémères <Ephemeroptera> 10
320 Les Azurés marrons sans chevrons oranges <Cupi... 10
402 Les Oedemères variés <Anogcodes, Ischnomera> 10
257 Les Sapygides <Sapigidae> 10
282 Les Cétoines sombres glabres <Protaetia> 10
281 Les Cimbicides <Cimbicidae> 10
278 Le Cuivré de la Verge d'or (mâle) <Lycaena vir... 10
321 L'Ocelle rubanné <Pyronia bathseba> 10
262 Les Oedemères fauves (de méditerranée) <Anogco... 10
367 Les Molorches et autres <Glaphyra et autres> 9
355 Les Stratiomes jaune et noir <Stratiomys> 9
250 Le Cryptocéphale à bandes blanches <Cryptoceph... 9
245 Les Buprestes unis brillants <Anthaxia et autres> 9
291 L'Anthaxie hongroise (mâle) et autres <Anthaxia> 9
219 La Carte géographique forme orangé <Araschnia ... 9
332 Les Charançons longs <Lixus et autres> 8
303 Les Céphides (autres) <Cephidae> 8
305 Les Taupins rouges <Ampedus et autres> 8
271 Les Cassides <Cassida> 8
218 Le Cardinal <Argynnis pandora> 8
209 L'Andrène à points blancs <Andrena albopunctata> 8
346 Les Taons aux ailes tachetées <Chrysops> 8
263 Les Clytres et autres <Clytra et autres> 7
393 Les Hespéries brunes à taches <Pyrgus et autres> 7
273 La Lucine <Hamearis lucina> 7
383 Les Lithosies et Manteaux <Eilema> 7
377 Les Longicornes entièrement fauves <Cantharis,... 7
375 Le Géomètre à barreaux <Chiasmia clathrata> 7
237 Les Balanins <Curculio et autres> 7
385 Les Araignées crabes Diaea <Diaea> 7
396 Les Hespéries brunes à taches (montagne) <Pyrg... 7
369 Les Tenthrèdes noires <Allantus et autres> 7
221 Les Araignées crabes minces <Tibellus, Paratib... 7
341 Le Damier de la Succise <Euphydryas aurinia> 7
307 Les Agapanthies fauves <Agapanthia> 7
224 Le Chrysotoxe à double ceinture <Chrysotoxum b... 7
327 La Rosette <Miltochrista miniata> 7
318 Le Sphinx-Bourdon <Hemaris tityus> 7
267 Les Sablés <Polyommatus> 6
254 La Punaise Ancyrosoma <Ancyrosoma leucogrammes> 6
220 Le Grillon d'Italie <Oecanthus pellucens> 6
248 Les Chrysomèles Oulema bleues <Oulema> 6
395 Les Abeilles coucou noir et blanc à pattes rou... 6
319 Les Craches-sang <Timarcha> 6
366 Le Thécla des Nerpruns <Satyrium spini> 6
265 Les Tenthrèdes vert et noir <Tenthredo, Rhogog... 6
349 Le Thécla du Bouleau <Thecla betulae> 6
317 Le Cuivré de la Verge d'or (femelle) <Lycaena ... 6
356 Les Taupins (autres) 6
246 Les Zygènes rouges <Zygaena> 6
374 Les Cerocomes <Cerocoma> 6
283 La Panthère <Pseudopanthera macularia> 6
284 La Diane <Zerynthia polyxena> 6
241 L'Agapanthie des Chardons <Agapanthia cardui> 6
328 Le Clyte à 3 bandes <Chlorophorus trifasciatus> 6
338 La Milésie vespiforme <Temnostoma vespiforme> 6
222 Le Bombyle Atra <Bombylella atra> 6
251 L'Echancré <Libythea celtis> 5
295 Les Cydnides à motifs <Cydnidae> 5
253 La Pyrale de l'Ortie <Eurrhypara hortulata> 5
345 Le Cardinal à tête noire <Pyrochroa coccinea> 5
387 Le Fadet des garrigues <Coenonympha dorus> 5
351 Les Sténoptères noirs <Stenopterus> 5
223 L'Azuré des Cytises <Glaucopsyche alexis> 5
299 La Phytoécie bleuâtre <Opsilia coerulescens> 5
334 Le Gaurotes vierge <Gaurotes virginea> 5
286 Les Syrphes Anasimyia <Anasimyia> 5
296 Le Thécla de l'Orme <Satyrium w-album> 5
335 La Vadonie à 1 point <Vadonia unipunctata> 5
259 L'Azuré du Thym (mâle) <Pseudophilotes baton> 4
In [5]:

The class distribution is an almost perfect power law.

In [6]:
import sys  


plt.figure(figsize=(18, 5))

x = np.arange(len(labels_counts_df))
plt.bar(x, np.log10(labels_counts_df['count']))
plt.xticks(x + 0.5, labels_counts_df['taxa_name'], rotation=90, fontsize=1);

It is worthwhile to look at some image panels, grouped by label.

In [7]:
nb_rows = 4
nb_cols = 4
nb_elements = nb_rows * nb_cols
# change the label here to see other classes
label = 1

taxa_name    Les Guêpes Vespula <Vespula, Dolichovespula>
count                                                 317
Name: 1, dtype: object
In [8]:
X_given_label = X[y==label]

subsample = np.random.choice(
    X_given_label, replace=False, size=min(nb_elements, len(X_given_label)))

fig = plt.figure(figsize=(10, 10))
grid = AxesGrid(fig, 111, # similar to subplot(141)
                nrows_ncols = (nb_rows, nb_cols),
                axes_pad = 0.05,
                label_mode = "1",
for i, image_id in enumerate(subsample):
    filename = 'data/imgs/{}'.format(image_id)
    image = imread(filename)
    im = grid[i].imshow(image/255.)