Как мы решали задачу стегоанализа, применяя глубокое обучение
Обработка изображений с помощью нейросетей широко используется в настоящее время. Это полезно, например для классификации изображений. Одним из известных примеров такой задачи является классификация животных на изображении.
Нейросеть, обучаясь на предоставленном ей наборе данных, разделяет изображения по категориям и способна отличать кошку от собаки с определенной точностью. Или, например, не менее популярная задача классификации чисел, где нейросеть учится визуально отличать числа от 0 до 9. Задачи имеют широкое применение: в распознавании рукописного текста, анализе объектов на изображении, описании объектов, распознавании образов, определении опасных заболеваний на медицинских снимках и многие другие.
Наиболее эффективно с такой обработкой справляются сверточные нейронные сети (convolutional neural networks, сокращенно – CNN). В предыдущей статье мы рассматривали особенности сверточной нейронной сети и самой операции свертки. В данной статье мы решим задачу распознавания стегосообщения в контейнере изображения и научимся пректировать архитектуру нейронной сети с помощью фреймворка pyTorch. Поставленная цель является достаточно сложно реализуемой ввиду того, что визуальные искажения на зашифрованных изображениях практически незаметны. Для решения мы будем использовать предварительно обработанные изображения с помощью высокочастотных Вейвлет-ориентированных фильтров Добеши. Ниже представлен пример подобного распознавания с примененным фильтром предварительной обработки изображения. Слева пустой контейнер, справа – заполненный.
Давайте рассмотрим пример архитектуры нейронной сети для решения поставленной задачи. Это задача классификации изображений по двум классам. Размер входных изображений будет 256х256 пикселей, один цветовой канал. Будем использовать глубокую нейронную сеть с пятью слоями, вы можете настраивать и кастомизировать слои по своему усмотрению.
Архитектура сверточной нейронной сети состоит из последовательно идущих операций свертки и операций пакетной нормализации, пулинга по среднему/максимальному значению, dropout и других. Их можно включать и исключать из получившейся модели нейронной сети. Архитектура нейронной сети для решения конкретной задачи представлена на рисунке 1.
Объясним, что тут происходит: ядро свертки размерностью 5х5 пикселей проходится по изображению, в результате чего выявляются признаки, shape изображения меняется и оно приобретает новую размерность. На первых двух сверточных слоях мы используем функцию активации Tanh, после – ReLU.
Помимо представленных функций активации, существует достаточно много других функций активации, при этом общий смысл их использования сводится к тому, чтобы определить выходное значение нейрона пользуясь пороговым значением и взвешенной суммой входов. То есть, функция активации задает правило, по которому будет осуществляться выбор того или иного решения. Функции активации могут быть линейными и нелинейными. К линейным относится ступенчатая функция активации, линейная функция активации. К нелинейным относятся такие функции как, например, сигмоида, гиперболиче- ский тангенс, ReLU, Leaky ReLU, Tanh, Gaussian и многие другие. Обычно я использую ReLU или Tanh как самые универсальные функции активации.
Переобучением называется ситуация, когда алгоритм сильно лучше классифицирует обучающую выборку, чем тестовую. Dropout необходим для того, чтобы предотвратить процесс переобучения нейронной сети. Он выключает нейроны с определенным процентом вероятности и таким образом помогает сети не «заучивать» правильные ответы, а находить закономерности. Пакетная нормализация, в свою очередь, позволяет повысить производительность и стабильность нейронной сети, также помогает противодействовать переобучению.
Пулинг по среднему значению помогает вернуть среднее значение из части изображения, при этом размерность изображения уменьшается в два раза, но извлекаются признаки. Существуют также другие виды пулинга, например пулинг по максимальному значению. Не сложно понять, что он позволяет вернуть максимальное значение выбранной части изображения.
Последним этапом работы нашей нейронной сети является прохождение через полностью связанный слой, который позволяет выделить доминирующие признаки из уже преобразованного в вектор изображения с помощью техники Softmax. Таким образом, это заключительный этап анализа изображения, здесь мы можем задать количество классов, которое будет равно количеству выходных значений.
Все эти этапы можно контролировать с помощью инструмента pyTorch.
Здесь представлена архитектура сети, состоящая из пяти слоев свертки, на каждом слое задаются индивидуальные параметры нейронной сети такие как размер ядра свертки, bias, padding и stride. Также здесь указываются применяющиеся функции активации.
Процесс обучения нейронной сети состоит из:
1. формирования выходных значений за счет прямого распространения ошибки (scores)
2. подсчета loss между тем что выдает модель и целевыми значениями
3. обнуления градиентов
4. обновления градиентов за счет обратного распространения ошибки
5. оптимизации
Таким образом, мы решили задачу распознавания стегосообщения с помощью классификации изображений по двум классам – есть стегосообщение и стегосообщение отсутствует. Получаем следующие выходные данные по точности распознавания полученной модели. Результат достаточно высокий – 91%, но стоит заметить, что достигнут он в основном благодаря предварительной обработке входных данных.
Как видите, проектировать нейронные сети не так сложно, как может показаться. Единственным ограничением, по моему скромному мнению, являются аппаратные возможности вашего устройства и ограниченная выборка данных для проведения обучения в связи со сложностью их получения и проставления меток классов вручную перед обучением. Надеюсь, сложности вас не остановят в погружении в этот замечательный мир глубокого обучения. Желаю удачи и не останавливаться на достигнутом!
Вы можете уже завтра уволить восемь менеджеров, а продажи и лояльность клиентов от этого только вырастут. При этом вы еще 2,8 млн руб/год на ФОТ (фонд оплаты труда) сэкономите. Как это возможно? Сейчас расскажу.
Привет! Хочу поделиться нашим кейсом в нише юриспруденции для грузоперевозчиков.
Но данные могут стать поводом для проверки.
Спасибо, очень интересно!
1. А что ещё пробовали из (донейросетевых) методов? Может быть, пробовали простой частотный анализ наименее значащих битов?
2. Ещё интересна природа данных: вы их откуда (?)-то брали или сами генерировали? Если генерировали сами, то по какому алгоритму?
Спасибо вам за проявленный интерес!
Метод наименее значащих бит является, пожалуй, одним из самых простых в стеганографии, поэтому его распознавание можно реализовать и без использования нейронных сетей – создаете копию изображения, осуществляете разделение по каналам и для каждого канала создаете условие, например, закрашивание пикселя изображения в случае, если наименее значащий бит его равен 1.
Таким образом, вы получите изображение с ярко выраженными областями неравномерного наложения шума. Если сравнить пустой контейнер и контейнер, в который произведено встраивание LSB методом, отличия вы заметите невооруженным взглядом.
Данные парсили с фотостоков, имеющих бесплатную лицензию на использование в исследовательских целях. Для расширения базы данных, написали скрипт, который разрезает изображения на части, таким образом из одного изображения получали от 4 до 6 новых изображений. После использовали готовый скрипт для встраивания стего в контейнер изображений.