Сонное вождение - это смертельная комбинация вождения и сонливости. Количество дорожно-транспортных происшествий из-за вождения в сонливом режиме растет во всем мире тревожными темпами. Недостаток сна - основная причина сонливости во время вождения. Однако другие причины, такие как нарушение сна, прием лекарств, употребление алкоголя или вождение в ночную смену, также могут вызывать сонливость во время вождения.
Согласно отчету AIIMS Neurology India -
Нарушения сна стали причиной около 20% всех дорожно-транспортных происшествий, а около 23% водителей грузовиков лишены сна.
В отдельном отчете Национальной администрации безопасности дорожного движения США говорится, что:
В 2013 году на Drowsy Driving произошло около 72 000 аварий, 44 000 травм и 800 смертей.
Какой бы ни была причина сонливости, количество смертельных случаев из-за вождения в сонном состоянии увеличивается с каждым годом.
В этой статье представлено решение для обнаружения сонливости водителя с помощью сверточной нейронной сети. Реализация проекта использует настраиваемую архитектуру CNN с менее чем 250K обучаемых параметров для легкого развертывания на периферийных или менее эффективных в вычислительном отношении устройствах. В результате водитель может быть предупрежден в нужное время, если система обнаружит, что водитель заснул, прежде чем произойдет что-либо опасное.
Для реализации используется платформа Cainvas, которая обеспечивает бесшовное выполнение записных книжек на Python для создания систем искусственного интеллекта, которые в конечном итоге могут быть развернуты на периферии (т. Е. Встроенных систем, таких как компактные микроконтроллеры).
Блокнот можно найти здесь .
Последовательность статьи следующая: -
- Описание постановки проблемы
- Архитектура модели CNN
- Набор данных обнаружения сонливости
- Обучение модели
- Производительность модели
- Тестирование модели
- Построение конвейера для прогнозов на изображениях анфас
- Заключение
Описание постановки проблемы
Проект направлен на обнаружение сонливости во время вождения, чтобы вовремя предупредить водителя и предотвратить несчастные случаи. В проекте используется модель CNN, чтобы предсказать, чувствует ли человек сонливость или нет, в зависимости от того, закрыты или открыты глаза. Основная цель проекта заключалась в том, чтобы ограничить количество обучаемых параметров модели CNN до менее 250 КБ, чтобы систему можно было развернуть на периферии или на менее эффективных в вычислительном отношении устройствах. Проект имеет прямое применение в автомобильной промышленности, делает вождение более безопасным и снижает количество погибших от вождения в сонном состоянии.
Построение модели CNN
Реализация использует специально разработанную сверточную нейронную сеть, которая имеет следующие характеристики:
- Три блока свертки, имеющие 2, 3 и 3 сверточных слоя соответственно.
- Слой пакетной нормализации следует за каждым слоем свертки.
- Слой исключения следует за каждым блоком свертки, чтобы избежать переобучения, а также за слоем MaxPool.
- 3 полностью связанных слоя соответствуют слоям свертки для классификации.
Определение модели с помощью Keras -
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv1 (Conv2D) (None, 32, 32, 32) 896 _________________________________________________________________ batch_normalization (BatchNo (None, 32, 32, 32) 128 _________________________________________________________________ conv2 (Conv2D) (None, 32, 32, 32) 9248 _________________________________________________________________ batch_normalization_1 (Batch (None, 32, 32, 32) 128 _________________________________________________________________ dropout (Dropout) (None, 32, 32, 32) 0 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 16, 16, 32) 0 _________________________________________________________________ conv3 (Conv2D) (None, 16, 16, 64) 18496 _________________________________________________________________ batch_normalization_2 (Batch (None, 16, 16, 64) 256 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64) 0 _________________________________________________________________ conv4 (Conv2D) (None, 8, 8, 64) 36928 _________________________________________________________________ batch_normalization_3 (Batch (None, 8, 8, 64) 256 _________________________________________________________________ dropout_1 (Dropout) (None, 8, 8, 64) 0 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 4, 4, 64) 0 _________________________________________________________________ conv5 (Conv2D) (None, 4, 4, 64) 36928 _________________________________________________________________ batch_normalization_4 (Batch (None, 4, 4, 64) 256 _________________________________________________________________ conv6 (Conv2D) (None, 4, 4, 64) 36928 _________________________________________________________________ batch_normalization_5 (Batch (None, 4, 4, 64) 256 _________________________________________________________________ conv7 (Conv2D) (None, 4, 4, 64) 36928 _________________________________________________________________ batch_normalization_6 (Batch (None, 4, 4, 64) 256 _________________________________________________________________ dropout_2 (Dropout) (None, 4, 4, 64) 0 _________________________________________________________________ max_pooling2d_3 (MaxPooling2 (None, 2, 2, 64) 0 _________________________________________________________________ flatten (Flatten) (None, 256) 0 _________________________________________________________________ fc1 (Dense) (None, 128) 32896 _________________________________________________________________ dropout_3 (Dropout) (None, 128) 0 _________________________________________________________________ fc2 (Dense) (None, 128) 16512 _________________________________________________________________ dropout_4 (Dropout) (None, 128) 0 _________________________________________________________________ fc3 (Dense) (None, 2) 258 ================================================================= Total params: 227,554 Trainable params: 226,786 Non-trainable params: 768 _________________________________________________________________
Модель была составлена с помощью оптимизатора Adam и скорости обучения 0,0001.
Набор данных обнаружения сонливости
В проекте используется набор данных Drowsiness_dataset, представленный на платформе Kaggle. Набор данных находится по этой ссылке. Исходный набор данных содержит четыре класса для классификации изображений на Открытые глаза, Закрытые глаза, Зевая и Не зевая. Однако цель этого проекта - классифицировать сонливость в зависимости от того, закрыты или открыты глаза. Итак, я буду использовать только два класса набора данных. Характеристики набора данных следующие:
- Набор данных содержит в общей сложности 1452 изображения в двух категориях.
- В каждой категории 726 изображений.
- Набор данных уже сбалансирован, поэтому нет необходимости балансировать набор данных.
- Ярлыки класса - «Открытый глаз» и «Закрытый глаз».
- Метки классов были закодированы таким образом, что 0 представляет открытый глаз, а 1 - закрытый глаз.
Загрузка набора данных -
Предварительно обработайте изображения, чтобы размер каждого изображения был равен (32, 32, 3). Затем набор данных разделяется на обучающий и тестовый набор в пропорции 80% -20%.
Обучение модели
Обучение модели длится в общей сложности 200 эпох с размером пакета 128. ImageDataGenerator используется для рандомизации обучающих изображений для повышения производительности модели.
Производительность модели
Используются следующие показатели производительности -
- График зависимости потерь от количества эпох
- График зависимости точности от количества эпох
- Отчет о классификации
- Матрица путаницы
Результаты упомянутых выше показателей следующие:
Классификационный отчет -
precision recall f1-score support 0 0.99 0.98 0.99 169 1 0.98 0.99 0.98 122 accuracy 0.99 291 macro avg 0.98 0.99 0.99 291 weighted avg 0.99 0.99 0.99 291
Матрица путаницы -
Тестирование модели
Предсказания модели на изображениях глаз можно увидеть на следующих картинках -
Создание конвейера для прогнозов по изображениям анфас
Последний и последний шаг этого проекта - создание конвейера для прогнозирования изображений анфас. Канал включает в себя обнаружение лиц, выравнивание лиц, обнаружение глаз, предварительную обработку ROI изображения, передачу модели для прогнозирования и отображение результатов на изображении.
Реализация выглядит следующим образом -
Реализация использует библиотеку «dlib» для распознавания лиц на изображении. Выравнивание лица выполняется с использованием класса FaceAlignment библиотеки imutils.face_utils для лучшего обнаружения глаз. Обнаружение глаз выполняется с помощью каскадных классификаторов Хаара.
Наконец, результаты можно просмотреть следующим образом -
Заключение
Сонливость водителя является важной причиной тысяч дорожно-транспортных происшествий по всему миру. Обнаружение сонливости водителя - это технология безопасности автомобиля, которая помогает предотвратить аварии, вызванные сонливостью водителя. Проект направлен на предоставление решения обнаружения сонливости водителя с использованием CNN и обработки изображений. Проект был направлен на оптимизацию модели, чтобы ограничить количество параметров до 250 тыс. Для упрощения развертывания на периферийных устройствах. Это развертывание возможно через платформу Cainvas с использованием их компилятора под названием deepC. Таким образом, выведение ИИ на передний план - как в реальных, так и в реальных случаях использования.
Ссылка на блокнот - здесь.
Предоставлено: ЮВНИШ МАЛЬХОТРА