imagenet2012_multilabel

  • opis :

Ten zestaw danych zawiera obrazy do walidacji ILSVRC-2012 (ImageNet) z adnotacjami wieloklasowymi etykietami z „Evaluating Machine Accuracy on ImageNet” , ICML, 2020. Etykiety wieloklasowe zostały sprawdzone przez zespół ekspertów gruntownie przeszkolonych w zawiłościach precyzyjnego ziarniste rozróżnienia klas w hierarchii klas ImageNet (więcej szczegółów w artykule). W porównaniu z oryginalnymi etykietami, te sprawdzone przez ekspertów etykiety wieloklasowe umożliwiają bardziej spójną semantycznie ocenę dokładności.

Wersja 3.0.0 tego zestawu danych zawiera więcej poprawionych etykiet z „Kiedy ciasto staje się bajglem? Analiza pozostałych błędów w ImageNet, a także 68-przykładowy podział ImageNet-Major (ImageNet-M) pod „imagenet-m”.

Tylko 20 000 z 50 000 obrazów sprawdzania poprawności ImageNet ma adnotacje z wieloma etykietami. Zestaw wielu etykiet został najpierw wygenerowany przez stanowisko testowe składające się z 67 wyszkolonych modeli ImageNet, a następnie eksperci ręcznie opisali każdą indywidualną prognozę modelu jako correct (etykieta jest poprawna dla obrazu), wrong (etykieta jest niepoprawna dla obrazu) lub unclear (nie osiągnięto konsensusu wśród ekspertów).

Dodatkowo podczas adnotacji panel ekspertów zidentyfikował zestaw problematycznych obrazów . Obraz był problematyczny, jeśli spełniał którekolwiek z poniższych kryteriów:

  • Oryginalna etykieta ImageNet (pierwsza etykieta) była nieprawidłowa lub niejasna
  • Obraz był rysunkiem, obrazem, szkicem, kreskówką lub komputerem
  • Obraz był nadmiernie edytowany
  • Obraz zawierał nieodpowiednią treść

Problematyczne obrazy są zawarte w tym zbiorze danych, ale należy je zignorować podczas obliczania dokładności wielu etykiet. Dodatkowo, ponieważ początkowy zestaw 20 000 adnotacji jest zrównoważony pod względem klas, ale zestaw problematycznych obrazów nie, zalecamy obliczenie dokładności dla poszczególnych klas, a następnie uśrednienie ich. Zalecamy również uznanie prognozy za poprawną, jeśli jest ona oznaczona jako poprawna lub niejasna (tj. pobłażliwa dla niejasnych etykiet).

Jednym z możliwych sposobów na to jest użycie następującego kodu NumPy:

import tensorflow_datasets as tfds

ds = tfds.load('imagenet2012_multilabel', split='validation')

# We assume that predictions is a dictionary from file_name to a class index between 0 and 999

num_correct_per_class = {}
num_images_per_class = {}

for example in ds:
    # We ignore all problematic images
    if example[‘is_problematic’].numpy():
        continue

    # The label of the image in ImageNet
    cur_class = example['original_label'].numpy()

    # If we haven't processed this class yet, set the counters to 0
    if cur_class not in num_correct_per_class:
        num_correct_per_class[cur_class] = 0
        assert cur_class not in num_images_per_class
        num_images_per_class[cur_class] = 0

    num_images_per_class[cur_class] += 1

    # Get the predictions for this image
    cur_pred = predictions[example['file_name'].numpy()]

    # We count a prediction as correct if it is marked as correct or unclear
    # (i.e., we are lenient with the unclear labels)
    if cur_pred is in example['correct_multi_labels'].numpy() or cur_pred is in example['unclear_multi_labels'].numpy():
        num_correct_per_class[cur_class] += 1

# Check that we have collected accuracy data for each of the 1,000 classes
num_classes = 1000
assert len(num_correct_per_class) == num_classes
assert len(num_images_per_class) == num_classes

# Compute the per-class accuracies and then average them
final_avg = 0
for cid in range(num_classes):
  assert cid in num_correct_per_class
  assert cid in num_images_per_class
  final_avg += num_correct_per_class[cid] / num_images_per_class[cid]
final_avg /= num_classes

Rozdzielać Przykłady
'imagenet_m' 68
'validation' 20 000
  • Struktura funkcji :
FeaturesDict({
    'correct_multi_labels': Sequence(ClassLabel(shape=(), dtype=int64, num_classes=1000)),
    'file_name': Text(shape=(), dtype=string),
    'image': Image(shape=(None, None, 3), dtype=uint8),
    'is_problematic': bool,
    'original_label': ClassLabel(shape=(), dtype=int64, num_classes=1000),
    'unclear_multi_labels': Sequence(ClassLabel(shape=(), dtype=int64, num_classes=1000)),
    'wrong_multi_labels': Sequence(ClassLabel(shape=(), dtype=int64, num_classes=1000)),
})
  • Dokumentacja funkcji :
Funkcja Klasa Kształt Typ D Opis
FunkcjeDict
poprawne_wiele_etykiet Sekwencja (etykieta klasy) (Nic,) int64
Nazwa pliku Tekst strunowy
obraz Obraz (Brak, Brak, 3) uint8
jest_problematyczny Napinacz bool
oryginalna_etykieta Etykieta klasy int64
niejasne_multi_etykiety Sekwencja (etykieta klasy) (Nic,) int64
błędne_multi_etykiety Sekwencja (etykieta klasy) (Nic,) int64

Wyobrażanie sobie

  • Cytat :
@article{shankar2019evaluating,
  title={Evaluating Machine Accuracy on ImageNet},
  author={Vaishaal Shankar* and Rebecca Roelofs* and Horia Mania and Alex Fang and Benjamin Recht and Ludwig Schmidt},
  journal={ICML},
  year={2020},
  note={\url{http://proceedings.mlr.press/v119/shankar20c.html} }
}
@article{ImageNetChallenge,
  title={ {ImageNet} large scale visual recognition challenge},
  author={Olga Russakovsky and Jia Deng and Hao Su and Jonathan Krause
   and Sanjeev Satheesh and Sean Ma and Zhiheng Huang and Andrej Karpathy and Aditya Khosla and Michael Bernstein and
   Alexander C. Berg and Fei-Fei Li},
  journal={International Journal of Computer Vision},
  year={2015},
  note={\url{https://arxiv.org/abs/1409.0575} }
}
@inproceedings{ImageNet,
   author={Jia Deng and Wei Dong and Richard Socher and Li-Jia Li and Kai Li and Li Fei-Fei},
   booktitle={Conference on Computer Vision and Pattern Recognition (CVPR)},
   title={ {ImageNet}: A large-scale hierarchical image database},
   year={2009},
   note={\url{http://www.image-net.org/papers/imagenet_cvpr09.pdf} }
}
@article{vasudevan2022does,
  title={When does dough become a bagel? Analyzing the remaining mistakes on ImageNet},
  author={Vasudevan, Vijay and Caine, Benjamin and Gontijo-Lopes, Raphael and Fridovich-Keil, Sara and Roelofs, Rebecca},
  journal={arXiv preprint arXiv:2205.04596},
  year={2022}
}