这是一个三部分问题
1)班级规模 - 我在5个班级培训TF对象检测API,其中大小不在彼此的任何地方:
(总计
这不是训练一个典型的图像分类器所以我猜这不是一个类不平衡的问题,但我想知道它是否会影响结果模型
2)可以使用TF对象检测API来检测其中1被另一个包围/限制的两个对象吗?
实施例。面对人 - 面孔是在人的范围内
3)这是continuation,我发现使用Faster RCNN意味着必须将batch_size设置为1。
正因为如此,我不确定这是否意味着我必须在训练期间等待全局步骤以匹配训练集中的图像数量(在我的自定义数据集中约为340k)。我在谷歌计算w / 4 vCPU和15gig RAM上使用Tesla k80 GPU w / 12 GB内存。大约2天后,我看到损失远远低于1:
INFO:tensorflow:global step 264250:loss = 0.2799(0.755 sec / step)
INFO:tensorflow:global step 264251:loss = 0.0271(0.787 sec / step)
INFO:tensorflow:global step 264252:loss = 0.1122(0.677 sec / step)
INFO:tensorflow:global step 264253:loss = 0.1709(0.797 sec / step)
INFO:tensorflow:global step 264254:loss = 0.8366(0.790 sec / step)
INFO:tensorflow:global step 264255:loss = 0.0541(0.741 sec / step)
INFO:tensorflow:global step 264256:loss = 0.0760(0.781 sec / step)
INFO:tensorflow:global step 264257:loss = 0.0621(0.777 sec / step)
如何确定何时停止?我注意到,直到这里,我从最新的检查点文件生成的冻结推断图似乎只能检测到具有最多图像(即面部)的类,并且没有检测到任何其他内容。
答案 0 :(得分:2)
1)是的,它会以某种方式影响结果。更确切地说,您的模型将非常擅长识别5级和4级,并且可能对其他模型有所了解。考虑将[4,5]的实例数量限制为至少与其他类别的数量级相同。这在开始时尤其有用,因此它对每个类进行了平衡表示。
此处非常重要的是使用数据扩充(请参阅this answer)。
3)通常情况下,你的模型应该采用几个时期来训练,特别是当你有数据增加时。
这是在SO上和存储库中的问题上随处写的:你不知道它是否仅仅从损失的价值中收敛了!。考虑这种情况:输入图像为shuffle: True
,第4类和第5类为344,706个图像。如果随机排列它们使得这些图像位于类[1,2,3]之前,那么您的模型学习到目前为止,有一些很好的表现形式,但是如果因为过度拟合而会遇到超过1级的图像。所以你的损失将会达到很高的价值。
解决方案是并行运行eval.py
,因为这可以让您了解模型在所有类上的执行情况。当你对这个指标满意时,你可以停下来。
请注意,如果StackOverflow针对不同的主题提出不同的问题,这是正常的,因为我们正在为您回答,但也针对您当前职位的所有未来人员。
所以我将在另一个回答2):)