【问题标题】:How to tune tensorflow object detection output?如何调整 tensorflow 对象检测输出?
【发布时间】:2018-04-04 12:43:29
【问题描述】:

我在tutorial 之后使用了 Tensorflow 对象检测 API,并训练它来预测三个类别的自定义图像。在 49K 步后,大部分损失

: [[2。 1. 3. 3. 2. 2. 1. 3. 2. 1. 2. 2. 2. 2. 2. 2. 2. 2. 2. 1. 2. 2. 3. 2. 3. 2. 2. 2. 2. 3. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 1. 2. 2. 3. 2. 2. 2. 2. 2. 1. 2. 2. 1. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 3. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 3. 2. 2. 2. 1. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 3. 2. 2. 2. 1. 2. 2. 2. 2. 3. 3. 2. 2.]]

得分 [[9.34299827e-01 9.87844169e-02 7.54007278e-03 3.31299962e-04 8.95422545e-06 8.40702705e-06 7.37192840e-06 2.25948543e-06 1.55862494e-06 1.32166167e-06 9.75570629e-07 5.88678745e-07 5.05015009e-07 4.21588567e-07 2.58588926e-07 2.14299249e-07 1.97753181e-07 1.18188609e-07 7.23913232e-08 6.49422844e-08 6.09321731e-08 5.54216335e-08 4.88208514e-08 4.80325468e-08 4.59127847e-08 4.42321024e-08 4.26271001e-08 3.75534768e-08]]

正确的班级标签是 3,与其他 2 个班级相比得分非常低。对于这个检查点,它有利于第 2 类,我尝试重新训练并提前停止,然后发现模型偏向于不同的类。但所有这些都由指数分数组成。当我尝试使用教程数据集和记录文件时,它包含 6 个类。通过提前停止,我得到了不同的归一化输出,更重要的是,它能够预测多个类别,尽管准确性很差,但分数是正常的。

类: [[1。 6. 6. 6. 1. 1. 1. 5. 6. 1. 6. 6. 1. 6. 5. 5. 5. 5. 5. 6. 6. 3. 3. 3. 3. 1. 5. 4. 3. 1. 3. 5. 1. 2. 2. 5. 1. 3. 5. 3. 6. 6. 6. 5. 3. 4. 1. 4. 1. 2. 3. 5. 6. 4. 3. 4. 3. 4. 3. 3. 1. 5. 4. 2. 6. 4. 3. 4. 3. 2. 2. 2. 1. 6. 2. 3. 3. 6. 2. 6. 2. 1. 1. 4. 4. 2. 3. 2. 4. 4. 3. 4. 2. 4. 4. 4.]]

得分 [[0.8057396 0.54363483 0.41639847 0.4116147 0.40117604 0.30583626 0.28162587 0.19588488 0.17949946 0.17705482 0.14739332 0.1368773 0.11625872 0.09852906 0.09733354 0.09538303 0.09463519 0.07830063 0.07063951 0.06350185 0.06187743 0.05515279 0.05392814 0.05084944 0.04962941 0.04584368 0.04244312 0.04015012 0.03859867 0.03793424 0.03495875 0.03406471 0.03277094 0.03216837 0.03211389 0.0311062 0.03045315 0.03031772 0.02878817 0.02855495 0.02775684 0.02764305 0.02756038 0.0258495 0.02555148 0.02552066 0.02524703 0.0251481 0.02503884 0.024954 0.02364612 0.02353399 0.02353344 0.02315213 0.0230271 0.02294012 0.02266986 0.02261656 0.02215081 0.02189769]]

我想知道为什么经过这么多步骤并且价值非常低,我的模型表现很差,以及为什么它坚持单类。我该如何解决这个问题?

我使用 600 张图像作为试验和 72 张作为验证。我使用 labelIMG 裁剪图像。

【问题讨论】:

    标签: python tensorflow machine-learning neural-network deep-learning


    【解决方案1】:

    首先,很难说 600 张图像是否足以训练您的模型。可能问题比较难,需要更多例子。

    分数本身并没有说明什么。可能是这些示例只是令人困惑,或者它们与训练数据集差异太大(再次指出您需要更多示例)。

    你也没有表现出任何暗示你没有过度拟合的东西。

    所以考虑以下几点:

    • 考虑为预测层切换到 softmax(使分数加起来为 1。)
    • 计算每个类别和每个数据集的精度和召回率。比较训练集和验证集之间的数字。如果您发现差异很大,则可能是过度拟合或需要更多示例。
    • 计算混淆矩阵。
    • 一旦您确定了潜在的问题点(例如,“3”类的召回率低),请查看示例。这可能是非常明显的事情。

    【讨论】:

    • 感谢您的建议。这是通过在使用 softmax 的 tensorflow API 中微调 Faster RCNN 模型来完成的。输出是每个提案的类别和相应的分数。据说每班 100 张图片就足够了,我每张图片使用 200 张。问题是提案是正确的,但类别预测是错误的。另外我使用训练数据只是为了测试模型,这个输出对于训练数据是不可接受的。
    • @Unbanned Softmax:我觉得这很难相信,因为激活次数必须加起来为 1。 7.45e-3 不能是 3 个类中的最大值,因为 7.45e-3 * 3 比 1 小得多。一定是某个地方出了问题。
    • @Unbanned 对于示例的数量,这取决于您的任务与最初训练的任务相比有多相似。如果它非常相似,那么你是对的。我不知道细节,所以不能说够不够。
    • 嗯它的信心,我不完全确定它是如何计算的,但我知道模型使用 softmax 分类器。但我明白你的意思,第二个以非常小的步骤停止的模型具有更好的输出。我将尝试验证该过程以找到问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多