Open twmht opened 5 years ago
我看 retinaface 的 paper (https://arxiv.org/abs/1905.00641) 也沒有解釋它們怎麼算的...
對於整個算法我的理解
batch_conf: a1_c1, a1_c2 a2_c1, a2_c2 ... an_cn, an_cn
log_sum_exp(batch_conf) 是把 batch_conf 弄成
a1_c1, + a1_c2 a2_c1 + a2_c2 ... an_cn + an_cn
這邊為了方便省略 log 的計算了...
然後去扣這個 anchor 對到的 bounding box (可能是背景),如果是背景的話,就盡可能讓網路學習把前景的 conf 學成 0
我這樣的理解對嗎?
@twmht 这个公式是手动计算cross_entropy为后续ohem作准备的,交叉熵公式-pi*log(qi), 其中pi=1,qi为Softmax的结果,因此公式简化为log( exp(x0-xmax) + exp(x1-xmax) ) - log( exp(xi-xmax) ) = log( exp(x0-xmax) + exp(x1-xmax) ) + xmax - xi = log_sum_exp(xi) - xi, xi为网络的输出值,x0代表背景,x1代表人脸
有一段不是很能理解
https://github.com/biubug6/Pytorch_Retinaface/blob/master/layers/modules/multibox_loss.py#L101
loss_c = log_sum_exp(batch_conf) - batch_conf.gather(1, conf_t.view(-1, 1))
batch_conf
的 shape 是 (num_anchors, 2)但這邊是透過 log_sum_exp 把 batch_conf 中每個 anchor 對於每個 class 的值相加取 log (
log_sum_exp(batch_conf)
),但是第一個 class 不是背景嗎?有需要把背景考慮進來?後面又更不懂,
batch_conf.gather(1, conf_t.view(-1, 1))
,這邊為什麼沒有做 log_sum_exp可以解釋一下這邊的意思嗎?
謝謝