Что такое 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 изображения с бикубическим увеличением того же изображения.
В качестве примера попробуем увеличить логотип Бегета:

Загрузите тестовое изображение в директорию 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
будет выглядеть следующим образом:

На полученном сравнении можно видеть, что увеличенное нейросетью в 4 раза изображение значительно более резкое по сравнению с бикубическим преобразованием.
Заключение
В данной статье мы рассмотрели создание виртуального окружения и установку библиотеки PyTorch. Продемонстрировали возможности Pytorch, увеличив разрешение изображений с ее помощью.
Однако это не единственное применение фреймворка. Нейросети на PyTorch может создать с нуля даже новичок, а сама библиотека предлагает обширную экосистему фреймворков для различных задач – от машинного зрения и распознавания речи до обработки естественного языка.
Если вы только начинаете работать с данной библиотекой, рекомендуем воспользоваться обучающими статьями на сайте PyTorch и ознакомиться с документацией для полного обзора возможностей фреймворка.
Для классификации изображений и видео пригодится фреймворк Classy Vision, а также Detectron 2.
Также рекомендуем ознакомиться с фреймворком Transformers для машинного обучения от Hugging Face. Он дает возможность загружать и тренировать предварительно натренированные модели, что позволяет значительно уменьшить время и ресурсы по сравнению с обучением модели с нуля.
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел «Помощь и поддержка»). А если вы захотите обсудить эту статью, библиотеку PyTorch, примеры использования фреймворка, наши продукты или свой проект с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.