MMDet - 图1

  • 训练基本调用逻辑都是forward_train -> forward -> forward_single
  • 测试基本逻辑都是父类simple_test -> 子类及其分支的simple_test

BBoxTestMixin

  • 一个插件,主要实现simple_test时的逻辑
  • 但是rpn,roi,onestage使用的不是同一个BBoxTestMixin

    BaseDenseHead

  • 仅实现了forward_train作为训练基础逻辑

  • 具体的forward,forward_single由子类进行定义

    AnchorHead

  • 定义了forward以及forward_single,通常RPN会重写forward_single

    RPNHead

  • 仅定义了forward_single作为基础逻辑

  • 没有forward_train, 调用BaseDenseHead定义的forward_train
  • 没有forward, 调用AnchorHead定义的forward
  • 训练时使用forward_train(来自父类BaseDenseHead) -> forward(来自父类AnchorHead) -> forward_single(RPNHead)去计算输出cls score以及bboxe pred,然后将forward_single的产生的cls score以及bboxe pred与gt组合一下,再使用loss(RPNHead)计算出loss,然后使用get_bboxes(来自父类BaseDenseHead) 去计算出proposal_list,得出RPN的loss以及proposal。
  • 测试时调用simple_test_rpn(来自父类BBoxTestMixin),然后与训练一致,forward_train(来自父类BaseDenseHead) -> forward(来自父类AnchorHead) -> forward_single(RPNHead)去计算cls score以及bboxe pred, 然后使用get_bboxes(来自父类BaseDenseHead) 去计算出proposal,得到RPN的proposal。

    BaseROIHead

  • 与boxhead不同,没有实现forward_train,均由各个子类实现

    StandardRoIHead