2

我有一个高度不平衡的数据,我知道一些用户建议使用InfoGainLoss损失函数,但是,当我尝试将此函数添加到Caffe layers.
我有以下问题,如果有人指导我,我真的很感激:

  1. 如何将此图层添加到 Caffe?有谁知道这一层的任何来源/代码?
  2. 我想将其应用于图像分割,并且某些类别的比例会有所不同。如何H为我的图像创建矩阵(一堆权重)?infoGainLoss 层如何读取与该特定图像相关的特定权重矩阵(H)?
  3. 将InforGainLoss图层的cppand版本添加到caffe后,我应该重新制作Caffe吗?cu

对于几个问题,我很抱歉,但都是我关心的问题,并且彼此相关。我会很感激能得到一些帮助和支持。谢谢

4

1 回答 1

2

1.如果您从当前复制,infogain_loss_layer.cpp您可以轻松适应。对于向前传球更改线 59-66,如:

// assuming num = batch size, dim = label size, image_dim = image height * width
Dtype loss = 0;
for (int i = 0; i < num; ++i) {
  for(int k = 0; k < image_dim; k++) {
    int label = static_cast<int>(bottom_label[i*image_dim+k]);
    for (int j = 0; j < dim; ++j) {
      Dtype prob = std::max(bottom_data[i *image_dim *dim+ k * dim + j], Dtype(kLOG_THRESHOLD));
      loss -= infogain_mat[label * dim + j] * log(prob);
    }
  }
}

同样,对于向后传递,您可以将第 95-101 行更改为:

for (int i = 0; i < num; ++i) {
  for(int k = 0; k < image_dim; k++) {
    const int label = static_cast<int>(bottom_label[i*image_dim+k]);
    for (int j = 0; j < dim; ++j) {
      Dtype prob = std::max(bottom_data[i *image_dim *dim+ k * dim + j], Dtype(kLOG_THRESHOLD));
      bottom_diff[i *image_dim *dim+ k * dim + j] = scale * infogain_mat[label * dim + j] / prob;
    }
  }
}

这有点天真。我似乎没有找到任何优化选项。您还需要在 reshape 中更改一些设置代码。

2.在这个 PR建议中,对于Hputmin_count/|i|中的对角线条目|i|,样本数在哪里label i。其他一切都为 0。另见此。至于加载权重矩阵H对于所有输入都是固定的。您可以将其加载为 lmdb 文件或以其他方式。

3.是的,您需要重建。

更新:正如Shai指出的那样,这周的信息增益拉动已经获得批准。所以当前版本的 caffe 支持像素级信息增益损失。

于 2017-04-20T19:05:16.060 回答