我有一个预先训练的模型权重(如.pth
)和它的配置(作为.yaml
),我想微调这个模型在我的下游任务。唯一的问题是,我有一个类,而预先训练的模型有5个类,当我用Detectron2
对模型进行精细调整时,它给出了所有5个类的结果,而不是我的1个类。我该如何处理这种情况呢?
这正是我所遵循的教程。 --但我不想把我所有5个班的课程训练成thing_classes= ['None','text', 'title', 'list', 'table', 'figure']
,我只想在一个班级上训练为text
。作者已经回答了,但是这并没有帮助我,因为当我在测试中得到结果时,我得到了所有5个类的结果。
我已经将每个实例的'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()
发布于 2022-08-25 19:52:42
不确定这是否会修复它,但请尝试倒转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
...
也许这个参数会被覆盖。
https://stackoverflow.com/questions/73492096
复制相似问题