Arrow detection with a ConvNeXt backbone pretrained on DINOv3
A Reddit user, BrashBunyip, posted an archery arrow-detection project on r/MachineLearning, building a dataset from roughly 40,000 rendered Blender scenes plus 8,000 hand-labelled real images, augmented into about 1 million training samples for separate registration and detection networks. The author reports that ImageNet-pretrained ResNets performed quite well and a pure ViT worse, while ConvNeXt pretrained on DINOv3 performed best. Self-reported test results were F1 96.6% and 80.5% whole-image correctness, with no missed arrows and no false detections. The pipeline registers the target to find rings, centre and scoring zones, produces an impact heatmap from the cropped image, runs the detector mirrored, applies a homography to remove perspective skew and adds a radial correction for warped paper.
The post illustrates a practical recipe of synthetic data plus a small set of hand-labelled real images with a self-supervised pretrained vision backbone, though every metric is author-reported with no independent reproduction or verification.
| Worked on this for about a month. I experimented a lot with resnets (pretrained on Imagenet) which performed quite well, pure ViT which performed worse. ConvNext DINOv3 performed the best. For data I rendered about 40000 varied blender scenes, and used 8000 labelled real images. I had to label most of these real images by hand, which was a huge pain in the ass and about 20 hours of my life I'll never get back. Both registration and detection networks were trained on about 1 million samples (heavy augmentations of the 48k dataset). End result was F1 96.6% on test and whole image correctness of 80.5% (no missed arrows, no false detections). The process is basically registration to identify target, semantic rings, centre, scoring zones. Detection then takes a cropped image and produces a heatmap of impact candidates. I run that image through the same detector mirrored and combine both in decoder to find local peaks. I tried a sliding window approach which didn't produce better results. I then apply a homography transform to remove perspective skew and flatten the target so the impacts conform to a canonical coordinate system. There's then a small correction step where I adjust impact coordinates to account for warped paper (homography can remove perspective skew but it can't fix warped paper that isn't planar). This is a neat trick because I basically compare the heatmap of the semantic rings produced by the registration model to the perfect geometric rings of the archery target and use that offset to make a radial correction. submitted by /u/BrashBunyip [link] [comments] |