A linear probe on frozen Kinetics-400 features gets **0.80941** top-1 on the official UCF101
| split | **official UCF101 split 1** (`trainlist01`/`testlist01`), fetched at run time and validated against the published split-1 list sizes before use |
| classes | 101 |
| videos used | 5050 train / 1082 val / **3783 test** |
| leakage checks | file overlap 0 and **clip-group overlap 0** on all three split pairs |
| decode success | 1.0 on all three splits |
| device | cpu — the Kaggle weekly GPU quota was exhausted |
Not one of these is a random mistake. Read as pairs they are almost tautological:
- Same sport, different act — CricketShot/CricketBowling, BoxingPunchingBag/BoxingSpeedBag, BalanceBeam/ParallelBars, HammerThrow/ThrowDiscus. - Same medium — FrontCrawl/BreastStroke (a pool), Kayaking/Rafting (a river). - Same instrument family — PlayingDhol/PlayingTabla (drums), PlayingFlute/PlayingViolin. - Same scene and posture — BrushingTeeth confused with both ShavingBeard *and* ApplyLipstick: a hand raised to the face at a bathroom mirror, three times over. - Same object kinematics — YoYo/Nunchucks, two things swung on a string.
The pattern says what the representation is doing. Kinetics features encode scene, object and context strongly, and a linear read-out of them separates *contexts* almost perfectly — top-5 is 0.96405, so the right answer is nearly always among the handful of candidates. What a linear probe cannot do is the fine-grained temporal discrimination *within* a context: which swimming stroke, which cricket action, which bathroom gesture.
That is also why the worst classes are what they are:
Every one of them has a near-twin elsewhere in the label set. The gap between top-1 0.80941 and top-5 0.96405 is almost entirely this: the model is choosing wrongly among a small set of correct-context neighbours.
Code and full results on GitHub
Every number is read from the file the run produced. github.com/hammasbuilds · kaggle.com/muhammadhammas13