对于我的论文,我正在尝试修改 fast-rcnn 在识别表结构方面的损失函数。
目前我正在使用 Facebooks 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 进行了“绑定”(不知道正确的词),caffe2 本身就是一个 pylib,后面有一个编译的库。
我是否在错误的地方对这个损失函数进行了微调,或者我真的必须从 dcaffe 打开 de 源代码,调整损失,重新编译 lib?
问候,