Дорожные знаки видео уроки: Дорожные знаки
Дорожные знаки
Здравствуйте, ребята. Я Никита, младший брат Кати. Моя сестра рассказывала вам о том, как правильно вести себя на дороге, если ты пешеход, велосипедист или пассажир. Я же хочу рассказать вам о дорожных знаках. Я мечтаю научиться водить машину как папа, поэтому самостоятельно изучаю правила дорожного движения, особенно люблю изучать дорожные знаки. Знание правил дорожного движения помогает мне хорошо ориентироваться и уверенно чувствовать себя на дороге.
Все знают, что дорожные знаки существуют для обеспечения безопасности движения. Их очень много и они все разные. Давайте познакомимся с ними.
Все
дорожные знаки принято делить на 8 групп: предупреждающие
знаки, знаки приоритета, запрещающие знаки, предписывающие знаки, знаки особых
предписаний, информационные знаки, знаки сервиса, знаки дополнительной
информации.
Предупреждающие знаки предупреждают водителя о приближении к опасному участку дороги. Они представляют собой треугольники с красной окантовкой и символами на белом фоне. Очень часто в наших городах можно встретить знак «Пешеходный переход». Но этот знак не обозначает место перехода проезжей части, как думают некоторые ребята, а предупреждает водителей и других участников дорожного движения о том, что впереди находится пешеходный переход.
Другой предупреждающий знак называется «Дети». Вы, наверное, много раз встречались с ним, так как его устанавливают около детских учреждений. В таких местах на дорогу могут внезапно выйти или выбежать дети. Чтобы водитель был заранее готов к такой ситуации, устанавливают этот знак. Есть ребята, которые считают, что знак разрешает переходить дорогу
, потому что на нём изображены дети, бегущие через дорогу! Но знак не дает разрешение переходить дорогу в том месте, где он установлен.
Вот эти знаки предупреждают о том, что впереди железнодорожный переезд. Если железнодорожный переезд оборудован шлагбаумом — специальной перекладиной, которая опускаясь и поднимаясь, закрывает и открывает дорогу через железнодорожные пути, — то устанавливается первый знак. Если шлагбаума нет, — второй. И водитель, и пешеход, приблизившись к данному знаку, должны внимательно прислушаться, посмотреть и направо, и налево, чтобы убедиться — не приближается ли поезд. Если поезда нет — можно пересекать железнодорожные пути.
Если на знаке изображён
человечек, который что-то копает, то этот знак называется «Дорожные
работы». Он предупреждает о том, что впереди на дороге
ведутся строительные или ремонтные работы. На дороге во время этих работ
могут находиться громоздкие рабочие машины и механизмы, кучи песка,
ямы, что может представлять опасность как для водителей, так
и для пешеходов.
На дорогах бывают и другие опасные участки, которые требует пристального внимания со стороны всех участников дорожного движения. Если на дороге есть участки с повышенной скользкостью проезжей части, устанавливают знак «Скользкая дорога». Знать этот знак нужно не только водителям, но и пешеходам
, ведь машину на скользкой дороге может занести, и тогда она может оказаться на обочине дороги или на тротуаре, где идут пешеходы.Иногда во время
проведения ремонтных работ дороги могут быть покрыты гравием, мелкими
камешками округлой формы. Гравий достаточно опасен и для водителей, и
для пешеходов. Ведь маленький камешек может вылететь из-под колес
движущего транспорта и попасть в пешеходов, находящихся
поблизости, или в стекла других автомобилей. Знак «Выброс
гравия» предупреждает о некачественных участках дороги.
Среди предупреждающих знаков есть и такие, на которых изображены животные. Первый знак называется «Дикие животные». Он предупреждает о том, что на дороге возможно появление диких животных. А второй знак называется
Знаки приоритета
Этих знаков сравнительно немного, но они имеют огромное значение, поскольку регулируют движение в наиболее опасных ситуациях. Знаки приоритета устанавливают очередность проезда транспортных средств на перекрестках, пересечениях проезжих частей, узких участков дороги.
Например, знак «Движение без остановки запрещено» требует, чтобы любое транспортное средство, прежде чем ехать дальше, притормозило перед этим знаком.
Знак «Главная дорога» указывает на то, что все машины,
которые движутся по этой дороге, имеют преимущество перед машинами,
двигающимися по пересекающим её дорогам.
Знак «Уступите дорогу» требует пропустить все машины, движущиеся по дороге, перед которой этот знак установлен.
Запрещающие знаки — самые строгие из всех знаков. Эти знаки вводят различные запреты и ограничения. В большинстве своём запрещающие знаки представляют собой белый круг с красной окантовкой и чёрным рисунком.
Предназначены запрещающие знаки в основном для водителей. Но некоторые из них необходимо знать и пешеходам.
Например, знак «Движение пешеходов запрещено» напрямую касается пешеходов. Этот знак устанавливается в начале зоны, где запрещено движение пешеходов.
Ещё один запрещающий
знак, который обязательно нужно знать детям, — это знак «Движение на велосипедах
запрещено
Среди запрещающих знаков есть группа знаков, которые запрещают движение либо всех транспортных средств, либо некоторых из них. К таким знакам относятся: «Въезд запрещён», «Движение запрещено», «Движение механических транспортных средств запрещено», «Движение грузовых автомобилей запрещено», «Движение мотоциклов запрещено». Если вы знаете, что запрещают эти знаки, вы сумеете определить — надо ли опасаться каких-либо транспортных средств на тех дорогах, где эти знаки висят.
Другая группа запрещающих знаков ограничивает или запрещает некоторые виды движения транспортных средств
. К таким знакам относятся: «Обгон запрещён», «Поворот направо запрещён», «Разворот запрещён», «Ограничение максимальной скорости» и другие.Этот
интересный знак называется «Подача звукового сигнала запрещена». Этот знак
можно встретить на участках дорог, которые проходят близи санаториев,
домов отдыха, оздоровительных лагерей, больниц и т.п. Знак устанавливается
для того, чтобы водители своими сигналами зря не тревожили людей. Но для
предотвращения дорожно-транспортного происшествия сигнал в зоне действия знака
применять можно.
К запрещающим относятся и вот эти знаки («Остановка запрещена», «Стоянка запрещена»). Они запрещают остановку
Знание запрещающих знаков помогает пешеходам правильно оценить ситуацию на дороге и избежать опасностей, связанных с движением транспортных средств.
Следующая
группа знаков — предписывающие знаки. Они представляют собой голубой
круг, на котором располагаются символы белого цвета. Эти знаки предназначены
в основном для водителей. Они предписывают, в какую сторону можно
двигаться по дороге.
Предписывающие знаки
Например, «Движение прямо», «Движение направо», «Движение налево», «Круговое движение» и другие.
Но среди предписывающих знаков есть такие, которые нужно знать не только водителям, но и пешеходам. Так, например, знак «Пешеходная дорожка» устанавливается на тех улицах, которые предназначены только для пешеходов.
Школьникам также необходимо знать знак «Велосипедная дорожка», который служит для того, чтобы обозначить дорожки, по которым можно ездить только на велосипедах или мопедах. Пешеходам тоже можно ходить по таким велосипедным дорожкам, но только тогда, когда на дороге отсутствует тротуар или пешеходная дорожка.
Знаки особых предписаний
Эти
знаки вводят или отменяют определённые режимы движения. Большинство
этих знаков — синие прямоугольники или квадраты с различными рисунками.
Среди этих знаков для пешеходов очень важным является знак «Пешеходный
переход». Этот знак обозначает место, где
Кроме того, пешеходам необходимо также знать знаки «Место остановки автобуса и (или) троллейбуса», «Место остановки трамвая».
Информационные знаки
информируют участников дорожного движения о расположении населённых
пунктов и других объектов, а также об установленных или о рекомендуемых режимах
движения. Большинство этих знаков предназначено
для водителей. Школьникам важно знать такие информационные знаки, как «Подземный
пешеходный переход» и «Надземный пешеходный переход».
Сервис — это обслуживание. Знаки сервиса ни к чему не обязывают, они подсказывают, где находятся нужные и полезные объекты. Эти знаки достаточно легко узнать. Они имеют прямоугольную форму, синий цвет и чёрные изображения на белом фоне. К таким знакам относятся: «Пункт питания», «Пункт медицинской помощи», «Больница», «Автозаправочная станция», «Гостиница или мотель», «Место отдыха», «Телефон» и др. Эти знаки полезны не только водителям, но и пассажирам, и пешеходам.
Знаки сервиса
Последняя группа знаков — это знаки дополнительной информации. Эти знаки отличаются от других дорожных знаков. Они имеют небольшие размеры, прямоугольную форму и, в основном, черные надписи на белом фоне. Особенность этих знаков в том, что они используются вместе с другими знаками. Знаки дополнительной информации (таблички)
видео уроки автошколы норд-вест м.

Skip to content
← В АВТОШКОЛУ
Лекция №1
Тема 1. Общие положения
Тема 2. Общие обязанности водителей
Тема 3. Применение специальных сигналов
Тема 4. Обязанности пешеходов
Тема 5. Обязанности пассажиров
Лекция №2
Тема 1. Общие положения
Тема 2. Общие обязанности водителей
Тема 3. Применение специальных сигналов
Тема 4. Обязанности пешеходов
Тема 5. Обязанности пассажиров
Лекция №3
Тема 1. Общие положения
Тема 2. Общие обязанности водителей
Тема 3. Применение специальных сигналов
Тема 4. Обязанности пешеходов
Тема 5. Обязанности пассажиров
Лекция №4
Тема: Дорожные знаки:
Предупреждающие знаки
Лекция №5
Тема: Дорожные знаки:
Предупреждающие знаки
Знаки приоритета
Запрещающие знаки
Лекция №6
Тема: Дорожные знаки:
Запрещающие знаки
Предписывающие знаки
Лекция №7
Тема: Дорожные знаки:
Предписывающие знаки
Знаки особых предписаний
Лекция №8
Тема: Дорожные знаки:
Информационные знаки
Знаки дополнительной информации
Знаки сервиса
Тема: Дорожная разметка
Лекция №9
Тема 6: Сигналы светофора и регулировщика
Лекция №10
Тема 7: Применение аварийной сигнализации и знака аварийной остановки
Тема 8: Начало движения, маневрирование
Лекция №11
Тема 8: Начало движения, маневрирование
Тема 9: Расположение транспортных средств на проезжей части
Тема 10: Скорость движения
Лекция №12
Тема 11: Обгон, опережение, встречный разъезд
Тема 12: Остановка и стоянка
Лекция №13
Тема 12: Остановка и стоянка
Тема 13: Проезд перекрестков
Лекция №14
Тема 13: Проезд перекрестков
Тема 14: Пешеходные переходы и места остановок маршрутных транспортных средств
Тема 15: Движение через железнодорожные пути
Тема 16: Движение по автомагистралям
Тема 17: Движение в жилых зонах
Тема 18: Приоритет маршрутных транспортных средств
Лекция №15
Тема 19: Пользование внешними световыми приборами и звуковыми сигналами
Тема 20: Буксировка механических транспортных средств
Тема 21: Учебная езда
Тема 22: Перевозка людей
Тема 23: Перевозка грузов
Тема 24: Дополнительные требования к движению велосипедистов и водителей мопедов
Лекция №16
Тема 25: Неисправности и условия, при которых запрещается эксплуатация транспортных средств
Тема 26: Основы безопасного управления автомобилем
← В АВТОШКОЛУ
Знаки с запретом левого поворота: видеоруководство по продукту
Знаки с символами запрета левого поворота: видеоучебник по продукту(78185)
Наши знаки «Нет левого поворота» очень долговечны и их можно увидеть издалека. Посмотрите это краткое видео для получения дополнительной информации.
Связанные продукты
Связанные отделы
Знаки поворота
Другие видео, которые могут вас заинтересовать
Знаки ограничения скорости
Ознакомьтесь со спецификациями материалов и другими особенностями наших знаков ограничения скорости здесь.
Дорожные знаки
Наши знаки урожайности не только соответствуют стандартам DOT, но и поставляются с рядом других …
Знаки неправильного пути
Наши знаки неправильного пути изготовлены из самых прочных материалов и упакованы …
Дорожные знаки запрещены
Почему вы должны включить наши дорожные знаки «Нет сквозного движения» в свою систему безопасности дорожного движения? . ..
Не вводите знаки
Ознакомьтесь с особенностями нашего прочного, эффективного и высококачественного DO Not Ent…
Знаки с односторонним движением
Что делает наши пользующиеся спросом односторонние указатели долговечными и экономичными? Смотреть это…
Грузовики въезжают на шоссе Знаки
Наши дорожные знаки для грузовиков являются лучшими в отрасли. Понять, почему.
Знаки тупика
Узнайте, почему наши знаки тупика предпочитают лояльные клиенты по сравнению с тысячами других…
Символ велосипеда
Знайте, почему наши знаки, подобные этому Знаку велосипедной дорожки, являются лучшими на рынке.
Символ трактора
Узнайте о характеристиках, на которые обращают внимание профессиональные покупатели, покупая такие вывески, как т. ..
Знаки объезда
Такие дорожные знаки, как этот знак DETOUR, находятся на переднем крае безопасности дорожного движения…
Знаки разворота запрещены
Такие дорожные знаки, как этот знак ЗАПРЕЩАЕТ ПОВОРОТ, находятся на переднем краю вашей дорожной безопасности…
Знак поворота (Пиктограмма)
Такие дорожные знаки, как этот указатель поворота, обеспечивают безопасность дорожного движения…
Знак «Мужчины за работой»
Такие дорожные знаки, как этот знак «Мужчины на работе», находятся на переднем крае вашей проезжей части…
Пользовательские дорожные знаки
У нас на сайте есть сотни стоковых дорожных знаков, но если вам нужно что-то…
Флуоресцентный желто-зеленый бриллиантовый светоотражающий . ..
Флуоресцентный желто-зеленый светоотражающий алюминий Diamond Grade виден издалека…
Пенсильвания Знак запрета холостого хода
В этом коротком видео рассказывается, на что обращают внимание профессиональные покупатели при покупке вывесок…
Знак «Частный проезд запрещен»
В этом кратком видеоролике подробно описаны технические характеристики продукта и уникальные функции других…
Дорожный знак «Частная дорога запрещена»
Ознакомьтесь с подробными характеристиками продукта и другими сведениями об этой частной дороге без сквозного движения…
Маркер объекта типа 2
Этот маркер объекта типа 2 соответствует требованиям Департамента транспорта…
Знак «Нет выхода»
Узнайте, что отличает наши таблички «Нет розеток» от остальных, доступных в других странах.
Тупик / Частная дорога
Внутренние советы по покупке знака частного проезда. См. классы светоотражающих знаков на ni…
Флуоресцентный алмазный алюминий — желто-зеленый
Самыми яркими знаками на дороге являются флуоресцентные знаки Diamond Grade.
Флуоресцентный алмазный алюминий – желтый
Самыми яркими знаками на дороге являются флуоресцентные знаки Diamond Grade.
Флуоресцентный алмазный алюминий — оранжевый
Самыми яркими знаками на дороге являются флуоресцентные знаки Diamond Grade.
Переносные знаки управления дорожным движением
Эти дорожные знаки прочны, но при этом легки и просты в использовании.
Дорожные знаки «сводят с ума»? Вот как я создал программу, которая читает… | Тара Проле
Вот как я создал программу, которая считывает их для вас
Фото Рози Стегглс на Unsplash Дорожные знаки. Огромное количество разноцветных знаков с формами, по которым вы должны понимать значение. Странные символы, которые приходится даже смутно распознавать в гугле. Дорожные знаки сбивают с толку, и трудно вспомнить, что они все означают. Вот почему я создал эту программу, которая читает их для вас! Имея достаточно четкое, хорошо обрезанное изображение, моя CNN может считывать узоры в дорожных знаках и классифицировать то, что они обозначают, используя классовую систему чисел. И я покажу вам, как это работает!
Поскольку это довольно длинная статья, я решил дать вам краткое содержание, чтобы вы могли быстро перейти к определенным частям моей статьи.
- Почему это действительно полезно?
- CNNs
- Getting Started
- Preparing the Data
- Creating the Neural Network
- Defining Functions
- Обучение нейронной сети
- Тестирование модели
Вам может быть интересно, в чем смысл всего этого. Зачем нам компьютер для классификации дорожных знаков, если мы можем просто посмотреть на них сами?
Ответ: автономный автомобиль.
Беспилотные автомобили с каждым днем становятся все более реальными. Waymo, дочерняя компания Google, уже установила полную систему в Фениксе, штат Аризона. Жители определенного района города могут заказать беспилотный автомобиль так же, как Uber! Но для того, чтобы беспилотные автомобили легко интегрировались с автомобилями, которыми вы можете управлять сегодня, они должны быть в состоянии следовать правилам дорожного движения так, как это сделал бы человек. Это включает в себя чтение дорожных знаков!
Вам также может быть интересно, что это за CNN. Не волнуйтесь, я могу объяснить 😉
CNN — это тип нейронной сети (прочитайте другие мои статьи, чтобы узнать об основах), которая особенно хороша для классификации изображений. CNN используются для компьютерного зрения, потому что они отлично обнаруживают шаблоны в изображениях, такие как линии, круги и другие формы и узоры. CNN использует сверточные слои, которые, по сути, изучают фильтры, которые могут обнаруживать закономерности в изображении. Например, фильтр может обнаруживать вертикальные или горизонтальные линии.
Эти фильтры «свертывают» изображение, собирая маленькие фрагменты 3×3 (или любого другого размера фильтра), чтобы получить скалярное произведение упомянутого фрагмента 3×3. Сначала фильтр проходит через первую область входного изображения размером 3×3 и находит скалярное произведение этого фрагмента. Это регистрируется, и это становится частью ввода следующего слоя. Это происходит для каждого фрагмента 3×3 во всем изображении и создает новое изображение, упрощенное с помощью скалярных произведений и фильтра.
Изображение от Kjell Magne Fauske на Public Domain Как видите, этот фильтр берет увеличенное изображение и превращает его во что-то более управляемое и читаемое для компьютера. Фильтры обычно обнаруживают наиболее важные и выдающиеся особенности изображения — они могут быть очень простыми, например, определение линий и форм, или очень сложными, например, распознавание лиц или, в моем случае, дорожные знаки.
Если вы хотите увидеть визуализацию работы этих сверточных слоев, ознакомьтесь с этим ресурсом Университета Райерсона:
3D-визуализация сверточной нейронной сети
www.cs.ryerson.ca
А вот видео от DeepLizard, чтобы узнать больше о CNN:
DeepLizard о CNNЧтобы создать свою собственную CNN, я использовал библиотеку Python под названием PyTorch. PyTorch — это платформа машинного обучения с открытым исходным кодом, которая позволяет создавать нейронные сети от начала до конца. Для начала я создал Jupyter Notebook через Kaggle, чрезвычайно полезный веб-сайт, который позволяет вам использовать бесплатные графические процессоры для запуска ваших моделей машинного обучения. Я настоятельно рекомендую переместить ваш код туда — как только вы освоите его, он станет очень интуитивно понятным и простым в использовании.
Нейронная сеть обучается на больших наборах данных. В своей нейронной сети я использовал набор данных немецкого теста распознавания дорожных знаков (GTSRB) как для обучения, так и для тестирования нейронной сети. Моя нейронная сеть обучалась на наборе из 39 209 размеченных изображений, чтобы изучить фильтры для определения закономерностей в дорожных знаках. Затем он протестировал набор из 12 630 помеченных тестовых изображений, чтобы увидеть, насколько точным он будет на реальных данных.
Чтобы загрузить данные в свою программу, я перешел на страницу Kaggle для набора данных GTSRB и создал новый блокнот.
import torch as t
import torchvision
from torchvision import transforms
import torch.utils.data as data
import torch.optim as optim
import torch.nn as nn
import time
import numpy as np
import 0 import os
import torch.optim as optim matplotlib.pyplot as plt
Вот список библиотек, которые я импортировал, их описание и ссылки на соответствующую документацию.
- PyTorch
- Torchvision — библиотека компьютерного зрения в PyTorch
- Transforms — позволяет преобразовывать входные данные, в данном случае из изображений в тензоры.
Также можно изменять размер, обрезать и выполнять другие преобразования с входными данными.
- torch.utils.data- инструменты для работы с данными
- torch.optim- алгоритмы оптимизации для улучшения сети
- torch.nn- инструменты нейронной сети, специально созданные для обучения нейронных сетей
- время — для расчета времени тестирования и обучения
- NumPy- для создания и использования массивов данных
- os- для управления файлами в нашей программе
- matplotlib.pyplot- для отображения графиков и изображений в программе
#Определение преобразования
]), transforms.ToTensor()])
Затем я определил преобразование данных. Это преобразование изменяет размер входных изображений до 112×112 и превращает эти изображения в тензоры.
# Определение гиперпараметровBATCH_SIZE = 256
Learning_rate = 0,001
EPOCHS = 7
numClasses = 43
Затем я определил гиперпараметры модели, такие как размер пакета, скорость обучения и количество эпох. Размер пакета — это количество изображений, которые обрабатываются одновременно. Скорость обучения — это то, насколько нейронная сеть корректируется каждый раз, когда она делает что-то не так. Эпохи — это то, сколько раз компьютер проходит весь обучающий набор (он видит каждое изображение 7 раз).
#путь обучающих данныхtrain_data_path = '../input/gtsrb-german-traffic-sign/Train'
train_data = torchvision.datasets.ImageFolder(root = train_data_path, transform = data_transforms)# Разделить данные на обучение и проверку (0.8 и 0.2)
отношение = 0,8
n_train_examples = int(len(train_data) * ratio)
n_val_examples = len(train_data) - n_train_examplestrain_data, val_data = data.random_split(train_data, [n_train_examples) 90_examples 0_val n_30004 print(f"Количество обучающих выборок = { len(train_data) } ")
print(f"Количество проверочных выборок = { len(val_data) } ")
Далее, I начал создавать свой набор данных! Во-первых, я определил путь к файлу моих обучающих данных. Kaggle позволяет легко копировать и вставлять путь к данным для использования в вашей программе — просто перейдите в правую часть интерфейса, наведите указатель мыши на папку с данными вашего поезда и нажмите кнопку копирования. Затем я создал свой тренировочный набор, используя тип набора данных torchvision ImageFolder, используя путь к файлу Kaggle и преобразования, которые я определил ранее.
Затем я разделил тренировочный набор на тренировочный и проверочный. Обучение — это то, на чем программа фактически тренируется — это образы, которые она научится распознавать. Проверочный набор в основном предназначен для тестирования во время обучения — он позволяет вам в режиме реального времени видеть, как ваша модель работает с данными, на которых она не тренируется.
#создать загрузчик данных для обучения и проверки
trainloader = data.DataLoader(train_data, shuffle=True, batch_size=BATCH_SIZE)
valloader = data.DataLoader(val_data, shuffle=True, batch_size=BATCH_SIZE)
Последним шагом в подготовке обучающих данных было создание загрузчиков данных. По сути, это способ для программы легко получить доступ к определенному вами набору данных и просмотреть его. Я установил для этих загрузчиков размер пакета 256 (переменная, которую я сделал ранее), и они каждый раз перемешиваются.
# График гистограммы для обучения и проверки данных0003val_hist = [0]*numClasses
для i в val_data.indices:
tar = val_data.dataset.targets[i]
val_hist[tar] += 1plt.bar(range(numClasses), train_hist , label="train")
plt.bar(range(numClasses), val_hist, label="val")
legend = plt.legend(loc='верхний правый', shadow=True)
plt.title("Распределение Plot")
plt.xlabel("Идентификатор класса")
plt.ylabel("Количество примеров")plt.savefig("train_val_split.png", bbox_inches = 'tight', pad_inches=0.5)
Прежде чем приступить к обучению сети, я нарисовал график распределения данных. Я установил его, чтобы показать общее количество примеров и разделение между обучением и проверкой.
класс NeuralNet (nn.Module):
def __init__(self, output_dim):
super().__init__()self.features = nn.Sequential(
nn.Conv2d(in_channels=3) , out_channels=64, kernel_size=3, шаг=2, padding=1),
nn.MaxPool2d(kernel_size=2),
nn.ReLU(inplace=True),nn.Conv2d(in_channels=64, out_channels=192, kernel_size=3, padding=1),
nn.MaxPool2d(kernel_size=2),
nn.ReLU(inplace= True),nn.Conv2d(in_channels=192, out_channels=384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),nn.Conv2d(in_channels=384, out_channels=256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, padding=1),
nn.BatchNorm2d(256),
nn.MaxPool2d(kernel_size=2),
nn.ReLU(inplace=True),
)self.classifier = nn.Sequential(
nn.Dropout(0.5),
nn.Linear(256*7*7 , 1000),
nn.ReLU(inplace=True),nn.
Dropout(0.5),
nn.Linear(in_features=1000, out_features=256),
nn.ReLU(inplace=True),nn .Linear(256, output_dim)
)def forward(self, x):
x = self.features(x)
h = x.view(x.shape[0], -1)
x = self. классификатор(h)
возврат x, h
Вот где начинается самое интересное! Это блок кода, в котором я определил свою нейронную сеть. Эта сеть очень похожа на структуру AlexNet, использующую 5 сверточных слоев, за которыми следуют три полносвязных (линейных) слоя. Каждый сверточный слой использует максимальное объединение. Вот видео о максимальном объединении слоев от DeepLizard, которое, как мне кажется, хорошо объясняет тему.
DeepLizard при максимальном объединении слоевЯ также использовал метод отсева, чтобы уменьшить переоснащение (сеть изучает определенные изображения, а не шаблоны) в моей модели — это определяется с помощью nn.Dropout(0.5).
# определение оптимизатора и критериальных функций
optimiser = optim.Adam(model.parameters(), lr=learning_rate, weight_decay=0.01)
критерий = nn.CrossEntropyLoss()
Здесь я определил оптимизатор и функцию потерь . Оптимизатор — это то, что возвращается и фиксирует параметры модели после каждой эпохи обучения. Я также установил в оптимизаторе потерю веса, что означает, что веса будут каждый раз немного сбрасываться. Это также помогает уменьшить переоснащение.
# Функция для обучения моделиdef train(model, loader, opt, критерий):
epoch_loss = 0
epoch_acc = 0# Обучить модель (изображения, метки) в загрузчике :
images = images.cuda()
labels = labels.cuda()вывод, _ = модель(изображения)
loss = критерий(вывод, метки)# Обучение pass
opt.zero_grad()# Обратное распространение
loss.backward()# Расчет точности
acc = calculate_accuracy(output, labels)# Оптимизация весов acc.
item()
return epoch_loss / len(loader), epoch_acc / len(loader)
Затем была определена функция для обучения модели. По сути, эта функция перебирает загрузчик обучения/проверки и обучает сеть. Пара важных моментов, на которые следует обратить внимание, — это оптимизация и обратное распространение. Функция также возвращает потери и точность каждой эпохи, в которой она используется (эпоха — это то, сколько раз программа проходит через все обучающие данные).
def оценить(модель, загрузчик, выбор, критерий):
epoch_loss = 0
epoch_acc = 0#оценить модель
model.eval()с t.no_grad():
для (изображений, меток ) в загрузчике :images = images.cuda()
labels = labels.cuda()вывод, _ = модель(изображения)
loss = критерий(вывод, метки)acc = calculate_accuracy(output, метки)
epoch_loss += loss.item()
epoch_acc += acc.item()return epoch_loss / len(loader), epoch_acc / len(loader)
Я также определил функцию для оценки модели. Не используя градиентный спуск, он проверяет, насколько хорошо работает сеть. Как и функция обучения, она оценивает потери и точность сети.
#TRAININGtrain_loss_list = [0]*EPOCHS
train_acc_list = [0]*EPOCHS
val_loss_list = [0]*EPOCHS
val_acc_list = [0]*EPOCHSв диапазоне 90OCHS1 314):
print("Эпоха {} : ".format(epoch))
train_start_time=time.monotonic()
train_loss, train_acc= train(модель, загрузчик поездов, оптимизатор, критерий)
train_end_time = time.monotonic()val_start_time = time.monotonic()
val_loss, val_acc = оценка (модель, valloader, оптимизатор, критерий)
val_end_time = time.monotonic()train_loss_list[эпоха] = train_loss
train_acc_list[эпоха] = train_acc
val_loss_list[эпоха] = val_loss
val_acc_list[эпоха] = val_accprint("Обучение: Потеря = %.4f , Точность = %.4f , Время = %.2f секунды" %(train_loss, train_acc, train_end_time-train_start_time))
print("Проверка: Потеря = {} , Accuracy = {} , Time = {} секунды".format(val_loss, val_acc, val_end_time - val_start_time))
print("")
И вот оно: самое главное часть моего кода! В этом блоке происходит все обучение нейронной сети. Он начинается с распечатки номера эпохи, а затем обучения модели с использованием загрузчика набора поездов. Это также время, необходимое для обучения модели с использованием функции time.monotonic(). Затем он делает то же самое для проверочного набора, за исключением того, что он использует функцию оценки (здесь не происходит обучения).
В конце всего этого он распечатывает потери, точность и время, затраченное на обучение сети. Довелось наблюдать, как потери уменьшались, а точность становилась лучше — очень порадовало 😁
Вывод предыдущего блока — наблюдаю, как потери уменьшаются, а точность растет!Кстати, вы можете посетить страницу проекта Kaggle, чтобы увидеть весь вывод этих блоков.
# Сохранение модели# Создать папку для сохранения модели
MODEL_FOLDER = "../Model"
, если Не OS.Path.isdir (model_folder):
os.mkdir (model_folder)path_to_model = model_folder + "/теро )
t.save(model.state_dict(), PATH_TO_MODEL)print("Модель сохранена по адресу %s " %(PATH_TO_MODEL))
Когда обучение завершено, программа сохраняет модель, чтобы я мог загрузите и используйте его позже.
# Потери на графике и точность данных для обучения и проверки_, axs = plt.subplots(1, 2, figsize=(15, 5))
# График потерь
axs[0].plot(train_loss_list, label="train")
axs[0] .plot(val_loss_list, label="val")
оси[0].set_title("Участок - Потеря")
оси[0].set_xlabel("Эпохи")
оси[0].set_ylabel("Потеря")
legend = axs[0].legend(loc='upper right', shadow=False)# График точности
axs[1].plot(train_acc_list, label="train")
axs[1].plot (val_acc_list, label="val")
axs[1].set_title("График - Точность")
axs[1].set_xlabel("Эпохи")
axs[1].set_ylabel("Точность")
legend = axs[1].legend(loc='центр справа', shadow=True)
Один из последние биты кода перед процессом тестирования отображают потери и точность сети. При этом используется библиотека matplotlib для создания двух простых линейных графиков, демонстрирующих потери для каждой эпохи и точность для каждой эпохи. Каждый график сравнивает один из этих элементов с наборами для обучения и проверки. Линия тренировочного набора — синяя, а линия проверочного набора — оранжевая. Очень интересно наблюдать, как сеть улучшается с течением эпох.
Авторы и права: Тара Проле Теперь, когда я обучил нейронную сеть, пришло время посмотреть, как она работает на некоторых тестовых данных, которых она никогда раньше не видела. Это связано с тем, что в реальном мире не все дорожные знаки находятся под одним и тем же углом, с одинаковым углом поворота и с одним и тем же фоном — существует множество различий, которые компьютер изучил через набор поездов, и нам нужно посмотреть, можно ли их применить к ним. несколько новых примеров.
# Определить преобразованияtest_transforms = transforms.Compose([
transforms.Resize([112, 112]),
transforms.ToTensor()
])
Сначала я определил преобразования для тестовых данных. Это преобразование превратило тестовые изображения в изображения размером 112 x 112, а затем в тензоры, которые PyTorch может читать.
# Определить путь к тестовым даннымtest_data_path = "../input/gtsrb-test-images/GTSRB/Final_Test"
test_data = torchvision.datasets.ImageFolder(root = test_data_path, transform = test_transforms)
test_loader = data .DataLoader(test_data, batch_size=1, перемешивание=False)numClasses = 43
Затем я определил путь к тестовым данным, снова используя функцию копирования и вставки из набора данных Kaggle. Что касается тестовых данных, у меня было несколько проблем с данными, которые были в формате .png в файле CSV, который я использовал, а изображения были файлами . ppm. Я решил загрузить тестовые изображения отдельно с веб-сайта GTSRB и загрузить их в Kaggle в качестве пользовательского набора данных.
import pandas as pd
# Чтение меток изображений из CSV-файла
# Примечание. Все предоставленные метки представляют собой числа, тогда как метки, назначенные загрузчиком данных PyTorch, представляют собой строкиdf = pd.read_csv("../input/gtsrb-german-traffic-sign/Test.csv")
numExamples = len(df)
labels_list = list(df.iloc[:,6])print(numExamples)
Чтобы компьютер мог прочитать каждое изображение, для получения путей к файлам и их соответствующие классы. Для этого я импортировал библиотеку Pandas. Я заставил его прочитать файл CSV, получить количество примеров, а также создать список меток с помощью функции iloc. Это получило весь столбец (столбец 7, проиндексированный как 6 в соответствии с синтаксисом Python) и превратило его в список, который я мог использовать для маркировки тестовых изображений.
#perform ClassificationY_PRED_LIST = []
Corr_classified = 0с T.NO_GRAD ():
MODEL.EVAL ()I = 0
Для изображения, _ в TEST_LARDER:
11134. image.cuda()y_test_pred = model(image)
y_pred_softmax = t.log_softmax(y_test_pred[0], dim=1)
_, y_pred_tags = t.max(y_pred_softmax, dim=1)
y_pred_tags = y. cpu().numpy()y_pred = y_pred_tags[0]
y_pred = метки[y_pred]y_pred_list.append(y_pred)
if labels_list[i] == y_pred:
corr_classified += 1i += 1
print("Правильно классифицировано: {0}9r2)) ".format print("Неправильно классифицировано: {} ".format(numExamples - corr_classified))
print("Окончательная точность: {} ".format(corr_classified / numExamples))
Это большой кусок кода 🤣 Подводя итог, этот блок создает пустой список для прогнозов, которые модель будет делать на данных тестирования. Без градиентного спуска (без обучения) код циклически перебирает каждое изображение в тестовом загрузчике и прогоняет его через модель. Он использует функции softmax и max, чтобы предсказать, какую метку будет иметь данное изображение, а затем добавляет ее в список, созданный ранее.
В конце выводится, сколько классифицировано правильно, сколько неправильно, а затем делится на два, чтобы получить окончательную точность.
# Отображение первых 30 изображений вместе с фактическими и прогнозируемыми классами
из PIL import Image
fig, axs = plt.subplots(6,5,figsize=(50,75))
#fig.tight_layout( h_pad = 50)
для i в диапазоне (30):
row = i // 5
col = i % 5imgName = '../input/gtsrb-test-images/GTSRB/Final_Test/' + df.iloc[i,7]
неправильное_папка = str(imgName).replace('/Test', '/Images')
неправильное расширение = неправильное_папка.replace('.png', '.ppm')
img = Image.open(wrongExtension)
оси [строка , col].imshow(img)
title = "Pred: %d , Actual: %d " % (y_pred_list[i], labels_list[i])
axs[row, col].set_title(title, fontsize=50)plt.savefig("predictions.png", bbox_inches = 'tight', pad_inches=0.5)
Наконец, пришло время увидеть реальные данные и прогнозы вместе с ними! Этот код отображает 30 тестовых изображений с предсказанными и фактическими метками, отображаемыми над каждым изображением.
Авторы и права: Тара ПролеКак видите, модель неправильно предсказала только несколько из этих изображений и проделала исключительную работу по классификации некоторых примеров сложных дорожных знаков.
Этот проект был взят из программы классификации GTSRB Сураджа Кришнамурти. См. исходный проект Github здесь: https://github.com/surajmurthy/TSR_PyTorch
Тара Проле — новатор TKS — The Knowledge Society (TKS) | LinkedIn
Я 15-летний предприниматель, который создал множество проектов, включая онлайн-курс и коллекцию NFT.
