BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
Small local model for bolts recognition on photos
Translation pending
Sports & fitnessPython · HTMLGitHub @zbyczOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
This project uses custom neural network to recognize bolts on a photo.
DEMO: https://zbycz.github.io/openclimbing-bolts-ai/ \
(and PR here)
Since the launch of OpenClimbing.org we have gathered 3500 bolts marked on 200 photos. This seemed to be enough data to train a neural net. The route data are stored in OpenStreetMap database and photos on the Wikimedia Commons image server. That made it very simple to extract it and start the training.Read the full README ↗This project uses custom neural network to recognize bolts on a photo.
DEMO: https://zbycz.github.io/openclimbing-bolts-ai/
(and PR here)
Since the launch of OpenClimbing.org we have gathered 3500 bolts marked on 200 photos. This seemed to be enough data to train a neural net. The route data are stored in OpenStreetMap database and photos on the Wikimedia Commons image server. That made it very simple to extract it and start the training.
Of course not every bolt in the DB is precisely marked on the spot of the actual bolt on a rock face. Sometimes the bolt is not visible from ground, sometimes the contributor just placed it off by some distance. We had to human-check every bolt and mark the exact location of each bolt. This is called "labeling the dataset". The result was a dataset of 1319 verified bolts with exact bounding boxes. See here.
There is a perfect base model for this usecase – the YOLOv8 nano, which has the basic knowledge of world, and can be trained with any specific dataset. We used the Kaggle free tier, which offers generous amount of NVIDIA P100 GPUs. The training took 2 hours, lasted 62 epochs and gained mAP50 = 51% on the validation set.
The YOLO model (You Only Look Once) is a deep convolutional neural network. The architecture consists of a CSPDarknet backbone (feature extraction), a PANet neck (multi-scale fusion), and a detection head. It has aproximately 3 milions of parameters, in tens of layers. Everything fits inside a 12 MB ONNX file.
Because the features (bolts) are sometimes only few pixes big, we had to split the source image into overlaping 1024x1024px tiles, and feed the model the 1:1 source pixels.
The inference runs in browser about 10 seconds per image. Measured on Macbook Air M1 and iPhone 12 mini. We use onnxruntime-web with WASM backend. Everything runs locally without sending any data to a server.
This model was trained on data from OpenStreetMap (ODbL), and photos from Wikimedia Commons (CC0 / CC BY / CC BY-SA) by: Alensiljak · Daniel Baránek · Jvaclavik · Supernova-implicate-awoke · Headbucket · Osmwithspace · Zbytovsky · GabriCosta00 · Geogast · Kuba Turek · Eric
The model weights: CC BY 4.0