Tensorflow 对象检测培训最佳实践问题
Tensorflow Object Detetection training best practice questions
大规模图像训练:
我正在尝试在 4K 分辨率的图像上训练车辆检测器,每张图像大约有 100 辆小型车辆(车辆尺寸约为 100x100 像素)。
我目前使用的是全分辨率,这会占用我大量的内存。我正在使用 32 个内核和 128 GB RAM 进行训练。目前的架构是 Faster RCNN。我可以使用 12 的第二阶段批量大小和 50 的 first_stage_mini_batch_size 进行训练。(我将两者都缩小直到我的内存足够)。
- 我假设我应该增加 RPN 提议的最大数量。哪个尺寸合适?
- 这种方法有意义吗?
难度、截断、标签和姿势:
我目前只将我的数据集分成三个 类(汽车、卡车、货车)。
我假设提供额外的信息,例如:
- 困难(主要是隐藏车辆),
- 截断(我目前没有select截断对象,但我可以)
将改进培训过程。
截断会包括重叠的车辆吗?
像views/poses和其他标签这样的附加信息是否也会改进训练过程,还是会使训练更难?
正在向训练集添加新数据:
- 是否可以将新图像和对象添加到训练和验证记录文件中,并使用训练目录中的最新检查点文件自动恢复训练?或者 "fine_tune_checkpoint" 和 "from_detection_checkpoint" 选项是否必要?
- 如果训练数据和验证数据的随机分离会选择与之前训练不同的数据集,这会有什么坏处吗?
对于您的问题,由于图像的高分辨率和小型汽车,开箱即用的配置文件效果不佳。我推荐:
- 裁剪训练 --- 将您的图像裁剪成较小的裁剪,使汽车大致保持与现在大致相同的分辨率。
- 作物评估 --- 在推理时,将您的图像切割成一堆重叠的作物,然后 运行 对这些作物中的每一个进行推理。通常人们使用非最大抑制将多种作物的检测结果结合起来。请参阅此处 slide 25 以了解相关说明。
- 我高度推荐使用 GPU 或更好的多 GPU 进行训练。
- 避免一开始就调整 batch_size 参数 --- 它们被设置为开箱即用,更改它们通常会使调试变得困难。
- 目前 difficult/truncated/pose 字段在训练期间未使用,因此包含它们不会有什么不同。
- 我切换了评估和训练数据(在配置中),训练继续正常进行,使用完全相同的命令启动它。
- 有关于从上一个检查点恢复参数的日志
- 当我切换test/train data mAP 立即射出月亮
- tensorboard 中的图像选项卡已更新
看来更改数据工作正常。我不确定它如何影响模型,基本上它是在没有这些示例的情况下进行预训练并使用它们进行微调的
日志:
INFO:tensorflow:Restoring parameters from /home/.../train_output/model.ckpt-3190
- 这导致 train/test 污染和实际模型性能假设低于在受污染的验证数据集上计算的性能。除非您想呈现一些定义明确的结果,否则您不必担心太多
来自 https://arxiv.org/abs/1311.2901 的现实生活示例:
ImageNet 和 Caltech 数据集有一些共同的图像。在评估使用 ImageNet 训练的模型在 Caltech 作为验证时的表现如何时,您应该在训练前从 ImageNet 中删除重复项。
大规模图像训练:
我正在尝试在 4K 分辨率的图像上训练车辆检测器,每张图像大约有 100 辆小型车辆(车辆尺寸约为 100x100 像素)。
我目前使用的是全分辨率,这会占用我大量的内存。我正在使用 32 个内核和 128 GB RAM 进行训练。目前的架构是 Faster RCNN。我可以使用 12 的第二阶段批量大小和 50 的 first_stage_mini_batch_size 进行训练。(我将两者都缩小直到我的内存足够)。
- 我假设我应该增加 RPN 提议的最大数量。哪个尺寸合适?
- 这种方法有意义吗?
难度、截断、标签和姿势:
我目前只将我的数据集分成三个 类(汽车、卡车、货车)。
我假设提供额外的信息,例如:
- 困难(主要是隐藏车辆),
- 截断(我目前没有select截断对象,但我可以)
将改进培训过程。
截断会包括重叠的车辆吗?
像views/poses和其他标签这样的附加信息是否也会改进训练过程,还是会使训练更难?
正在向训练集添加新数据:
- 是否可以将新图像和对象添加到训练和验证记录文件中,并使用训练目录中的最新检查点文件自动恢复训练?或者 "fine_tune_checkpoint" 和 "from_detection_checkpoint" 选项是否必要?
- 如果训练数据和验证数据的随机分离会选择与之前训练不同的数据集,这会有什么坏处吗?
对于您的问题,由于图像的高分辨率和小型汽车,开箱即用的配置文件效果不佳。我推荐:
- 裁剪训练 --- 将您的图像裁剪成较小的裁剪,使汽车大致保持与现在大致相同的分辨率。
- 作物评估 --- 在推理时,将您的图像切割成一堆重叠的作物,然后 运行 对这些作物中的每一个进行推理。通常人们使用非最大抑制将多种作物的检测结果结合起来。请参阅此处 slide 25 以了解相关说明。
- 我高度推荐使用 GPU 或更好的多 GPU 进行训练。
- 避免一开始就调整 batch_size 参数 --- 它们被设置为开箱即用,更改它们通常会使调试变得困难。
- 目前 difficult/truncated/pose 字段在训练期间未使用,因此包含它们不会有什么不同。
- 我切换了评估和训练数据(在配置中),训练继续正常进行,使用完全相同的命令启动它。
- 有关于从上一个检查点恢复参数的日志
- 当我切换test/train data mAP 立即射出月亮
- tensorboard 中的图像选项卡已更新
看来更改数据工作正常。我不确定它如何影响模型,基本上它是在没有这些示例的情况下进行预训练并使用它们进行微调的
日志:
INFO:tensorflow:Restoring parameters from /home/.../train_output/model.ckpt-3190
- 这导致 train/test 污染和实际模型性能假设低于在受污染的验证数据集上计算的性能。除非您想呈现一些定义明确的结果,否则您不必担心太多
来自 https://arxiv.org/abs/1311.2901 的现实生活示例: ImageNet 和 Caltech 数据集有一些共同的图像。在评估使用 ImageNet 训练的模型在 Caltech 作为验证时的表现如何时,您应该在训练前从 ImageNet 中删除重复项。