这是一个由三部分组成的问题
1) 类大小 - 我正在 5 个类上训练 TF 对象检测 API,其中大小彼此并不接近:
- 第1类图像数量:401
- 第2类图像数量:389
- 第3类图像数量:532
- 第4类图像数量:159393
- 第5类图像数量:185313
(total
这不是训练典型的图像分类器,所以我猜这并不是真正的类别不平衡问题,但我想知道它是否会影响结果模型
2) TF 对象检测 API 能否用于检测 1 被另一个包围/包围的两个对象?
前任。脸与人 - 脸在人的范围内
3)这是一个延续我发现使用 Faster RCNN 意味着 batch_size 必须设置为 1。
正因为如此,我不确定这是否意味着我必须在训练期间等待全局步骤来匹配训练集中的图像数量(我的自定义数据集中约为 340k)。我在 Google 计算上使用 Tesla k80 GPU(带 12 GB 内存),带 4 个 vCPU 和 15g RAM。大约 2 天后,我发现损失远低于 1:
信息:张量流:全局步骤264250:损失= 0.2799(0.755秒/步)
信息:张量流:全局步骤264251:损失= 0.0271(0.787秒/步)
信息:tensorflow:全局步骤264252:损失= 0.1122(0.677秒/步)
信息:张量流:全局步骤264253:损失= 0.1709(0.797秒/步)
信息:张量流:全局步骤264254:损失= 0.8366(0.790秒/步)
信息:张量流:全局步骤264255:损失= 0.0541(0.741秒/步)
信息:tensorflow:全局步骤264256:损失= 0.0760(0.781秒/步)
信息:张量流:全局步骤264257:损失= 0.0621(0.777秒/步)
如何确定何时停止?我注意到,直到这里,我从最新的检查点文件生成的冻结推理图似乎只检测到图像数量最多的类(即面部),并且没有检测到其他任何内容。
1)是的,它会以某种方式影响结果。更准确地说,您的模型将非常擅长识别 5 类和 4 类,并且它may对其他人有自己的想法。考虑将 [4, 5] 的实例数量限制为至少与其他类处于相同的数量级。这在开始时尤其有用,因此它可以平衡每个类别的表示。
这里也非常重要的是使用数据增强(参见这个答案).
3)通常,你的模型应该需要几个时期才能很好地训练,特别是当你有数据增强时。
这在 SO 和存储库中的问题上到处都有写:你无法知道它是否仅从损失值收敛!。考虑这种情况:你有shuffle: True
对于您的输入图像,第 4 类和第 5 类中的 344,706 个图像。如果随机排列它们,使这些图像出现在来自类 [1,2,3] 的图像之前,那么您的模型到目前为止学到了一些很好的表示,但是当它遇到由于过度拟合,1 类图像会出现过冲。所以你的损失会跳到某个非常高的值。
解决方案是运行eval.py
并行,因为这可以让您了解模型如何执行all类。当您对该指标感到满意时,您可以停止。
请注意,在 StackOverflow 上,如果问题涉及不同的主题,则提出单独的问题是正常的,因为我们不仅为您回答,也为您当前职位的所有未来人员回答。
所以我会用另一个答案来回答 2) :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)