bilylee / SiamFC-TensorFlow

A TensorFlow implementation of the SiamFC tracker
MIT License
358 stars 112 forks source link

BN 层问题 #27

Closed noUmbrella closed 6 years ago

noUmbrella commented 6 years ago

您好!想确认一下在测试过程中BN层的mean和var用的是训练过后得到的全局的还是测试样本自身的呢?

pmixer commented 6 years ago

@noUmbrella ?BN参数在运行阶段有用测试样本的么?

noUmbrella commented 6 years ago

我也在研究这个东西,有兴趣的话可以加一下QQ讨论吗?@PeterHuang2015

pmixer commented 6 years ago

@noUmbrella 基本不用qq,可以建议项目所有者开个 gitter

noUmbrella commented 6 years ago

求问:我不是很理解作者训练过程中embeddings/convolutional_alexnet.py/里面的'updates_collections': None, # Ensure that updates are done within a frame是什么意思,不是一个batch更新一次BN的mean和var吗?还有就是后面设置了'updates_collections': None, ,BN没有更新OP,不更新吗?BN怎么运行的还希望详细赐教,谢谢了@PeterHuang2015@bilylee

bilylee commented 6 years ago

hi,

  1. 测试时不会更改 BN 层的统计量;
  2. BN 层在 TF 中的更新方式有两种:一种是在 BN 层构建更新统计量的 op,由 BN 层自己更新。这个时候我们说所有的操作都在同一个 frame。另一种是将更新统计量的 op 放到 updates_collections 中,然后在 BN 层之外,调用这个 op 手动更新统计量。这个时候我们说操作不在同一个 frame。本项目使用第一种方式,这样代码比较简单,且能避免一些跟 frame 有关的 bug。
noUmbrella commented 6 years ago

感谢作者的回答。我还有一个地方不太理解,什么叫“所有的操作都在同一个 frame”和“操作不在同一个 frame”,能举个例子对比一下什么情况是“所有的操作都在同一个 frame”,什么情况是“操作不在同一个 frame”吗?一般用resnet做分类任务,那里的BN更新属于哪种呢?谢谢!@bilylee

pmixer commented 6 years ago

@noUmbrella 如作者所说,你的问题其实涉及 tf 里面的计算图构造和参数更新方式以及BN层相关理论,建议主动去搜资料来学习,例:

https://blog.csdn.net/u011630575/article/details/78064095

https://stackoverflow.com/questions/34235557/what-is-the-purpose-of-graph-collections-in-tensorflow

另外您当前的关注点可能比较细碎,有一个更明确的目标(比如:学习算法或者学习本实现的代码实现方法)可能帮助避免未来的一些坑。这里的跟踪问题是逐帧的,与分类任务不大相同。祝好。