От диплома до продакшена: Как я создавал архитектуру ИИ-проекта для… Часть 1: Что я хотел видеть дома в 2021. Будущее здесь.. Будущее здесь. искусственные нейронные сети.. Будущее здесь. искусственные нейронные сети. искусственный интеллект.. Будущее здесь. искусственные нейронные сети. искусственный интеллект. искусственный разум.. Будущее здесь. искусственные нейронные сети. искусственный интеллект. искусственный разум. искуственный интеллект.. Будущее здесь. искусственные нейронные сети. искусственный интеллект. искусственный разум. искуственный интеллект. Производство и разработка электроники.

Часть 1: Что я хотел видеть дома в 2021

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


Дорогие читатели!

Перед вами первая из 7 статей о моём дипломном проекте «Голосовое управление Умным домом», который я защищал в 2021 году.

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


📋 Содержание серии из 7 частей

Часть

Тема

Краткое содержание

1

Что я хотел видеть дома в 2021

Концепция проекта, видение «Дом который тебя понимает», цели и задачи

2

Как я проектировал опыт пользователя

Проектирование пользовательского интерфейса, разделение полномочий, контекстное понимание

3

Архитектура нейросети

Многослойная обработка звуковых данных, выбор архитектуры, технические детали

4

Обучение и валидация модели

Сбор данных, извлечение признаков, процесс обучения, результаты

5

Интеграция с устройствами «Умного дома»

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

6

Система безопасности и приватности

Защита личных данных, механизмы приватности, контроль доступа

7

Расширенные возможности и перспективы

Наблюдение за здоровьем, безопасность детей, прогнозирование потребностей


🎯 Глава 1: От идеи к диплому

Контекст создания проекта

В 2021 году я защищал дипломный проект, получая второе высшее образование по специальности Data Science и нейронные сети. До этого у меня уже был солидный багаж:

  • 5 лет системного администрирования — понимание инфраструктуры и ограничений

  • Стратегический маркетинг — понимание пользователя и вовлечения

  • Руководство отделом продаж — управление командой и процессами

Этот бэкграунд сформировал моё видение: я создаю продукты, которые будут удобны людям, и чтобы люди могли настраивать вариативность этих продуктов для себя.

Философия проекта: «Дом который тебя понимает»

В презентации к диплому я написал:

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

Это было ключевым принципом — создать систему, которая понимает, а не просто слышит. Не нужно говорить «Алиса, включи свет» или «Окей, Гугл, открой дверь». Просто скажите «включи свет» в разговоре, и система поймёт, что это команда.

Почему именно голосовое управление?

На тот момент (2021) существовали системы голосового управления, но они требовали:

  • Специальных триггерных слов («Алиса», «Окей, Гугл»)

  • Чёткого произношения

  • Отсутствия фонового шума

  • Отдельных устройств (колонок, смартфонов)

Я хотел создать систему, которая:

  • Работает в обычном диалоге — команды распознаются среди обычной речи

  • Не требует дополнительных устройств — работает на обычном компьютере или сервере

  • Адаптируется под пользователя — учитывает возраст, пол, особенности речи

  • Понимает контекст — знает, кто говорит и в какой ситуации

Понимание сложности интеграции

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

“Чтобы управление от устройства понимания, в котором расположены веса модели и алгоритм отправки команды, имело механическое действие — необходимо согласование этих механизмов.”

Примеры интеграции:

  1. GSM-звонок и шлагбаум:

    • Система распознаёт голосовую команду «Открой ворота»

    • Проверяется авторизация пользователя

    • Если пользователь имеет право — система инициирует GSM-звонок оператору

    • Оператор получает команду и включает механизм открывания шлагбаума

    • Шлагбаум открывается

  2. Детекция госномера:

    • Камера фиксирует автомобиль на подъезде

    • Система детектирует госномер на номерном знаке

    • Распознаёт цифры и буквы госномера

    • Проверяет номер по базе данных на наличие полномочий

    • Если номер авторизован — открывает ворота

Почему это важно для архитектуры?

Понимание этой сложности помогло мне спроектировать модульную архитектуру, где:

  • Каждый компонент отвечает за свою задачу

  • Компоненты могут работать независимо друг от друга

  • Можно легко добавлять новые функции без переписывания всей системы

  • Система масштабируется по мере добавления новых устройств

Это и есть микросервисный подход, который я интуитивно применял ещё в 2021 году, хотя тогда это ещё не было таким распространённым в ИИ-проектах.


🏠 Глава 2: Что я хотел видеть дома?

Сценарии использования

Сценарий 1: Управление освещением

Тогда (2021)

Сейчас (2026)

Пользователь говорит в разговоре: «Здесь темновато»

Это стало стандартом в умных домах

Система распознаёт это как команду на увеличение яркости

Но многие системы всё ещё требуют триггерных слов

Освещение автоматически регулируется

Сценарий 2: Управление дверью

Тогда (2021)

Сейчас (2026)

Пользователь говорит: «Открой дверь»

Умные замки стали популярными

Система проверяет права доступа

Но интеграция с голосовыми системами всё ещё не идеальна

Если пользователь имеет право — дверь открывается

Сценарий 3: Управление камерой наблюдения

Тогда (2021)

Сейчас (2026)

Пользователь говорит: «Покажи, что происходит на кухне»

Умные камеры с голосовым управлением существуют

Система включает камеру и показывает изображение на экране

Но интеграция с другими системами дома часто сложна


📊 Глава 3: Технические характеристики проекта

Обучающая база

Параметр

Значение

Объём базы

620 звуковых файлов (изначально), 273 файла в финальной версии

Классы команд

4 класса: «Комната», «Дверь», «Камера», «Фон»

Архитектура

Multi-input CNN (3 входа)

Параметры модели

~50,480 параметров

Точность (train)

~99.66%

Точность (val)

~94.55%

Инструменты

Python, TensorFlow/Keras, Librosa, Google Colab

Извлечение признаков

Для получения большего количества параметров я выхватывал из данных среднее, минимальное и максимальное значения из 7 групп признаков:

  1. Chroma STFT — Частота цветности

  2. RMSE — Среднеквадратичные колебания

  3. Zero Crossing Rate — Пересечения нуля

  4. Spectral Centroid — Центр масс звука

  5. Spectral Bandwidth — Ширина полосы частот

  6. Spectral Rolloff — Спектральный спад частоты

  7. MFCC — Значимые для обработки частоты

def get_featur_mean(y, sr):
    # Получаем различные параметры аудио которые в сумме дадут уникальный набор признаков
    chst1 = np.mean(librosa.feature.chroma_stft(y=y, sr=sr))
    chst2 = np.max(librosa.feature.chroma_stft(y=y, sr=sr))
    chst3 = np.min(librosa.feature.chroma_stft(y=y, sr=sr))
    
    rmse1 = np.mean(librosa.feature.rms(y=y))
    rmse2 = np.max(librosa.feature.rms(y=y))
    rmse3 = np.min(librosa.feature.rms(y=y))
    
    # ... и так далее для всех 7 групп признаков
    
    return ssr, crz, mfc
От диплома до продакшена: Как я создавал архитектуру ИИ-проекта для… Часть 1: Что я хотел видеть дома в 2021 - 1

Визуализация данных

Это позволяет наглядно понять что имеем от каждого файла, в каком объёме и диапазоне. По результатам принимаем решение как можем использовать эти данные для достижения результата.

Визуализация MFCC признаков

Визуализация MFCC признаков

🧠 Глава 4: Архитектура нейросети

Математическое отображение модели

┌─────────────────────────────────────────────────────────────────┐
│                    АРХИТЕКТУРА NEURAL NETWORK v4.6              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ВХОД 1: SSR (9 признаков)        ВХОД 2: CHZ (9 признаков)    │
│  Conv1D → BatchNorm → Dropout     Conv1D → BatchNorm → Dropout │
│  Conv1D → Flatten → Dense         Conv1D → Flatten → Dense     │
│                                                                 │
│  ВХОД 3: MFC (3 признака)         Dense → Dense (вторая группа)│
│  Conv1D → BatchNorm → Dropout                                  │
│  Conv1D → Flatten → Dense                                      │
│                                                                 │
│  CONCATENATE [x1, x3, x4] → Dense → BatchNorm → Dropout        │
│  Dense → CONCATENATE [x, x4]                                   │
│  Dense (len(labels), activation='softmax')                     │
│                                                                 │
│  Всего параметров: 50,480                                      │
│  Обучаемых параметров: 50,200                                  │
│  Не обучаемых параметров: 280                                  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
От диплома до продакшена: Как я создавал архитектуру ИИ-проекта для… Часть 1: Что я хотел видеть дома в 2021 - 3

Сборка модели

model = Sequential()
input1 = Input(xTrainSSR.shape[1:])  # Входные данные, это первое число размерности оцифрованых данных
input2 = Input(xTrainCHZ.shape[1:])
input3 = Input(xTrainMFC.shape[1:])

# На первую группу подаём тренировочные данные
x1 = Conv1D(4, 2, activation="tanh")(input1)
x1 = BatchNormalization()(x1)                # Нормализация данных для исключения резких разниц в расчётах
x1 = Dropout(0.2)(x1)                        # Во избежании "заучивания" произвольное отключение нейронов
x1 = Conv1D(8, 2, activation="tanh")(x1)     # Одномерный свёрточный слой
x1 = Flatten()(x1)                           # Функция - перевод данных в вектор
x1 = Dense(64, activation='tanh')(x1)

# На вторую группу подаём тренировочные данные
x2 = Conv1D(4, 2, activation="linear")(input2)
x2 = BatchNormalization()(x2)
x2 = Dropout(0.2)(x2)
x2 = Conv1D(8, 2, activation="linear")(x2)
x2 = Flatten()(x2)
x2 = Dense(64, activation='linear')(x2)

# На третью группу подаём тренировочные данные
x3 = Conv1D(4, 2, activation="relu")(input3)
x3 = BatchNormalization()(x3)
x3 = Dropout(0.2)(x3)
x3 = Conv1D(8, 2, activation="relu")(x3)
x3 = Flatten()(x3)
x3 = Dense(64, activation='relu')(x3)

# Здесь данные из второй группы обрабатываем полносвязным слоем Dense на 64 нейрона
x4 = Dense(64, activation='tanh')(x2)
x4 = Dense(64, activation='tanh')(x4)        # Обрабатываем меньшим количеством нейронов

# Соединяем данные из групп 1, 3, 4 в группу x
x = concatenate([x1, x3, x4])
x = Flatten()(x)
x = Dense(128, activation='elu')(x)
x = BatchNormalization()(x)
x = Dropout(0.3)(x)
x = Dense(128, activation='elu')(x)
x = concatenate([x, x4])

# На выходе нейронов равное количеству групп len(labels)
x = Dense(len(labels), activation='softmax')(x)

model = Model([input1, input2, input3], x)
model.compile(optimizer=Adam(1e-4), loss='categorical_crossentropy', metrics=['accuracy'])
От диплома до продакшена: Как я создавал архитектуру ИИ-проекта для… Часть 1: Что я хотел видеть дома в 2021 - 4

📈 Глава 5: Обучение модели

Процесс обучения (250 эпох)

Epoch 1/250
22/22 [==============================] - 3s 33ms/step 
- loss: 1.8197 - accuracy: 0.2110 
- val_loss: 1.2615 - val_accuracy: 0.9455

...

Epoch 247/250
22/22 [==============================] - 0s 16ms/step 
- loss: 0.1618 - accuracy: 0.9404 
- val_loss: 0.9144 - val_accuracy: 0.9455
От диплома до продакшена: Как я создавал архитектуру ИИ-проекта для… Часть 1: Что я хотел видеть дома в 2021 - 5

Результаты обучения

График обучения

График обучения

Параметр

Значение

Точность обучения

~94.04%

Точность валидации

~94.55%

Эпох обучения

250

Размер батча

10

Оптимизатор

Adam (lr=1e-4)

Функция потерь

categorical_crossentropy

Сохранение модели

# Сохраняем модель
model.save_weights(WAY_NP+'Model_weight.h5')
model.save(WAY_NP+'Model_Input3_v4.h5')

# Загружаем модель
# model.load_weights(WAY_NP+'Model_Input3_v4.h5')
От диплома до продакшена: Как я создавал архитектуру ИИ-проекта для… Часть 1: Что я хотел видеть дома в 2021 - 7

💡 Глава 6: Моя философия проектирования

Интеллектуальное управление

“Не просто ‘включи свет’, а ‘сделай уютно’. Система должна понимать намерение, а не только команду.”

Моя философия:

“Значит система хранит в себе паттерны каждого человека, понимая его, как личный помощник с разными ролями. И просьба ‘сделай уютно’ — воспринимается так, что человеку, сказавшему это словосочетание, делает приглушенный свет, легкую музыку, нагрев пола и вода в ванной.”

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

Микросервисная архитектура

Я не исключительно на ООП опираюсь при создании проекта. Мне больше нравится микросервисная архитектура. Также я интуитивно делаю всё по Agile.

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

То есть я понимаю, что можно мониторить систему и видеть, что нагрузка у нас на нейросеть, которая занимается компьютерным зрением, в большей степени происходит с 10:00 до 22:00 по московскому времени. При этом есть задача компьютерного зрения схожая, которая не требует срочной обработки, поэтому мы откладываем на потом. И во время того, как освобождаются вычислительные мощности, происходит передача по стеку накопленных данных для обработки того, что необходимо обработать не в срочном порядке.


🎯 Глава 7: Уроки и выводы

Что получилось

  • ✅ Multi-input архитектура для обработки разных типов признаков

  • ✅ Модульная система, позволяющая легко добавлять новые команды

  • ✅ Точность валидации ~94.55% на небольшом датасете

  • ✅ Возможность масштабирования архитектуры

Что можно улучшить (2026 perspective)

  1. Использовать предобученные модели — Wav2Vec 2.0, HuBERT или RuBERT вместо обучения с нуля

  2. Применить трансформеры — для лучшего понимания контекста

  3. Data Augmentation — шум, питч, скорость для увеличения датасета

  4. Квантование — для deployment на edge-устройства

  5. Микросервисная архитектура — для масштабируемости и оптимизации ресурсов

  6. Мониторинг и планирование — для оптимизации вычислительных мощностей


🔜 Что будет в следующей части?

Часть 2: Как я проектировал опыт пользователя

Темы следующей статьи:

  • 📋 Проектирование пользовательских сценариев

  • 🔐 Разделение полномочий (дети/взрослые)

  • 🧠 Контекстное понимание команд

  • 🔒 Безопасность и приватность данных


📚 Источники и ресурсы

Исходные материалы проекта

Файл

Описание

Ссылка

Презентация

Презентация дипломного проекта

Скачать PDF

Jupyter Notebook

Код модели и обучение

SmartHome v4.6.ipynb

GitHub

Репозиторий проекта

github.com/AlekseyVB/SmartHome

Библиотеки и инструменты

# Основные библиотеки для работы с аудио
import librosa              # Обработка аудио
import librosa.display      # Визуализация аудио
import numpy as np          # Математические операции
import matplotlib.pyplot as plt  # Визуализация

# Библиотеки для нейросетей
import tensorflow as tf     # Фреймворк для глубокого обучения
from tensorflow.keras import layers, models  # Слои и модели
from tensorflow.keras.optimizers import Adam  # Оптимизатор

# Утилиты
from sklearn.preprocessing import StandardScaler  # Нормализация
from sklearn.model_selection import train_test_split  # Разделение данных
От диплома до продакшена: Как я создавал архитектуру ИИ-проекта для… Часть 1: Что я хотел видеть дома в 2021 - 8

💬 Кажется что это было очень – очень давно ))

Автор: AlekseiVB

Источник