{"id":18851956,"url":"https://github.com/colasgael/deepclimb","last_synced_at":"2025-04-14T09:53:31.861Z","repository":{"id":111525976,"uuid":"183315180","full_name":"ColasGael/DeepClimb","owner":"ColasGael","description":"A CNN approach to automatically assess bouldering routes difficulty levels","archived":false,"fork":false,"pushed_at":"2019-06-11T21:10:37.000Z","size":41972,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T23:11:58.252Z","etag":null,"topics":["climbing","cnn","computer-vision","naive-bayes-classifier","pytorch","softmax-classification"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ColasGael.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-04-24T22:24:12.000Z","updated_at":"2024-11-18T19:46:45.000Z","dependencies_parsed_at":"2023-06-28T07:16:05.383Z","dependency_job_id":null,"html_url":"https://github.com/ColasGael/DeepClimb","commit_stats":{"total_commits":36,"total_committers":2,"mean_commits":18.0,"dds":0.2777777777777778,"last_synced_commit":"31005b165fdafc8de3b269ed03908ecf58a5f658"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColasGael%2FDeepClimb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColasGael%2FDeepClimb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColasGael%2FDeepClimb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColasGael%2FDeepClimb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ColasGael","download_url":"https://codeload.github.com/ColasGael/DeepClimb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248860348,"owners_count":21173339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["climbing","cnn","computer-vision","naive-bayes-classifier","pytorch","softmax-classification"],"created_at":"2024-11-08T03:37:22.319Z","updated_at":"2025-04-14T09:53:31.834Z","avatar_url":"https://github.com/ColasGael.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deep-Climb\nby Gael Colas, graduate student from Stanford University.\n\nThis is my final project for the CS231n: \"Convolutional Neural Networks for Visual Recognition\" class at Stanford (2019). \nOur teachers were Pr. Fei-Fei Li, Pr. Justin Johnson and Pr. Serena Yeung.\n\nLanguage: Python (PyTorch)\n\nGoal: automatically assess the level of a bouldering route.\n\nThis project presents the first attempt at using a Convolutional Neural Network to classify bouldering routes from their visual representations.\n\nMore details about the project, the data and the models can be found by reading the report and the poster located at the root: \"cs231n_final-report.pdf\" and \"cs231n_poster.pdf\".\n\n## Train the models\n\n### Launching training\n\nRun: `python train.py --name \u003cmodel_name\u003e`\n\nYou can either use one of the CNN models in \"models/CNN_models\", or create your custom model and add its name in \"train.py\" and \"test.py\".\n\nIf you want to change the parameters of the training process, please see: \"args.py\".\n\n### Track progress on TensorBoard\n\nThe training regularly send information to TensorBoard. To start TensorBoard, run the following command from the root directory:\n`tensorboard --logdir save --port 5678`\n\nIf you are training on your local machine, now open http://localhost:5678/ in your browser. \n\nIf you are training on a remote machine, then run the following command on your local machine:\n\n`ssh -i \u003cpath-to-ssh-private-key\u003e -N -f -L localhost:1234:localhost:5678 \u003cuser\u003e@\u003cremote\u003e`\n\nHere \\\u003cuser\u003e@\\\u003cremote\u003e is the address that you ssh to for your remote machine. \n\nThen on your local machine, open http://localhost:1234/ in your browser.\n    \nYou should see TensorBoard load with plots of the loss (NLL), Accuracy (Acc), Mean Absolute Error (MAE), and F1-score (F1) for both train and dev sets. \n\nThe dev plots may take some time to appear because they are logged less frequently than the train plots. \n\n## Installation\n\n### Requirements\n\nTo create the environment with all the necessary packages, go at the root of the repository and run:\n`conda env create -f environment.yml`\n\nTo activate the environment: \n`conda activate deepclimb`\n\nIf you want to use Jupyter notebooks on a remote machine (VM), you need to do this one time set-up.\nAfter you SSH into the VM for the first time, you need to run the following commands in your home directory:\n\n```\ncd DeepClimb/\nchmod +x ./setup.sh\n./setup.sh\n```\n\nYou will be asked to set up a password for your Jupyter notebook.\n\nThen you will be able to access your VM Jupyter notebooks from your local machine. In your browser, go to: \n\n`\u003cVM-ip-address\u003e:8888`\n\n### Scrap the data (Optional)\n\nFolder: \"data/raw\"\n\nThe data has been already scrapped from [moonboard.com](https://www.moonboard.com/Problems/Index). It took around 15 hours.\nScraping data: 26/04/2019.\n\nIf you want to update the scraping or scrap a different dataset.\n- modify \"data/scraper.py\" to handle the modifications ;\n- download the \"selenium\" extension corresponding to your browser (for [Chrome](https://sites.google.com/a/chromium.org/chromedriver/downloads)) ;\n- create a \"moonboard.com\" account and create a text file \"data/credentials.txt\" with your login information ;\n- run: `python scraper.py \u003c credentials.txt` in the folder \"data\".\n\n[Tutorial](https://stanford.edu/~mgorkove/cgi-bin/rpython_tutorials/Scraping_a_Webpage_Rendered_by_Javascript_Using_Python.php) on how to use Selenium to scrap JS-Rendered pages.\n\nSelenium [documentation](https://selenium-python.readthedocs.io/locating-elements.html).\n\n### Preprocess the data\n\nRun: `python setup.py`\n\nIt will preprocess and split the scraped data files, for each version of the MoonBoard individually (2016 and 2017).\n\nThe script splits the dataset into train/validation/test in the proportion 80%/20%/20%.\nThe split is random but preserve the class distribution in each split.\nThe seed used in the split is fixed to give the same split at every run.  \n\nThe scrapped data is preprocessed into both the binary (.npy files) and the image (.jpg files) representation of the routes.\nThe same split is used for both representations.\n\nThe split data can be found in \"data/binary\" and \"data/image\".\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolasgael%2Fdeepclimb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcolasgael%2Fdeepclimb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolasgael%2Fdeepclimb/lists"}