【问题标题】:How to fine tune an object detection model for custom data and classes using Detectron2?如何使用 Detectron2 微调自定义数据和类的对象检测模型?
【发布时间】:2022-08-26 03:52:42
【问题描述】:

我有一个预先训练好的模型权重(.pth)和它的配置(.yaml),我想在我的下游任务中微调这个模型。唯一的问题是我有 1 个班级,而预训练模型有 5 个班级当我使用Detectron2 微调我的模型时,它会为我提供所有 5 个类的结果,而不是我的 1 个类。我该如何处理这种情况?

This is the exact tutorial which I am following 但我不想像thing_classes= ['None','text', 'title', 'list', 'table', 'figure'] 那样在所有 5 个课程上训练我的课程,我只想像 [text] 那样训练一个课程。作者已经回答了,但它对我没有帮助,因为当我在测试期间得到结果时,我得到了所有 5 个类的结果。

Pre-trained Model Weight Pre- trained Model Config

我已将每个实例的 'category_id' 设为 0(因为我只有一堂课)。

下面是我注册数据和所有内容的代码训练没有问题,模型训练得很好

from detectron2.config import get_cfg
from detectron2.engine import DefaultPredictor, DefaultTrainer

!wget -O ./faster_rcnn_R_50_FPN_3x.pth 'https://www.dropbox.com/s/dgy9c10wykk4lq4/model_final.pth?dl=1'

!wget -O ./faster_rcnn_R_50_FPN_3x.yaml 'https://www.dropbox.com/s/f3b12qc4hc0yh4m/config.yml?dl=1'

cfg = get_cfg()
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1 # Just one class predictions

cfg.merge_from_file("./faster_rcnn_R_50_FPN_3x.yaml")
cfg.MODEL.WEIGHTS= './faster_rcnn_R_50_FPN_3x.pth' # layout parser Pre trained weights

cfg.SOLVER.IMS_PER_BATCH = 4
cfg.SOLVER.BASE_LR = 0.0025
cfg.SOLVER.MAX_ITER = 50 #adjust up if val mAP is still rising, adjust down if overfit
cfg.SOLVER.GAMMA = 0.05
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 4

cfg.DATASETS.TRAIN = (Data_Resister_training,)
trainer = DefaultTrainer(cfg) 
trainer.resume_or_load(resume=False)
trainer.train()

【问题讨论】:

    标签: tensorflow deep-learning pytorch object-detection detectron


    【解决方案1】:

    不确定这是否会解决它,但尝试反转 merge_from_file 调用和类数设置:

    cfg = get_cfg()
    cfg.merge_from_file("./faster_rcnn_R_50_FPN_3x.yaml")
    cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1 # Just one class predictions
    ...
    

    也许该参数被覆盖。

    【讨论】:

    • 好的。所以你的意思是说我的方法是正确的并且配置在某处被覆盖?
    • 是的,在那个地方。因为你先设置类数,然后合并文件。但我认为应该反过来。因为如果你打开文件,你会看到文件里面设置了MODEL.ROI_HEADS.NUM_CLASSES。也许,因为它是在您的脚本中设置的,在合并之前,在合并之后您的附加配置会丢失。我不完全确定这会解决它,但你应该试一试
    • 是的,我也这么认为。谢谢你。另外,cfg.MODEL.WEIGHTS 应该在 cfg.MODEL.ROI_HEADS.NUM_CLASSES 之前还是之后加载?
    • 我不确定这个有什么不同。可以肯定的是,我会在之后添加cfg.MODEL.ROI_HEADS.NUM_CLASSES
    • 是的,在哪里没有任何明确的说明。另外,我需要关闭cfg.MODEL.MASK_ONFalse,因为我没有使用Mask RCNN,所以它的位置会有所不同吗?我认为这必须在权重之后完成,因为它们在 faster RCNNMask RCNN yaml 文件中所做的相同。
    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多