Comments 12
а если этот светофор везёт впереди идущий грузовик
Что тут скажешь, у Вас получился прекрасный пример того, как НЕ надо использовать нейронки.
Ожидание: будем бороться с распознаванием сигналов светофора (см., например, https://www.autoweek.com/news/green-cars/a37114603/tesla-fsd-mistakes-moon-for-traffic-light/)
Реальность: пытаемся научить один-два скрытых слоя по уже заданному one-hot encoding восстанавливать однозначно заданную таблицу соответствия и кривовато экстраполировать вне обучающих данных.
Как учебно-методический пример, всё нормально. Но ПОЖАЛУЙСТА, не делайте вид, что так и надо, и уж тем более не фигачьте такое в продакшн.
Пожалуйста, прочтите статью полностью, а не только ее заголовок. Если ваши ожидания касаемо содержимого моей статьи не оправдались, то напишите свою статью и изложите в ней то, что вы хотели увидеть. Если есть конкретные замечания и неточности моей статьи, давайте обсудим.
У меня нет привычки писать комментарии, не осилив исходный материал.
Хотите больше конкретики - пожалуйста.
Основная проблема - из
модель, которая способна интерпретировать показания светофора, закодированные в виде числовых данных
во введении никак не следует, что вся сложная часть отдаётся на откуп магической функции detect_traffic_light
, про которую мы _просто предположили_, что она есть и работает безошибочно.
Теперь касательно той задачи, которую Вы таки решаете. Во-первых, пространство исходов совсем невелико, и правильные ответы для каждого известны; их легко сгенерировать алгоритмически. Нейросети тут - не то что просто из пушки по воробьям, но ещё и с немалой вероятностью попадания из той самой пушки себе в ногу, если плохо сформированы тестовые данные. Если бы "магическая" функция отдавала значения от 0 до 1, было бы больше смысла. Но не с one-hot encoding. Во-вторых, Вы строите всевозможные метрики, графики loss function, но никак их не анализируете. В-третьих (и это ой как важно!), совершенно отсутствуют какие-либо соображения со стороны проектирования всей системы. Во многом это перекликается с первым замечанием, но есть и практические аспекты. Мой любимый пример - задумайтесь на минутку, должна ли функция потерь быть симметрична (иными словами, верно ли, что ложноположительные срабатывания так же плохи, как ложноотрицательный результат), и подумайте, почему Вы делаете то, что Вы делаете.
Ну и ещё одно замечание по мелочи - а Вы точно по одному кадру можете понять, мигает ли светофор?
Дальнейшее рассматриваю с позиций "читатель хочет вкатиться в формате "моя первая нейросеть". Пример выбран довольно удачный и наглядный. Не хватает пояснений.
Что могло быть лучше в сутевой части:
Размышления на тему, как выбор гиперпараметров влияет на результат работы. Пусть пример "игрушечный", но в нём на кону транспортная безопасность и жизни людей, в конце концов! Если известно, что могут случаться нестандартные ситуации, достаточно ли проведённого исследования на странных сочетаниях? Может, порог принятия решения в 0.5 (=авось, пронесёт) не самый удачный? Зависит ли это от того, сколько сигналов и их сочетаний разрешающие, а сколько запрещающие? Или того, с какой вероятностью они определены неправильно? Или того, что проезд на красный чреват худшими последствиями, чем встать на зелёном и никуда не уехать?
Комментарии на тему, какие результаты работы и обучения Вы считаете более удачными и почему. Даже не погружаясь в причины того, почему, например, функции потерь так отличаются - стало хуже? Лучше? Нужен второй слой-то? Почему, кстати, функция потерь не 0, а все приведённые метрики 1?
Автоматизация тестирования. Вот вы пообучали нейросеть на семи (!) примерах и пытаетесь распространить на 2^7 = 128 возможных вариантов. Как уже говорилось, если ненадолго задуматься, можно алгоритмически сформировать таблицу исходов. Стало быть, легко показать, как точность зависит, скажем, от размеров обучающей выборки. Тоже методологически полезно.
В общем, хотелось бы немного больше осознанности, а не "вот я напитонил нейросеть прям как в учебнике, делайте так же, не работает - крутитесь как хотите".
Если вы дошли до "магической функции" detect_traffic_light, то наверняка прочитали, что раздел "Применение к реальным данным" - это лишь один из возможных вариантов дальнейшего развития и в статье никоем образом не разбирается распознавание светофоров по фото/видео с помощью OpenCV. Если коротко, то в статье разбирается "внутренность" сети, то, как обучается, базовые принципы (о чём написано прямо во введении). И да, эта статья по сути "методичка для начального понимания", а не готовый продукт в "продакшн" для запуска беспилотного поезда.
Исходя из этого, причем здесь луна и Тесла?
Причем "а Вы точно по одному кадру можете понять, мигает ли светофор", если про распознавания объектов на фото нет речи?
Какая транспортная безопасность и жизни людей?
"Почему, кстати, функция потерь не 0, а все приведённые метрики 1" - если что, то в моих результатах функция потерь при длительном обучении стремится к нулю, см. графики.
Зачем писать много букв в комментарии "всё и обо всём"? Комментарий ради комментария? Не уверен, что вы поняли назначение статьи. Если хотите помочь читателям, так расскажите как надо, а не "как НЕ надо использовать нейронки"
Ясно, думать сложно.
Проехали.
Вообще я согласен с комментатором. Сложно оценить ценность статьи. Не указан размер выборки, также есть вопросы к итоговым значениям по всем метрикам единицы... Что это значит? Что модель работает идеально или что выборка небольшая и модель просто переобучилась на датасет? Также согласен с вопросом к определению мигающих сигналов по единственному кадру. Кажется, что подход выбран не верно. В качестве демонстрации проекта классификации лучше было выбрать что то более статичное, хотя бы марки авто или типы знаков
Господа, вы что издеваетесь? И вам также напишу, прочтите всю статью полностью, а не только название и конец.
В статье размер обучаемой выборки указан: X = np.array([… и X_test_data
Про результаты метрик равные единице тоже были написаны пояснения
Причем здесь "определению мигающих сигналов по единственному кадру", если в статье НЕТ разбора процесса обработки фотографий и детекции объектов на них?
"более статичное, хотя бы марки авто или типы знаков" аналогично п.3, я не разбирал процесс разбора фото
подождите... Я правильно понял, что все обучение производилось на 7 строках?
X = np.array([
[1, 0, 0, 0, 0, 0], # Зеленый
[0, 1, 0, 0, 0, 0], # Зеленый мигающий
[0, 0, 1, 0, 0, 0], # Желтый
[0, 0, 0, 1, 0, 0], # Желтый мигающий
[0, 0, 0, 0, 1, 0], # Красный
[0, 0, 0, 0, 0, 1], # Красный мигающий
[0, 0, 1, 0, 1, 0], # Красный и желтый
])
y = np.array([
1, # Зеленый: движение разрешено
1, # Зеленый мигающий: движение разрешено
0, # Желтый: движение запрещено
1, # Желтый мигающий: движение разрешено
0, # Красный: движение запрещено
0, # Красный мигающий: движение запрещено
0 # Красный и желтый: движение запрещено
])
Вот это и есть ВСЯ выборка?
Да, вы совершенно верно всё поняли. Или вы считаете, что для понимания устройства и принципа обучения нейронной сети нужен датасет с миллионами строк, сотней признаков, десятки слоев, миллиарды параметров? Повторю также как и прошлому комментатору, что это "методичка для начального понимания, а не готовый продукт в "продакшн" для запуска беспилотного поезда"
ну тогда тут много вопросов) Даже по поводу 100 эпох и выбранного алгоритма)
Признаюсь честно, не с первого раза понял вашу статью. Для обегчения чтения советую оформить код в блоки
Последнее время люди взъелись на любые упоминания нейросетей. Отсюда и такая реакция, на хорошую статью для новичков (форматирование кода только поправьте). У некоторых срабатывает триггер "нейросети -> плохо -> они неточные, глупые, так далее. Нужно написать об этом в комментариях!". Ничем другим объяснить такое не могу.
Нейронная сеть учится понимать сигналы светофора