Machine learning 修改损耗函数更快的rcnn检测器

Machine learning 修改损耗函数更快的rcnn检测器,machine-learning,computer-vision,image-recognition,azure-machine-learning-studio,caffe2,Machine Learning,Computer Vision,Image Recognition,Azure Machine Learning Studio,Caffe2,在我的论文中,我试图修改快速rcnn关于识别表结构的损失函数 目前我正在使用Facebooks Detectron。似乎工作得很好,但我现在正积极尝试修改损失函数。调试我的代码我注意到这是添加loss函数的地方: 调试器找不到mode.net.SmoothL1Loss或SoftmaxWithLoss的任何声明或实现。Detectron使用caffe,当我查看net_builder(初始化model.net)时,我看到它与caffe2进行“绑定”(不知道正确的单词),caffe2本身是一个pyli

在我的论文中,我试图修改快速rcnn关于识别表结构的损失函数

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

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

我是不是找错了地方来对这个loss函数做一个小的调整,还是我真的必须从dcaff开源,调整损失,重新编译lib


您好,

您应该自己实现丢失功能。修改库源代码并重新编译-这不是个好主意:)

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

此外,您还可以创建当前使用的L1平滑或交叉熵的副本,然后在确保它们相同时,可以修改它们。或者,您也可以实现,例如,为Box实现L2 loss并使用它

有关自定义损失的更多信息,请参见caffee文档

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