{
  "id": 374916,
  "title": "7th place brief solution summary",
  "content": "<p>Congratulation to all of the winners!</p>\n<p>Most of the top solutions are based on 2.5D/3D classification of events from full image. For some reason I didn't believe this kind-of-simple pipeline would benefit and score that high, therefore I decided to stick to multiple stage approach.</p>\n<p>To be short:</p>\n<ol>\n<li>Detect ball (and throwiner)</li>\n<li>Track ball</li>\n<li>Classify area around the ball</li>\n<li>No ensemble (solo detector + solo classifier). I used all the frames from videos in original resolution (FullHD)</li>\n</ol>\n<p>To be more specific:</p>\n<ol>\n<li>I used images from clips and manually annotated them (around 6k images). Firstly it was only ball detection, but I was successful only with classifying 'play' events, while throw-ins and challenges struggled. Then I added 2nd class of throwiner to my detector. It helped me to boost throwins classification further. I also used synthetic augmentation for throwiner class (removed actual throwiner, applied image inpainting to fill empty background, and added throwiner from another image instead).</li>\n<li>I used Kalman-IoU tracker to keep the ball position visible even if it disappears. Unfortunately I couldn't tune params too well, and the ball position was unclear during aerial trajectories with high speed and acceleration of the ball.</li>\n<li>I used 3D classifier with 4 classes (including background). I stacked center frame +- 12 frames, and classified overall 25 frames. </li>\n</ol>\n<p>What helped me to improve the score:</p>\n<ol>\n<li>Changing from 2.5D to 3D. Many tested 2.5D nets were worse than simple x3d-m.</li>\n<li>Introducing throwiner class for detection. I had 0.45-0.5 accuracy for throwin events when I used only 3d classification. Adding throwiner class for detector gave me huge boost for throwin events, resulting in 0.8+ accuracy for throwin events. I merged 3d classification results and throwin class from detector.</li>\n<li>Synthetic data generation for detector resulted in better stability for throwiner and ball near the line detection.</li>\n</ol>\n<p>I was also struggling with time limits, since I was always close to 9 hours. Using FileVideoStream from imutils helped me to save some time, since it worked faster than cv2 video reader.</p>\n<p>Unfortunately I couldn't improve challenges events. The score was always about 0.5-0.6 for it, while play and throwins scored 0.8-0.85 always. The main reason I believe is that I was losing ball due to its fast displacement during aerial and other challenges. My tracker couldn't solve that issue. </p>",
  "comments": [],
  "comment_count": 0,
  "messages": [
    {
      "id": 2079568,
      "postDate": "2022-12-29T12:32:42.253Z",
      "content": "<p>Congratulation to all of the winners!</p>\n<p>Most of the top solutions are based on 2.5D/3D classification of events from full image. For some reason I didn't believe this kind-of-simple pipeline would benefit and score that high, therefore I decided to stick to multiple stage approach.</p>\n<p>To be short:</p>\n<ol>\n<li>Detect ball (and throwiner)</li>\n<li>Track ball</li>\n<li>Classify area around the ball</li>\n<li>No ensemble (solo detector + solo classifier). I used all the frames from videos in original resolution (FullHD)</li>\n</ol>\n<p>To be more specific:</p>\n<ol>\n<li>I used images from clips and manually annotated them (around 6k images). Firstly it was only ball detection, but I was successful only with classifying 'play' events, while throw-ins and challenges struggled. Then I added 2nd class of throwiner to my detector. It helped me to boost throwins classification further. I also used synthetic augmentation for throwiner class (removed actual throwiner, applied image inpainting to fill empty background, and added throwiner from another image instead).</li>\n<li>I used Kalman-IoU tracker to keep the ball position visible even if it disappears. Unfortunately I couldn't tune params too well, and the ball position was unclear during aerial trajectories with high speed and acceleration of the ball.</li>\n<li>I used 3D classifier with 4 classes (including background). I stacked center frame +- 12 frames, and classified overall 25 frames. </li>\n</ol>\n<p>What helped me to improve the score:</p>\n<ol>\n<li>Changing from 2.5D to 3D. Many tested 2.5D nets were worse than simple x3d-m.</li>\n<li>Introducing throwiner class for detection. I had 0.45-0.5 accuracy for throwin events when I used only 3d classification. Adding throwiner class for detector gave me huge boost for throwin events, resulting in 0.8+ accuracy for throwin events. I merged 3d classification results and throwin class from detector.</li>\n<li>Synthetic data generation for detector resulted in better stability for throwiner and ball near the line detection.</li>\n</ol>\n<p>I was also struggling with time limits, since I was always close to 9 hours. Using FileVideoStream from imutils helped me to save some time, since it worked faster than cv2 video reader.</p>\n<p>Unfortunately I couldn't improve challenges events. The score was always about 0.5-0.6 for it, while play and throwins scored 0.8-0.85 always. The main reason I believe is that I was losing ball due to its fast displacement during aerial and other challenges. My tracker couldn't solve that issue. </p>",
      "rawMarkdown": "Congratulation to all of the winners!\n\nMost of the top solutions are based on 2.5D/3D classification of events from full image. For some reason I didn't believe this kind-of-simple pipeline would benefit and score that high, therefore I decided to stick to multiple stage approach.\n\nTo be short:\n1. Detect ball (and throwiner)\n2. Track ball\n3. Classify area around the ball\n4. No ensemble (solo detector + solo classifier). I used all the frames from videos in original resolution (FullHD)\n\nTo be more specific:\n1. I used images from clips and manually annotated them (around 6k images). Firstly it was only ball detection, but I was successful only with classifying 'play' events, while throw-ins and challenges struggled. Then I added 2nd class of throwiner to my detector. It helped me to boost throwins classification further. I also used synthetic augmentation for throwiner class (removed actual throwiner, applied image inpainting to fill empty background, and added throwiner from another image instead).\n2. I used Kalman-IoU tracker to keep the ball position visible even if it disappears. Unfortunately I couldn't tune params too well, and the ball position was unclear during aerial trajectories with high speed and acceleration of the ball.\n3. I used 3D classifier with 4 classes (including background). I stacked center frame +- 12 frames, and classified overall 25 frames. \n\nWhat helped me to improve the score:\n1. Changing from 2.5D to 3D. Many tested 2.5D nets were worse than simple x3d-m.\n2. Introducing throwiner class for detection. I had 0.45-0.5 accuracy for throwin events when I used only 3d classification. Adding throwiner class for detector gave me huge boost for throwin events, resulting in 0.8+ accuracy for throwin events. I merged 3d classification results and throwin class from detector.\n3. Synthetic data generation for detector resulted in better stability for throwiner and ball near the line detection.\n\nI was also struggling with time limits, since I was always close to 9 hours. Using FileVideoStream from imutils helped me to save some time, since it worked faster than cv2 video reader.\n\nUnfortunately I couldn't improve challenges events. The score was always about 0.5-0.6 for it, while play and throwins scored 0.8-0.85 always. The main reason I believe is that I was losing ball due to its fast displacement during aerial and other challenges. My tracker couldn't solve that issue. ",
      "votes": 8
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-24T13:29:02Z",
  "competition_id": 37244,
  "competition_slug": "dfl-bundesliga-data-shootout",
  "team_id": 9036473,
  "solution_url": "/competitions/dfl-bundesliga-data-shootout/writeups/vlad-ramilia-7th-place-brief-solution-summary"
}