我正在阅读论文Training Region-based Object Detectors with Online Hard Example Mining,实现在线硬示例挖掘的一种方法是擦除(乘以零)损失张量的某些元素。然而,在本文中,作者声称这将是低效的,因为当前的深度学习框架甚至为0个丢失张量分配内存并执行backprop
。不幸的是,作者没有提到这样做的框架,因此我想了解Tensorflow
和PyTorch
。
此外,如果不是将损失乘以零,而是仅从损失中收集我感兴趣的切片,那么可以避免通过不感兴趣的RoI反向传播吗?例如:
active_rois = tf.where(tf.not_equal(rois, 0)) # get the rois I care about
truth = tf.gather(truth, active_rois) # filter gt tensor
pred = tf.gather(pred, active_rois) # filter pred tensor
loss = compute_loss(truth, pred)
我之前提到的论文摘录:
损耗层可以计算所有RoI的损耗,并基于此对它们进行排序 选择硬投资回报率,最后设置所有非硬投资损失 RoIs为0。虽然简单明了,但此实现是 RoI网络仍然分配内存并执行,因此效率低下 即使大多数RoI的亏损为0, 因此没有梯度更新(当前深度学习的局限性) 工具箱)。