{
  "id": 62215,
  "title": "A corner case of evaluation",
  "url": "/competitions/google-ai-open-images-object-detection-track/discussion/62215",
  "author_name": "",
  "post_date": "2018-07-29T20:25:32.081032400Z",
  "votes": 2,
  "comment_count": 2,
  "views": 0,
  "content": "<p>I have a question about the GetPredictions() function in the <a href=\"https://gist.github.com/wendykan/8b800e70251aa784b2f73283d1315ebd\">Kaggle's production code in C# </a>:</p>\n\n<p>For a certain class, in a certain image, let's assume we have only two ground-truth boxes G1 and G2. And we only have two predicted boxes P1 and P2.</p>\n\n<p>If we know:</p>\n\n<ul>\n<li>P1.Confidence &gt; P2.Confidence</li>\n<li>IoU(P1, G1) &gt; IoU(P1, G2)</li>\n<li>IoU(P1, G1) &gt; 0.5</li>\n<li>IoU(P2, G1) &gt; IoU(P2, G2) &gt; 0.5</li>\n</ul>\n\n<p>There is no doubt that P1 is a True Positive.</p>\n\n<p>According to the current implementation, P2 will be considered as a false positive. Because G1 is the ground truth box who has the largest IoU with G1 and has already been matched by P1. But there really exists a Ground truth box G2, who has not been matched yet and has a IoU with P2 larger than 0.5. <strong>Should P2 be considered as a True Positive case rather than a False Positive case?</strong></p>",
  "messages": [
    {
      "id": "363668",
      "postDate": "07/29/2018 20:25:32",
      "content": "<p>I have a question about the GetPredictions() function in the <a href=\"https://gist.github.com/wendykan/8b800e70251aa784b2f73283d1315ebd\">Kaggle's production code in C# </a>:</p>\n\n<p>For a certain class, in a certain image, let's assume we have only two ground-truth boxes G1 and G2. And we only have two predicted boxes P1 and P2.</p>\n\n<p>If we know:</p>\n\n<ul>\n<li>P1.Confidence &gt; P2.Confidence</li>\n<li>IoU(P1, G1) &gt; IoU(P1, G2)</li>\n<li>IoU(P1, G1) &gt; 0.5</li>\n<li>IoU(P2, G1) &gt; IoU(P2, G2) &gt; 0.5</li>\n</ul>\n\n<p>There is no doubt that P1 is a True Positive.</p>\n\n<p>According to the current implementation, P2 will be considered as a false positive. Because G1 is the ground truth box who has the largest IoU with G1 and has already been matched by P1. But there really exists a Ground truth box G2, who has not been matched yet and has a IoU with P2 larger than 0.5. <strong>Should P2 be considered as a True Positive case rather than a False Positive case?</strong></p>",
      "rawMarkdown": "I have a question about the GetPredictions() function in the [Kaggle's production code in C# ][1]:\n\nFor a certain class, in a certain image, let's assume we have only two ground-truth boxes G1 and G2. And we only have two predicted boxes P1 and P2.\n\nIf we know:\n\n\n - P1.Confidence &gt; P2.Confidence\n - IoU(P1, G1) &gt; IoU(P1, G2)\n - IoU(P1, G1) &gt; 0.5\n - IoU(P2, G1) &gt; IoU(P2, G2) &gt; 0.5\n\nThere is no doubt that P1 is a True Positive.\n\nAccording to the current implementation, P2 will be considered as a false positive. Because G1 is the ground truth box who has the largest IoU with G1 and has already been matched by P1. But there really exists a Ground truth box G2, who has not been matched yet and has a IoU with P2 larger than 0.5. **Should P2 be considered as a True Positive case rather than a False Positive case?**\n\n\n  [1]: https://gist.github.com/wendykan/8b800e70251aa784b2f73283d1315ebd",
      "votes": null
    },
    {
      "id": "369055",
      "postDate": "08/11/2018 19:55:21",
      "content": "<p>Wow, 13 days, no reply.</p>\n\n<p>The <code>culprit</code> code seems to be</p>\n\n<pre><code>var indxMax = metaIoU.FindIndex(a =&gt;; a == metaIoU.Max());\n\nvar matchedSolBox = BoxesDict.ElementAt(indxMax);\n\nif (!matchedSolBox.isMatched)\n{\n# stuff\n}\n</code></pre>\n\n<p>If I am not wrong, In the code, if a match happens to a already matched box, it just skips this prediction. </p>\n\n<p>It wouldn't have mattered if the solution (ground truth) boxes didn't have overlaps but they do as seen in figure 14 of <a href=\"http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.5766&amp;rep=rep1&amp;type=pdf\">http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.5766&amp;rep=rep1&amp;type=pdf</a></p>\n\n<p>Hope someone fixes this or atleast clarifies our understanding is correct.</p>",
      "rawMarkdown": "Wow, 13 days, no reply.\n\nThe `culprit` code seems to be\n\n    \n\n    var indxMax = metaIoU.FindIndex(a =&gt;; a == metaIoU.Max());\n    \n    var matchedSolBox = BoxesDict.ElementAt(indxMax);\n\n    if (!matchedSolBox.isMatched)\n    {\n    # stuff\n    }\n\n\n\nIf I am not wrong, In the code, if a match happens to a already matched box, it just skips this prediction. \n\nIt wouldn't have mattered if the solution (ground truth) boxes didn't have overlaps but they do as seen in figure 14 of http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.5766&amp;rep=rep1&amp;type=pdf\n\nHope someone fixes this or atleast clarifies our understanding is correct.",
      "votes": null
    },
    {
      "id": "369073",
      "postDate": "08/11/2018 21:26:59",
      "content": "<p>I suggest you write an email to the addresses mentioned in the welcome thread or/and post there. I got a reply after doing that</p>",
      "rawMarkdown": "I suggest you write an email to the addresses mentioned in the welcome thread or/and post there. I got a reply after doing that",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 369055,
      "author_name": "",
      "author_url": "",
      "post_date": "08/11/2018 19:55:21",
      "content": "<p>Wow, 13 days, no reply.</p>\n\n<p>The <code>culprit</code> code seems to be</p>\n\n<pre><code>var indxMax = metaIoU.FindIndex(a =&gt;; a == metaIoU.Max());\n\nvar matchedSolBox = BoxesDict.ElementAt(indxMax);\n\nif (!matchedSolBox.isMatched)\n{\n# stuff\n}\n</code></pre>\n\n<p>If I am not wrong, In the code, if a match happens to a already matched box, it just skips this prediction. </p>\n\n<p>It wouldn't have mattered if the solution (ground truth) boxes didn't have overlaps but they do as seen in figure 14 of <a href=\"http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.5766&amp;rep=rep1&amp;type=pdf\">http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.5766&amp;rep=rep1&amp;type=pdf</a></p>\n\n<p>Hope someone fixes this or atleast clarifies our understanding is correct.</p>",
      "votes": null,
      "replies": [
        {
          "id": 369073,
          "author_name": "moshel",
          "author_url": "",
          "post_date": "08/11/2018 21:26:59",
          "content": "<p>I suggest you write an email to the addresses mentioned in the welcome thread or/and post there. I got a reply after doing that</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "363668": "I have a question about the GetPredictions() function in the [Kaggle's production code in C# ][1]:\n\nFor a certain class, in a certain image, let's assume we have only two ground-truth boxes G1 and G2. And we only have two predicted boxes P1 and P2.\n\nIf we know:\n\n\n - P1.Confidence &gt; P2.Confidence\n - IoU(P1, G1) &gt; IoU(P1, G2)\n - IoU(P1, G1) &gt; 0.5\n - IoU(P2, G1) &gt; IoU(P2, G2) &gt; 0.5\n\nThere is no doubt that P1 is a True Positive.\n\nAccording to the current implementation, P2 will be considered as a false positive. Because G1 is the ground truth box who has the largest IoU with G1 and has already been matched by P1. But there really exists a Ground truth box G2, who has not been matched yet and has a IoU with P2 larger than 0.5. **Should P2 be considered as a True Positive case rather than a False Positive case?**\n\n\n  [1]: https://gist.github.com/wendykan/8b800e70251aa784b2f73283d1315ebd",
    "369055": "Wow, 13 days, no reply.\n\nThe `culprit` code seems to be\n\n    \n\n    var indxMax = metaIoU.FindIndex(a =&gt;; a == metaIoU.Max());\n    \n    var matchedSolBox = BoxesDict.ElementAt(indxMax);\n\n    if (!matchedSolBox.isMatched)\n    {\n    # stuff\n    }\n\n\n\nIf I am not wrong, In the code, if a match happens to a already matched box, it just skips this prediction. \n\nIt wouldn't have mattered if the solution (ground truth) boxes didn't have overlaps but they do as seen in figure 14 of http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.157.5766&amp;rep=rep1&amp;type=pdf\n\nHope someone fixes this or atleast clarifies our understanding is correct.",
    "369073": "I suggest you write an email to the addresses mentioned in the welcome thread or/and post there. I got a reply after doing that"
  },
  "source": "meta"
}