仅掩码 RCNN 1 class

Mask RCNN 1 class only

我希望只使用一个 class 人(连同 BG、背景)来进行 Mask RCNN 对象检测。我正在使用这个 link: https://github.com/matterport/Mask_RCNN 到 运行 mask rcnn。有没有特定的方法来完成这个(编辑特定文件,创建额外的 python 文件,或者只是通过过滤 class_names 数组中的选择)?任何方向或解决方案将不胜感激。谢谢

您链接的 github 的作者制作了一个气球示例,它写得很好,只包含一个 class(气球),您应该遵循本教程:https://engineering.matterport.com/splash-of-color-instance-segmentation-with-mask-r-cnn-and-tensorflow-7c761e238b46

我已经为绵羊训练了相同的代码库。你必须做两件事:

  1. 改变火车并推断 class 数字为 1 + 1(bg 和 person):

     class SheepsConfig(Config):
    
         NAME = "sheeps"
         NUM_CLASSES = 1 + 1 # background + sheep
    
     config = SheepsConfig()  # Don't forget to use this config while creating your model
     config.display()
    
  2. 您需要创建要训练的数据集。你可以这样使用coco:

     import coco
     from pycocotools.coco import COCO
    
     ct = COCO("/YourPathToCocoDataset/annotations/instances_train2014.json")
     ct.getCatIds(['sheep']) 
     # Sheep class' id is 20. You should run for person and use that id
    
     COCO_DIR = "/YourPathToCocoDataset/"
     # This path has train2014, annotations and val2014 files in it
    
     # Training dataset
     dataset_train = coco.CocoDataset()
     dataset_train.load_coco(COCO_DIR, "train", class_ids=[20])
     dataset_train.prepare()
    
     # Validation dataset
     dataset_val = coco.CocoDataset()
     dataset_val.load_coco(COCO_DIR, "val", class_ids=[20])
     dataset_val.prepare()
    

然后只需将您的模型创建为:

# Create model in training mode
model = modellib.MaskRCNN(mode="training", config=config, model_dir=MODEL_DIR)
model.load_weights(COCO_MODEL_PATH, by_name=True, exclude=["mrcnn_class_logits", "mrcnn_bbox_fc", "mrcnn_bbox", "mrcnn_mask"])
# This COCO_MODEL_PATH is the path to the mask_rcnn_coco.h5 file in this repo

然后你可以用这段代码训练它:

model.train(dataset_train, dataset_val,
        learning_rate=config.LEARNING_RATE, 
        epochs=100, 
        layers='heads')#You can also use 'all' to train all network.

不要忘记使用 tensorflow 1.x 和 keras 2.1.0 :) 我可以使用这些版本进行训练。

我试着按照@dnl_anoj 的建议“只显示 class 人的结果”。我从预测结果中删除了除 class 这个人之外的所有 classes。您可以在 https://github.com/matterport/Mask_RCNN.

中的 predictor.py 文件中的 run_on_opencv_image() 函数中使用以下代码
predictions = self.coco_demo.compute_prediction(image)
top_predictions = self.coco_demo.select_top_predictions(predictions)

masks = top_predictions.get_field("mask")
boxes = top_predictions.bbox
label_indexs = top_predictions.get_field("labels").numpy()

x = np.where(label_indexs != 1) # get indexes of labels which are not person

#remove items which are not person class
masks = np.delete(masks,x, axis=0)
boxes = np.delete(boxes,x, axis=0)
label_indexs = np.delete(label_indexs,x)
labels = self.convert_label_index_to_string(label_indexs)