1、在训练hourglass和Pyranet的时候都会出现训练的时候acc会nan,why?
根据acc的代码,只有在分母为0的时候才会出现Nan的情形,以coco为例,badIdxCount是17,造成nan。
为什么badIdxCount会是17呢?
返回的全是-1,为什么会返回全是-1?
只能是给出的17个部位的标签全部是1引起来的,为什么全是1,原因是因为17张map图都是0,值,原因在于很多coco的标注点特别接近边缘,再进行旋转缩放的时候很容易把标注点切掉,特别对于只有一个标注点的样本,所以就会出现出来的图像没有标注点,17个通道的target都是0值,从而导致最后的nan得情况,但是注意这只是在batchsize=1的情况下才会出现这种情况
batchsize>1,就很少可以说不会出现这种情况。why?
原因是因为batchsize>1的清醒下,依次输入网络是好几张图片一起,以PyraNet为例
如果batchsize为3的话
对应的输入,输出,target的大小如下
相应的输出代码
print('input')
print(self.input:size())
print(self.input:type())
print('output')
print(#output)
print(output)
print('target')
print(#self.target)
print(self.target)
对于batchsize大于1的情形,因为是连续的n张一起做测评,所以几乎不可能说n张图片都是一个标注点都不存在,这样的概率很低很低,至少在batchsize>1的条件下进行训练的时候发现没有nan的情形出现
2、
size = self.iters * self.batchsize
训练的一个epoch是batchsize*迭代的次数之积