|
7 years ago | |
---|---|---|
nabirds | 7 years ago | |
.gitignore | 7 years ago | |
Makefile | 7 years ago | |
README.md | 7 years ago | |
display.sh | 7 years ago | |
requirements.txt | 7 years ago | |
setup.py | 7 years ago |
For more deatils to see how to use this library take a look at nabirds/display.py.
Here is some example code how to load images and use the predefined train-test split.
# replace NAB_Annotations with CUB_Annotations to load CUB200-2011 annotations
from nabirds import NAB_Annotations, Dataset
annot = NAB_Annotations("path/to/nab/folder")
train_data = Dataset(annot.train_uuids, annot)
test_data = Dataset(annot.test_uuids, annot)
print("Loaded {} training and {} test images".format(len(train_data), len(test_data)))
import matplotlib.pyplot as plt
# either access the images directly
im, parts, label = test_data[100]
plt.imshow(im)
plt.show()
# or iterate over the dataset
for im, parts, label in train_data:
plt.imshow(im)
plt.show()
Both datasets (NAB and CUB) have part annotations. Each annotation has for each of the predefined parts the location of this part and a boolean (0
or 1
) value whether this part is visible. A Dataset
instance returns besides the image and the class label this information:
im, parts, label = train_data[100]
print(parts)
# array([[ 0, 529, 304, 1],
# [ 1, 427, 277, 1],
# [ 2, 368, 323, 1],
# [ 3, 0, 0, 0],
# [ 4, 449, 292, 1],
# [ 5, 398, 502, 1],
# [ 6, 430, 398, 1],
# [ 7, 0, 0, 0],
# [ 8, 365, 751, 1],
# [ 9, 0, 0, 0],
# [ 10, 0, 0, 0]])
In order to filter by only visible parts use the utils.visible_part_locs
function. It returns the indices and the x-y positions of the visible parts:
idxs, xy = visible_part_locs(parts)
print(idxs)
# array([0, 1, 2, 4, 5, 6, 8])
print(xy)
# array([[529, 427, 368, 449, 398, 430, 365],
# [304, 277, 323, 292, 502, 398, 751]])
x, y = xy
plt.imshow(im)
plt.scatter(x,y, marker="x", c=idxs)
plt.show()