Компьютерное зрение Python: техники обработки изображений и детекции
Для кого эта статья:
- Для начинающих программистов, желающих изучить компьютерное зрение на Python
- Для студентов и специалистов, интересующихся искусственным интеллектом и его применением в реальных задачах
Для разработчиков, ищущих информацию о библиотеки и инструментах для работы с изображениями и машинами зрения
Компьютерное зрение — одна из самых захватывающих областей искусственного интеллекта, позволяющая машинам "видеть" и интерпретировать визуальную информацию. Python стал языком №1 для разработчиков в этой сфере благодаря богатой экосистеме библиотек и фреймворков. От распознавания лиц в смартфонах до беспилотных автомобилей и диагностики заболеваний по медицинским снимкам — все это создается с использованием алгоритмов машинного зрения. Готовы научиться создавать подобные системы? Давайте погрузимся в мир пикселей, фильтров и нейронных сетей! 🔍
Хотите быстро освоить компьютерное зрение и другие востребованные навыки Python-разработки? Обучение Python-разработке от Skypro даст вам именно то, что нужно для старта карьеры. Программа составлена практикующими разработчиками, включает модули по обработке изображений и машинному обучению, а поддержка менторов поможет избежать типичных ошибок. Ваш первый проект по компьютерному зрению может появиться уже через 3 месяца после начала обучения!
Основы компьютерного зрения Python: с чего начать
Компьютерное зрение — это область искусственного интеллекта, которая обучает компьютеры извлекать информацию из цифровых изображений и видео. Python предоставляет идеальную платформу для разработки таких систем благодаря своей простоте и мощным библиотекам.
Прежде чем погрузиться в код, важно понять фундаментальные концепции обработки изображений. Изображение в цифровом виде представляет собой матрицу пикселей, где каждый пиксель содержит информацию о цвете. В случае RGB-изображения каждый пиксель определяется тремя значениями: интенсивностью красного, зеленого и синего.
Александр Петров, технический директор стартапа в области компьютерного зрения
Когда я только начинал работать с компьютерным зрением, я потратил месяцы, пытаясь понять, почему моя система распознавания дорожных знаков работает превосходно в тестовой среде, но полностью проваливается в полевых условиях. Оказалось, все дело было в базовом понимании предобработки изображений. Я не учитывал различия в освещении, угле съемки и зашумленности реальных изображений. Только после того, как я вернулся к основам и освоил методы нормализации, сегментации и фильтрации, мне удалось создать по-настоящему работающее решение. Не повторяйте моей ошибки — сначала освойте фундаментальные техники, а затем переходите к сложным алгоритмам.
Для работы с компьютерным зрением в Python вам потребуется установить необходимые библиотеки. Вот базовые инструменты для старта:
- NumPy — для эффективных операций с многомерными массивами (изображениями)
- OpenCV-Python — мощная библиотека компьютерного зрения
- Pillow (PIL) — простая библиотека для манипуляций с изображениями
- scikit-image — расширенные алгоритмы обработки изображений
Установка этих библиотек выполняется через pip:
pip install numpy opencv-python pillow scikit-image
Вот простой пример загрузки и отображения изображения с помощью OpenCV:
import cv2
# Загружаем изображение
img = cv2.imread('example.jpg')
# Преобразуем из BGR в RGB (OpenCV использует BGR формат)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Отображаем изображение
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Для начинающих крайне важно понимать структуру данных изображения. В Python с помощью NumPy изображение представляется как многомерный массив. Для черно-белого изображения это двумерный массив, а для цветного — трехмерный (высота, ширина, цветовые каналы).
| Тип изображения | Размерность массива | Диапазон значений | Пример формы |
|---|---|---|---|
| Черно-белое (Grayscale) | 2D | 0-255 | (480, 640) |
| Цветное RGB | 3D | 0-255 для каждого канала | (480, 640, 3) |
| Цветное RGBA | 3D | 0-255 для каждого канала | (480, 640, 4) |
Прежде чем углубляться в сложные алгоритмы, рекомендую освоить базовые операции с изображениями: чтение, запись, преобразование цветовых пространств, изменение размеров, кадрирование и базовые трансформации. Эти навыки станут фундаментом для более сложных задач компьютерного зрения. 🧩

Библиотеки OpenCV и PIL: инструменты машинного зрения
Python предоставляет несколько мощных библиотек для работы с изображениями и видео. Наиболее популярные из них — OpenCV и PIL/Pillow. Каждая имеет свои сильные стороны и идеально подходит для определенных задач.
OpenCV (Open Source Computer Vision Library) — самая популярная и мощная библиотека компьютерного зрения. Изначально написанная на C++, она предоставляет Python-интерфейс через модуль opencv-python. OpenCV специализируется на обработке изображений в реальном времени и включает более 2500 оптимизированных алгоритмов.
import cv2
# Загрузка изображения
image = cv2.imread('sample.jpg')
# Преобразование в оттенки серого
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Применение размытия по Гауссу
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# Обнаружение краев с помощью алгоритма Кэнни
edges = cv2.Canny(blurred, 50, 150)
# Сохранение результата
cv2.imwrite('edges.jpg', edges)
PIL/Pillow (Python Imaging Library) — более простая библиотека, идеальная для базовых манипуляций с изображениями, таких как изменение размера, кадрирование, применение фильтров и форматов преобразования.
from PIL import Image, ImageFilter
# Открытие изображения
image = Image.open('sample.jpg')
# Изменение размера
resized = image.resize((300, 200))
# Применение фильтра размытия
blurred = image.filter(ImageFilter.BLUR)
# Поворот изображения на 90 градусов
rotated = image.rotate(90)
# Сохранение результата
rotated.save('rotated.jpg')
При выборе библиотеки следует учитывать конкретные требования проекта. Вот сравнение основных характеристик:
| Характеристика | OpenCV | PIL/Pillow |
|---|---|---|
| Скорость обработки | Очень высокая (оптимизирована на C/C++) | Средняя |
| Функциональность компьютерного зрения | Обширная (обнаружение объектов, слежение, 3D-реконструкция) | Ограниченная (базовая обработка) |
| Кривая обучения | Крутая | Пологая |
| Работа с видео | Да | Нет (только изображения) |
| Интеграция с глубоким обучением | Встроенная поддержка DNN модулей | Требует дополнительных библиотек |
Часто эти библиотеки используются в тандеме: PIL/Pillow для простой обработки изображений и OpenCV для продвинутого анализа и компьютерного зрения. Перекодировка между форматами этих библиотек возможна через NumPy:
import cv2
import numpy as np
from PIL import Image
# Конвертация из OpenCV в PIL
img_cv = cv2.imread('image.jpg')
img_pil = Image.fromarray(cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB))
# Конвертация из PIL в OpenCV
img_pil = Image.open('image.jpg')
img_cv = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
Помимо этих основных библиотек, стоит обратить внимание на scikit-image — библиотеку, предоставляющую алгоритмы для сегментации, геометрических преобразований, манипуляций с цветовым пространством, анализа, фильтрации и морфологии изображений. Она отлично интегрируется с научными инструментами Python, такими как NumPy и SciPy. 📚
Базовая обработка изображений: фильтры и трансформации
Базовая обработка изображений — это набор техник, направленных на улучшение качества, изменение визуальных характеристик или выделение определенных элементов изображения. Эти методы создают основу для более сложных алгоритмов компьютерного зрения.
Начнем с базовых геометрических трансформаций, которые позволяют изменять размер, поворачивать и кадрировать изображения:
import cv2
import numpy as np
img = cv2.imread('input.jpg')
# Изменение размера
resized = cv2.resize(img, (300, 200))
# Поворот изображения на 45 градусов
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)
rotated = cv2.warpAffine(img, M, (cols, rows))
# Кадрирование (вырезание прямоугольной области)
cropped = img[50:200, 100:300]
Следующий важный этап — фильтрация изображений. Фильтры используются для удаления шума, выделения краев или определенных структур. Наиболее распространенные фильтры:
- Размытие по Гауссу — сглаживает изображение, уменьшает шум, но может размыть края
- Медианный фильтр — эффективно удаляет "соль и перец" шум, сохраняя края
- Фильтр Собеля — выделяет края, подчеркивая изменения интенсивности
- Фильтр Лапласа — обнаруживает области быстрых изменений интенсивности
# Размытие по Гауссу
gaussian_blur = cv2.GaussianBlur(img, (5, 5), 0)
# Медианный фильтр
median_blur = cv2.medianBlur(img, 5)
# Обнаружение краев с помощью фильтра Собеля
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
# Обнаружение краев с помощью фильтра Лапласа
laplacian = cv2.Laplacian(img, cv2.CV_64F)
Преобразования цветовых пространств позволяют работать с изображениями в различных цветовых моделях: RGB, HSV, оттенки серого и других. Это особенно полезно для сегментации объектов определенного цвета:
# Преобразование RGB в оттенки серого
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Преобразование RGB в HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# Выделение объектов определенного цвета (красного)
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
mask = cv2.inRange(hsv, lower_red, upper_red)
red_objects = cv2.bitwise_and(img, img, mask=mask)
Морфологические операции позволяют модифицировать форму объектов на бинарных изображениях. Основные операции включают эрозию, дилатацию, открытие и закрытие:
# Бинаризация изображения
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# Создание структурирующего элемента
kernel = np.ones((5, 5), np.uint8)
# Эрозия (уменьшение объектов, удаление мелких деталей)
eroded = cv2.erode(binary, kernel, iterations=1)
# Дилатация (увеличение объектов, заполнение дыр)
dilated = cv2.dilate(binary, kernel, iterations=1)
# Открытие (эрозия, затем дилатация — удаляет шум)
opened = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
# Закрытие (дилатация, затем эрозия — заполняет отверстия)
closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
Мария Соколова, инженер компьютерного зрения
В процессе разработки системы контроля качества на производстве электронных плат я столкнулась с проблемой: наша система часто пропускала микродефекты в условиях нестабильного освещения. Решением стало комплексное применение базовых техник обработки изображений. Я создала конвейер, который сначала нормализовал освещение через гистограммное выравнивание, затем применял адаптивную бинаризацию, а для выделения дефектов использовал морфологические операции с тщательно подобранными параметрами. Этот подход повысил точность обнаружения дефектов с 78% до 96%. Меня удивило, что решение нашлось не в сложных нейронных сетях, а в грамотном применении базовых алгоритмов. Иногда возвращение к основам и их методичная настройка дает лучшие результаты, чем использование модных сложных техник.
Гистограмма изображения — мощный инструмент для анализа распределения яркости и контраста. Манипуляции с гистограммой позволяют улучшить видимость деталей:
# Вычисление и отображение гистограммы
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
# Эквализация гистограммы (улучшение контраста)
equalized = cv2.equalizeHist(gray)
# Адаптивная эквализация гистограммы (CLAHE)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
clahe_result = clahe.apply(gray)
Эти базовые техники обработки изображений являются строительными блоками для более сложных алгоритмов компьютерного зрения и машинного обучения. Освоив их, вы сможете эффективно подготавливать данные для последующего анализа и распознавания образов. 🛠️
Сегментация и детекция объектов в Python
Сегментация и детекция объектов представляют собой более продвинутый уровень компьютерного зрения, позволяющий выделять и идентифицировать объекты на изображении. Эти техники — основа для создания систем распознавания лиц, автономных транспортных средств, медицинской диагностики и многих других приложений.
Сегментация — это процесс разделения изображения на значимые области или сегменты. Существует несколько подходов к сегментации:
- Пороговая сегментация — разделение изображения на основе значений интенсивности пикселей
- Сегментация на основе краев — выделение объектов по их контурам
- Сегментация на основе регионов — группировка пикселей со схожими характеристиками
- Сегментация с помощью водораздела — рассматривает изображение как топографическую карту
- Семантическая сегментация — классификация каждого пикселя изображения
Начнем с простейшего метода — пороговой сегментации:
import cv2
import numpy as np
# Загрузка и преобразование в оттенки серого
image = cv2.imread('objects.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Бинаризация с постоянным порогом
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# Адаптивная бинаризация
adaptive = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2)
# Метод Оцу для автоматического определения порога
_, otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
Для более сложных сцен эффективна сегментация на основе контуров:
# Обнаружение краев
edges = cv2.Canny(gray, 50, 150)
# Поиск контуров
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Отрисовка контуров
contour_img = image.copy()
cv2.drawContours(contour_img, contours, -1, (0, 255, 0), 2)
# Фильтрация контуров по размеру
filtered_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > 100]
Алгоритм водораздела (Watershed) особенно полезен для сегментации соприкасающихся объектов:
# Подготовка маркеров для алгоритма водораздела
ret, markers = cv2.connectedComponents(binary)
# Добавление 1, чтобы избежать значения 0, зарезервированного для водораздела
markers = markers + 1
# Отметка область, гарантированно принадлежащую фону, как 1
markers[binary == 0] = 1
# Применение алгоритма водораздела
cv2.watershed(image, markers)
image[markers == -1] = [0, 0, 255] # Отмечаем границы водораздела красным
Для детекции объектов существуют более специализированные методы. Один из классических подходов — каскады Хаара, которые эффективны для обнаружения лиц и других объектов с устойчивыми визуальными паттернами:
# Загрузка предобученного каскадного классификатора для лиц
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Обнаружение лиц
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# Отрисовка прямоугольников вокруг обнаруженных лиц
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
Для более универсального обнаружения объектов можно использовать HOG (Histogram of Oriented Gradients) дескрипторы с SVM (Support Vector Machine) классификатором:
# Настройка HOG-дескриптора
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# Обнаружение людей на изображении
boxes, weights = hog.detectMultiScale(image, winStride=(8, 8))
# Отрисовка прямоугольников вокруг обнаруженных людей
for (x, y, w, h) in boxes:
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
Сравнение различных методов детекции объектов по ключевым характеристикам:
| Метод | Скорость | Точность | Сложность реализации | Универсальность |
|---|---|---|---|---|
| Каскады Хаара | Высокая | Средняя | Низкая | Ограниченная (требуется обучение для каждого типа объектов) |
| HOG + SVM | Средняя | Средняя-высокая | Средняя | Средняя |
| YOLO (You Only Look Once) | Высокая | Высокая | Средняя-высокая | Высокая |
| SSD (Single Shot Detector) | Высокая | Высокая | Высокая | Высокая |
| Faster R-CNN | Низкая | Очень высокая | Высокая | Высокая |
Современные методы детекции объектов, такие как YOLO, SSD и Faster R-CNN, основаны на глубоком обучении и будут рассмотрены в следующем разделе. Однако даже классические методы, описанные здесь, могут быть чрезвычайно эффективны для многих практических приложений, особенно когда вычислительные ресурсы ограничены. 👁️
Нейронные сети и машинное зрение Python: практика
Нейронные сети произвели революцию в области компьютерного зрения, обеспечив беспрецедентную точность в задачах классификации изображений, детекции объектов и семантической сегментации. Python предоставляет множество фреймворков для работы с нейронными сетями, среди которых наиболее популярны TensorFlow, PyTorch и Keras.
Давайте рассмотрим, как интегрировать глубокое обучение в наши проекты компьютерного зрения, начиная с самых основ.
Первый шаг — установка необходимых библиотек:
pip install tensorflow keras opencv-python numpy matplotlib
Теперь рассмотрим простой пример классификации изображений с использованием предобученной модели:
import tensorflow as tf
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input, decode_predictions
import numpy as np
import cv2
# Загрузка предобученной модели
model = MobileNetV2(weights='imagenet')
# Загрузка и предобработка изображения
image_path = 'sample.jpg'
image = cv2.imread(image_path)
image = cv2.resize(image, (224, 224))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = preprocess_input(np.expand_dims(image, axis=0))
# Получение предсказания
predictions = model.predict(image)
decoded = decode_predictions(predictions, top=3)[0]
# Вывод результатов
for i, (imagenet_id, label, score) in enumerate(decoded):
print(f"{i+1}: {label} ({score:.2f})")
Для более сложных задач, таких как обнаружение объектов, современные подходы используют специализированные архитектуры нейронных сетей. Например, YOLO (You Only Look Once) — один из самых популярных и эффективных алгоритмов для обнаружения объектов в реальном времени:
import cv2
import numpy as np
# Загрузка модели YOLO
net = cv2.dnn.readNetFromDarknet('yolov3.cfg', 'yolov3.weights')
layer_names = net.getLayerNames()
output_layers = [layer_names[i – 1] for i in net.getUnconnectedOutLayers()]
# Загрузка списка классов
with open('coco.names', 'r') as f:
classes = [line.strip() for line in f.readlines()]
# Загрузка и предобработка изображения
image = cv2.imread('street.jpg')
height, width, channels = image.shape
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
# Прямой проход через сеть
net.setInput(blob)
outs = net.forward(output_layers)
# Обработка результатов
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
# Координаты объекта
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3] * height)
# Координаты прямоугольника
x = int(center_x – w / 2)
y = int(center_y – h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)
# Подавление немаксимальных откликов
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
# Отрисовка результатов
for i in range(len(boxes)):
if i in indexes:
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
confidence = confidences[i]
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, f"{label} {confidence:.2f}", (x, y + 30),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Для задач семантической сегментации, где требуется классифицировать каждый пиксель изображения, используются архитектуры типа U-Net или DeepLab. Вот пример использования предобученной модели DeepLabV3 из TensorFlow:
import tensorflow as tf
import numpy as np
import cv2
# Загрузка предобученной модели
model = tf.saved_model.load('deeplab_model')
# Функция для сегментации изображения
def segment_image(image_path):
# Загрузка изображения
image = cv2.imread(image_path)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
input_tensor = tf.convert_to_tensor(image_rgb)
input_tensor = tf.cast(input_tensor, tf.uint8)
input_tensor = tf.expand_dims(input_tensor, 0)
# Получение предсказания
predictions = model(input_tensor)
predictions = predictions['output_class']
predictions = tf.argmax(predictions, axis=-1)
predictions = tf.squeeze(predictions).numpy()
# Визуализация результатов
colormap = np.array([[0, 0, 0], [128, 0, 0], [0, 128, 0], ...]) # Определите свою цветовую карту
colored_segmentation = colormap[predictions]
# Наложение сегментации на оригинальное изображение
alpha = 0.6
overlay = cv2.addWeighted(image_rgb, alpha, colored_segmentation, 1 – alpha, 0)
return overlay
# Применение сегментации
segmented = segment_image('city.jpg')
cv2.imshow("Segmented Image", cv2.cvtColor(segmented, cv2.COLOR_RGB2BGR))
cv2.waitKey(0)
cv2.destroyAllWindows()
Для тех, кто хочет создать и обучить собственную модель, TensorFlow и PyTorch предоставляют гибкие инструменты. Вот пример создания простой CNN (сверточной нейронной сети) для классификации изображений с использованием Keras:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Создание модели
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.5),
Dense(10, activation='softmax') # 10 классов
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# Генераторы данных для обучения и валидации
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(
'train_data',
target_size=(150, 150),
batch_size=32,
class_mode='categorical')
validation_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(
'validation_data',
target_size=(150, 150),
batch_size=32,
class_mode='categorical')
# Обучение модели
model.fit(
train_generator,
steps_per_epoch=len(train_generator),
epochs=10,
validation_data=validation_generator,
validation_steps=len(validation_generator))
# Сохранение модели
model.save('my_custom_model.h5')
Трансферное обучение — мощный подход, позволяющий использовать предобученные на больших датасетах модели и адаптировать их для конкретных задач с меньшим количеством данных. Это особенно полезно, когда у вас ограниченный набор данных или вычислительные ресурсы:
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
# Загрузка базовой модели (без верхних слоев)
base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# Замораживание весов базовой модели
for layer in base_model.layers:
layer.trainable = False
# Добавление новых слоев
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(5, activation='softmax')(x) # 5 классов
# Создание новой модели
model = Model(inputs=base_model.input, outputs=predictions)
# Компиляция модели
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# Обучение только добавленных слоев
model.fit(
train_generator,
steps_per_epoch=len(train_generator),
epochs=5,
validation_data=validation_generator,
validation_steps=len(validation_generator))
# Разморозка некоторых слоев базовой модели для тонкой настройки
for layer in base_model.layers[-20:]:
layer.trainable = True
# Повторная компиляция с меньшей скоростью обучения
model.compile(optimizer=tf.keras.optimizers.Adam(1e-5),
loss='categorical_crossentropy',
metrics=['accuracy'])
# Дообучение всей модели
model.fit(
train_generator,
steps_per_epoch=len(train_generator),
epochs=5,
validation_data=validation_generator,
validation_steps=len(validation_generator))
Интеграция глубокого обучения в проекты компьютерного зрения открывает огромные возможности, от умных систем видеонаблюдения и автономных транспортных средств до медицинской диагностики и дополненной реальности. С ростом вычислительной мощности и доступности данных эта область будет продолжать стремительно развиваться. 🧠
Компьютерное зрение на Python — это не просто набор технических навыков, а мощный инструмент трансформации отраслей и создания инновационных решений. От базовых манипуляций с изображениями до продвинутых нейросетевых моделей — ваше путешествие в мир машинного зрения только начинается. Главное понять: за каждым алгоритмом и каждой строкой кода стоит реальная задача и потенциал улучшения жизни людей. Компьютерное зрение — это не технология будущего, а технология настоящего, доступная каждому разработчику, готовому изучать и экспериментировать.
Читайте также
- Обучение нейронных сетей на Python: пошаговое руководство
- Полиномиальная регрессия: моделирование нелинейных данных в Python
- Метод filter JavaScript: мощный способ поиска в массивах
- Jupyter Notebook и Google Colab: сравнение интерактивных сред анализа
- Кросс-валидация в машинном обучении: защита от переобучения
- Анализ данных: как научиться работать с информацией и не утонуть
- Аналитика данных для бизнеса: как превратить цифры в прибыль
- Python для анализа данных: настройка инструментов и среды
- Линейная регрессия в Python: от теории к практическому применению
- 7 мощных методов оценки ML-моделей в Scikit-learn: руководство