===== Python and PyTorch Development =====
This page is based on the one of [[https://cw.fel.cvut.cz/b221/courses/be5b33rpz/labs/python_development|RPZ course]].
* The BRUTE uses python version 3.10
* Use the [[https://cw.felk.cvut.cz/forum/forum-1819.html|forum]] to discuss any Python issues.
* If you have experience with MATLAB programming, you can start by [[https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html|Numpy for MATLAB users]].
The evaluation server has the following packages installed:
* python (3.10.6)
* numpy (1.21.5)
* matplotlib (3.5.2)
* torch (1.12.1+cpu)
* torchvision (0.13.1+cpu)
* kornia (0.6.10)
* kornia_moons (0.2.3)
* opencv-python (4.7.0.68)
* Pillow (9.2.0)
===== Common Issues and Solutions =====
* Not working with correct shapes of input/output data: Shapes of all input/output data are defined in the docstring of individual methods. Note, that all [[https://gitlab.fel.cvut.cz/mishkdmy/mpv-python-assignment-templates|templates]] in assignment already output result of a proper shape. Please strictly stick to the prescribed shapes.
* If you want to use i.e. np array <1xn> as (n,), you can use np.squeeze() in the beginning of the method.
* For returning data in certain shape, you can use np.expand_dims() or np.at_leastXd() (where X is the number of dimmensions).
* The template does not specify something correctly or differs from the assignment text
* You are probably using an old version of the template. As noted in the git repository readme: **Keep in mind that the assignments and the assignment templates will be updated during the semester. Always pull the current template version before starting to work on an assignment!**
===== Assignment Templates =====
* All assignment templates are stored in a [[https://gitlab.fel.cvut.cz/mishkdmy/mpv-python-assignment-templates|git repository]]
* If you don't know how to use git: [[https://git-scm.com/book/en/v2|Pro Git book]], [[https://try.github.io/]], duckduck, google, ...
* Follow the instruction in the repository README
* Make sure to get the current template version before starting to work on an assignment
* Make sure not to push the repository with your solutions to any public remote (=plagiarism), you can use [[https://gitlab.fel.cvut.cz/|FEE GitLab]] for private remote repo.
* Each assignment template contains a Jupyter notebook (.ipynb) that you can use to testrun the assignment functions you implement. **This notebook will not be checked by the BRUTE.**
===== Setup recommended by Dmytro =====
This setup is recommended by Dmytro Mishkin\\
1. Install [[https://docs.conda.io/en/latest/miniconda.html|Miniconda]], Python version 3.X.\\
2. Run **conda** CLI.\\
3. Run
git clone https://gitlab.fel.cvut.cz/mishkdmy/mpv-python-assignment-templates
conda create --name mpv-assignments-cpu-only python=3.10
conda activate mpv-assignments-cpu-only
pip3 install torch==1.12.1+cpu torchvision==0.13.1+cpu torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cpu
pip3 install kornia==0.6.10 tqdm notebook matplotlib opencv-contrib-python==4.7.0.68 seaborn tensorboard tensorboardX ipywidgets widgetsnbextension
pip3 install kornia_moons --no-deps
For MacOS on Apple Silicon run
git clone https://gitlab.fel.cvut.cz/mishkdmy/mpv-python-assignment-templates
conda create --name mpv-assignments-cpu-only python=3.10
conda activate mpv-assignments-cpu-only
conda install -c apple tensorflow-deps
pip3 install tensorflow-macos tensorflow-metal
pip3 install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cpu
pip3 install kornia==0.6.10 tqdm notebook matplotlib opencv-contrib-python==4.7.0.68 seaborn tensorboard tensorboardX ipywidgets widgetsnbextension
pip3 install kornia_moons --no-deps
For the GPU setup, if you have CUDA-capable GPU (if needed - change CUDA version in command).
To find out your CUDA version, run ''nvidia-smi''.
You will see something like:
Mon Feb 20 16:49:46 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... On | 00000000:01:00.0 Off | N/A |
| 25% 44C P8 18W / 250W | 1MiB / 11178MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... On | 00000000:06:00.0 Off | N/A |
|ERR! 54C P0 ERR! / 250W | 1MiB / 11178MiB | 75% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
In the example above, the CUDA version is 11.2, so you should use ''--extra-index-url https://download.pytorch.org/whl/cu112''.
git clone https://gitlab.fel.cvut.cz/mishkdmy/mpv-python-assignment-templates
conda create --name mpv-assignments-gpu python=3.10
conda activate mpv-assignments-gpu
pip3 install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu112
pip3 install kornia==0.6.10 tqdm notebook matplotlib opencv-contrib-python==4.7.0.68 seaborn tensorboard tensorboardX ipywidgets widgetsnbextension
pip3 install kornia_moons --no-deps
See in more details about [[https://pytorch.org/get-started/previous-versions/|Pytorch install]] on official page.
4. a) Activate the environment with conda activate mpv-assignments-cpu-only
and work in the **python** interactive interpreter.\\
**PyCharm jupyter environment is buggy and not recommended**. You still can use IDE to edit .py files though. It's best to use jupyter-notebook, google colab or jupyter-lab to work with jupyter notebooks, especially interactive ones (as in Correspondences and Tracking blocks. \\
==== Running the assignments in Google Colab ====
It is possible to do all the work in cloud Google Colab without installing anything. You would need to have Google account though.
- Git clone or download the assignment templates from the [[https://gitlab.fel.cvut.cz/mishkdmy/mpv-python-assignment-templates/tree/master|repository]]
- Go to https://colab.research.google.com/
- Click File -> Upload notebook and upload the notebook for the the relevant assignment
- Click of the files icon (in gray ellipse on the screenshot) and then on "Upload"
- {{:courses:mpv:labs:colab1.png?400|}}
- Upload relevant assignment .py together with all relevant input data such as images.
- In the beginning of the first cell add !pip install kornia==0.6.10
- Work in Google Colab as if you were in Jupyter notebook. In the end of the session download the functions you developed with File -> Download
- If you need to use GPU, go to Runtime ->Change runtime type. Select Hardware accelerator to be GPU. Note, that you are limited to 6 hours of GPU use per day (this info might be obsolete, as Google policy on free GPUs may change)