Как я могу изменить значение maxdets в Faster R-CNN от Pytorch?

Я реализую более быструю сеть RCNN на pytorch. Я следовал следующему уроку.

https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html

Есть изображения, на которых мне нужно классифицировать более 100 объектов. Однако с помощью этого урока я могу обнаружить максимум 100 объектов, так как параметр «maxdets» = 100.

Есть ли способ изменить это значение, чтобы адаптировать его к моему проекту?

IoU metric: bbox
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.235
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.655
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.105
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.238
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.006
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.066
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.331
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.331
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000

Если только изменить следующий параметр, проблема будет решена?

cocoeval.Params.setDetParams.maxDets = [1, 10, 100]

Благодарю вас!


person Jose David    schedule 04.05.2020    source источник


Ответы (1)


«Есть изображения, на которых мне нужно классифицировать более 100 объектов».

maxDets = 100 не означает, что он будет классифицировать только 100 изображений, но относится к % AverageRecall given 100 detections per image

inshort maxDets относится к метрикам, а не фактическим. изображений классифицированы.

для получения дополнительной информации посетите: http://cocodataset.org/#detection-eval

Отзыв графа Tensorboard

https://github.com/matterport/Mask_RCNN/issues/663

 # Limit to max_per_image detections **over all classes**
    if number_of_detections > self.detections_per_img > 0:
        cls_scores = result.get_field("scores")
        image_thresh, _ = torch.kthvalue(
            cls_scores.cpu(), number_of_detections - self.detections_per_img + 1
        )
        keep = cls_scores >= image_thresh.item()
        keep = torch.nonzero(keep).squeeze(1)
        result = result[keep]
    return result

в соответствии с этим фрагментом кода я обнаружил, что он проверяет нет. обнаружения, поэтому model.roi_heads.detections_per_img=300 подходит для вашей цели. И я не нашел много надлежащей документации по maxdets, но я думаю, что приведенный выше код должен работать.

 # non-maximum suppression, independently done per class
   keep = box_ops.batched_nms(boxes, scores, labels, self.nms_thresh)
 # keep only topk scoring predictions
   keep = keep[:self.detections_per_img]

этот фрагмент кода говорит, что мы можем отфильтровать только некоторые основные обнаружения, которые мы хотим иметь в нашей модели.

person deepak sen    schedule 05.05.2020
comment
Хорошо. Я хотел сказать, что у меня более 100 объектов одного класса на изображение. Я нашел параметр, который позволяет моей модели обнаруживать более 100 объектов. model.roi_heads.detections_per_img=300 Подходит ли это для моей цели? Я не знаю, правильно ли обучение Faster RCNN, если только я изменю параметр before. Как вы думаете, мне тоже стоит изменить параметр maxdets в метриках, чтобы все работало корректно? Благодарю вас! - person Jose David; 06.05.2020
comment
Идеальный. Я предполагаю, что первый фрагмент кода принадлежит ссылка. Я попытался изменить параметр model.roi_heads.detections_per_img, и эффективно моя модель обнаружила более 100 объектов, меньше входного числа. Второй код фрагмента используется для удаления обнаруженных объектов, если они не превышают определенного порога? Информации о maxdets мало, вы правы! - person Jose David; 07.05.2020
comment
Второй код фрагмента используется для удаления обнаруженных объектов, если они не превышают определенного порога? да, я думаю, алгоритм обнаруживает много объектов, и мы можем получить лучший K нет. объектов, которые мы хотим. - person deepak sen; 07.05.2020