在YOLACT / YOLACT ++中仅预测一个班级(人)

时间:2020-09-28 14:26:42

标签: computer-vision pytorch classification object-detection yolo

我只想预测一个类别,即正在检查和预测的所有84个类别中的人。

对于YOLACT,请参考https://github.com/dbolya/yolact

结果还不错,但是我想我只需要很短的时间就修改其中一个代码,但是我无法找出答案

与此相关的一个问题是,我做了他提到的事情,例如在 Yolact / layers / output_utils.py 中添加了4行,而没有进行其他更改。这些行如下:

boxes = torch.cat((boxes[classes==0], boxes[classes==2]),dim=0)
scores = torch.cat((scores[classes==0], scores[classes==2]),dim=0)
masks = torch.cat((masks[classes==0], masks[classes==2]),dim=0)
classes = torch.cat((classes[classes==0], classes[classes==2]),dim=0)

但是会出现以下错误:

RuntimeError: strides[cur - 1] == sizes[cur] * strides[cur] INTERNAL ASSERT FAILED at 
/opt/conda/conda-bld/pytorch_1573049310284/work/torch/csrc/jit/fuser/executor.cpp:175, 
please report a bug to PyTorch. 
The above operation failed in interpreter, with the following stack trace:

terminate called without an active exception
Aborted (core dumped)

我尝试添加提及的if条件,但仍然给出错误。我正在使用pytorch 1.3

1 个答案:

答案 0 :(得分:1)

为了在推理时显示单个类(人,id:0)输出,您只需要添加

cur_scores[1:] *= 0

yolact/layers/functions/detection.py第83行中cur_scores = conf_preds[batch_idx, 1:, :]之后。

然后跑步

!python eval.py --trained_model=weights/yolact_resnet50_54_800000.pth --score_threshold=0.15 --top_k=15 --image=input_image.png:output_image.png

将为您提供单类推断。

如作者在issue#218中所述:

您可以进行更改以保存到NMS计算中, 只需添加cur_scores[<everything but your desired class>] *= 0

对于索引,如果只需要一个人(类别0),则可以放置1:,但是如果您想要另一个类别,则需要执行2条语句:其中一条带有:<class_idx>另一个带有<class_idx>+1:。然后,当您运行eval时,请使用--cross_class_nms=True运行它,这将从NMS中删除所有其他类。

其他方法是修改output_utils.py中的输出。