Как работает сверточная нейросеть?
делаю диплом про распознавание брака на фото, научрук сказал использовать сверточную нейросеть, а как она вообще картинку обрабатывает без понятия совсем
Юмор, флуд, опросы
Еда и кулинария
Компьютеры и связь
Ваш вопрос
делаю диплом про распознавание брака на фото, научрук сказал использовать сверточную нейросеть, а как она вообще картинку обрабатывает без понятия совсем
1. Картинка как набор чисел. Компьютер видит изображение как массив чисел. Цветное фото 224×224 пикселя – это тензор размером 224×224×3: высота, ширина и три канала (R, G, B). Каждое число – яркость пикселя от 0 до 255 (обычно нормированная в диапазон от 0 до 1).
2. Свертка (convolution). Главная операция сети. Берется маленькое окно, например 3×3, с набором весов – это фильтр (ядро). Фильтр скользит по изображению с шагом 1, и в каждой позиции считается взвешенная сумма пикселей под ним:
Здесь – пиксели изображения, – веса фильтра, – смещение. Результат – новая карта, которая показывает, насколько сильно в данном месте проявляется то, что «ищет» фильтр.
Важно: фильтры не задаются вручную. Сеть сама подбирает их значения в процессе обучения. В первых слоях фильтры обычно находят простые признаки: границы, перепады яркости, линии под разными углами. В глубоких слоях – более сложные: текстуры, формы, части объектов.
3. Карта признаков (feature map). Один фильтр дает одну карту признаков. Слой содержит десятки или сотни фильтров, поэтому на выходе получается стек карт признаков: каждая отвечает за свой тип структуры.
4. Функция активации (ReLU). После свертки применяется нелинейность, обычно . Без нее сеть была бы эквивалентна одной линейной операции, как бы много слоев ни было.
5. Пулинг (pooling). Обычно max-pooling 2×2: из каждого квадрата 2×2 берется максимум. Размер карты уменьшается вдвое, а сеть становится устойчивее к небольшим сдвигам и масштабу.
6. Повторение и иерархия. Блоки «свертка → ReLU → пулинг» повторяются много раз. По мере углубления пространственный размер уменьшается, а число каналов растет. Так постепенно формируется иерархическое представление: от пикселей к линиям, от линий к деталям, от деталей к объектам.
7. Классификатор. В конце карты признаков превращаются в вектор (flatten или глобальный average pooling) и подаются в полносвязный слой, который выдает вероятности классов, например «годное» / «брак».
8. Обучение. Сеть получает размеченные изображения и на каждом шаге:
Повторяя это на тысячах примеров, сеть учится находить признаки, которые отличают брак от годной продукции.
Для диплома обычно берут предобученную модель, дообучают ее на своих данных и сравнивают несколько архитектур по метрикам (accuracy, precision, recall, F1, для детекции – mAP). Большое внимание стоит уделить аугментации данных (повороты, отражения, изменение яркости), так как размеченных фото брака обычно мало.
CNN «видит» картинку не целиком, а через маленькие окна-фильтры, которые скользят по изображению и ищут локальные признаки: края, углы, текстуры, пятна. Из простых признаков первый слой собирает более сложные, и так — слой за слоем — от «пикселей и рёбер» до «дефектов и брака».
Вход. Фото превращается в числовую матрицу размера (ширина, высота, 3 канала RGB), значения обычно нормализуют в диапазон .
Свёртка (conv). Небольшое ядро (например, ) с весами скользит по картинке. На каждом шаге выполняется точечное умножение и суммирование:
Результат — карта признаков (feature map). Ядро весов одно и то же на всей картинке — поэтому параметров мало, а признак «переносится» на любое место снимка (свойство инвариантности к сдвигу).
Нелинейность (ReLU). После свёртки применяется , чтобы сеть могла учить нелинейные зависимости.
Pooling. Уменьшение карты признаков (обычно max-pooling ): берётся максимум по блоку, картинка сжимается вдвое, но главное сохраняется. Даёт устойчивость к небольшим сдвигам и ускоряет вычисления.
Повтор. Блок «свёртка → ReLU → pooling» повторяется несколько раз. Первые слои учатся простым текстурам, средние — структурам (сколы, царапины, неровности края), глубокие — целым объектам и их дефектам.
Полносвязный слой и выход. Финальные карты признаков «разворачивают» в длинный вектор и прогоняют через обычные плотные слои. На выходе — например, 2 нейрона с softmax: вероятность «брак» и «норма».
import torch.nn as nn
class DefectCNN(nn.Module):
def __init__(self):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(3, 32, kernel_size=3, padding=1), # свёртка
nn.ReLU(),
nn.MaxPool2d(2), # pooling
nn.Conv2d(32, 64, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Conv2d(64, 128, kernel_size=3, padding=1),
nn.ReLU(),
nn.AdaptiveAvgPool2d(1),
)
self.classifier = nn.Linear(128, 2) # брак / норма
def forward(self, x):
x = self.features(x)
x = x.flatten(1)
return self.classifier(x)
nn.Conv2d — чтобы понять, как параметры ядра, stride и padding влияют на размер карты признаков.Сверточная нейросеть (CNN) — это модель, которая учится находить в изображении полезные признаки: сначала простые, вроде границ и пятен, а затем более сложные — например, царапины, трещины или сколы.
Изображение превращается в числа.
Каждый пиксель представлен значениями яркости или цветов — обычно красного, зелёного и синего каналов.
Свёртки ищут признаки.
Небольшие матрицы — фильтры — проходят по изображению и вычисляют, насколько в каждом месте заметен определённый рисунок. Например, один фильтр может реагировать на горизонтальные границы, другой — на мелкие пятна. В начале обучения фильтры обычно случайные, но постепенно сеть настраивает их сама.
Сеть постепенно собирает сложные признаки.
Первые слои замечают простые элементы: контуры, переходы цвета, текстуры. Более глубокие слои объединяют их в характерные структуры — например, вытянутую тёмную линию, похожую на трещину.
Признаки превращаются в ответ.
Последняя часть сети использует найденные признаки и выдаёт оценку для каждого класса. Например: «брак» — 0,92, «норма» — 0,08.
Для обучения нужны фотографии с правильными метками, например «брак» и «норма». Сеть предсказывает класс, сравнивает его с меткой и вычисляет ошибку. Затем алгоритм обучения немного изменяет параметры фильтров, чтобы в следующий раз ошибка была меньше. Этот процесс повторяется на множестве примеров.
Важно, чтобы фотографии представляли реальные условия работы: разные ракурсы, освещение, фон и виды дефектов. Иначе сеть может выучить случайные особенности снимков, а не признаки брака.
Если нужно для всей фотографии определить, есть ли на ней брак, задача называется классификацией изображений. Обычно начинают с модели, уже обученной на большом наборе изображений, и дообучают её на ваших фото — это называется переносом обучения. Такой подход часто требует меньше данных и вычислений, чем обучение CNN с нуля.
Если же нужно указать где именно находится дефект, одной классификации недостаточно: понадобится обнаружение объектов или сегментация, которые возвращают область дефекта на изображении.
расчёт калоража у пациентов реанимационного профиля
Что показывает «ящик с усами», чего не видно по среднему значению?
Как понять, работает ли Advanced Shader Delivery в игре на ПК?
Можно ли перевести фотографии из JPEG в JPEG XL без потери качества?
Почему HTTPS не всегда защищает от подмены сайта?
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
Нео-аналитик
Нео-аналитик
Как работает сверточная нейросеть?
у меня похожая тема была на дипломе, для брака хорошо заходит именно cnn, точность была под 90 процентов на моих данных