我正在使用Caffe开展宪法神经网络。
我有一个带有“匈牙利语”图层的原型文件。该图层有两个额外的顶层box_confidences
和box_assignments
。
layer {
name: "hungarian"
type: "HungarianLoss"
bottom: "bbox_concat"
bottom: "boxes"
bottom: "box_flags"
top: "hungarian"
top: "box_confidences"
top: "box_assignments"
loss_weight: 0.03
hungarian_loss_param {
match_ratio: 0.5
permute_matches: true
}
}
然后box_confidences
在另一个图层box_loss
中用作底部
layer{
name: "box_loss"
type: "SoftmaxWithLoss"
bottom: "score_concat"
bottom: "box_confidences"
top: "box_loss"
}
我的疑问是
(1)我是否需要为这些box_confidences
和box_assignments
设置图层?
(2)如有必要,如何在此原型文件中设置图层?该层只是保存blob数据,如何在HungarianLossLayer
类成员函数中使用这两个层可以看作
void HungarianLossLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top){
...............
...............
...............
Dtype* top_confidences = top[1]->mutable_cpu_data();
...............
...............
...............
for (int i = 0; i < num_pred; ++i) {
top_confidences[n * num_pred + i] =
assignment[i] < num_gt_[n] ? Dtype(1) : Dtype(0);
Dtype* top_assignments = top[2]->mutable_cpu_data();
top_assignments[n * num_pred + i] =
assignment[i] < num_gt_[n] ? assignment[i] : Dtype(-1);
}
...............
...............
}
我只是将.....
用于其他一些不易混乱的代码。
因此box_confidences
和box_assignments
只是数据blob,大小为num_pred
。如果不运行代码,我很难知道num_pred
的价值。
在prototxt文件中设置这两个图层的最佳方法是什么?
答案 0 :(得分:0)
box_confidences
和box_assignments
是HungarianLoss
图层输出的要素图(或中间激活)。不需要手动设置此内存,您可以安全地将它们作为网络中后续层(如SoftmaxWithLoss
)的底部blob提供