An open API service indexing awesome lists of open source software.

https://github.com/f33rni/patternrecognitionlabs

Лабораторные работы по курсу "Распознавание образов"
https://github.com/f33rni/patternrecognitionlabs

Last synced: 6 months ago
JSON representation

Лабораторные работы по курсу "Распознавание образов"

Awesome Lists containing this project

README

          

# Лабораторные работы по "Распознавание образов"

Какие лабовы готовы:
- 1 - Классификация изображения с использование Keras
- 2 - Трансфертное обучение
- 3 - Повышение точности сверточной нейронной сети
- 4 - Производительность при распознавании образов с помощью TensorFlow
- 5 - Облачные API для распознавания образов

----------

## 🕒 Подготовка к запуску лабов

1. Установить Python версии 3.10 или выше _(возможно будет работать и на Python 3.9)_, если не установлено
1. Проверить установку можно командой в терминале `python --version`
2. Однако, если вы устанавливали Python без автоматического добавления в системные переменные, вам необходимо найти путь к исполняемому файлу. На Windows это обычно `C:\Users\Ваше имя пользователя\AppData\Local\Programs\Python\PythonВЕРСИЯ\python.exe`. **Если это так, в шаге 4 (ТОЛЬКО В ШАГЕ 4), вместо `python` вам необходимо использовать `"C:\Users\Ваше имя пользователя\AppData\Local\Programs\Python\PythonВЕРСИЯ\python.exe"`**
1. А чтобы проверить версию:
```shell
"C:\Users\Ваше имя пользователя\AppData\Local\Programs\Python\PythonВЕРСИЯ\python.exe" --version
```
2. Скопируйте репозиторий с лабами вручную или используя команду `git clone https://github.com/F33RNI/PatternRecognitionLabs`
3. Откройте терминал и войдите в эту папку используя команду `cd "путь\к папке PatternRecognitionLabs"`
4. Создайте виртуальную среду используя команду `python -m venv venv`
5. Активируйте виртуальную среду. На **Windows**, для этого пропишите в терминале `venv\Scripts\activate.bat`. На **Linux** `source venv/bin/activate`
1. Если виртуальная среда создана и запущена верно, в терминале перед текущей рабочей директорией появится `(venv)`
6. Установите все пакеты для лабов, используя команду `pip install -r requirements.txt`
7. Пропишите `pip list`. Вы должны увидеть много установленных пакетов, включая `tensorflow`, `numpy`, `keras`, `Pillow` и другие
8. Готово!

----------

## 🏗️ Запуск лабов и создание отчётов

В качестве отчётов вам необходимо будет записать видео (поэтому в этом репозитории нет примеров отчётов). Ниже представлены инструкции по запуску лабов

### Работа 1. Классификация изображения с использование Keras

1. Перейдите в директорию LR1 используя команду `cd LR1`, находясь в основной папке PatternRecognitionLabs с активированной виртуальной средой (см. секцию `🕒 Подготовка к запуску лабов`)
2. В файле `main.py` поменяйте `IMAGE_PATH ` на путь к любой картинке которую хотите распознать
3. Запустите скрипт используя команду `python main.py`. Выход должен выглядеть примерно так:
```
1/1 [==============================] - 2s 2s/step
('n03944341', 'pinwheel', 1.0)
('n03476684', 'hair_slide', 3.3065376e-08)
('n03271574', 'electric_fan', 6.2919483e-09)
```
1. Если всё верно, начните запись видео, изменяйте `IMAGE_PATH ` на разные пути к разным картинкам, запускайте скрипт и показывайте результат
2. Готово

### Работа 2. Трансфертное обучение

1. **Если для скачивания этого репозитория вы использовали `git`**, то для того, чтобы подгрузить новые файлы для этой лабораторной выполните команду `git pull`
2. Активируйте виртуальную среду и установите недостающие пакеты `pip install -r requirements.txt`
3. Перейдите в директорию LR2 используя команду `cd LR2`
4. В файле `main.py` поменяйте `IMAGE_PATH ` на путь к фотке кошбки / шобаки которую хочите классифицировать
1. Рекомендую использовать примеры из датасета `kagglecatsanddogs_5340`. Например: `kagglecatsanddogs_5340/PetImages/Cat/0.jpg`
2. _(в датасете, с целью экономии места, занимаемого репозиторием, было оставлено только по 20 картинок)_
5. Запустите скрипт используя команду `python main.py`. Выход должен выглядеть примерно так
```
Predicted Label: cat
Probabilities: tensor([[0.9989, 0.0011]], grad_fn=)
```
6. Если всё верно, начните запись видео, изменяйте `IMAGE_PATH ` на разные пути к разным картинкам, запускайте скрипт и показывайте результат
7. Для большего масштаба, советую на видео показать структуру датасета и сказать что взят он был от сюда https://www.microsoft.com/en-us/download/details.aspx?id=54765. Модель же была взята предобученная. А если что, структура типичной модели cats vs dogs выглядеть может так (это тоже можно показать на видео):
```python
model = Sequential()

model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=(3, ROWS, COLS)))
model.add(BatchNormalization(axis=-1))
model.add(Activation(activation))
model.add(Convolution2D(32, 3, 3, border_mode='same', activation=activation))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(BatchNormalization(axis=-1))
model.add(Activation(activation))
model.add(Convolution2D(64, 3, 3, border_mode='same', activation=activation))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Convolution2D(128, 3, 3, border_mode='same'))
model.add(BatchNormalization(axis=-1))
model.add(Activation(activation))
model.add(Convolution2D(128, 3, 3, border_mode='same', activation=activation))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Convolution2D(256, 3, 3, border_mode='same'))
model.add(BatchNormalization(axis=-1))
model.add(Activation(activation))
model.add(Convolution2D(256, 3, 3, border_mode='same', activation=activation))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(256,init='he_uniform'))
model.add(BatchNormalization(axis=-1))
model.add(Activation(activation))
model.add(Dropout(0.2))

model.add(Dense(256,init='he_uniform'))
model.add(BatchNormalization(axis=-1))
model.add(Activation(activation))
model.add(Dropout(0.2))

model.add(Dense(1,init='he_uniform'))
model.add(BatchNormalization(axis=-1))
model.add(Activation('sigmoid'))

model.compile(loss=objective, optimizer=optimizer, metrics=['accuracy'])
return model
```

### Работа 3. Повышение точности сверточной нейронной сети

1. **Если для скачивания этого репозитория вы использовали `git`**, то для того, чтобы подгрузить новые файлы для этой лабораторной выполните команду `git pull`
2. Активируйте виртуальную среду и установите недостающие пакеты `pip install -r requirements.txt`
3. Запустите сервер TensorBoard
1. Откройте второй терминал, перейдите в директорию в директорию LR3 используя команду `cd LR3`
2. Создайте папку `tensorboard` при помощи команды `mkdir tensorboard`
3. Запустите сервер TensorBoard, используя команду `tensorboard --logdir ./tensorboard --alsologtostderr`
4. Откройте TensorBoard в браузере перейдя по указанной в терминале ссылке (обычно http://localhost:6006/)
4. В основном терминале перейдите в директорию LR3 используя команду `cd LR3`
5. Скачайте датасет от сюда https://www.microsoft.com/en-us/download/details.aspx?id=54765 и распакуйте архив куда угодно
6. Для более быстрого обучения, **из папок Cats и Dogs можно удалить от половины до 2/3 изображений**
7. В файле `main.py` в `DATASET_PATH` укажите путь к папке PetImages внутри распакованного датасета
8. Запустите скрипт используя команду `python main.py` и дождитесь начала обучения (дождитесь чтобы прошла 1 эпоха хотябы)
1. Если у Вас установлена CUDA и вы хотите обучать, используя GPU, но возникла ошибка, попробуйте указать путь к CUDA таким образом:
```shell
╰─ which nvcc
/opt/cuda/bin/nvcc

XLA_FLAGS=--xla_gpu_cuda_data_dir="/opt/cuda/" python main.py
```
2. Либо же, обучать используя только CPU:
```shell
CUDA_VISIBLE_DEVICES="-1" python main.py
```
9. Откройте TensorBoard и покажите на видео как происходит процесс обучения (как в терминале так и в TensorBoard)
10. Прекратите выполнение обучения спустя какое то время, нажав CTRL+C
11. Включите `EARLY_STOPPING_ENABLED` в `main.py` и запустите обучение заново. По идее, оно должно будет остановиться само спустя какое то время
12. Ещё, можно изменять `LEARNING_RATE`. От этого тоже будет меняться скорость обучения. На видео показывайте графики функции потери и точности предсказаний
13. В общем, изменяйте чо нить и показывайте на видео кучу графиков

### Работа 4. Производительность при распознавании образов с помощью TensorFlow

> В этой работе требовалось провести эксперименты с производительностью обучения нейронной сети, сосредоточив внимание на сравнении производительности между центральным процессором (CPU) и графическим процессором (GPU) _(этот текст написан лабасёром)_

> Фактически, в лабе нужно будет сделать всё тоже самое что в третей, только для начала использовать процессор для обучения, а затем видеокарту и сравнить производительность, используя Tensorboard

1. Установите CUDA (это самый сложный этап в этой лабе)
1. На **Linux**, CUDA можно часто установить при помощи встроенного менеджера пакетов. Например, чтобы установить, используя pamac: `pamac install cuda`
2. На **Windows**, установщик можно скачать от сюда: https://developer.nvidia.com/cuda-downloads?target_os=Windows
2. Убедитесь, что у вас установлена CUDA: `nvcc --version`
```shell
╰─ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
...
```
3. **Если для скачивания этого репозитория вы использовали `git`**, то для того, чтобы подгрузить новые файлы для этой лабораторной выполните команду `git pull`
4. Активируйте виртуальную среду и установите недостающие пакеты `pip install -r requirements.txt`
5. Запустите сервер TensorBoard
1. Откройте второй терминал, перейдите в директорию в директорию LR4 используя команду `cd LR4`
2. Создайте папку `tensorboard` при помощи команды `mkdir tensorboard`
3. Запустите сервер TensorBoard, используя команду `tensorboard --logdir ./tensorboard --alsologtostderr`
4. Откройте TensorBoard в браузере перейдя по указанной в терминале ссылке (обычно http://localhost:6006/)
6. В основном терминале перейдите в директорию LR4 используя команду `cd LR4`
7. **Если не было скачано в 3 лабораторной**, то скачайте датасет от сюда https://www.microsoft.com/en-us/download/details.aspx?id=54765 и распакуйте архив куда угодно
8. Для более быстрого обучения, **из папок Cats и Dogs можно удалить от половины до 2/3 изображений**
9. В файле `main.py` в `DATASET_PATH` укажите путь к папке PetImages внутри распакованного датасета
10. Начните запись видео
11. Запустите обучение, используя только процессор:
```shell
CUDA_VISIBLE_DEVICES="-1" python main.py
```
12. Продемонстрируйте на видео процесс обучения (в консоли и в TensorBoard)
13. Продемонстрируйте, что загруженность видеокарты 0 (через `nvidia-smi` или через диспетчер задач)
14. Дождитесь окончания обучения, переодически показывая процесс на видео
15. Запустите обучение, используя CUDA:
```shell
python main.py
```

Если возникла ошибка о том что не найдена куда, попробуйте указать путь к CUDA таким образом:
_(инструкция ниже для Linux. На Windows путь к папке `cuda` будет другой)_
```shell
╰─ which nvcc
/opt/cuda/bin/nvcc

XLA_FLAGS=--xla_gpu_cuda_data_dir="/opt/cuda/" python main.py
```
16. Продемонстрируйте на видео процесс обучения (в консоли и в TensorBoard)
17. Продемонстрируйте, что загруженность видеокарты высокая (через `nvidia-smi` или через диспетчер задач)
18. Покажите что процесс обучения идёт быстрее (надеюс)
19. Дождитесь окончания обучения
20. Сравните графики обучения наа процессоре с графиками обучения на видеокарте (из TensorBoard)

### Работа 5. Облачные API для распознавания образов

> Тут нужно продемонстрировать существование и возможность использовать какого-нибудь API LLM, которая может принимать изображения на вход (Bard / Gemini). Проще всего продемонстрировать это на примере Gemini

1. Убедитесь, что у вас есть доступ к Gemini. Для этого, перейдите по ссылке https://makersuite.google.com/app/prompts/new_freeform и создайте любой запрос, убедитесь что можете получить ответ. Возможно, для этого Вам придётся иметь IP США (использовать VPN / прокси)
1. В качестве бесплатного прокси можно использовать https://free-proxy-list.net/
2. Перейдите по ссылке и найдите прокси, чтобы в графе `Country` было `United States`, и в графе `Https` было `yes`. Скопируйте IP и порт
3. Для браузеров на основе chromium можно использовать расширение Proxy SwitchyOmega. В настройках, при добавлении прокси в `Protocol` укажите `HTTP`, несмотря на то что это HTTPS прокси. Сохраните изменения, включите выбранный прокси и попробуйте с ним перейти на ссылку выше (и ниже)
2. Перейдите по этой ссылке https://makersuite.google.com/app/apikey и сгенерируйте новый API ключ
3. **Если для скачивания этого репозитория вы использовали `git`**, то для того, чтобы подгрузить новые файлы для этой лабораторной выполните команду `git pull`
4. Активируйте виртуальную среду и установите недостающие пакеты `pip install -r requirements.txt`
5. Перейдите в директорию LR5 используя команду `cd LR5`
6. В файле `main.py` поменяйте `API_KEY` на ваш API ключ, созданный в пункте 2
7. В файле `main.py` поменяйте `PROXY` на ваш прокси-сервер (см. пункт 1.1 - 1.2) в формате `http://IP:порт` или оставьте `PROXY` пустым (`""`), если вам не нужно использовать прокси
8. Подготовьте пару любых изображений, которые будете распознавать. В файле `main.py` поменяйте `IMAGE_PATH` на путь к любому изображению
9. Начните запись видео. **СДЕЛАЙТЕ ТАК, ЧТОБЫ ВАШ ТОКЕН И ПРОКСИ НЕ ПОПАЛИ НА ВИДЕО, ЛИБО УДАЛИТЕ ТОКЕН СРАЗУ ЖЕ, ПОСЛЕ ЗАПИСИ**
10. Перейдите по ссылке https://ai.google.dev/ и расскажите что такое Gemini (загуглите что это). Пример, сгенерированный лабасёром:
> \> Расскажи пожалуйста на русском кратко о том что такое Gemini и как с его помощью можно распознавать изображения через API
>
> \> Gemini - это большая языковая модель от Google AI, которая может генерировать текст, переводить языки, писать различные виды творческого контента и отвечать на ваши вопросы в информационном формате. Gemini также может распознавать изображения и описывать их содержимое. Чтобы распознать изображение с помощью Gemini, вы можете использовать API Vertex AI. Для этого вам понадобится создать проект в Google Cloud Platform и включить API Vertex AI. Затем вы можете использовать SDK для языка программирования, с которым вы знакомы, чтобы отправить запрос API.
11. Перейдите по ссылке https://cloud.google.com/vertex-ai/docs/generative-ai/learn/overview и расскажите о том что это официальная документация и где-то там есть даже примеры кода как использовать Gemini
12. Запустите скрипт используя команду `python main.py` и дождитесь ответа от Gemini
13. Покажите на видео ответ от Gemini (и переведите по необходимости)
14. Поменяйте `IMAGE_PATH` на путь к другой картинке
15. Запустите скрипт используя команду `python main.py` и дождитесь ответа от Gemini
16. Покажите на видео ответ от Gemini (и переведите по необходимости)