Still investigating, but detection quality seems to suffer immensely when a card hits a particular "magic" angle. Here is an animation showcasing the investigation and how a single corner behaves as the card is rotated by 1-degree increments:
The green crosshairs represent the peak argmax of the SimCC outputs, whereas the white crosshair represents what the library returns, because it's giving the average / soft argmax (which is averaging between the two peaks of possible corners that the detector is wrestling with).
So as the card rotates towards a fuzzy angle, the detector isn't sure if it should assign index 0 or index 1 to a corner, and it kinda' votes for both. One's higher than the other, but because we're using soft argmax instead of peak argmax, we are splitting the difference and guaranteeing we're getting a wrong answer.
This is a serious problem, and might be at the root of a LOT of our poor-quality detection issues. Stay tuned...
Still investigating, but detection quality seems to suffer immensely when a card hits a particular "magic" angle. Here is an animation showcasing the investigation and how a single corner behaves as the card is rotated by 1-degree increments:
The green crosshairs represent the peak argmax of the SimCC outputs, whereas the white crosshair represents what the library returns, because it's giving the average / soft argmax (which is averaging between the two peaks of possible corners that the detector is wrestling with).
So as the card rotates towards a fuzzy angle, the detector isn't sure if it should assign index 0 or index 1 to a corner, and it kinda' votes for both. One's higher than the other, but because we're using soft argmax instead of peak argmax, we are splitting the difference and guaranteeing we're getting a wrong answer.
This is a serious problem, and might be at the root of a LOT of our poor-quality detection issues. Stay tuned...