Рубрики
Без рубрики

Обучить модуль сегментации линии с помощью Pytorch

Начнем с идентификации проблемы, которую мы хотим решить, которая вдохновлена этим проектом. Учитывая … Помечено с машиной, Python, Keras, Pytorch.

Давайте начнем с идентификации Проблема, которую мы хотим решить который вдохновлен Этот проект Отказ

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

Структура проекта

Он состоит из 5 основных разделов, один для ноутбуков, один для общих кодов Python, наборов данных, скриптов Google облачных и один для сохранения весов модели.

В производственном проекте у вас, вероятно, будет больше каталогов, таких как Web и API.

Я также решил использовать Pipenv вместо CODAS и VirtualenV для управления моей Python Environment. Я только недавно перешел на Pipenv из кондей, и я обнаружил, что она последовательно работала, как и ожидалось везде.

Для тренировки GPU я использовал экземпляр облака Google с одним GPU T4 NVIDIA. Сценарии Bash управляют жизненным циклом экземпляра, от создания его изначально, чтобы начать его, подключение к нему и остановить его.

Данные

Набор данных описан в Toml Файл внутри RAW Directory, файл TOML в основном состоит из клавишных пар. Другие каталоги под данными являются Git игнорируются, потому что они будут содержать фактические загрузки полных наборов данных.

Ноутбуки

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

Python файлы

В каталоге SRC я держу код, который можно поделиться и повторно использовать между различными ноутбуками. После хороших методов инженерной инженерии программного обеспечения является ключом к тому, чтобы все было сделано быстро и правильно, находки и идентификации ошибок в ML-коде могут быть чрезвычайно сложными. Вот почему вы хотели бы начать мало и часто повторяют.

Окружающая среда Python

Вы можете установить Pipenv на Linux или Mac, используя Linuxbrew или Macbrew Со следующей командой:

brew install pipenv

А затем вы можете скачать ваши зависимости, используя Pipenv, установите что-то из вашего каталога проекта.

Набор данных

Я буду использовать это Старый академический набор данных Здесь в качестве базы для создания набора данных сегментации линий для обучения A Unet Мини-сеть для обнаружения линий почерка.

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

В ноутбуках/01 – Explore-IAM-DataSet.ipynb Я загрузил набор данных, расстегнул его, а затем переоценил некоторые случайные изображения с данными из файла XML.

Далее я обрезал изображения и сгенерировал маскирует изображения, чтобы соответствовать новым размерам. Маскивые изображения – это изображения наземных прав истины, которые мы будем использовать для обучения окончательной модели.

Наконец, я разделил данные в поезд, действителен и тестируйте

Сеть

Поскольку у нас нет много данных для обучения, я использовал мини-версию Unet Архитектура основана на Эта реализация KERAS Отказ

И используя эта великая библиотека Я могу визуализировать сеть, выполнив Feedforward с определенным размером ввода.

Учебный трубопровод

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

Сначала определяет набор данных факела и итерации через него с помощью DataLoader

from torch.utils.data import Dataset, DataLoader
from torchvision import transforms, utils


class FormsDataset(Dataset):

    def __init__(self, images, masks, num_classes: int, transforms=None):
        self.images = images
        self.masks = masks
        self.num_classes = num_classes
        self.transforms = transforms

    def __getitem__(self, idx):
        image = self.images[idx]
        image = image.astype(np.float32)
        image = np.expand_dims(image, -1)
        image = image / 255
        if self.transforms:
            image = self.transforms(image)

        mask = self.masks[idx]
        mask = mask.astype(np.float32)
        mask = mask / 255
        mask[mask > .7] = 1
        mask[mask <= .7] = 0
        if self.transforms:
            mask = self.transforms(mask)

        return image, mask

    def __len__(self):
        return len(self.images)

train_dataset = FormsDataset(train_images, train_masks, number_of_classes, get_transformations(True))
train_data_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
print(f'Train dataset has {len(train_data_loader)} batches of size {batch_size}')

Далее я определяю петлю тренировки

# Use gpu for training if available else use cpu
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

# Here is the loss and optimizer definition
criterion = torch.nn.NLLLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# The training loop
total_steps = len(train_data_loader)
print(f"{epochs} epochs, {total_steps} total_steps per epoch")

for epoch in range(epochs):
    for i, (images, masks) in enumerate(train_data_loader, 1):
        images = images.to(device)
        masks = masks.type(torch.LongTensor)
        masks = masks.reshape(masks.shape[0], masks.shape[2], masks.shape[3])
        masks = masks.to(device)

        # Forward pass
        outputs = model(images)
        softmax = F.log_softmax(outputs, dim=1)
        loss = criterion(softmax, masks)

        # Backward and optimize
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if (i) % 100 == 0:
            print (f"Epoch [{epoch + 1}/{epochs}], Step [{i}/{total_steps}], Loss: {loss.item():4f}")

Вот последние прогнозы

Вы можете проверить Keras поддерживает реализацию TF2 здесь Отказ

Спасибо за то, что сделал это так далеко. Последнее, что я хотел бы сказать, это то, что, к сожалению, большинство доступных онлайн-материалов либо предлагают плохие советы или очень базовые, что они на самом деле на самом деле не предлагают много ценности, а некоторые неправываются. Есть несколько отличных ресурсов, хотя и их 60-минутная серия Blitz и отличный API Docs. . Есть также это чит лист И это Github Repo Отказ

Если вам понравилось, читая этот пост и нашел его полезным, я хотел бы услышать от вас, Мой Twitter DMS открыты.

Оригинал: “https://dev.to/mgazar_/train-a-lines-segmentation-model-using-pytorch-1159”