Использование ConvNet, созданной с нуля, для автоматизации обнаружения повреждений транспортных средств

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

По данным Всемирной организации здравоохранения, ежегодно в результате дорожно-транспортных происшествий умирают около 1,3 миллиона человек. Еще от 20 до 50 миллионов человек получают несмертельные травмы, многие из которых становятся инвалидами в результате травм. Что касается экономического ущерба, дорожно-транспортные происшествия обходятся большинству стран в 3% их валового внутреннего продукта.

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

Благодаря недавним достижениям в области глубокого обучения, новые приложения обнаружения объектов при обработке изображений появляются во многих областях. Одним из таких новых приложений анализа изображений является обнаружение внешних повреждений на транспортных средствах, которое затем может быть объединено со структурой обнаружения объектов для обнаружения повреждений в реальном времени. После обнаружения устройство IoT можно использовать для отправки экстренного вызова для оповещения ближайших служб.

В этой статье мы будем классифицировать поврежденные автомобили на поврежденные или неповрежденные автомобили, чтобы продемонстрировать будущее применение модели.

Набор данных

Набор данных состоит из изображений автомобилей, взятых из различных сцен, от реальных изображений до изображений автомобилей, взятых из Интернета или новостных каналов. Изображения были помечены как «01-целое», указывающее на неповрежденный автомобиль, и «00-повреждение», указывающее на поврежденный автомобиль, каждое из 920 изображений.

Требования

  1. Numpy
  2. Панды
  3. Scikit-изображение
  4. Матплотлиб
  5. Tensorflow
  6. Керас
  7. Сервер ноутбуков Cainvas

Вот как это работает

  • Наш вход - это обучающий набор данных, состоящий из N изображений, каждое из которых помечено одним из двух разных классов.
  • Затем мы используем этот обучающий набор для обучения ConvNet, чтобы узнать, как выглядит каждый из классов.
  • В конце концов, мы оцениваем качество классификатора, прося его предсказать метки для нового набора изображений, которые он никогда раньше не видел. Затем мы сравним истинные метки этих изображений с предсказанными классификатором.
  • Затем модель и ее веса сохраняются для использования в будущем.

Мы будем использовать платформу Cainvas, которая предоставляет нам мощные ресурсы в облаке для создания надежных моделей, которые также доступны для будущего развертывания на устройствах EDGE.

Код

Приступим к работе с кодом.

Мы будем использовать matplotlib для нанесения изображений и меток. Tensorflow и Keras - одни из наиболее часто используемых фреймворков глубокого обучения, и мы будем использовать их для создания наш ConvNet и спроектируйте нашу модель.

У нас есть два каталога обучения и проверки, в каждом по 2 папки, соответствующие ярлыкам наших изображений. Мы будем использовать ImageDataGenerator от Keras для подготовки данных и получения соответствующих меток, относящихся к структуре папок. Генератор также предоставляет нам гибкость в создании наборов разделений для поездов и проверок из заданного набора данных.

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

Наша структура модели состоит из четырех слоев Conv2D, включая входной слой с объединяющим слоем 2x2 MaxPool2D, за которым следует плотный слой 64 нейрона с функцией активации ReLU и последний слой с 2 ​​ нейроны и функция активации softmax для прогнозирования нашего класса.

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

Это модель архитектуры.

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 62, 62, 32)        896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 31, 31, 32)        0         
_________________________________________________________________
dropout (Dropout)            (None, 31, 31, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 29, 29, 32)        9248      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 14, 14, 32)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 14, 14, 32)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 12, 12, 32)        9248      
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 6, 6, 32)          0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 6, 6, 32)          0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 4, 4, 32)          9248      
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 2, 2, 32)          0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 2, 2, 32)          0         
_________________________________________________________________
flatten (Flatten)            (None, 128)               0         
_________________________________________________________________
dense (Dense)                (None, 64)                8256      
_________________________________________________________________
dropout_4 (Dropout)          (None, 64)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 130       
=================================================================
Total params: 37,026
Trainable params: 37,026
Non-trainable params: 0
_________________________________________________________________

Это функция для построения графика потерь и точности, которые мы получим после обучения модели. Модель была сохранена, и результаты были нанесены на график с использованием определенной функции.

Полученные результаты

Потери / Точность против эпохи

Модель достигла точности проверки 87,174%, что неплохо.

Epoch 00065: val_accuracy did not improve from 0.86304
58/58 [==============================] - 8s 146ms/step - loss: 0.3591 - accuracy: 0.8387 - val_loss: 0.3900 - val_accuracy: 0.8500
Epoch 66/100
58/58 [==============================] - ETA: 0s - loss: 0.3876 - accuracy: 0.8301
Epoch 00066: val_accuracy improved from 0.86304 to 0.87174, saving model to ./base.model
INFO:tensorflow:Assets written to: ./base.model/assets
58/58 [==============================] - 10s 164ms/step - loss: 0.3876 - accuracy: 0.8301 - val_loss: 0.3700 - val_accuracy: 0.8717
Epoch 67/100
58/58 [==============================] - ETA: 0s - loss: 0.3760 - accuracy: 0.8436
Epoch 00067: val_accuracy did not improve from 0.87174
58/58 [==============================] - 8s 145ms/step - loss: 0.3760 - accuracy: 0.8436 - val_loss: 0.3672 - val_accuracy: 0.8630

Прогнозы

Я взял пакет из 16 изображений из тестовых изображений и построил любые 9 из них с соответствующими истинными и предсказанными метками после того, как сделал прогнозы с использованием модели.

Здесь я определил функцию, которая делает прогнозы для настраиваемого изображения, которое может предоставить пользователь. Он принимает путь изображения в качестве параметра и визуализирует изображение с предсказанной меткой после того, как модель сделала прогноз.

Вот некоторые из прогнозов, сделанных моделью

Заключение

В этой статье я продемонстрировал, как ConvNet, созданный с нуля, можно использовать для автоматизации обнаружения поврежденных транспортных средств. Этот простой вариант использования можно использовать в качестве модуля для более крупных вариантов использования при обнаружении объектов и приложениях во встроенных устройствах.

Ссылка на блокнот: Здесь

Предоставлено: Вед Пракаш Дубей