¡El Día de la Comunidad de ML es el 9 de noviembre! Únase a nosotros para recibir actualizaciones de TensorFlow, JAX, y más Más información

imagenet2012_multilabel

  • Descripción:

Este conjunto de datos contiene ILSVRC-2012 (IMAGEnet) imágenes de validación anotado con etiquetas de múltiples clases de "Evaluación de la máquina de precisión en IMAGEnet" , ICML, 2020. Las etiquetas de clase múltiple fueron revisados por un panel de expertos ampliamente capacitados en las complejidades de la fina distinciones de clases detalladas en la jerarquía de clases de ImageNet (consulte el artículo para obtener más detalles). En comparación con las etiquetas originales, estas etiquetas de clases múltiples revisadas por expertos permiten una evaluación de precisión más coherente desde el punto de vista semántico.

Solo 20.000 de las 50.000 imágenes de validación de ImageNet tienen anotaciones de etiquetas múltiples. El conjunto de múltiples etiquetas se generó por primera vez por un banco de pruebas de 67 los modelos IMAGEnet capacitados, y luego cada predicción individual modelo fue anotado manualmente por los expertos como sea correct (la etiqueta es correcta para la imagen), wrong (la etiqueta es incorrecta para la imagen), o unclear (sin consenso se alcanzó entre los expertos).

Además, durante la anotación, el panel de expertos identificó un conjunto de imágenes problemáticas. Una imagen era problemática si cumplía con alguno de los siguientes criterios:

  • La etiqueta de ImageNet original (etiqueta top-1) era incorrecta o poco clara
  • La imagen era un dibujo, pintura, boceto, caricatura o renderizado por computadora.
  • La imagen fue editada en exceso
  • La imagen tenía contenido inapropiado

Las imágenes problemáticas se incluyen en este conjunto de datos, pero deben ignorarse al calcular la precisión de múltiples etiquetas. Además, dado que el conjunto inicial de 20.000 anotaciones está equilibrado por clases, pero el conjunto de imágenes problemáticas no, recomendamos calcular las precisiones por clase y luego promediarlas. También recomendamos contar una predicción como correcta si está marcada como correcta o poco clara (es decir, siendo indulgente con las etiquetas poco claras).

Una forma posible de hacer esto es con el siguiente código 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

Separar Ejemplos de
'validation' 20.000
  • características:
FeaturesDict({
    'correct_multi_labels': Sequence(ClassLabel(shape=(), dtype=tf.int64, num_classes=1000)),
    'file_name': Text(shape=(), dtype=tf.string),
    'image': Image(shape=(None, None, 3), dtype=tf.uint8),
    'is_problematic': tf.bool,
    'original_label': ClassLabel(shape=(), dtype=tf.int64, num_classes=1000),
    'unclear_multi_labels': Sequence(ClassLabel(shape=(), dtype=tf.int64, num_classes=1000)),
    'wrong_multi_labels': Sequence(ClassLabel(shape=(), dtype=tf.int64, num_classes=1000)),
})

Visualización

  • Cita:
@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} }
}