Использование ConvNet, созданной с нуля, для автоматизации обнаружения повреждений транспортных средств
Автомобили стали неотъемлемой частью 21 века, и каждый день на дорогах появляется больше машин, чем было вчера. Это неизбежно сопряжено с риском, и халатность некоторых водителей может нанести незначительный или серьезный ущерб имуществу и здоровью других людей на дорогах.
По данным Всемирной организации здравоохранения, ежегодно в результате дорожно-транспортных происшествий умирают около 1,3 миллиона человек. Еще от 20 до 50 миллионов человек получают несмертельные травмы, многие из которых становятся инвалидами в результате травм. Что касается экономического ущерба, дорожно-транспортные происшествия обходятся большинству стран в 3% их валового внутреннего продукта.
Однако то, что может быть спасительной благодатью в этих ситуациях, - это более быстрое время реагирования со стороны парамедиков и работников скорой помощи.
Благодаря недавним достижениям в области глубокого обучения, новые приложения обнаружения объектов при обработке изображений появляются во многих областях. Одним из таких новых приложений анализа изображений является обнаружение внешних повреждений на транспортных средствах, которое затем может быть объединено со структурой обнаружения объектов для обнаружения повреждений в реальном времени. После обнаружения устройство IoT можно использовать для отправки экстренного вызова для оповещения ближайших служб.
В этой статье мы будем классифицировать поврежденные автомобили на поврежденные или неповрежденные автомобили, чтобы продемонстрировать будущее применение модели.
Набор данных
Набор данных состоит из изображений автомобилей, взятых из различных сцен, от реальных изображений до изображений автомобилей, взятых из Интернета или новостных каналов. Изображения были помечены как «01-целое», указывающее на неповрежденный автомобиль, и «00-повреждение», указывающее на поврежденный автомобиль, каждое из 920 изображений.
Требования
- Numpy
- Панды
- Scikit-изображение
- Матплотлиб
- Tensorflow
- Керас
- Сервер ноутбуков 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, созданный с нуля, можно использовать для автоматизации обнаружения поврежденных транспортных средств. Этот простой вариант использования можно использовать в качестве модуля для более крупных вариантов использования при обнаружении объектов и приложениях во встроенных устройствах.
Ссылка на блокнот: Здесь
Предоставлено: Вед Пракаш Дубей