Постройте матрицу путаницы, например, сегментацию (маска r-cnn из детектора 2)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Постройте матрицу путаницы, например, сегментацию (маска r-cnn из детектора 2)

Сообщение Anonymous »


Я обучил маску r-cnn изображениям кукурузы (не могу показать примеры, поскольку они конфиденциальны), но по сути это изображения зерен кукурузы, разбросанных по плоской поверхности.

Есть разные виды кукурузных зерен, которые я хочу сегментировать и классифицировать. Я понимаю, что метрики AP — лучший способ измерения производительности алгоритма сегментации экземпляров, и знаю, что матрица путаницы для такого алгоритма обычно не имеет смысла.

Но для его конкретного случая, когда у меня есть 4 класса очень похожих объектов, я хотел бы иметь возможность установить фиксированное значение AP, например AP50/AP75, и построить для этого матрицу путаницы.

А возможно ли это? Как бы я это сделал?

Я использовал библиотеку детекторрон2 для обучения и получения прогнозов. Вот код, который я использую для загрузки обученной модели с диска, создания прогнозов в наборе проверки и визуализации результатов:

импортировать детектор2 изDetectron2.utils.logger импортируйте setup_logger setup_logger() импортировать numpy как np импортировать matplotlib.pyplot как plt импортировать операционную систему, json, cv2, случайный, gc из детектора 2 импорта model_zoo изDetectron2.data.datasets импортировать Register_coco_instances из importon2.checkpoint импорт DetectionCheckpointer, Checkpointer изDetectron2.data импорт MetadataCatalog, DatasetCatalog, build_detection_test_loader из детектора 2.engine импортировать DefaultTrainer, DefaultPredictor из детектора 2.config импортируйте get_cfg изDetectron2.utils.visualizer импортировать визуализатор, ColorMode из детектора 2.modeling импорт build_model изDetectron2.evaluation, импорт COCOEvaluator, inference_on_dataset train_annotations_path = "./data/cvat-corn-train-coco-1.0/annotations/instances_default.json" train_images_path = "./data/cvat-corn-train-coco-1.0/images" validation_annotations_path = "./data/cvat-corn-validation-coco-1.0/annotations/instances_default.json" validation_images_path = "./data/cvat-corn-validation-coco-1.0/images" cfg = get_cfg() cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")) cfg.DATASETS.TRAIN = («поезд-кукуруза»,) cfg.DATASETS.TEST = («кукуруза проверки»,) cfg.DATALOADER.NUM_WORKERS = 2 cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml") # Разрешить инициализацию обучения из зоопарка модели cfg.SOLVER.IMS_PER_BATCH = 2 cfg.SOLVER.BASE_LR = 0,00025 cfg.SOLVER.MAX_ITER = 10000 cfg.SOLVER.STEPS = [] cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128 cfg.MODEL.ROI_HEADS.NUM_CLASSES = 4 cfg.OUTPUT_DIR = "./выход" cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0,7 Register_coco_instances( «поезд-кукуруза», {}, train_annotations_path, train_images_path ) Register_coco_instances( "кукуруза проверки", {}, validation_annotations_path, validation_images_path ) Metadata_train = MetadataCatalog.get("поезд-кукуруза") dataset_dicts = DatasetCatalog.get("поезд-кукуруза") cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth") cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0,7 предиктор = DefaultPredictor(cfg) Predicted_images_path = os.path.abspath("./predicted/") dataset_dicts_validation = DatasetCatalog.get("проверка-кукуруза") для d в dataset_dicts_validation: im = cv2.imread(d["имя_файла"]) выходные данные = предиктор (im) v = Визуализатор(im[:, :, ::-1], метаданные = метаданные_поезд, масштаб=0,5, instance_mode=ColorMode.IMAGE_BW ) out = v.draw_instance_predictions(выходы["экземпляры"].to("процессор")) fig = plt.figure(frameon=False, dpi=1) fig.set_size_inches(1024,1024) ax = plt.Axes(рис, [0., 0., 1., 1.]) ax.set_axis_off() fig.add_axes(ax) ax.imshow(cv2.cvtColor(out.get_image()[:, :, ::-1], cv2.COLOR_BGR2RGB), аспект='авто') fig.savefig(f"{predicted_images_path}/{d['file_name'].split('/')[-1]}") Вот как выглядит мой вывод для данного изображения:
Изображение


Это словарь с объектом Instances в качестве единственного значения. Объект Instances имеет четыре списка: pred_boxes, оценки, pred_classes и pred_masks. И можно визуализировать с помощью визуализатора детекторрон2, но я не могу показать визуализацию по соображениям конфиденциальности.

Вот метрики, которые у меня есть для модели на данный момент:


Изображение


И для каждого класса:
Изображение


И визуально я заметил, что некоторые ядра путаются с другими классами, особенно между классами ardido и Fermentado, поэтому я хочу как-то иметь возможность построить матрицу путаницы.

Я ожидаю, что матрица путаницы будет выглядеть примерно так:
Изображение


РЕДАКТИРОВАТЬ: Я нашел этот репозиторий:

https://github.com/kaanakan/object_dete ... ion_matrix

И попробовал его использовать:

из запутанной_матрицы импортировать ConfusionMatrix см = ConfusionMatrix(4, CONF_THRESHOLD=0,3, IOU_THRESHOLD=0,3) для d в dataset_dicts_validation: img = cv2.imread(d["имя_файла"]) выходные данные = предиктор (img) метки = список() обнаружения = список() для Энн в d["аннотации"]: labels.append([ann["category_id"]] + ann["bbox"]) для координат, конф, cls в zip( outputs["instances"].get("pred_boxes").tensor.cpu().numpy(), выходы["экземпляры"].get("оценки").cpu().numpy(), выходы["экземпляры"].get("pred_classes").cpu().numpy() ): обнаружения.append(список(координаты) + [conf] + [cls]) cm.process_batch(np.array(обнаружения), np.array(метки)) Но матрица, которую я получил, явно неправильная, и мне трудно ее исправить.
Изображение

Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Разница между входной формой для 1D CNN, 2D CNN и 3D CNN
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как умножить матрицу 2x3x3x3 на матрицу 2x3, чтобы получить матрицу 2x3
    Anonymous » » в форуме Python
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Как умножить матрицу 2x3x3x3 на матрицу 2x3, чтобы получить матрицу 2x3
    Anonymous » » в форуме Python
    0 Ответы
    55 Просмотры
    Последнее сообщение Anonymous
  • Маска R-CNN: Как определить форму выходных данных Lambda?
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Постройте разреженную матрицу в Pyqtgraph
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»