检测器|案例解析:用Tensorflow和Pytorch计算骰子值( 三 )


第一个模型所犯的错误通常不是检测某些骰子 , 也不是如上所述错误分类以及某些数字 。 常见的是6s vs 9s , 1s vs 7s , 8s vs 3s vs 6s 。 下面的图像有3个未检测到的骰子和3个被归类为6的骰子 。
检测器|案例解析:用Tensorflow和Pytorch计算骰子值文章插图
来自第一个单一物体检测模型的图像
两阶段管道通过识别丢失的3个骰子并且正确地将所有骰子面部分类为41来优于第一模型 。
检测器|案例解析:用Tensorflow和Pytorch计算骰子值文章插图
然而 , 第二个模型仍然存在问题 , 在25个案例中 , 我看到了它没有正确检测10面骰子面部的问题(两个模型都做得不好) , 然后将6s错误分类为9s 。 要解决此问题 , 我必须检查以确保我在数据集的6和9文件夹中没有任何问题 , 如果这不能解决问题 , 那么使用更多9s和6s的图像来扩充数据 。 在这两种机制之间 , 我认为这有助于解决很多问题 。 对于错误识别10面骰子上的面部 , 我认为为该特定骰子添加更多数据将是有用的 。
检测器|案例解析:用Tensorflow和Pytorch计算骰子值文章插图
真值应该是41 , 但是有3左右的差值 。 我认为这个情况是归结为没有标记的6面骰子 。 事实上 , 在6和9文件夹
最后的想法
所以在这篇文章中 , 我展示了如何构建我之前在第一个骰子计数帖中提到的两阶段管道 。 此外 , 我很高兴地表示 , 两阶段管道确实胜过我的第一个模型 , 并且在检测骰子面部然后对面部进行分类方面做得更好 。 对我而言 , 这是另一个建立良好专业模型的实例 , 执行通用方法 。
神经网络的相似之处在于它们通常需要数千个示例才能汇聚形成一个好的解决方案并学会识别特定的类 。 因此 , 简化他们必须优化的事物 , 可以让他们更好地针对特定问题进行优化并了解其细节 。 从技术意义上讲 , 对于我的12级探测器 , 它可能只能看到几十个特定的骰子 , 并且必须学会根据这几个例子进行本地化和分类 。 然而单级检测器看到它的单级2500次 。 然后第二级模型可能只看到每个类几十到几百次 , 但它显著增加了数据 , 大大增加了它的有效训练数据量的处理 。 这使得它在分类时比基本对象检测模型能获得更多的经验 。
这种增加的专业化带来了更多的复杂性 , 即训练更多模型并在管道中实施它们 。 在这种情况下 , 两级流水线需要2个GPU才能平稳运行 , 而不是单个型号只需1个GPU 。 从技术上讲 , 我可以尝试不使用Tensorflow ... 因为我在使用Pytorch之前一次运行3-4个大型ResNets 。这种速度与准确度权衡的价值都取决于特定任务所需的准确度与速度之间的关系 。
检测器|案例解析:用Tensorflow和Pytorch计算骰子值文章插图
【检测器|案例解析:用Tensorflow和Pytorch计算骰子值】你可以在这里找到github上的代码()
检测器|案例解析:用Tensorflow和Pytorch计算骰子值文章插图