修改损失函数的速度更快 RCNN 检测器



对于我的论文,我试图修改 faster-rcnn 在识别表结构方面的损失函数。

目前我正在使用Facebook的Detectron。似乎工作得很好,但我现在正在积极尝试修改损失函数。调试我的代码时,我注意到这是添加损失函数的地方 fast_rcnn_heads.py:75:

def add_fast_rcnn_losses(model):
"""Add losses for RoI classification and bounding box regression."""
cls_prob, loss_cls = model.net.SoftmaxWithLoss(
    ['cls_score', 'labels_int32'], ['cls_prob', 'loss_cls'],
    scale=model.GetLossScale()
)
loss_bbox = model.net.SmoothL1Loss(
    [
        'bbox_pred', 'bbox_targets', 'bbox_inside_weights',
        'bbox_outside_weights'
    ],
    'loss_bbox',
    scale=model.GetLossScale()
)
loss_gradients = blob_utils.get_loss_gradients(model, [loss_cls, loss_bbox])
model.Accuracy(['cls_prob', 'labels_int32'], 'accuracy_cls')
model.AddLosses(['loss_cls', 'loss_bbox'])
model.AddMetrics('accuracy_cls')
return loss_gradients

调试器找不到 mode.net.SmoothL1Loss 或 SoftmaxWithLoss 的任何声明或实现。Detectron 使用 caffe,当我查看 net_builder(它 model.net)时,我看到它与 caffe2 进行了"绑定"(不知道正确的单词),它本身是一个 pylib,后面有一个编译的库。

是否找错了地方对这个损失函数进行小幅调整,或者我真的必须从 dcaffe 打开 de 源代码,调整损失,重新编译库?

迎接

你应该自己实现损失函数。修改库源代码并重新编译它 - 这不是一个好主意:)

您可以创建python函数,该函数将获取GT和预测数据并返回损失值。

您也可以创建当前使用的L1平滑或交叉熵的副本,然后,当您确定它们相同时,您可以修改它们。或者,例如,您可以实现盒子的 L2 损失并改用它。

有关自定义损失的更多信息,您可以在咖啡费文档中找到。

最新更新