es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Detectron2: No hay instancias en la predicción.

Estoy intentando entrenar Detectron2 en un conjunto de datos personalizado que anoté con coco-annotator. Después de entrenar, quería predecir Instancias de mi imagen, pero no obtengo ninguna mostrada.

Entrenamiento:

from detectron2.engine import DefaultTrainer

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.DATASETS.TRAIN = ("TrashTron_train",)
cfg.DATASETS.TEST = ("TrashTron_val",)

cfg.DATALOADER.NUM_WORKERS = 2
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")  # Deja que el entrenamiento inicialice desde el modelo zoologico 
cfg.SOLVER.IMS_PER_BATCH = 2
cfg.SOLVER.BASE_LR = 0.00025  # Elija un LR bueno
cfg.SOLVER.MAX_ITER = 300    # 300 iteraciones parece ser suficiente para este conjunto de datos de juguete; necesitará entrenar más tiempo para un conjunto de datos práctico
cfg.SOLVER.STEPS = []        # no disminuir la tasa de aprendizaje
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 512   # más rápido, y lo suficientemente bueno para este conjunto de datos de juguete (predeterminado: 512)
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 24  # solo tiene una clase (globo). (ver https://detectron2.readthedocs.io/tutorials/datasets.html#update-the-config-for-new-datasets)

NOTA: esta configuración significa el número de clases, pero unos pocos tutoriales no oficiales populares utilizan incorrectamente num_classes+1 aquí.

os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
trainer = DefaultTrainer(cfg) 
trainer.resume_or_load(resume=False)
trainer.train()

Predicción:

test_data = [{'1191.jpg': '/content/datasets/val/1191.jpg',
              'image_id': 1308}]

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.7   # set a custom testing threshold
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")  # ruta al modelo que acabamos de entrenar
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 24
predictor = DefaultPredictor(cfg)
outputs = predictor(im)

print(outputs["instances"].pred_densepose)

im = cv2.imread(test_data[0]["1191.jpg"])

v = Visualizer(im[:, :, ::-1],
               metadata=MetadataCatalog.get(cfg.DATASETS.TRAIN[0]),
               scale=0.5,
               instance_mode=ColorMode.IMAGE_BW)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
img = cv2.cvtColor(out.get_image()[:, :, ::-1], cv2.COLOR_RGBA2RGB)
plt.imshow(img)

Se muestra la imagen correspondiente, pero no hay instancias.
¿Algún consejo? Las puntuaciones de evaluación general no son muy buenas, pero elegí la mejor clase y allí tampoco obtengo ninguna predicción…

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con el modelo entrenado que no puede detectar ninguna instancia en la imagen proporcionada. Esto puede deberse a varias razones, tales como:

    1. El modelo puede no haber sido entrenado adecuadamente o durante el tiempo suficiente para detectar con precisión las instancias en el conjunto de datos personalizado.
    2. Puede que no haya suficiente variación en el conjunto de datos personalizado para que el modelo aprenda a detectar instancias con precisión.
    3. La arquitectura del modelo puede no ser adecuada para la tarea en cuestión.

    Para abordar estos problemas, puedes intentar lo siguiente:

    1. Aumentar el número de iteraciones para que el modelo se entrenen en el conjunto de datos personalizado, y monitorear el proceso de entrenamiento para asegurarse de que el modelo está mejorando con el tiempo.
    2. Recolectar datos más variados y diversos para mejorar la capacidad del modelo para generalizar en diferentes escenarios.
    3. Experimentar con diferentes arquitecturas de modelos y hiperparámetros para ver si funcionan mejor en el conjunto de datos personalizado.

    Adicionalmente, puedes intentar visualizar los resultados del modelo en diversas imágenes para ver si hay un problema consistente con la detección de instancias, o si solo ocurre en ciertas imágenes. Esto puede ayudarte a comprender mejor el problema e identificar posibles soluciones.

Comments are closed.