PyTorch: пошаговая инструкция по настройке и установке

Что такое PyTorch

PyTorch – библиотека машинного обучения для Python, основанная на Torch. Используется для машинного зрения, обработки естественного языка и работы с изображениями. Вот лишь несколько возможностей PyTorch: классификация, изменение разрешения, распознавание картинок и многое другое. 

Изначально разрабатывалась Facebook AI, на данный момент является частью Linux Foundation. Является одной из наиболее популярных библиотек машинного обучения наравне с TensorFlow. 

Для запуска PyTorch не обязательно наличие GPU Nvidia – библиотека также поддерживает выполнение вычислений на CPU, с чем прекрасно справляются наши облачные сервера. Если же для ваших задач важна максимальная производительность с использованием вычислительных ядер CUDA, – рекомендуем обратить внимание на наши выделенные сервера с Nvidia Tesla.

Требования к установке

В данной статье будет рассматриваться установка фреймворка для Linux-систем с исполнением на CPU. Если вы захотите установить PyTorch на Windows, вам потребуется третья версия фреймворка. PyTorch также поддерживает все версии macOS, начиная с 10.15.

В нашем же случае для самой библиотеки потребуется Python версии 3.8 или выше. Для запуска различных моделей потребуется как минимум 1 ГБ оперативной памяти, для более объемных моделей может потребоваться значительно больше ресурсов.

Подготовка окружения и установка PyTorch

В первую очередь создайте директорию проекта в корневой директории пользователя.

mkdir ~/pytorch_example

После чего перейдите в нее командой cd и создайте директорию для файлов ресурсов.

cd ~/pytorch_example
mkdir assets

Далее создайте виртуальное окружение для проекта и активируйте его.

python3 -m venv pt_venv
source pt_venv/bin/activate

Чтобы установить последнюю версию фреймворка, используйте команду install – PyTorch установится автоматически.

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

Система также установит библиотеки для работы с машинным зрением и аудио и необходимые для них зависимости:

Looking in indexes: https://download.pytorch.org/whl/cpu
…
…
…
Successfully installed MarkupSafe-2.1.5 filelock-3.13.1 fsspec-2024.2.0 jinja2-3.1.3 mpmath-1.3.0 networkx-3.2.1 numpy-1.26.3 pillow-10.2.0 sympy-1.12 torch-2.3.1+cpu torchaudio-2.3.1+cpu torchvision-0.18.1+cpu typing-extensions-4.9.0

Проверка установки

Для проверки работы PyTorch создадим и преобразуем вектор в интерактивной консоли созданного ранее виртуального окружения. Для этого в окружении выполните команду:

python

После чего отобразится сообщение об используемой версии Python и запустится интерактивный интерпретатор:

Python 3.12.4 (main, Jun  7 2024, 06:33:07) [GCC 14.1.1 20240522] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Нам понадобится библиотека PyTorch. Первым делом импортируем ее:

import torch

После чего создайте трехмерный вектор из трех любых чисел и сохраните его в переменную “a”:

>>> a = torch.Tensor([1, 2, 3])
>>> a
tensor([1., 2., 3.])

Затем воспользуйтесь функцией add, чтобы добавить число к каждому элементу вектора:

>>> torch.add(a,2)
tensor([3., 4., 5.])

Наш первоначальный вектор изменился в соответствии с указанным нами значением.

Увеличение разрешения изображения с помощью натренированной модели

Для демонстрации работы PyTorch воспользуемся готовой библиотекой TorchSR, включающей в себя несколько моделей для апскейла изображений, в том числе предварительно натренированных. Для этого установим библиотеку с помощью pip:

pip install torchsr

Пакетный менеджер pip установит библиотеку, а также требуемые зависимости при необходимости:

Collecting torchsr
  Downloading torchsr-1.0.4-py3-none-any.whl.metadata (12 kB)
Requirement already satisfied: torch>=1.6 in ./pt/lib/python3.12/site-packages (from torchsr) (2.3.1+cpu)
Requirement already satisfied: torchvision>=0.6 in ./pt/lib/python3.12/site-packages (from torchsr) (0.18.1+cpu)
Requirement already satisfied: filelock in ./pt/lib/python3.12/site-packages (from torch>=1.6->torchsr) (3.13.1)
Requirement already satisfied: typing-extensions>=4.8.0 in ./pt/lib/python3.12/site-packages (from torch>=1.6->torchsr) (4.9.0)
Requirement already satisfied: sympy in ./pt/lib/python3.12/site-packages (from torch>=1.6->torchsr) (1.12)
Requirement already satisfied: networkx in ./pt/lib/python3.12/site-packages (from torch>=1.6->torchsr) (3.2.1)
Requirement already satisfied: jinja2 in ./pt/lib/python3.12/site-packages (from torch>=1.6->torchsr) (3.1.3)
Requirement already satisfied: fsspec in ./pt/lib/python3.12/site-packages (from torch>=1.6->torchsr) (2024.2.0)
Requirement already satisfied: numpy in ./pt/lib/python3.12/site-packages (from torchvision>=0.6->torchsr) (1.26.3)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in ./pt/lib/python3.12/site-packages (from torchvision>=0.6->torchsr) (10.2.0)
Requirement already satisfied: MarkupSafe>=2.0 in ./pt/lib/python3.12/site-packages (from jinja2->torch>=1.6->torchsr) (2.1.5)
Requirement already satisfied: mpmath>=0.19 in ./pt/lib/python3.12/site-packages (from sympy->torch>=1.6->torchsr) (1.3.0)
Downloading torchsr-1.0.4-py3-none-any.whl (31 kB)
Installing collected packages: torchsr
Successfully installed torchsr-1.0.4

Сама библиотека основана на PyTorch, с исходным кодом вы можете ознакомиться в репозитории проекта.

Для использования модели создайте скрипт upsample.py в директории проекта. Содержимое скрипта:

from torchsr.models import ninasr_b0
from torchvision.transforms.functional import to_pil_image, to_tensor
from PIL import Image
import argparse
import os
import numpy as np


parser = argparse.ArgumentParser()
parser.add_argument("file", help="Path to the picture to upscale.", type=str)
args = parser.parse_args()


SCALE_FACTOR = 4
OUTPUT_DIR = "./assets/upsampled"


print(f"Upscaling {args.file}")


input_img = Image.open(args.file)
filename = os.path.basename(args.file).rsplit('.',1)[0]


# Download a pre trained NinaSR model
model = ninasr_b0(scale=SCALE_FACTOR, pretrained=True)


# Run the Super-Resolution model
input_img_tensor = to_tensor(input_img).unsqueeze(0)
upsampled_tensor = model(input_img_tensor)
upsampled_img = to_pil_image(upsampled_tensor.squeeze(0).clamp(0, 1))


# Apply bicubic upsampling to the original image for comparison
bicubic_size = (int(input_img.width * SCALE_FACTOR), int(input_img.height * SCALE_FACTOR))
bc = input_img.resize((bicubic_size[0], bicubic_size[1]), resample=Image.BICUBIC)


os.makedirs(OUTPUT_DIR, exist_ok=True)


# Save images to the defined directory
upsampled_img.save(os.path.join(OUTPUT_DIR, f"x{SCALE_FACTOR}_{filename}.png"))
Image.fromarray(np.vstack([bc, upsampled_img])).save(os.path.join(OUTPUT_DIR, f"compare_x{SCALE_FACTOR}_{filename}.png"))

Данный скрипт принимает в качестве аргумента путь до изображения, после чего, используя одну из предоставленных библиотекой моделей, повышает его разрешение в 4 раза. В результате выполнения скрипта в директории assets/upsampled появится 2 файла. В одном будет увеличенное изображение, в другом – сравнение увеличенного нейронными сетями на PyTorch изображения с бикубическим увеличением того же изображения.

Обратите внимание!
Подобные модели PyTorch могут использовать достаточно большое количество оперативной памяти для выполнения задач в зависимости от количества параметров модели и размера преобразуемых данных (например, размера изображения).

В качестве примера попробуем увеличить логотип Бегета:

Beget

Загрузите тестовое изображение в директорию assets:

wget -P assets https://cp.beget.com/shared/LEX3TOus5TPrFwUm3iIsw_Dm7wg16jU-/beget_logo_normal_3d.jpg

Для запуска скрипта выполните следующую команду:

python upsample.py assets/beget_logo_normal_3d.jpg

Полученные изображения будут находиться в директории ./assets/upsampled:

ll assets/upsampled
Permissions Size User     Date Modified Name
.rw-r--r--  496k beget 23  6月 15:14 compare_x4_beget_logo_normal_3D.png
.rw-r--r--  359k beget 23  6月 15:14 x4_beget_logo_normal_3D.png

Изображение-сравнение compare_x4_beget_logo_normal_3D.png будет выглядеть следующим образом:

Beget 1

На полученном сравнении можно видеть, что увеличенное нейросетью в 4 раза изображение значительно более резкое по сравнению с бикубическим преобразованием.

Заключение

В данной статье мы рассмотрели создание виртуального окружения и установку библиотеки PyTorch. Продемонстрировали возможности Pytorch, увеличив разрешение изображений с ее помощью. 

Однако это не единственное применение фреймворка. Нейросети на PyTorch может создать с нуля даже новичок, а сама библиотека предлагает обширную экосистему фреймворков для различных задач – от машинного зрения и распознавания речи до обработки естественного языка. 

Если вы только начинаете работать с данной библиотекой, рекомендуем воспользоваться обучающими статьями на сайте PyTorch и ознакомиться с документацией для полного обзора возможностей фреймворка.

Для классификации изображений и видео пригодится фреймворк Classy Vision, а также Detectron 2.

Также рекомендуем ознакомиться с фреймворком Transformers для машинного обучения от Hugging Face. Он дает возможность загружать и тренировать предварительно натренированные модели, что позволяет значительно уменьшить время и ресурсы по сравнению с обучением модели с нуля.

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел «Помощь и поддержка»). А если вы захотите обсудить эту статью, библиотеку PyTorch, примеры использования фреймворка, наши продукты или свой проект с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

9
2354