Команда: Лавприт Сингх и Каран Сингх

Введение

Отвлекшиеся водители являются основной причиной нескольких аварий, травм и смертей на дороге. Целью данной статьи является разработка решения, позволяющего уменьшить число несчастных случаев, вызванных отвлекающими факторами, и повысить безопасность дорожного движения. Реализована система обнаружения отвлечения внимания, которая делает снимки водителя во время его поездки. Используя методы глубокого обучения, такие как VGG-16, Resnet50 и т. д., мы изучаем эти изображения и классифицируем их по нескольким классам, что помогает предотвратить случайные инциденты. Библиотека глубокого обучения, используемая в нашей модели, — это Keras, работающая поверх TensorFlow.

Набор данных

Набор данных состоит из нескольких субъектов (людей), изображения которых были сделаны в течение нескольких интервалов вождения. Всего имеется около 22000 тренировочных изображений, классифицированных по нескольким классам (папкам), таким как c0, c1, c2 и так далее до c9, где каждый из классов c0, c1 и т. д. означает -

  • c0: безопасное вождение
  • c1: текстовые сообщения — правильно
  • c2: говорить по телефону — правильно
  • c3: текстовые сообщения — слева
  • c4: разговариваем по телефону — осталось
  • c5: работа с радио
  • с6: пить
  • c7: зайти сзади
  • c8: прическа и макияж
  • c9: разговор с пассажиром

Предварительная обработка

Этап предварительной обработки включает в себя извлечение всех изображений из каждой обучающей папки C0, C1… и т. д. и назначение каждого из них массиву numpy, который сохраняет изображение, идентификатор водителя и связанную метку класса. Затем размер каждого изображения изменяется до размера (224 224,3), а набор поездов делится на набор поездов, тестов и проверок. Наборы тестов и проверки получаются из небольшого набора идентификаторов водителя. Наборы тестов и проверки полностью независимы от обучающего набора.

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

Показатель оценки

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

Здесь yi — это целевая одна метка горячего кодирования, а значение y, связанное с логарифмической функцией, — это прогнозируемая вероятность метки, соответствующая этому целевому значению. В каждой итерации мы пытаемся свести к минимуму обучение, а также потери при проверке. Это эффективная оценочная метрика, когда речь идет о мультиклассовой классификации.

Renet и передача обучения

Resnet, сокращение от Residual Networks, представляет собой классическую нейронную сеть, используемую в качестве основы для многих задач компьютерного зрения. Эта модель стала победителем конкурса ImageNet в 2015 году. Прорыв с моделями Resnet заключался в том, что она позволила нам обучать чрезвычайно глубокие нейронные сети с более чем 150 слоями.

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

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

Используемая архитектура Resnet50:

Перенос обучения

Трансферное обучение — это метод, при котором модель, разработанная для связанной задачи, повторно используется в качестве отправной точки для модели для второй задачи. Мы можем повторно использовать веса моделей из предварительно обученных моделей, которые были разработаны для стандартных наборов данных эталонных тестов компьютерного зрения, таких как задача распознавания изображений ImageNet. Как правило, последний слой с активацией softmax заменяется в соответствии с количеством классов в нашем наборе данных. В большинстве случаев также добавляются дополнительные слои, чтобы адаптировать решение к конкретной задаче.

Это популярный подход в глубоком обучении, учитывая огромные вычислительные и временные ресурсы, необходимые для разработки моделей нейронных сетей для классификации изображений. Более того, эти модели обычно обучаются на миллионах изображений, что особенно полезно, когда ваш набор для обучения невелик. Большинство из этих архитектур моделей доказали свою эффективность — модели VGG16, RESNET50, Xception и Mobilenet, которые мы использовали, дали исключительные результаты в задаче ImageNet.

Генератор данных и расширение

При большом наборе данных не всегда есть возможность полностью загрузить его в оперативную память с целью обучения. Генератор данных загружает данные из памяти (или каталога) в модель пакетами и применяет к данным определенные методы расширения и преобразования. Эти преобразования являются параметрами генератора, которые можно задать при создании экземпляра и которые могут включать повороты, сдвиги, перевороты и масштабирование. К каждому изображению применяется разное случайное преобразование. Это позволяет модели изучать объекты на изображениях, а не узнавать, как они представлены на изображении.

datagen = ImageDataGenerator(
 height_shift_range=0.5,
 width_shift_range = 0.5,
 zoom_range = 0.5,
 rotation_range=30
 )
data_generator = datagen.flow(X_train, Y_train, batch_size = 64)

Ранняя остановка

Общая цель обучения модели — минимизировать функцию потерь. С этой целью нам нужно отслеживать потери и видеть, что они уменьшаются после каждой эпохи (итерация по обучающему набору). Слишком большое количество эпох может привести к переоснащению модели, а слишком малое — к недостаточному. Таким образом, при ранней остановке мы оцениваем проверочный набор сразу после каждой эпохи.

Отслеживается такая метрика, как точность проверки (точность набора проверки) или потеря проверки (потеря относительно набора проверки). Если через несколько эпох (можно указать сколько) улучшения указанной метрики не происходит, процесс обучения останавливается. Это предотвращает переобучение модели обучающему набору. Еще один важный используемый инструмент — контрольные точки, которые сохраняют лучшую модель за все эпохи. Всякий раз, когда происходит улучшение точности проверки (или потеря проверки), мы сохраняем модель в формате hf5.

earlystopper = EarlyStopping(monitor=’accuracy’, patience=7, verbose=1)

Шаг затухания

В окончательной модели используется концепция затухания ступеней. Планировщики скорости обучения пытаются регулировать скорость обучения в процессе обучения в соответствии с заранее определенным графиком. В конечном счете, наша цель — постепенно снижать скорость обучения, чтобы достичь глобальных минимумов для нашей функции потерь и не выйти за ее пределы. Действительно небольшая скорость обучения требует большого количества итераций для достижения глобальных минимумов, а высокая скорость обучения выходит за пределы и не сходится. Реализована функция ступенчатого затухания, снижающая скорость обучения вдвое каждые 10 эпох.

def step_decay(epoch):
 initial_lrate = 0.001
 drop = 0.5
 epochs_drop = 10.0
 lrate = initial_lrate * math.pow(drop, 
 math.floor((1+epoch)/epochs_drop))
 return lrate
lrate = LearningRateScheduler(step_decay)

Окончательная модель — Resnet 50

Наша лучшая общая модель оказалась RESNET50 с дополнительным плотным слоем, применяемым для вывода. Используется концепция трансферного обучения и предварительно обученная модель RESNET50.

import tensorflow as tf
resnet_model = tf.keras.Sequential()
pretrained = tf.keras.applications.ResNet50(include_top = False,input_shape = (224,224,3),weights=’imagenet’)
pretrained.summary()
for layer in pretrained.layers:
layer.trainable = False
resnet_model.add(pretrained)
resnet_model.add(Flatten())
#resnet_model.add(Dense(512,activation=’relu’))
resnet_model.add(Dense(10,activation=’softmax’))

Каждый блок, содержащий пропущенное соединение, известен как блок идентичности, учитывая, что пропущенные соединения позволяют нам изучить функцию идентичности. Модель ResNet-50 состоит из 5 этапов, в каждом из которых есть блок свертки и идентификации. Каждый блок свертки имеет 3 слоя свертки, и каждый блок идентичности также имеет 3 слоя свертки.

ResNet-50 имеет более 23 миллионов обучаемых параметров. Учитывая это, разумно использовать предварительно обученную модель Resnet50, чтобы нам не пришлось обучать эти параметры полностью. Мы применяем плоский слой поверх выходных данных модели resnet 50, чтобы преобразовать 2D-массивы в 1D.

Дополнительно добавляется плотный слой из 10 выходных нейронов, поскольку у нас всего десять классов, а Resnet50 делает прогнозы для 1000 классов. На этом выходном слое мы применяем функцию активации softmax для получения вероятностей классов, которые мы затем можем использовать для общих прогнозов. Таким образом, обучаются только веса, связанные с последним слоем resnet и последним плотным слоем.

Сравнение и анализ

Мы хотели выбрать модель глубокой нейронной сети, чтобы наша модель изучала особенности набора данных. Лучшим способом для этого стала модель Resnet50, которая позволила нам обучить глубокую нейронную сеть и устранить проблему исчезающего градиента с помощью пропусков соединений.

Модель RESNET-50 дала точность 79 процентов на обучающем наборе с использованием проверки, для которой мы достигли точности проверки в 64 процента при обучении модели. Наша модель очень хорошо показала себя на помеченном тестовом наборе, для которого она достигла точности 83,42 процента. Модель обучалась на всем обучающем наборе данных из 22000 изображений.

По сравнению с базовыми CNN и VGG16 они сильно уступают по производительности. VGG16 дал точность теста 62,26 процента, а базовая CNN дала точность теста 55,4 процента. Наша модель RESNET работает намного лучше с гораздо более высокой точностью теста, то есть 83,4 процента, из-за проблемы исчезающего градиента модели VGG16, которая использует полностью связанные слои, по сравнению с Resnet50, которая использует глобальное среднее объединение.

Окончательные прогнозы по неразмеченным данным

Таким образом, наша модель правильно предсказывает каждые два из трех изображений.

Ссылки

Фахад Альхарби, Абрар Альхарби и Эйдзи Камиока. Классификация видов животных. https://www.researchgate.net/ публикация/332149125_животные_виды_классификация_использование_машинного_обучения_техники

Джефф Хинтон, Янн ЛеКун и Йошуа Бенжио. Классификация ImageNet с глубокими свёрточными нейронными сетями.. https://proceedings. neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Бумага. пдф

Мэтью Д. Зейлер и Роб Фергус. Деконволюционная сеть. https://arxiv.org/pdf/1311. 2901v3.pdf

Обнаружение рака молочной железы с помощью экстремальной обучающей машины на основе слияния функций с глубокими функциями CNN https://ieeexplore.ieee.org/ document/8613773