Идентификация событий вождения по данным GPS и акселерометра
У меня есть устройство IOT, которое каждую секунду отправляет следующую информацию из автомобиля, который находится за рулем:
-Отметка времени
- GPS координаты (широта/долгота)>
- GPS-пеленг или Азимут
- Скорость автомобиля от GPS
- Показания акселерометра по осям X, Y и Z.
Из этой информации я должен определить следующие события вождения:
-Тормозной
-Ускорение
-Левый поворот
-Правый поворот
Я пытаюсь достичь этого с помощью нейронной сети из библиотеки ENCOG .net и пытаюсь найти ответы на следующие вопросы:
1. Как я могу отформатировать входные данные так, чтобы они могли быть поданы в нейронную сеть? У меня есть матрица информации с 8 столбцами и переменным количеством строк:
Например: - правый поворот может быть матрицей, как показано ниже
Timestamp Lattitude Longitude Azimuth Speed Xacc Yacc Zacc 4:57:08 PM 39.937185 -74.9530667 305.3293762 0 -0.904202607 0.33408456 0.105773433 4:57:09 PM 39.93719 -74.95307 303.1105042 0 -0.89096231 0.37406743 0.091855986 4:57:10 PM 39.9372067 -74.9530783 299.4731445 9 -0.880157497 0.395575262 0.058842602
Точно так же левый поворот может быть
Timestamp Lattitude Longitude Azimuth Speed Xacc Yacc Zacc 4:57:26 PM 39.9377 -74.954015 257.7362976 18 -0.932709113 0.267096326 -0.024819622 4:57:27 PM 39.937715 -74.9540733 247.346344 18 -0.94067372 0.271379559 -0.054581382 4:57:28 PM 39.937715 -74.9541317 225.6322174 17 -0.923718111 0.293954308 -0.081829668 4:57:29 PM 39.937695 -74.9541917 213.6928406 20 -0.911598183 0.317324907 -0.128199049 4:57:30 PM 39.93766 -74.9542433 208.975174 24 -0.90052994 0.351010895 -0.121179532 4:57:31 PM 39.9376017 -74.9542833 205.9306641 28 -0.891561502 0.373537211 -0.078259489 4:57:32 PM 39.9375367 -74.9543267 206.532135 31 -0.891412538 0.389423688 -0.047274249
2. Какие нейросетевые паттерны и типологии могут быть применены для ее решения?
3. какой алгоритм(ы) обучения может быть использован?
Я был бы признателен, если бы кто-нибудь мог пролить свет на подход к этой проблеме.
Что я уже пробовал:
Вот как я пытаюсь решить эту проблему.
Сократите входную матрицу, чтобы она содержала только ту информацию, которая имеет отношение к идентификации событий. Таким образом, следующие столбцы отбрасываются из входных данных
-Отметка времени
-Широта
- Долгота и
-Скорость
2. уменьшенный входной сигнал будет выглядеть следующим образом
Az Xacc Yacc 257.736 -0.93270911 0.267096326 247.346 -0.94067372 0.271379559 225.632 -0.92371811 0.293954308 213.693 -0.91159818 0.317324907 208.975 -0.90052994 0.351010895 205.931 -0.8915615 0.373537211
3. Интерполируйте / экстраполируйте входные данные, чтобы иметь не менее 10 экземпляров (строк)
4. сгладьте 10 строк до вектора, содержащего 30 значений, как показано ниже
Az1 Xacc1 Yacc1 Az2 Xacc2 Yacc2 Az.. Xacc.. Yacc.. Az10 Xacc10 Yacc10 Target 257.736 -0.93270911 0.267096326 247.346 -0.94067372 0.271379559 .. .. .. 206.532 -0.89141254 0.389423688 Left
5. Используйте прямой паттерн, такой как многослойный персептрон, с
-30 входных нейронов
-2 скрытых слоев
-4 выходных нейрона
- Функция активации: гиперболический тангенс
6. тренировка с использованием упругого распространения
Пожалуйста, не стесняйтесь, дайте мне знать ваши мысли по этому решению.
Nick_3141592654
Я так понимаю, это проект Мэн или работа для крупного клиента? Вы, конечно, не ныряете в использование нейронной сети таким образом, если нет веской причины. (Желание поиграть с нейронной сетью было бы хорошей причиной, если бы у вас было несколько свободных месяцев).
Серьезно, вы рассматривали гораздо более простой подход? Данные, которые вы собираете, можно легко пропустить через набор простых рекурсивных фильтров первого порядка (Yn+1 = Yn * Alpha + Xn * Beta, где Xn - одно из ваших необработанных измерений, а Yn-отфильтрованное значение; Alpha + Beta = 1, и по мере приближения Alpha к 1.0 фильтр делает больше сглаживания).
Учитывая сглаженные данные со всеми этими случайными рывками, подавленными, просто сделайте несколько простых пороговых значений:
например, если средняя скорость >< что-то & gt; Мы едем.
Труднее всего справиться с показаниями акселерометра, но если предположить, что ваше GPS-устройство жестко прикреплено к автомобилю, вы справитесь с этим. Такая привязанность имеет решающее значение, поскольку это гарантирует, что X, Y и Z имеют последовательные значения: Если вы использовали ручное GPS-устройство, то, конечно, X, Y, Z будут произвольно меняться по мере изменения ориентации устройства в трехмерном пространстве. Вы можете интегрировать измерения ускорения для получения скорости в направлениях X, Y, Z.
Все это немного сложно и подвержено краткосрочным шумам и долгосрочным эффектам дрейфа (особенно когда вы начинаете интегрировать свои измерения). Однако это колесо было сделано много раз раньше. Посмотрите вокруг, и вы найдете стандартные детализированные решения, которые не нуждаются в нейронной сети.