仅掩码 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
我已经为绵羊训练了相同的代码库。你必须做两件事:
改变火车并推断 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()
您需要创建要训练的数据集。你可以这样使用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)
我希望只使用一个 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
我已经为绵羊训练了相同的代码库。你必须做两件事:
改变火车并推断 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()
您需要创建要训练的数据集。你可以这样使用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)