Распознавание подписи на 3 млн параметров: как модуль внимания отсекает фоновый шум
Компания Smart Engines опубликовала подробный разбор архитектуры компактной свёрточной нейросети на базе ResNet18 с модулем пространственного внимания, которая определяет наличие подписи в выделенной области документа и снижает долю ложных срабатываний при автоматической обработке.

Распознавание подписи на фоне печатей, защитных сеток и бледных штрихов до сих пор остаётся узким местом в автоматизации документооборота, и готовый рецепт с открытой архитектурой позволяет встроить проверку в собственный пайплайн без лицензий на закрытые OCR-движки.
Задача звучит просто: есть фрагмент документа, нужно ответить «подпись есть» или «подписи нет». На практике подпись не имеет устойчивой формы, пересекается с линиями бланка и оттисками печатей, а при съёмке на телефон ещё и теряет контраст из-за бликов и размытия. Инженеры Smart Engines предложили решение на базе облегчённой ResNet18 (свёрточная нейросеть с 18 слоями, стандартная «рабочая лошадка» компьютерного зрения) с добавленным модулем пространственного внимания. Именно этот модуль позволяет модели фокусироваться на штрихах подписи и игнорировать фоновый шум. Ниже пошагово разберём, как воспроизвести подход и применить распознавание подписи в своих проектах.
Что понадобится?
- Python 3.8+ и PyTorch (или аналогичный фреймворк для обучения нейросетей)
- Датасет Tobacco800 (открытый набор документов с размеченными подписями, около 1 200 страниц) или собственная коллекция сканов и фотографий документов
- GPU с 4 и более ГБ видеопамяти (модель компактная, подойдёт даже бюджетная карта)
- Около 170 000 фрагментов изображений для обучения (как их нарезать, описано ниже)
- 2 до 4 часов на подготовку данных и запуск первого обучения
Пошаговая инструкция
1. Подготовьте фрагменты документов (патчи)
Модель работает не с целой страницей, а с заранее выделенной областью, ROI (Region of Interest, область интереса, то есть тот прямоугольник на странице, где по шаблону должна стоять подпись). Для документов с фиксированной структурой координаты поля можно задать вручную в шаблоне. Нарежьте из каждой ROI случайные вырезки разного масштаба и соотношения сторон, чтобы модель привыкла к неточностям: подпись может занимать угол поля или растягиваться на всю ширину.
По данным Smart Engines, их обучающий набор содержал 170 000 патчей трёх типов:
- 50 000 патчей на основе реальных подписей из Tobacco800 (705 исходных подписей, из каждой генерировались случайные вырезки)
- Патчи без подписи (пустые поля, текст, печати, защитные сетки)
- Синтетические патчи с наложением подписей на разные фоны
2. Приведите изображения к единому формату
Все фрагменты конвертируйте в оттенки серого и масштабируйте до 128 на 128 пикселей. Серый канал снижает объём вычислений и убирает цветовой шум, который для задачи распознавания подписи не несёт полезной информации.
from torchvision import transforms
transform = transforms.Compose([
transforms.Grayscale(num_output_channels=1),
transforms.Resize((128, 128)),
transforms.ToTensor(),
])
3. Соберите облегчённую ResNet18
Стандартная ResNet18 содержит около 11,7 млн параметров. Smart Engines уменьшили число каналов в свёрточных блоках и получили модель примерно с 3 млн параметров. Это важно для скорости инференса (инференс, момент, когда обученная модель обрабатывает новое изображение и выдаёт ответ) на мобильных устройствах и встраиваемых системах.
# Пример: уменьшаем число каналов вдвое в каждом блоке
# channels: [32, 64, 128, 128] вместо стандартных [64, 128, 256, 512]
4. Добавьте модуль пространственного внимания
Это ключевой элемент. Модуль получает карту признаков размером 16 на 16 на 256 (пространственные позиции и каналы) и обрабатывает её в три шага:
- Свёртка 1 на 1 сжимает 256 каналов в одно значение на каждую позицию, получается карта оценок 16 на 16 на 1
- Softmax по всем пространственным позициям нормализует оценки в маску внимания, где веса неотрицательны и в сумме дают единицу
- Каждый признак умножается на вес своей позиции (один вес применяется ко всем 256 каналам)
import torch
import torch.nn as nn
import torch.nn.functional as F
class SpatialAttention(nn.Module):
def __init__(self, in_channels=256):
super().__init__()
self.conv = nn.Conv2d(in_channels, 1, kernel_size=1)
def forward(self, feature_map):
# feature_map: (B, 256, 16, 16)
scores = self.conv(feature_map) # (B, 1, 16, 16)
B, C, H, W = scores.shape
weights = F.softmax(scores.view(B, -1), dim=-1).view(B, 1, H, W)
weighted = feature_map * weights # поэлементное умножение
return weighted
Результат поступает в классификационную голову (обычно глобальный пулинг и линейный слой), которая выдаёт бинарный ответ: подпись есть или нет.
5. Обучите модель
Весь модуль пространственного внимания дифференцируем, то есть обучается вместе с остальной сетью. Для обучения достаточно бинарных меток на уровне фрагмента, пиксельная разметка штрихов подписи не нужна. Используйте стандартную кросс-энтропию как функцию потерь.
6. Проверьте карты внимания
После обучения визуализируйте маску внимания: она покажет, на какие участки фрагмента модель обращает внимание. Если модель «смотрит» на защитную сетку или текст, а не на штрихи подписи, это сигнал пересмотреть баланс обучающих данных.
Допустим, вы автоматизируете приём договоров. Шаблон документа фиксированный, поле подписи всегда внизу справа. Вы задаёте координаты ROI, вырезаете фрагмент из скана или фотографии, подаёте его в обученную модель. Модель возвращает «подпись есть» с вероятностью 0.97. Договор проходит дальше. Если модель отвечает «подписи нет», система возвращает документ отправителю с пояснением. На практике это экономит время оператора, который иначе проверял бы каждый документ вручную, и снижает риск пропустить неподписанный экземпляр.
- Путать наличие подписи с верификацией. Описанная модель отвечает только на вопрос «есть ли подпись в поле». Она не проверяет, кому подпись принадлежит. Это отдельная задача, требующая другой архитектуры и других данных.
- Обучать на идеальных сканах, а тестировать на фото с телефона. Блики, углы съёмки и размытие радикально меняют картинку. Если в продакшене будут фотографии, добавьте в обучающие данные аугментации: поворот, изменение яркости, гауссово размытие.
- Игнорировать баланс классов. Если патчей «без подписи» в десять раз больше, чем «с подписью», модель научится всегда отвечать «нет» и формально покажет высокую точность. Следите за балансом или используйте взвешенную функцию потерь.
- Трактовать маску внимания как карту расположения подписи. Веса внимания показывают относительную важность позиций для классификации. Они не являются вероятностью наличия подписи в конкретной точке.
Что делать с этим прямо сейчас?
Автору Дзена и копирайтеру. Если вы пишете о документообороте, юридических сервисах или автоматизации бизнеса, тема распознавания подписи даёт конкретный повод для экспертного контента. Можно разобрать, как ИИ проверяет документы, и показать аудитории, что технология доступна, а не «магия из Кремниевой долины».
Маркетологу. Распознавание подписи на входе в воронку (проверка анкеты, договора, заявки) убирает ручной этап и ускоряет конверсию. Если ваш продукт связан с приёмом документов, присмотритесь к интеграции подобного классификатора на стороне бэкенда.
Предпринимателю в РФ. Smart Engines, российский разработчик, архитектура описана открыто. Для тех, кому нужно готовое решение без самостоятельного обучения, стоит обратить внимание на SDK этой компании. Из других российских инструментов для работы с документами: «Контур», ABBYY (с оговоркой на текущий статус компании), «Dbrain». Для экспериментов с CNN (свёрточная нейросеть, convolutional neural network, нейросеть, которая «смотрит» на изображение через набор фильтров, как через увеличительные стёкла разного размера) подойдёт любой облачный GPU, в том числе российские облака «Яндекса» или SberCloud.
Подход Smart Engines ценен не столько архитектурой (модуль пространственного внимания давно известен), сколько инженерной честностью: модель с 3 млн параметров вместо 11,7 млн, обучение на бинарных метках без дорогой пиксельной разметки, явный разбор типов ошибок. Для команды из двух-трёх человек, которая автоматизирует приём документов, это реалистичная отправная точка, а не академическая абстракция. Оговорка: конкретные метрики качества (доля ложных срабатываний, полнота) в доступной части публикации не приведены полностью, поэтому перед внедрением в продакшен проведите собственное тестирование на ваших типах документов.
Попробуйте нейросети в работе с контентом
Если вы автор или маркетолог и хотите разобраться, как ИИ помогает не только с документами, но и с текстами, изображениями и аналитикой, загляните в инструменты dzen.guru.
Перейти к инструментамКомпактная CNN с пространственным вниманием не решит за вас задачу верификации личности и не заменит юриста, но она закрывает конкретный и частый запрос: быстро понять, подписан документ или нет, даже если фото сделано криво, а подпись едва видна на фоне печати.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Срезы данных в машинном обучении: как рост accuracy на 2,5% скрывает провал recall вдвое
Модель точнее на 2,5%, но пропускает вдвое больше нарушений: как срезы данных спасают от ложных выводов перед релизом Общая метрика accuracy выросла с 93% до…

Парадокс рынка труда: безработица 2,2%, а IT-вакансий стало на 56% меньше
Я вижу, что оригинал обрывается на полуслове. Работаю строго по тому, что есть в источнике, без додумывания обрезанных фрагментов. Российский рынок труда в…

За наждачкой, к ИИ: как технологии решают проблемы заводского брака в 40%
Компания «Солид», студенческий стартап из Белгородского государственного технологического университета имени В. Г. Шухова, запустила пилотный проект на…
Комментарии