Сонное вождение - это смертельная комбинация вождения и сонливости. Количество дорожно-транспортных происшествий из-за вождения в сонливом режиме растет во всем мире тревожными темпами. Недостаток сна - основная причина сонливости во время вождения. Однако другие причины, такие как нарушение сна, прием лекарств, употребление алкоголя или вождение в ночную смену, также могут вызывать сонливость во время вождения.

Согласно отчету 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. Таким образом, выведение ИИ на передний план - как в реальных, так и в реальных случаях использования.

Ссылка на блокнот - здесь.

Предоставлено: ЮВНИШ МАЛЬХОТРА