Содержание
Дорожные знаки и дорожная разметка ПДД
Дорожные знаки и дорожная разметка ПДД | AVTONAUKA.RU
ПДД 2021, 2022 с комментариями онлайн
Дорожные знаки и дорожная разметка ПДД РФ с комментариями (пояснениями) и иллюстрациями (картинками) в действующей редакции.
Предупреждающие знаки
- Предупреждающие дорожные знаки
- Предупреждающие дорожные знаки 1.1 — 1.4.6
- Предупреждающие дорожные знаки 1.5 — 1.10
- Дорожные знаки 1.11.1 — 1.12.2 «Опасные повороты»
- Дорожные знаки 1.13 «Крутой спуск» и 1.14 «Крутой подъем»
- Предупреждающие дорожные знаки 1.15 — 1.20
- Предупреждающие дорожные знаки 1.21 — 1.25
- Предупреждающие дорожные знаки 1.26 — 1.30
- Предупреждающие дорожные знаки 1.31 — 1.34.3
- Предупреждающий знак 1.35 «Участок перекрестка»
Знаки приоритета
- Дорожные знаки приоритета
- Группа знаков «Главная дорога» 2. 1 — 2.3.7
- Знаки приоритета «Уступи дорогу» 2.4 и 2.5
- Знаки приоритета встречного разъезда 2.6, 2.7
Запрещающие знаки
- Запрещающие дорожные знаки
- Запрещающий знак 3.1 «Въезд запрещен»
- Запрещающие дорожные знаки 3.2 — 3.4
- Запрещающие дорожные знаки 3.5 — 3.10
- Запрещающие знаки 3.11 — 3.12 «Ограничение массы»
- Запрещающие дорожные знаки 3.13 — 3.16
- Запрещающие дорожные знаки 3.17.1 — 3.17.3
- Запрещающие дорожные знаки 3.18.1, 3.18.2, 3.19
- Запрещающие дорожные знаки 3.20 — 3.23
- Запрещающие дорожные знаки 3.24 — 3.26
- Запрещающие дорожные знаки 3.27 — 3.30
- Запрещающие дорожные знаки 3.31 — 3.33
Предписывающие знаки
- Предписывающие дорожные знаки
- Предписывающие дорожные знаки 4.1.1 — 4.1.6
- Предписывающие дорожные знаки 4.2 — 4.3
- Предписывающие дорожные знаки 4.4.1 — 4.5.7
- Предписывающие дорожные знаки 4. 6 — 4.8
Знаки особых предписаний
- Дорожные знаки особых предписаний
- Знаки особых предписаний 5.1 — 5.4
- Знаки особых предписаний 5.5 — 5.10
- Знаки особых предписаний 5.11.1 — 5.14.3
- Знаки направлений движения по полосам (5.15.1 — 5.15.2, 5.15.7 — 5.15.8)
- Знаки «Начало полосы» и «Конец полосы» (5.15.3 — 5.15.6)
- Знаки особых предписаний 5.16 — 5.22
- Знаки Начало и Конец населенного пункта (5.23 — 5.26)
- Знаки особых предписаний 5.27 — 5.32
- Знаки Пешеходная зона и Велосипедная зона (5.33 — 5.34.1)
- Знаки «Зона с ограничением экологического класса» (5.35 — 5.38)
Информационные знаки
- Информационные дорожные знаки
- Информационные дорожные знаки 6.1 — 6.4
- Информационные дорожные знаки 6.5 — 6.8
- Знаки указатели направлений и расстояний (6.9 — 6.12)
- Информационные дорожные знаки 6.13 — 6.16
- Информационные дорожные знаки 6. 17 — 6.21
- Информационный дорожный знак 6.22
Знаки сервиса
- Дорожные знаки сервиса
Знаки дополнительной информации (таблички)
- Таблички «Расстояние до объекта» (8.1.1-8.1.4)
- Таблички Зона и Направление действия (8.2.1-8.3.3)
- Таблички «Вид транспортного средства» (8.4.1-8.4.15)
- Таблички 8.5.1 — 8.6.9
- Таблички 8.7 — 8.10
- Таблички 8.11 — 8.15
- Таблички 8.16 — 8.20
- Таблички 8.21 — 8.25
Дорожная разметка
- Дорожная разметка. Общие положения
- Горизонтальная разметка 1.1 — 1.3
- Горизонтальная разметка 1.4, 1.10, 1.17, 1.26
- Горизонтальная разметка 1.5 — 1.9, 1.11
- Горизонтальная разметка 1.12 — 1.15
- Горизонтальная разметка 1.16, 1.18 — 1.21
- Горизонтальная разметка 1.22, 1.23.1-1.23.3
- Горизонтальная разметка 1.24 — 1.25
- Вертикальная разметка 2.1 — 2.3
- Вертикальная разметка 2. 4 — 2.7
Если есть желание поделиться прочитанным, ниже кнопки на выбор. Жмем, не стесняемся.
Внимание, с 2021 года на дорогах новые знаки — перечень с фото
Содержание
- Запрещающие
- Парковка и зарядка
- Фото- и видеофиксация
В результате проделанной совместной работы Министерства транспорта и ГИБДД в 2021 году изменятся ПДД. Основное внимание было направлено на тонировку стекол автомобилей. Кроме того, появились отдельные нюансы для владельцев средств индивидуальной мобильности. Появятся новые знаки, которые до этого не использовались. Поэтому, водителям различных транспортных средств нужно взять на заметку данные изменения.
Запрещающие
Для обозначения каждого обновления используются новые дорожные знаки. С их помощью участники движения смогут разобраться, как правильно вести себя на дороге. Кроме того, такие обозначения помогут избежать конфликтных ситуаций и трат в виде штрафов.
Особенно это касается владельцев различных средств индивидуальной мобильности, которые зачастую передвигаются по тротуарам, создавая помехи и опасности пешеходам. На некоторых тротуарах таким участникам движения, мягко говоря, не рады.
Своевременно сориентироваться им помогут новые обозначения с изображением зачеркнутого красной линией ездока на самокате, запрещающие езду на гироскутерах, электрических самокатах и других средствах индивидуальной мобильности.
Кроме того, с 2021 года вводится в действие знак, запрещающий движение автобусов на определенных участках дороги. Вероятно, это связано с тем, что многие водители небольших частных автобусов, которые представляют официальных перевозчиков, любят незаконно «срезать» установленные маршруты.
Читайте также
Действие знака фотовидеофиксации, законна ли камера без указателя и как оспорить штраф 2021 года
Дорожный знак под номером 8.23, указывающий на ведение фотовидеофиксации на определенном участке пути, появился на российских дорогах еще 1 июля 2013 года, однако внесение многочисленных поправок в…
Парковка и зарядка
Технический прогресс, непростая экологическая обстановка приводит к тому, что на улицах городов с каждым годом появляется все больше электромобилей. Соответственно, для них требуется развитая инфраструктура.
Новые дорожные знаки, обозначающие стоянку и зарядку тяговых батарей электромобилей как раз в духе времени. Их появление явно соответствует запросам автомобилистов.
Кроме того, в этом году отдельно появились таблички, обозначающие стоянку для инвалидов и платную парковку.
Читайте также
Перечень запрещающих знаков дорожного движения 2021 года с пояснениями
Для регулирования движения на дорогах вводятся определенные ограничения. Чтобы обеспечить системный порядок, используют запрещающие знаки. Их действие начинается непосредственно с места установки….
Фото- и видеофиксация
Изменения ПДД предусматривают введение новых информационных знаков, которые будут обозначать все дорожные камеры наблюдения. Сейчас прямоугольные указатели заменили маленькие неприметные таблички, обозначающие точки фото- и видеофиксации.
За пределами города такой знак должен устанавливаться за 150-300 метров до зоны контроля. Внутри населенного пункта этот дорожный знак устанавливается только на въезде. Он будет обозначать зоны контроля как стационарных, так и мобильных камер фиксации. После вступления в силу новых правил старые знаки планируется убрать.
Читайте также
Знаки ПДД «Остановка запрещена» и «Стоянка запрещена» 2021 года
«Остановка запрещена» и «Стоянка запрещена» – это знаки ПДД, которые даже с опытными водителями нередко играют злую шутку, а что уж говорить о тех, кто только начинает обучаться езде в городе и за…
Возможно, вступившие в силу изменения правил дорожного движения облегчат жизнь пешеходов и водителей. Чтобы оправдались ожидания, нужно придерживаться требований новых знаков.
дорожных знаков «сводят с ума»? Вот как я создал программу, которая читает… | Тара Проле
Вот как я создал программу, которая считывает их для вас
Фото Рози Стегглс на 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 1 import os 9009 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] 90examples 0_val)0002 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 (переменная, которую я сделал ранее), и они каждый раз перемешиваются.
# График гистограммы для обучения и проверки данных0005val_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)
Прежде чем приступить к обучению сети, я нарисовал график распределения данных. Я установил его, чтобы показать общее количество примеров и разделение между обучением и проверкой.
Credit: Tara Prole
class 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, отступ=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# Обучение модели
model.train()for
2 (изображения, метки)
в загрузчике :
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)
Я также определил функцию для оценки модели. Не используя градиентный спуск, он проверяет, насколько хорошо работает сеть. Как и функция обучения, она оценивает потери и точность сети.
#ОБУЧЕНИЕtrain_loss_list = [0]*EPOCHS
train_acc_list = [0]*EPOCHS
val_loss_list = [0]*EPOCHS
val_acc_list = [0]*EPOCHS2 в 1 эпохе 900EPS):
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[epoch] = train_loss
train_acc_list[epoch] = train_acc
val_loss_list[epoch] = val_loss
val_acc_list[epoch] = val_accprint("Обучение: Потери = %.4f , Точность = %.4f , Время = %.2f секунд" %(train_loss, train_acc, train_end_time-train_start_time))
print("Проверка: Потеря = {} , Точность = {} , Время = {} секунд". 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 + "/PYTORCH_CLASSIFICIATION_ALEXNETS.PTH"
IF OS.PATH.Exists (PATH_TO_MODEL):
191 (
if os.path.exists. )
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_LOAD:
. 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} 90r ".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.
я…
www.linkedin.com
У меня есть еженедельный информационный бюллетень, если вы хотите увидеть больше моих работ — подпишитесь ниже!
Tara’s Newsletter
Еженедельные мысли, цели и рекомендации
Taraprole.substack.com
GTSRB DataSet
- Johannes Stallkamp, Marc Schlips, Jan Salmen, и Christian Compuctomer
- . Алгоритмы обучения распознаванию дорожных знаков. Нейронные сети 32, стр. 323–332, 2012 г.
- Йоханнес Сталкамп, Марк Шлипсинг, Ян Салмен и Кристиан Игель
Немецкий эталон распознавания дорожных знаков: многоклассовое соревнование по классификации. Международная совместная конференция по нейронным сетям (IJCNN 2011), стр. 1453–1460, IEEE Press
Pictures from the Road — Easy Guide to Understanding French Road Signs
Раскрытие информации: этот пост может содержать партнерскую ссылку, и я могу получили компенсацию за время, потраченное на написание этой статьи.
Вождение во Франции может быть сложным, особенно если вы не умеете читать по-французски. Мысль о том, чтобы сесть в машину и ехать по дорогам со скоростью более 60 миль в час в чужой стране, может быть пугающей. Но на самом деле это почти то же самое, что и вождение в США и большинстве других стран. Исключение составляет Великобритания, так как там ездят не по той стороне дороги 😉 Французские дорожные знаки довольно просты и используют множество универсальных символов. Однако важно знать, что означают эти знаки и как их следует интерпретировать. Это руководство поможет вам безопасно и успешно путешествовать по Франции.
Во время нашей недавней поездки я фотографировал знаки, которые мы проезжали как на межгосударственных, так и на местных дорогах. Несколько раз мне приходилось просить детей переводить мне пару слов. Как приятно путешествовать с детьми, которые довольно свободно говорят на языке! Но сначала давайте посмотрим на некоторые ключевые слова.
Французский словарь.
Travaux = работы (например, дорожные работы)
Attention = внимание
Ouvert = открыто
Fermé = закрыто
Rappel = напоминание (вы увидите это под знаками ограничения скорости как напоминание об ограничении скорости. Это напоминание вам о том, что вы все еще находитесь в этой зоне скорости, а не о том, что она изменилась)
Вылазка Prochain = Следующее выход
Сортти = Выход
Péage — Toll Road
SAUF = За исключением
Cédez LE Passurn.0091 Sens уникальный = односторонний
Suivre = Следуйте
ARRrrêt = остановка
Serrez à Droite = Держите правый
Allumez Vos Feux = поворот на ваши Lights
Allumez Vos Feux = поворот на ваши Lights
Allumez Vos Feux = поворот на ваши Lights
Allumez Vos Feux . остановка X город
Жандармерия = полицейский участок
Rue = улица
Также важно отметить, что во Франции существует Priorité à droite или право проезда автомобилей вход справа. Это всегда так, если только у вас нет знака с желтый треугольник дает вам приоритет. Хотя на самом деле вы не обнаружите, что люди выезжают на вашу полосу, как если бы вас там не было, когда они выезжают на шоссе, у них есть преимущественное право проезда. Если случится авария, вы виноваты. Это противоположно тому, что происходит в США, где приоритет отдается тем, кто уже находится на шоссе.
prochaine sortie = следующий съезд
Движение по левой полосе запрещено
Кроме того, при движении по французским автомагистралям ( autoroute ) двигайтесь справа и обгоняйте слева. НЕ ДВИЖИТЕСЬ налево. Конечно, в перегруженных районах машины будут на всех полосах, но более медленное движение всегда держит право. Мы всегда поражаемся, как почти все следуют этому правилу. Левая полоса предназначена только для обгона. Проехав транспортное средство, люди переходят на правую полосу. Если есть три полосы, люди будут оставаться в крайней правой полосе и использовать среднюю полосу для обгона. Мы никогда не видели, чтобы кто-то проезжал по правому ряду. Люди, как правило, ждут (очень нетерпеливо с мигающими фарами), чтобы человек слева передвинулся. Здесь нет зигзагов!
Белые линии
Как и в других странах, вы не пересекаете сплошные белые линии. Это особенно важно соблюдать во Франции. Пересекайте полосы движения только по пунктирным белым линиям. Вы также можете увидеть более длинные линии с тире на обочине дороги. Они должны помочь показать расстояние и служить напоминанием о том, насколько близко вы следуете за транспортным средством впереди. Две машины не должны стоять в одной очереди одновременно.
Напоминание о скорости 50 км/ч
Скорость 90 км/ч при съезде с полосы
Скорость 130, но снижается до 110 в дождь
Ограничение скорости
Обратите внимание: скорость указана в км/ч, а расстояние в километрах (км) или метрах (м).
В зависимости от района вы также можете увидеть знаки ограничения скорости с автомобилем под ним и другим весом например 3,5 т. Легковые автомобили могут развивать скорость 110 км/ч, а грузовики весом более 3,5 тонн могут развивать скорость только до 90 км/ч.
Следите за скоростью. На дорогах установлены камеры контроля скорости. Если камера поймает вас за превышение скорости, вы получите штраф по почте. ИЛИ счет от вашего агентства по аренде автомобилей за время, затраченное на отправку вашей информации властям и билет на почту. Будьте осторожны – не превышайте скорость!
Правый поворот запрещен
Следите за оленями следующие 5 км ”
Ввод запрещен
Фото предоставлено Auto Ecole
Внимание!
Красный цвет на знаках означает опасность!! Вас о чем-то предупреждают. Это может быть поворот дороги, сужение дороги, животные, проезд запрещен, пешеходы и т. д. Знаки в большинстве случаев не требуют пояснений, но вам следует обращать особое внимание, когда вы видите красные знаки.
Традиционный знак уступки выше часто используется при въезде на перекрестки с круговым движением, показывая, кто уступает дорогу. Уступайте дорогу движению уже на кольцевой развязке, но не останавливайтесь, если никто не приближается.
Обратите особое внимание на красный знак с белой горизонтальной линией. Это означает, что вход ЗАПРЕЩЕН. Это очень важно, тем более что во Франции много однополосных дорог. Кроме того, синий знак с красным «х» означает, что движение транспортных средств запрещено.
Продолжая движение по автостраде
Сколько метров осталось до пункта назначения
Этот символ на знаке показывает, что вы находитесь на платной дороге или въезжаете на нее.
Направление
Вы заметите, что во Франции дорожные указатели имеют цветовую кодировку. Знаки довольно стандартные, но важно знать номер съезда с местной дороги. На изображении слева выход №30 находится справа в 200 м. Как правило, вы не увидите знака под ним, указывающего район, если только это не крупный город.
Синий фон с белыми буквами указывает на автомагистраль (шоссе с платными проездами).
Зеленый фон с белыми буквами обозначает основные европейские дороги (пересекающие национальные границы).
Красный фон с белыми буквами обозначает основные национальные дороги (магистральные дороги, пересекающие обширные территории Франции и в настоящее время в основном обслуживаемые местными властями, а не национальными).
Желтый фон с черными буквами обозначает ведомственные и временные дороги, например объездные дороги.
Белый фон с черными буквами обозначает местные дороги.
Съезд на одну полосу
Пешеходный переход и лежачий полицейский
Что делать?
Знаки с белой окантовкой и синим фоном сообщают вам, что вам нужно делать. Выше — знак слияния и двойной знак с пешеходным переходом и лежачим полицейским.
Зона отдыха с местом для пикника, детской площадкой и туалетами
Большая зона отдыха с газом и едой
Зоны отдыха
На автомагистралях множество остановок для отдыха, но не все они одинаковы.