Yapp99 commited on
Commit
f2ba46f
·
1 Parent(s): 475c7dc

Evaluation 2

Browse files
Files changed (1) hide show
  1. S6_Evaluation 2.ipynb +1285 -0
S6_Evaluation 2.ipynb ADDED
@@ -0,0 +1,1285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import torch\n",
10
+ "import os\n",
11
+ "from tqdm import tqdm\n",
12
+ "from S1_CNN_Model import CNN_Model\n",
13
+ "from S2_TimberDataset import TimberDataset, compile_image_df\n",
14
+ "from S3_intermediateDataset import build_intermediate_dataset_if_not_exists, intermediate_dataset\n",
15
+ "\n",
16
+ "from torch.utils.data import DataLoader\n",
17
+ "from torchvision import transforms"
18
+ ]
19
+ },
20
+ {
21
+ "cell_type": "code",
22
+ "execution_count": 2,
23
+ "metadata": {},
24
+ "outputs": [],
25
+ "source": [
26
+ "test_df, _ = compile_image_df(\"data/image/test\", split_at=1.0)\n",
27
+ "\n",
28
+ "def listdir_full(path: str) -> list[str]:\n",
29
+ " return [f\"{path}/{p}\" for p in os.listdir(path)]\n",
30
+ "\n",
31
+ "transform = transforms.Compose([\n",
32
+ " transforms.Resize((320,320)),\n",
33
+ " transforms.ToTensor(),\n",
34
+ "])\n",
35
+ "\n",
36
+ "test_loader = DataLoader(TimberDataset(test_df, is_train=True,transform=transform),\n",
37
+ " shuffle=True,\n",
38
+ " batch_size=12)\n",
39
+ "\n",
40
+ "build_intermediate_dataset_if_not_exists(lambda x:x, \"test\", test_loader)\n",
41
+ "test_loader = intermediate_dataset(\"test\") "
42
+ ]
43
+ },
44
+ {
45
+ "cell_type": "code",
46
+ "execution_count": 3,
47
+ "metadata": {},
48
+ "outputs": [],
49
+ "source": [
50
+ "import gdown\n",
51
+ "\n",
52
+ "device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
53
+ "MODEL_LINK = \"https://drive.google.com/file/d/18-t2jMpXLxtqE-8Bu0_NNNuie_mguSON/view?usp=sharing\"\n",
54
+ "MODEL_PATH = \"model.pt\"\n",
55
+ "\n",
56
+ "if not os.path.exists(MODEL_PATH):\n",
57
+ " print(\"Downloading model . . . \")\n",
58
+ " gdown.download(MODEL_LINK,MODEL_PATH,fuzzy=True)\n",
59
+ "\n",
60
+ "model:CNN_Model = torch.load(MODEL_PATH)\n",
61
+ "model.to(device)\n",
62
+ "model.device = device"
63
+ ]
64
+ },
65
+ {
66
+ "cell_type": "code",
67
+ "execution_count": 86,
68
+ "metadata": {},
69
+ "outputs": [
70
+ {
71
+ "name": "stderr",
72
+ "output_type": "stream",
73
+ "text": [
74
+ " \r"
75
+ ]
76
+ }
77
+ ],
78
+ "source": [
79
+ "from collections import Counter\n",
80
+ "\n",
81
+ "n_correct = 0\n",
82
+ "n_samples = 0\n",
83
+ "results = Counter()\n",
84
+ "\n",
85
+ "with torch.no_grad(): \n",
86
+ " with tqdm(test_loader, position=0, leave=False) as pb:\n",
87
+ " for images, labels in pb:\n",
88
+ " images = images.reshape(images.shape[1:])\n",
89
+ " labels = labels.reshape(labels.shape[1:])\n",
90
+ "\n",
91
+ " x = model.forward(images)\n",
92
+ " _, predictions = torch.max(x,1)\n",
93
+ " n_samples += labels.shape[0]\n",
94
+ " n_correct += (predictions == labels).sum().item()\n",
95
+ "\n",
96
+ " results += Counter(zip(predictions.cpu().numpy(), labels.cpu().numpy()))\n",
97
+ " pb.set_description(f\"{n_correct}/{n_samples} correct predictions ({n_correct/n_samples*100 :.2f}%)\")"
98
+ ]
99
+ },
100
+ {
101
+ "cell_type": "code",
102
+ "execution_count": 87,
103
+ "metadata": {},
104
+ "outputs": [],
105
+ "source": [
106
+ "import numpy as np\n",
107
+ "N_CLASS = len(os.listdir(\"data/image/test\"))\n",
108
+ "class_count = [len(os.listdir(s)) for s in listdir_full(\"data/image/test\")]\n",
109
+ "ids = range(N_CLASS)\n",
110
+ "conf_mat = np.empty((N_CLASS,N_CLASS), dtype=np.int64)\n",
111
+ "for x in ids:\n",
112
+ " for y in ids:\n",
113
+ " conf_mat[x,y] = results[(x,y)]\n",
114
+ "TOTAL = np.sum(class_count)\n",
115
+ "\n",
116
+ "tp = [conf_mat[i,i] for i in ids]\n",
117
+ "fp = [np.sum(conf_mat[i,:]) - tp[i] for i in ids]\n",
118
+ "fn = [np.sum(conf_mat[:,i]) - tp[i] for i in ids]\n",
119
+ "tn = [TOTAL - class_count[i] - fp[i] for i in ids]\n",
120
+ "\n",
121
+ "def format_(n): return int(n * 100) / 100\n",
122
+ "\n",
123
+ "accuracy = [format_((tp[i] + tn[i])/TOTAL) for i in ids]\n",
124
+ "recall = [format_(tp[i] / (tp[i] + fn[i])) for i in ids]\n",
125
+ "precision = [format_(tp[i] / (tp[i] + fp[i])) for i in ids]\n",
126
+ "f1s = [format_(2 * precision[i] * recall[i] / (precision[i] + recall[i])) for i in ids]"
127
+ ]
128
+ },
129
+ {
130
+ "cell_type": "code",
131
+ "execution_count": 88,
132
+ "metadata": {},
133
+ "outputs": [
134
+ {
135
+ "data": {
136
+ "text/html": [
137
+ "<div>\n",
138
+ "<style scoped>\n",
139
+ " .dataframe tbody tr th:only-of-type {\n",
140
+ " vertical-align: middle;\n",
141
+ " }\n",
142
+ "\n",
143
+ " .dataframe tbody tr th {\n",
144
+ " vertical-align: top;\n",
145
+ " }\n",
146
+ "\n",
147
+ " .dataframe thead th {\n",
148
+ " text-align: right;\n",
149
+ " }\n",
150
+ "</style>\n",
151
+ "<table border=\"1\" class=\"dataframe\">\n",
152
+ " <thead>\n",
153
+ " <tr style=\"text-align: right;\">\n",
154
+ " <th></th>\n",
155
+ " <th>Name</th>\n",
156
+ " <th>Accuracy</th>\n",
157
+ " <th>Recall</th>\n",
158
+ " <th>Precision</th>\n",
159
+ " <th>F1-Score</th>\n",
160
+ " <th>N Samples</th>\n",
161
+ " </tr>\n",
162
+ " </thead>\n",
163
+ " <tbody>\n",
164
+ " <tr>\n",
165
+ " <th>0</th>\n",
166
+ " <td>Acrocarpus fraxinifolius</td>\n",
167
+ " <td>0.99</td>\n",
168
+ " <td>0.78</td>\n",
169
+ " <td>0.94</td>\n",
170
+ " <td>0.85</td>\n",
171
+ " <td>60</td>\n",
172
+ " </tr>\n",
173
+ " <tr>\n",
174
+ " <th>1</th>\n",
175
+ " <td>Araucaria angustifolia</td>\n",
176
+ " <td>0.99</td>\n",
177
+ " <td>0.94</td>\n",
178
+ " <td>0.98</td>\n",
179
+ " <td>0.95</td>\n",
180
+ " <td>84</td>\n",
181
+ " </tr>\n",
182
+ " <tr>\n",
183
+ " <th>2</th>\n",
184
+ " <td>Aspidosperma polyneuron</td>\n",
185
+ " <td>0.98</td>\n",
186
+ " <td>0.50</td>\n",
187
+ " <td>0.83</td>\n",
188
+ " <td>0.62</td>\n",
189
+ " <td>72</td>\n",
190
+ " </tr>\n",
191
+ " <tr>\n",
192
+ " <th>3</th>\n",
193
+ " <td>Bagassa guianensis</td>\n",
194
+ " <td>0.99</td>\n",
195
+ " <td>0.87</td>\n",
196
+ " <td>0.84</td>\n",
197
+ " <td>0.85</td>\n",
198
+ " <td>120</td>\n",
199
+ " </tr>\n",
200
+ " <tr>\n",
201
+ " <th>4</th>\n",
202
+ " <td>Balfourodendron riedelianum</td>\n",
203
+ " <td>0.99</td>\n",
204
+ " <td>0.82</td>\n",
205
+ " <td>0.90</td>\n",
206
+ " <td>0.85</td>\n",
207
+ " <td>84</td>\n",
208
+ " </tr>\n",
209
+ " <tr>\n",
210
+ " <th>5</th>\n",
211
+ " <td>Bertholethia excelsa</td>\n",
212
+ " <td>0.99</td>\n",
213
+ " <td>0.99</td>\n",
214
+ " <td>0.86</td>\n",
215
+ " <td>0.92</td>\n",
216
+ " <td>120</td>\n",
217
+ " </tr>\n",
218
+ " <tr>\n",
219
+ " <th>6</th>\n",
220
+ " <td>Bowdichia sp</td>\n",
221
+ " <td>0.99</td>\n",
222
+ " <td>0.84</td>\n",
223
+ " <td>0.80</td>\n",
224
+ " <td>0.81</td>\n",
225
+ " <td>84</td>\n",
226
+ " </tr>\n",
227
+ " <tr>\n",
228
+ " <th>7</th>\n",
229
+ " <td>Brosimum paraense</td>\n",
230
+ " <td>0.99</td>\n",
231
+ " <td>1.00</td>\n",
232
+ " <td>0.99</td>\n",
233
+ " <td>0.99</td>\n",
234
+ " <td>120</td>\n",
235
+ " </tr>\n",
236
+ " <tr>\n",
237
+ " <th>8</th>\n",
238
+ " <td>Carapa guianensis</td>\n",
239
+ " <td>0.99</td>\n",
240
+ " <td>0.84</td>\n",
241
+ " <td>0.98</td>\n",
242
+ " <td>0.90</td>\n",
243
+ " <td>108</td>\n",
244
+ " </tr>\n",
245
+ " <tr>\n",
246
+ " <th>9</th>\n",
247
+ " <td>Cariniana estrellensis</td>\n",
248
+ " <td>0.98</td>\n",
249
+ " <td>0.93</td>\n",
250
+ " <td>0.77</td>\n",
251
+ " <td>0.84</td>\n",
252
+ " <td>120</td>\n",
253
+ " </tr>\n",
254
+ " <tr>\n",
255
+ " <th>10</th>\n",
256
+ " <td>Cedrela fissilis</td>\n",
257
+ " <td>0.99</td>\n",
258
+ " <td>0.93</td>\n",
259
+ " <td>1.00</td>\n",
260
+ " <td>0.96</td>\n",
261
+ " <td>72</td>\n",
262
+ " </tr>\n",
263
+ " <tr>\n",
264
+ " <th>11</th>\n",
265
+ " <td>Cedrelinga catenaeformis</td>\n",
266
+ " <td>0.99</td>\n",
267
+ " <td>0.71</td>\n",
268
+ " <td>1.00</td>\n",
269
+ " <td>0.83</td>\n",
270
+ " <td>96</td>\n",
271
+ " </tr>\n",
272
+ " <tr>\n",
273
+ " <th>12</th>\n",
274
+ " <td>Cordia goeldiana</td>\n",
275
+ " <td>0.99</td>\n",
276
+ " <td>0.96</td>\n",
277
+ " <td>1.00</td>\n",
278
+ " <td>0.97</td>\n",
279
+ " <td>120</td>\n",
280
+ " </tr>\n",
281
+ " <tr>\n",
282
+ " <th>13</th>\n",
283
+ " <td>Cordia sp</td>\n",
284
+ " <td>0.99</td>\n",
285
+ " <td>0.95</td>\n",
286
+ " <td>0.97</td>\n",
287
+ " <td>0.95</td>\n",
288
+ " <td>84</td>\n",
289
+ " </tr>\n",
290
+ " <tr>\n",
291
+ " <th>14</th>\n",
292
+ " <td>Couratari sp</td>\n",
293
+ " <td>1.00</td>\n",
294
+ " <td>1.00</td>\n",
295
+ " <td>1.00</td>\n",
296
+ " <td>1.00</td>\n",
297
+ " <td>84</td>\n",
298
+ " </tr>\n",
299
+ " <tr>\n",
300
+ " <th>15</th>\n",
301
+ " <td>Dipteryx sp</td>\n",
302
+ " <td>0.99</td>\n",
303
+ " <td>0.97</td>\n",
304
+ " <td>0.93</td>\n",
305
+ " <td>0.94</td>\n",
306
+ " <td>120</td>\n",
307
+ " </tr>\n",
308
+ " <tr>\n",
309
+ " <th>16</th>\n",
310
+ " <td>Erisma uncinatum</td>\n",
311
+ " <td>0.99</td>\n",
312
+ " <td>0.98</td>\n",
313
+ " <td>0.88</td>\n",
314
+ " <td>0.92</td>\n",
315
+ " <td>84</td>\n",
316
+ " </tr>\n",
317
+ " <tr>\n",
318
+ " <th>17</th>\n",
319
+ " <td>Eucalyptus sp</td>\n",
320
+ " <td>0.99</td>\n",
321
+ " <td>0.93</td>\n",
322
+ " <td>0.95</td>\n",
323
+ " <td>0.93</td>\n",
324
+ " <td>120</td>\n",
325
+ " </tr>\n",
326
+ " <tr>\n",
327
+ " <th>18</th>\n",
328
+ " <td>Euxylophora paraensis</td>\n",
329
+ " <td>0.99</td>\n",
330
+ " <td>0.98</td>\n",
331
+ " <td>0.93</td>\n",
332
+ " <td>0.95</td>\n",
333
+ " <td>72</td>\n",
334
+ " </tr>\n",
335
+ " <tr>\n",
336
+ " <th>19</th>\n",
337
+ " <td>Goupia glabra</td>\n",
338
+ " <td>0.99</td>\n",
339
+ " <td>0.87</td>\n",
340
+ " <td>0.85</td>\n",
341
+ " <td>0.85</td>\n",
342
+ " <td>120</td>\n",
343
+ " </tr>\n",
344
+ " <tr>\n",
345
+ " <th>20</th>\n",
346
+ " <td>Grevilea robusta</td>\n",
347
+ " <td>0.99</td>\n",
348
+ " <td>0.95</td>\n",
349
+ " <td>0.75</td>\n",
350
+ " <td>0.83</td>\n",
351
+ " <td>96</td>\n",
352
+ " </tr>\n",
353
+ " <tr>\n",
354
+ " <th>21</th>\n",
355
+ " <td>Hura crepitans</td>\n",
356
+ " <td>0.99</td>\n",
357
+ " <td>1.00</td>\n",
358
+ " <td>0.89</td>\n",
359
+ " <td>0.94</td>\n",
360
+ " <td>60</td>\n",
361
+ " </tr>\n",
362
+ " <tr>\n",
363
+ " <th>22</th>\n",
364
+ " <td>Hymenaea sp</td>\n",
365
+ " <td>1.00</td>\n",
366
+ " <td>1.00</td>\n",
367
+ " <td>1.00</td>\n",
368
+ " <td>1.00</td>\n",
369
+ " <td>96</td>\n",
370
+ " </tr>\n",
371
+ " <tr>\n",
372
+ " <th>23</th>\n",
373
+ " <td>Hymenolobium petraeum</td>\n",
374
+ " <td>0.99</td>\n",
375
+ " <td>1.00</td>\n",
376
+ " <td>0.96</td>\n",
377
+ " <td>0.97</td>\n",
378
+ " <td>120</td>\n",
379
+ " </tr>\n",
380
+ " <tr>\n",
381
+ " <th>24</th>\n",
382
+ " <td>Laurus nobilis</td>\n",
383
+ " <td>0.99</td>\n",
384
+ " <td>0.97</td>\n",
385
+ " <td>0.98</td>\n",
386
+ " <td>0.97</td>\n",
387
+ " <td>108</td>\n",
388
+ " </tr>\n",
389
+ " <tr>\n",
390
+ " <th>25</th>\n",
391
+ " <td>Machaerium sp</td>\n",
392
+ " <td>0.99</td>\n",
393
+ " <td>0.91</td>\n",
394
+ " <td>0.95</td>\n",
395
+ " <td>0.92</td>\n",
396
+ " <td>72</td>\n",
397
+ " </tr>\n",
398
+ " <tr>\n",
399
+ " <th>26</th>\n",
400
+ " <td>Manilkara huberi</td>\n",
401
+ " <td>0.99</td>\n",
402
+ " <td>0.97</td>\n",
403
+ " <td>0.98</td>\n",
404
+ " <td>0.97</td>\n",
405
+ " <td>72</td>\n",
406
+ " </tr>\n",
407
+ " <tr>\n",
408
+ " <th>27</th>\n",
409
+ " <td>Melia azedarach</td>\n",
410
+ " <td>1.00</td>\n",
411
+ " <td>1.00</td>\n",
412
+ " <td>1.00</td>\n",
413
+ " <td>1.00</td>\n",
414
+ " <td>60</td>\n",
415
+ " </tr>\n",
416
+ " <tr>\n",
417
+ " <th>28</th>\n",
418
+ " <td>Mezilaurus itauba</td>\n",
419
+ " <td>0.99</td>\n",
420
+ " <td>1.00</td>\n",
421
+ " <td>0.96</td>\n",
422
+ " <td>0.97</td>\n",
423
+ " <td>120</td>\n",
424
+ " </tr>\n",
425
+ " <tr>\n",
426
+ " <th>29</th>\n",
427
+ " <td>Micropholis venulosa</td>\n",
428
+ " <td>1.00</td>\n",
429
+ " <td>1.00</td>\n",
430
+ " <td>1.00</td>\n",
431
+ " <td>1.00</td>\n",
432
+ " <td>72</td>\n",
433
+ " </tr>\n",
434
+ " <tr>\n",
435
+ " <th>30</th>\n",
436
+ " <td>Mimosa scabrella</td>\n",
437
+ " <td>0.99</td>\n",
438
+ " <td>0.91</td>\n",
439
+ " <td>0.81</td>\n",
440
+ " <td>0.85</td>\n",
441
+ " <td>72</td>\n",
442
+ " </tr>\n",
443
+ " <tr>\n",
444
+ " <th>31</th>\n",
445
+ " <td>Myroxylon balsamum</td>\n",
446
+ " <td>0.99</td>\n",
447
+ " <td>0.97</td>\n",
448
+ " <td>0.94</td>\n",
449
+ " <td>0.95</td>\n",
450
+ " <td>48</td>\n",
451
+ " </tr>\n",
452
+ " <tr>\n",
453
+ " <th>32</th>\n",
454
+ " <td>Ocotea porosa</td>\n",
455
+ " <td>1.00</td>\n",
456
+ " <td>1.00</td>\n",
457
+ " <td>1.00</td>\n",
458
+ " <td>1.00</td>\n",
459
+ " <td>72</td>\n",
460
+ " </tr>\n",
461
+ " <tr>\n",
462
+ " <th>33</th>\n",
463
+ " <td>Peltogyne sp</td>\n",
464
+ " <td>0.99</td>\n",
465
+ " <td>0.86</td>\n",
466
+ " <td>0.86</td>\n",
467
+ " <td>0.85</td>\n",
468
+ " <td>96</td>\n",
469
+ " </tr>\n",
470
+ " <tr>\n",
471
+ " <th>34</th>\n",
472
+ " <td>Pinus sp</td>\n",
473
+ " <td>0.99</td>\n",
474
+ " <td>0.95</td>\n",
475
+ " <td>0.95</td>\n",
476
+ " <td>0.95</td>\n",
477
+ " <td>120</td>\n",
478
+ " </tr>\n",
479
+ " <tr>\n",
480
+ " <th>35</th>\n",
481
+ " <td>Podocarpus lambertii</td>\n",
482
+ " <td>0.99</td>\n",
483
+ " <td>0.91</td>\n",
484
+ " <td>1.00</td>\n",
485
+ " <td>0.95</td>\n",
486
+ " <td>60</td>\n",
487
+ " </tr>\n",
488
+ " <tr>\n",
489
+ " <th>36</th>\n",
490
+ " <td>Pouteria pachycarpa</td>\n",
491
+ " <td>0.99</td>\n",
492
+ " <td>1.00</td>\n",
493
+ " <td>0.96</td>\n",
494
+ " <td>0.97</td>\n",
495
+ " <td>120</td>\n",
496
+ " </tr>\n",
497
+ " <tr>\n",
498
+ " <th>37</th>\n",
499
+ " <td>Swietenia macrophylla</td>\n",
500
+ " <td>0.99</td>\n",
501
+ " <td>0.81</td>\n",
502
+ " <td>0.90</td>\n",
503
+ " <td>0.85</td>\n",
504
+ " <td>108</td>\n",
505
+ " </tr>\n",
506
+ " <tr>\n",
507
+ " <th>38</th>\n",
508
+ " <td>Tabebuia sp</td>\n",
509
+ " <td>0.98</td>\n",
510
+ " <td>0.68</td>\n",
511
+ " <td>0.68</td>\n",
512
+ " <td>0.68</td>\n",
513
+ " <td>60</td>\n",
514
+ " </tr>\n",
515
+ " <tr>\n",
516
+ " <th>39</th>\n",
517
+ " <td>Virola surinamensis</td>\n",
518
+ " <td>0.99</td>\n",
519
+ " <td>0.95</td>\n",
520
+ " <td>0.95</td>\n",
521
+ " <td>0.95</td>\n",
522
+ " <td>72</td>\n",
523
+ " </tr>\n",
524
+ " <tr>\n",
525
+ " <th>40</th>\n",
526
+ " <td>Vochysia sp</td>\n",
527
+ " <td>0.99</td>\n",
528
+ " <td>0.91</td>\n",
529
+ " <td>0.94</td>\n",
530
+ " <td>0.92</td>\n",
531
+ " <td>96</td>\n",
532
+ " </tr>\n",
533
+ " </tbody>\n",
534
+ "</table>\n",
535
+ "</div>"
536
+ ],
537
+ "text/plain": [
538
+ " Name Accuracy Recall Precision F1-Score \\\n",
539
+ "0 Acrocarpus fraxinifolius 0.99 0.78 0.94 0.85 \n",
540
+ "1 Araucaria angustifolia 0.99 0.94 0.98 0.95 \n",
541
+ "2 Aspidosperma polyneuron 0.98 0.50 0.83 0.62 \n",
542
+ "3 Bagassa guianensis 0.99 0.87 0.84 0.85 \n",
543
+ "4 Balfourodendron riedelianum 0.99 0.82 0.90 0.85 \n",
544
+ "5 Bertholethia excelsa 0.99 0.99 0.86 0.92 \n",
545
+ "6 Bowdichia sp 0.99 0.84 0.80 0.81 \n",
546
+ "7 Brosimum paraense 0.99 1.00 0.99 0.99 \n",
547
+ "8 Carapa guianensis 0.99 0.84 0.98 0.90 \n",
548
+ "9 Cariniana estrellensis 0.98 0.93 0.77 0.84 \n",
549
+ "10 Cedrela fissilis 0.99 0.93 1.00 0.96 \n",
550
+ "11 Cedrelinga catenaeformis 0.99 0.71 1.00 0.83 \n",
551
+ "12 Cordia goeldiana 0.99 0.96 1.00 0.97 \n",
552
+ "13 Cordia sp 0.99 0.95 0.97 0.95 \n",
553
+ "14 Couratari sp 1.00 1.00 1.00 1.00 \n",
554
+ "15 Dipteryx sp 0.99 0.97 0.93 0.94 \n",
555
+ "16 Erisma uncinatum 0.99 0.98 0.88 0.92 \n",
556
+ "17 Eucalyptus sp 0.99 0.93 0.95 0.93 \n",
557
+ "18 Euxylophora paraensis 0.99 0.98 0.93 0.95 \n",
558
+ "19 Goupia glabra 0.99 0.87 0.85 0.85 \n",
559
+ "20 Grevilea robusta 0.99 0.95 0.75 0.83 \n",
560
+ "21 Hura crepitans 0.99 1.00 0.89 0.94 \n",
561
+ "22 Hymenaea sp 1.00 1.00 1.00 1.00 \n",
562
+ "23 Hymenolobium petraeum 0.99 1.00 0.96 0.97 \n",
563
+ "24 Laurus nobilis 0.99 0.97 0.98 0.97 \n",
564
+ "25 Machaerium sp 0.99 0.91 0.95 0.92 \n",
565
+ "26 Manilkara huberi 0.99 0.97 0.98 0.97 \n",
566
+ "27 Melia azedarach 1.00 1.00 1.00 1.00 \n",
567
+ "28 Mezilaurus itauba 0.99 1.00 0.96 0.97 \n",
568
+ "29 Micropholis venulosa 1.00 1.00 1.00 1.00 \n",
569
+ "30 Mimosa scabrella 0.99 0.91 0.81 0.85 \n",
570
+ "31 Myroxylon balsamum 0.99 0.97 0.94 0.95 \n",
571
+ "32 Ocotea porosa 1.00 1.00 1.00 1.00 \n",
572
+ "33 Peltogyne sp 0.99 0.86 0.86 0.85 \n",
573
+ "34 Pinus sp 0.99 0.95 0.95 0.95 \n",
574
+ "35 Podocarpus lambertii 0.99 0.91 1.00 0.95 \n",
575
+ "36 Pouteria pachycarpa 0.99 1.00 0.96 0.97 \n",
576
+ "37 Swietenia macrophylla 0.99 0.81 0.90 0.85 \n",
577
+ "38 Tabebuia sp 0.98 0.68 0.68 0.68 \n",
578
+ "39 Virola surinamensis 0.99 0.95 0.95 0.95 \n",
579
+ "40 Vochysia sp 0.99 0.91 0.94 0.92 \n",
580
+ "\n",
581
+ " N Samples \n",
582
+ "0 60 \n",
583
+ "1 84 \n",
584
+ "2 72 \n",
585
+ "3 120 \n",
586
+ "4 84 \n",
587
+ "5 120 \n",
588
+ "6 84 \n",
589
+ "7 120 \n",
590
+ "8 108 \n",
591
+ "9 120 \n",
592
+ "10 72 \n",
593
+ "11 96 \n",
594
+ "12 120 \n",
595
+ "13 84 \n",
596
+ "14 84 \n",
597
+ "15 120 \n",
598
+ "16 84 \n",
599
+ "17 120 \n",
600
+ "18 72 \n",
601
+ "19 120 \n",
602
+ "20 96 \n",
603
+ "21 60 \n",
604
+ "22 96 \n",
605
+ "23 120 \n",
606
+ "24 108 \n",
607
+ "25 72 \n",
608
+ "26 72 \n",
609
+ "27 60 \n",
610
+ "28 120 \n",
611
+ "29 72 \n",
612
+ "30 72 \n",
613
+ "31 48 \n",
614
+ "32 72 \n",
615
+ "33 96 \n",
616
+ "34 120 \n",
617
+ "35 60 \n",
618
+ "36 120 \n",
619
+ "37 108 \n",
620
+ "38 60 \n",
621
+ "39 72 \n",
622
+ "40 96 "
623
+ ]
624
+ },
625
+ "execution_count": 88,
626
+ "metadata": {},
627
+ "output_type": "execute_result"
628
+ },
629
+ {
630
+ "ename": "",
631
+ "evalue": "",
632
+ "output_type": "error",
633
+ "traceback": [
634
+ "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n",
635
+ "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n",
636
+ "\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. \n",
637
+ "\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
638
+ ]
639
+ }
640
+ ],
641
+ "source": [
642
+ "import pandas as pd\n",
643
+ "\n",
644
+ "# Statistics for individual patches\n",
645
+ "zipped = zip(os.listdir(\"data/image/test\"), accuracy, recall, precision, f1s, class_count)\n",
646
+ "pd.DataFrame(zipped, columns=[\"Name\", \"Accuracy\", \"Recall\", \"Precision\", \"F1-Score\", \"N Samples\"])"
647
+ ]
648
+ },
649
+ {
650
+ "cell_type": "code",
651
+ "execution_count": 68,
652
+ "metadata": {},
653
+ "outputs": [
654
+ {
655
+ "name": "stderr",
656
+ "output_type": "stream",
657
+ "text": [
658
+ "100%|██████████| 312/312 [01:19<00:00, 3.92it/s]\n"
659
+ ]
660
+ }
661
+ ],
662
+ "source": [
663
+ "test_loader = DataLoader(TimberDataset(test_df, is_train=True,transform=transform),\n",
664
+ " batch_size=12)\n",
665
+ "\n",
666
+ "build_intermediate_dataset_if_not_exists(lambda x:x, \"test_full\", test_loader)\n",
667
+ "test_loader = intermediate_dataset(\"test_full\") "
668
+ ]
669
+ },
670
+ {
671
+ "cell_type": "code",
672
+ "execution_count": 75,
673
+ "metadata": {},
674
+ "outputs": [
675
+ {
676
+ "name": "stderr",
677
+ "output_type": "stream",
678
+ "text": [
679
+ " \r"
680
+ ]
681
+ }
682
+ ],
683
+ "source": [
684
+ "n_correct = 0\n",
685
+ "n_samples = 0\n",
686
+ "results = Counter()\n",
687
+ "\n",
688
+ "with torch.no_grad(): \n",
689
+ " with tqdm(test_loader, position=0, leave = False) as pb:\n",
690
+ " for images, labels in pb:\n",
691
+ " images = images.reshape(images.shape[1:])\n",
692
+ " labels = labels.reshape(labels.shape[1:])\n",
693
+ "\n",
694
+ " assert torch.all(labels == labels[0]).item()\n",
695
+ " label = labels[0]\n",
696
+ "\n",
697
+ " x = model.forward(images)\n",
698
+ " _, preds = torch.max(x,1)\n",
699
+ " pred = torch.mode(preds,0).values\n",
700
+ " \n",
701
+ " n_samples += 1\n",
702
+ " n_correct += (pred == label).item()\n",
703
+ " results += Counter({(pred.item(), label.item()) : 1})\n",
704
+ "\n",
705
+ " pb.set_description(f\"{n_correct}/{n_samples} correct predictions ({n_correct/n_samples*100 :.2f}%)\")"
706
+ ]
707
+ },
708
+ {
709
+ "cell_type": "code",
710
+ "execution_count": 82,
711
+ "metadata": {},
712
+ "outputs": [
713
+ {
714
+ "data": {
715
+ "text/plain": [
716
+ "312"
717
+ ]
718
+ },
719
+ "execution_count": 82,
720
+ "metadata": {},
721
+ "output_type": "execute_result"
722
+ }
723
+ ],
724
+ "source": [
725
+ "len(results)"
726
+ ]
727
+ },
728
+ {
729
+ "cell_type": "code",
730
+ "execution_count": 83,
731
+ "metadata": {},
732
+ "outputs": [],
733
+ "source": [
734
+ "import numpy as np\n",
735
+ "N_CLASS = len(os.listdir(\"data/image/test_full\"))\n",
736
+ "class_count = [len(os.listdir(s)) for s in listdir_full(\"data/image/test_full\")]\n",
737
+ "ids = range(N_CLASS)\n",
738
+ "conf_mat = np.empty((N_CLASS,N_CLASS), dtype=np.int64)\n",
739
+ "for x in ids:\n",
740
+ " for y in ids:\n",
741
+ " conf_mat[x,y] = results[(x,y)]\n",
742
+ "TOTAL = np.sum(class_count)\n",
743
+ "\n",
744
+ "tp = [conf_mat[i,i] for i in ids]\n",
745
+ "fp = [np.sum(conf_mat[i,:]) - tp[i] for i in ids]\n",
746
+ "fn = [np.sum(conf_mat[:,i]) - tp[i] for i in ids]\n",
747
+ "tn = [TOTAL - class_count[i] - fp[i] for i in ids]\n",
748
+ "\n",
749
+ "def format_(n): return int(n * 100) / 100\n",
750
+ "\n",
751
+ "accuracy = [format_((tp[i] + tn[i])/TOTAL) for i in ids]\n",
752
+ "recall = [format_(tp[i] / (tp[i] + fn[i])) for i in ids]\n",
753
+ "precision = [format_(tp[i] / (tp[i] + fp[i])) for i in ids]\n",
754
+ "f1s = [format_(2 * precision[i] * recall[i] / (precision[i] + recall[i])) for i in ids]"
755
+ ]
756
+ },
757
+ {
758
+ "cell_type": "code",
759
+ "execution_count": 85,
760
+ "metadata": {},
761
+ "outputs": [
762
+ {
763
+ "data": {
764
+ "text/html": [
765
+ "<div>\n",
766
+ "<style scoped>\n",
767
+ " .dataframe tbody tr th:only-of-type {\n",
768
+ " vertical-align: middle;\n",
769
+ " }\n",
770
+ "\n",
771
+ " .dataframe tbody tr th {\n",
772
+ " vertical-align: top;\n",
773
+ " }\n",
774
+ "\n",
775
+ " .dataframe thead th {\n",
776
+ " text-align: right;\n",
777
+ " }\n",
778
+ "</style>\n",
779
+ "<table border=\"1\" class=\"dataframe\">\n",
780
+ " <thead>\n",
781
+ " <tr style=\"text-align: right;\">\n",
782
+ " <th></th>\n",
783
+ " <th>Name</th>\n",
784
+ " <th>Accuracy</th>\n",
785
+ " <th>Recall</th>\n",
786
+ " <th>Precision</th>\n",
787
+ " <th>F1-Score</th>\n",
788
+ " <th>N Samples</th>\n",
789
+ " </tr>\n",
790
+ " </thead>\n",
791
+ " <tbody>\n",
792
+ " <tr>\n",
793
+ " <th>0</th>\n",
794
+ " <td>Acrocarpus fraxinifolius</td>\n",
795
+ " <td>1.00</td>\n",
796
+ " <td>1.00</td>\n",
797
+ " <td>1.00</td>\n",
798
+ " <td>1.00</td>\n",
799
+ " <td>5</td>\n",
800
+ " </tr>\n",
801
+ " <tr>\n",
802
+ " <th>1</th>\n",
803
+ " <td>Araucaria angustifolia</td>\n",
804
+ " <td>1.00</td>\n",
805
+ " <td>1.00</td>\n",
806
+ " <td>1.00</td>\n",
807
+ " <td>1.00</td>\n",
808
+ " <td>7</td>\n",
809
+ " </tr>\n",
810
+ " <tr>\n",
811
+ " <th>2</th>\n",
812
+ " <td>Aspidosperma polyneuron</td>\n",
813
+ " <td>0.99</td>\n",
814
+ " <td>0.50</td>\n",
815
+ " <td>1.00</td>\n",
816
+ " <td>0.66</td>\n",
817
+ " <td>6</td>\n",
818
+ " </tr>\n",
819
+ " <tr>\n",
820
+ " <th>3</th>\n",
821
+ " <td>Bagassa guianensis</td>\n",
822
+ " <td>0.99</td>\n",
823
+ " <td>0.90</td>\n",
824
+ " <td>0.90</td>\n",
825
+ " <td>0.90</td>\n",
826
+ " <td>10</td>\n",
827
+ " </tr>\n",
828
+ " <tr>\n",
829
+ " <th>4</th>\n",
830
+ " <td>Balfourodendron riedelianum</td>\n",
831
+ " <td>0.99</td>\n",
832
+ " <td>1.00</td>\n",
833
+ " <td>0.87</td>\n",
834
+ " <td>0.93</td>\n",
835
+ " <td>7</td>\n",
836
+ " </tr>\n",
837
+ " <tr>\n",
838
+ " <th>5</th>\n",
839
+ " <td>Bertholethia excelsa</td>\n",
840
+ " <td>0.99</td>\n",
841
+ " <td>1.00</td>\n",
842
+ " <td>0.90</td>\n",
843
+ " <td>0.94</td>\n",
844
+ " <td>10</td>\n",
845
+ " </tr>\n",
846
+ " <tr>\n",
847
+ " <th>6</th>\n",
848
+ " <td>Bowdichia sp</td>\n",
849
+ " <td>0.99</td>\n",
850
+ " <td>1.00</td>\n",
851
+ " <td>0.87</td>\n",
852
+ " <td>0.93</td>\n",
853
+ " <td>7</td>\n",
854
+ " </tr>\n",
855
+ " <tr>\n",
856
+ " <th>7</th>\n",
857
+ " <td>Brosimum paraense</td>\n",
858
+ " <td>1.00</td>\n",
859
+ " <td>1.00</td>\n",
860
+ " <td>1.00</td>\n",
861
+ " <td>1.00</td>\n",
862
+ " <td>10</td>\n",
863
+ " </tr>\n",
864
+ " <tr>\n",
865
+ " <th>8</th>\n",
866
+ " <td>Carapa guianensis</td>\n",
867
+ " <td>1.00</td>\n",
868
+ " <td>1.00</td>\n",
869
+ " <td>1.00</td>\n",
870
+ " <td>1.00</td>\n",
871
+ " <td>9</td>\n",
872
+ " </tr>\n",
873
+ " <tr>\n",
874
+ " <th>9</th>\n",
875
+ " <td>Cariniana estrellensis</td>\n",
876
+ " <td>0.99</td>\n",
877
+ " <td>1.00</td>\n",
878
+ " <td>0.83</td>\n",
879
+ " <td>0.90</td>\n",
880
+ " <td>10</td>\n",
881
+ " </tr>\n",
882
+ " <tr>\n",
883
+ " <th>10</th>\n",
884
+ " <td>Cedrela fissilis</td>\n",
885
+ " <td>1.00</td>\n",
886
+ " <td>1.00</td>\n",
887
+ " <td>1.00</td>\n",
888
+ " <td>1.00</td>\n",
889
+ " <td>6</td>\n",
890
+ " </tr>\n",
891
+ " <tr>\n",
892
+ " <th>11</th>\n",
893
+ " <td>Cedrelinga catenaeformis</td>\n",
894
+ " <td>0.99</td>\n",
895
+ " <td>0.87</td>\n",
896
+ " <td>1.00</td>\n",
897
+ " <td>0.93</td>\n",
898
+ " <td>8</td>\n",
899
+ " </tr>\n",
900
+ " <tr>\n",
901
+ " <th>12</th>\n",
902
+ " <td>Cordia goeldiana</td>\n",
903
+ " <td>1.00</td>\n",
904
+ " <td>1.00</td>\n",
905
+ " <td>1.00</td>\n",
906
+ " <td>1.00</td>\n",
907
+ " <td>10</td>\n",
908
+ " </tr>\n",
909
+ " <tr>\n",
910
+ " <th>13</th>\n",
911
+ " <td>Cordia sp</td>\n",
912
+ " <td>1.00</td>\n",
913
+ " <td>1.00</td>\n",
914
+ " <td>1.00</td>\n",
915
+ " <td>1.00</td>\n",
916
+ " <td>7</td>\n",
917
+ " </tr>\n",
918
+ " <tr>\n",
919
+ " <th>14</th>\n",
920
+ " <td>Couratari sp</td>\n",
921
+ " <td>1.00</td>\n",
922
+ " <td>1.00</td>\n",
923
+ " <td>1.00</td>\n",
924
+ " <td>1.00</td>\n",
925
+ " <td>7</td>\n",
926
+ " </tr>\n",
927
+ " <tr>\n",
928
+ " <th>15</th>\n",
929
+ " <td>Dipteryx sp</td>\n",
930
+ " <td>1.00</td>\n",
931
+ " <td>1.00</td>\n",
932
+ " <td>1.00</td>\n",
933
+ " <td>1.00</td>\n",
934
+ " <td>10</td>\n",
935
+ " </tr>\n",
936
+ " <tr>\n",
937
+ " <th>16</th>\n",
938
+ " <td>Erisma uncinatum</td>\n",
939
+ " <td>0.99</td>\n",
940
+ " <td>1.00</td>\n",
941
+ " <td>0.87</td>\n",
942
+ " <td>0.93</td>\n",
943
+ " <td>7</td>\n",
944
+ " </tr>\n",
945
+ " <tr>\n",
946
+ " <th>17</th>\n",
947
+ " <td>Eucalyptus sp</td>\n",
948
+ " <td>1.00</td>\n",
949
+ " <td>1.00</td>\n",
950
+ " <td>1.00</td>\n",
951
+ " <td>1.00</td>\n",
952
+ " <td>10</td>\n",
953
+ " </tr>\n",
954
+ " <tr>\n",
955
+ " <th>18</th>\n",
956
+ " <td>Euxylophora paraensis</td>\n",
957
+ " <td>1.00</td>\n",
958
+ " <td>1.00</td>\n",
959
+ " <td>1.00</td>\n",
960
+ " <td>1.00</td>\n",
961
+ " <td>6</td>\n",
962
+ " </tr>\n",
963
+ " <tr>\n",
964
+ " <th>19</th>\n",
965
+ " <td>Goupia glabra</td>\n",
966
+ " <td>0.99</td>\n",
967
+ " <td>0.90</td>\n",
968
+ " <td>1.00</td>\n",
969
+ " <td>0.94</td>\n",
970
+ " <td>10</td>\n",
971
+ " </tr>\n",
972
+ " <tr>\n",
973
+ " <th>20</th>\n",
974
+ " <td>Grevilea robusta</td>\n",
975
+ " <td>0.99</td>\n",
976
+ " <td>1.00</td>\n",
977
+ " <td>0.88</td>\n",
978
+ " <td>0.93</td>\n",
979
+ " <td>8</td>\n",
980
+ " </tr>\n",
981
+ " <tr>\n",
982
+ " <th>21</th>\n",
983
+ " <td>Hura crepitans</td>\n",
984
+ " <td>1.00</td>\n",
985
+ " <td>1.00</td>\n",
986
+ " <td>1.00</td>\n",
987
+ " <td>1.00</td>\n",
988
+ " <td>5</td>\n",
989
+ " </tr>\n",
990
+ " <tr>\n",
991
+ " <th>22</th>\n",
992
+ " <td>Hymenaea sp</td>\n",
993
+ " <td>1.00</td>\n",
994
+ " <td>1.00</td>\n",
995
+ " <td>1.00</td>\n",
996
+ " <td>1.00</td>\n",
997
+ " <td>8</td>\n",
998
+ " </tr>\n",
999
+ " <tr>\n",
1000
+ " <th>23</th>\n",
1001
+ " <td>Hymenolobium petraeum</td>\n",
1002
+ " <td>1.00</td>\n",
1003
+ " <td>1.00</td>\n",
1004
+ " <td>1.00</td>\n",
1005
+ " <td>1.00</td>\n",
1006
+ " <td>10</td>\n",
1007
+ " </tr>\n",
1008
+ " <tr>\n",
1009
+ " <th>24</th>\n",
1010
+ " <td>Laurus nobilis</td>\n",
1011
+ " <td>1.00</td>\n",
1012
+ " <td>1.00</td>\n",
1013
+ " <td>1.00</td>\n",
1014
+ " <td>1.00</td>\n",
1015
+ " <td>9</td>\n",
1016
+ " </tr>\n",
1017
+ " <tr>\n",
1018
+ " <th>25</th>\n",
1019
+ " <td>Machaerium sp</td>\n",
1020
+ " <td>1.00</td>\n",
1021
+ " <td>1.00</td>\n",
1022
+ " <td>1.00</td>\n",
1023
+ " <td>1.00</td>\n",
1024
+ " <td>6</td>\n",
1025
+ " </tr>\n",
1026
+ " <tr>\n",
1027
+ " <th>26</th>\n",
1028
+ " <td>Manilkara huberi</td>\n",
1029
+ " <td>1.00</td>\n",
1030
+ " <td>1.00</td>\n",
1031
+ " <td>1.00</td>\n",
1032
+ " <td>1.00</td>\n",
1033
+ " <td>6</td>\n",
1034
+ " </tr>\n",
1035
+ " <tr>\n",
1036
+ " <th>27</th>\n",
1037
+ " <td>Melia azedarach</td>\n",
1038
+ " <td>1.00</td>\n",
1039
+ " <td>1.00</td>\n",
1040
+ " <td>1.00</td>\n",
1041
+ " <td>1.00</td>\n",
1042
+ " <td>5</td>\n",
1043
+ " </tr>\n",
1044
+ " <tr>\n",
1045
+ " <th>28</th>\n",
1046
+ " <td>Mezilaurus itauba</td>\n",
1047
+ " <td>1.00</td>\n",
1048
+ " <td>1.00</td>\n",
1049
+ " <td>1.00</td>\n",
1050
+ " <td>1.00</td>\n",
1051
+ " <td>10</td>\n",
1052
+ " </tr>\n",
1053
+ " <tr>\n",
1054
+ " <th>29</th>\n",
1055
+ " <td>Micropholis venulosa</td>\n",
1056
+ " <td>1.00</td>\n",
1057
+ " <td>1.00</td>\n",
1058
+ " <td>1.00</td>\n",
1059
+ " <td>1.00</td>\n",
1060
+ " <td>6</td>\n",
1061
+ " </tr>\n",
1062
+ " <tr>\n",
1063
+ " <th>30</th>\n",
1064
+ " <td>Mimosa scabrella</td>\n",
1065
+ " <td>1.00</td>\n",
1066
+ " <td>1.00</td>\n",
1067
+ " <td>1.00</td>\n",
1068
+ " <td>1.00</td>\n",
1069
+ " <td>6</td>\n",
1070
+ " </tr>\n",
1071
+ " <tr>\n",
1072
+ " <th>31</th>\n",
1073
+ " <td>Myroxylon balsamum</td>\n",
1074
+ " <td>1.00</td>\n",
1075
+ " <td>1.00</td>\n",
1076
+ " <td>1.00</td>\n",
1077
+ " <td>1.00</td>\n",
1078
+ " <td>4</td>\n",
1079
+ " </tr>\n",
1080
+ " <tr>\n",
1081
+ " <th>32</th>\n",
1082
+ " <td>Ocotea porosa</td>\n",
1083
+ " <td>1.00</td>\n",
1084
+ " <td>1.00</td>\n",
1085
+ " <td>1.00</td>\n",
1086
+ " <td>1.00</td>\n",
1087
+ " <td>6</td>\n",
1088
+ " </tr>\n",
1089
+ " <tr>\n",
1090
+ " <th>33</th>\n",
1091
+ " <td>Peltogyne sp</td>\n",
1092
+ " <td>0.99</td>\n",
1093
+ " <td>0.87</td>\n",
1094
+ " <td>1.00</td>\n",
1095
+ " <td>0.93</td>\n",
1096
+ " <td>8</td>\n",
1097
+ " </tr>\n",
1098
+ " <tr>\n",
1099
+ " <th>34</th>\n",
1100
+ " <td>Pinus sp</td>\n",
1101
+ " <td>1.00</td>\n",
1102
+ " <td>1.00</td>\n",
1103
+ " <td>1.00</td>\n",
1104
+ " <td>1.00</td>\n",
1105
+ " <td>10</td>\n",
1106
+ " </tr>\n",
1107
+ " <tr>\n",
1108
+ " <th>35</th>\n",
1109
+ " <td>Podocarpus lambertii</td>\n",
1110
+ " <td>1.00</td>\n",
1111
+ " <td>1.00</td>\n",
1112
+ " <td>1.00</td>\n",
1113
+ " <td>1.00</td>\n",
1114
+ " <td>5</td>\n",
1115
+ " </tr>\n",
1116
+ " <tr>\n",
1117
+ " <th>36</th>\n",
1118
+ " <td>Pouteria pachycarpa</td>\n",
1119
+ " <td>1.00</td>\n",
1120
+ " <td>1.00</td>\n",
1121
+ " <td>1.00</td>\n",
1122
+ " <td>1.00</td>\n",
1123
+ " <td>10</td>\n",
1124
+ " </tr>\n",
1125
+ " <tr>\n",
1126
+ " <th>37</th>\n",
1127
+ " <td>Swietenia macrophylla</td>\n",
1128
+ " <td>0.99</td>\n",
1129
+ " <td>0.88</td>\n",
1130
+ " <td>1.00</td>\n",
1131
+ " <td>0.93</td>\n",
1132
+ " <td>9</td>\n",
1133
+ " </tr>\n",
1134
+ " <tr>\n",
1135
+ " <th>38</th>\n",
1136
+ " <td>Tabebuia sp</td>\n",
1137
+ " <td>0.99</td>\n",
1138
+ " <td>0.80</td>\n",
1139
+ " <td>0.80</td>\n",
1140
+ " <td>0.80</td>\n",
1141
+ " <td>5</td>\n",
1142
+ " </tr>\n",
1143
+ " <tr>\n",
1144
+ " <th>39</th>\n",
1145
+ " <td>Virola surinamensis</td>\n",
1146
+ " <td>1.00</td>\n",
1147
+ " <td>1.00</td>\n",
1148
+ " <td>1.00</td>\n",
1149
+ " <td>1.00</td>\n",
1150
+ " <td>6</td>\n",
1151
+ " </tr>\n",
1152
+ " <tr>\n",
1153
+ " <th>40</th>\n",
1154
+ " <td>Vochysia sp</td>\n",
1155
+ " <td>1.00</td>\n",
1156
+ " <td>1.00</td>\n",
1157
+ " <td>1.00</td>\n",
1158
+ " <td>1.00</td>\n",
1159
+ " <td>8</td>\n",
1160
+ " </tr>\n",
1161
+ " </tbody>\n",
1162
+ "</table>\n",
1163
+ "</div>"
1164
+ ],
1165
+ "text/plain": [
1166
+ " Name Accuracy Recall Precision F1-Score \\\n",
1167
+ "0 Acrocarpus fraxinifolius 1.00 1.00 1.00 1.00 \n",
1168
+ "1 Araucaria angustifolia 1.00 1.00 1.00 1.00 \n",
1169
+ "2 Aspidosperma polyneuron 0.99 0.50 1.00 0.66 \n",
1170
+ "3 Bagassa guianensis 0.99 0.90 0.90 0.90 \n",
1171
+ "4 Balfourodendron riedelianum 0.99 1.00 0.87 0.93 \n",
1172
+ "5 Bertholethia excelsa 0.99 1.00 0.90 0.94 \n",
1173
+ "6 Bowdichia sp 0.99 1.00 0.87 0.93 \n",
1174
+ "7 Brosimum paraense 1.00 1.00 1.00 1.00 \n",
1175
+ "8 Carapa guianensis 1.00 1.00 1.00 1.00 \n",
1176
+ "9 Cariniana estrellensis 0.99 1.00 0.83 0.90 \n",
1177
+ "10 Cedrela fissilis 1.00 1.00 1.00 1.00 \n",
1178
+ "11 Cedrelinga catenaeformis 0.99 0.87 1.00 0.93 \n",
1179
+ "12 Cordia goeldiana 1.00 1.00 1.00 1.00 \n",
1180
+ "13 Cordia sp 1.00 1.00 1.00 1.00 \n",
1181
+ "14 Couratari sp 1.00 1.00 1.00 1.00 \n",
1182
+ "15 Dipteryx sp 1.00 1.00 1.00 1.00 \n",
1183
+ "16 Erisma uncinatum 0.99 1.00 0.87 0.93 \n",
1184
+ "17 Eucalyptus sp 1.00 1.00 1.00 1.00 \n",
1185
+ "18 Euxylophora paraensis 1.00 1.00 1.00 1.00 \n",
1186
+ "19 Goupia glabra 0.99 0.90 1.00 0.94 \n",
1187
+ "20 Grevilea robusta 0.99 1.00 0.88 0.93 \n",
1188
+ "21 Hura crepitans 1.00 1.00 1.00 1.00 \n",
1189
+ "22 Hymenaea sp 1.00 1.00 1.00 1.00 \n",
1190
+ "23 Hymenolobium petraeum 1.00 1.00 1.00 1.00 \n",
1191
+ "24 Laurus nobilis 1.00 1.00 1.00 1.00 \n",
1192
+ "25 Machaerium sp 1.00 1.00 1.00 1.00 \n",
1193
+ "26 Manilkara huberi 1.00 1.00 1.00 1.00 \n",
1194
+ "27 Melia azedarach 1.00 1.00 1.00 1.00 \n",
1195
+ "28 Mezilaurus itauba 1.00 1.00 1.00 1.00 \n",
1196
+ "29 Micropholis venulosa 1.00 1.00 1.00 1.00 \n",
1197
+ "30 Mimosa scabrella 1.00 1.00 1.00 1.00 \n",
1198
+ "31 Myroxylon balsamum 1.00 1.00 1.00 1.00 \n",
1199
+ "32 Ocotea porosa 1.00 1.00 1.00 1.00 \n",
1200
+ "33 Peltogyne sp 0.99 0.87 1.00 0.93 \n",
1201
+ "34 Pinus sp 1.00 1.00 1.00 1.00 \n",
1202
+ "35 Podocarpus lambertii 1.00 1.00 1.00 1.00 \n",
1203
+ "36 Pouteria pachycarpa 1.00 1.00 1.00 1.00 \n",
1204
+ "37 Swietenia macrophylla 0.99 0.88 1.00 0.93 \n",
1205
+ "38 Tabebuia sp 0.99 0.80 0.80 0.80 \n",
1206
+ "39 Virola surinamensis 1.00 1.00 1.00 1.00 \n",
1207
+ "40 Vochysia sp 1.00 1.00 1.00 1.00 \n",
1208
+ "\n",
1209
+ " N Samples \n",
1210
+ "0 5 \n",
1211
+ "1 7 \n",
1212
+ "2 6 \n",
1213
+ "3 10 \n",
1214
+ "4 7 \n",
1215
+ "5 10 \n",
1216
+ "6 7 \n",
1217
+ "7 10 \n",
1218
+ "8 9 \n",
1219
+ "9 10 \n",
1220
+ "10 6 \n",
1221
+ "11 8 \n",
1222
+ "12 10 \n",
1223
+ "13 7 \n",
1224
+ "14 7 \n",
1225
+ "15 10 \n",
1226
+ "16 7 \n",
1227
+ "17 10 \n",
1228
+ "18 6 \n",
1229
+ "19 10 \n",
1230
+ "20 8 \n",
1231
+ "21 5 \n",
1232
+ "22 8 \n",
1233
+ "23 10 \n",
1234
+ "24 9 \n",
1235
+ "25 6 \n",
1236
+ "26 6 \n",
1237
+ "27 5 \n",
1238
+ "28 10 \n",
1239
+ "29 6 \n",
1240
+ "30 6 \n",
1241
+ "31 4 \n",
1242
+ "32 6 \n",
1243
+ "33 8 \n",
1244
+ "34 10 \n",
1245
+ "35 5 \n",
1246
+ "36 10 \n",
1247
+ "37 9 \n",
1248
+ "38 5 \n",
1249
+ "39 6 \n",
1250
+ "40 8 "
1251
+ ]
1252
+ },
1253
+ "execution_count": 85,
1254
+ "metadata": {},
1255
+ "output_type": "execute_result"
1256
+ }
1257
+ ],
1258
+ "source": [
1259
+ "zipped = zip(os.listdir(\"data/image/test\"), accuracy, recall, precision, f1s, class_count)\n",
1260
+ "pd.DataFrame(zipped, columns=[\"Name\", \"Accuracy\", \"Recall\", \"Precision\", \"F1-Score\", \"N Samples\"])"
1261
+ ]
1262
+ }
1263
+ ],
1264
+ "metadata": {
1265
+ "kernelspec": {
1266
+ "display_name": "fyp",
1267
+ "language": "python",
1268
+ "name": "python3"
1269
+ },
1270
+ "language_info": {
1271
+ "codemirror_mode": {
1272
+ "name": "ipython",
1273
+ "version": 3
1274
+ },
1275
+ "file_extension": ".py",
1276
+ "mimetype": "text/x-python",
1277
+ "name": "python",
1278
+ "nbconvert_exporter": "python",
1279
+ "pygments_lexer": "ipython3",
1280
+ "version": "3.10.13"
1281
+ }
1282
+ },
1283
+ "nbformat": 4,
1284
+ "nbformat_minor": 2
1285
+ }