-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfiftyone_utils.py
More file actions
52 lines (45 loc) · 1.6 KB
/
fiftyone_utils.py
File metadata and controls
52 lines (45 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import fiftyone as fo
from fiftyone import ViewField as F
import numpy as np
import os
def delete_all_datasets():
for ds in fo.list_datasets():
dataset = fo.load_dataset(ds)
dataset.delete()
def import_image_directory(data_path, dataset):
samples = []
classes = []
for root, dirs, files in os.walk(data_path):
for d in dirs:
classes.append(d)
for file in os.listdir(os.path.join(root, d)):
sample = fo.Sample(filepath=os.path.join(root, d, file))
sample["ground_truth"] = fo.Classification(label=d)
samples.append(sample)
dataset.add_samples(samples)
dataset.save()
def import_dls(dl, dataset):
samples = []
for filepath in dl.items:
sample = fo.Sample(filepath=filepath)
sample["ground_truth"] = fo.Classification(label=filepath.parts[-2])
samples.append(sample)
dataset.add_samples(samples)
dataset.save()
def do_inference(learner, dataset):
classes = learner.dls.vocab
images = [sample.filepath for sample in dataset]
dl = learner.dls.test_dl(images)
preds, _ = learner.get_preds(dl=dl)
preds = preds.numpy()
# Save predictions to FiftyOne dataset
with (fo.ProgressBar() as pb):
for sample, scores in zip(pb(dataset), preds):
target = np.argmax(scores)
sample["classifications"] = fo.Classifications(classifications=
[fo.Classification(
label=classes[target],
confidence=scores[target],
logits=np.log(scores),
)])
sample.save()