日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

人工智能中,自动驾驶汽车是如何自动识别交通标志的?

發布時間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人工智能中,自动驾驶汽车是如何自动识别交通标志的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


內容:
了解數據集。
步驟0:導入庫和數據集。
步驟1:數據預處理。
步驟2:數據可視化。
ConvNets背后的直覺。
步驟3:訓練模型。
步驟4:模型評估。
動機:由于特斯拉等公司在電動汽車自動化方面的努力,無人駕駛汽車正變得非常受歡迎。為了成為5級自動駕駛汽車,這些汽車必須正確識別交通標志并遵守交通規則。在識別出這些交通標志之后,它還應該能夠適當地做出正確的決定。

了解數據集:
德國交通標志基準測試是在2011年國際神經網絡聯合會議(IJCNN)上舉行的多類單圖像分類挑戰。請在此處下載數據集。數據集具有以下屬性:
https://www.kaggle.com/meowmeowmeowmeowmeow/gtsrb-german-traffic-sign

單圖像,多分類問題
超過40個類別
總共超過50,000張圖像
大型逼真的數據庫

步驟0:導入庫和數據集:
在第一步中,將導入所有標準庫以及將作為數據和標簽存儲的數據集。導入Tensorflow是為了使用Keras,cv2解決計算機視覺相關的問題以及PIL處理不同的圖像文件格式。

Importing standard libraries

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import cv2 import tensorflow as tf from PIL import Image

Importing dataset

import os data = [] labels = [] classes = 43 cur_path = os.getcwd() for i in range(classes):path = os.path.join(cur_path, 'train', str(i))images = os.listdir(path)for a in images:try:image = Image.open(path + '\\'+ a)image = image.resize((30, 30))image = np.array(image)data.append(image)labels.append(i)except:print("Error loading image")

步驟1:資料預處理:
為了處理數據,將使用numpy將其轉換為數組。然后,使用形狀函數驗證數據集的尺寸。然后,使用train_test_split函數以80:20的比率將數據集分為訓練和測試數據。Y_train和Y_test包含43個整數形式的類,不適合模型。因此,將使用to_categorical函數將其轉換為二進制形式。

# Converting to array data = np.array(data) labels = np.array(labels) # Dataset Dimensions - (Number of Images, Width, Length, Color channels) print("Dataset dimensions : ",data.shape) output: Dataset dimensions : (39209, 30, 30, 3) # Splitting the dataset into train and test from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(data, labels, test_size = 0.2, random_state = 42) # Checking dimensions - (Number of Images, Width, Length, Color channels) print("X_train shape : ", X_train.shape) print("X_test shape : ", X_test.shape) print("Y_train shape : ", Y_train.shape) print("Y_test shape : ", Y_test.shape) output: X_train shape : (31367, 30, 30, 3) X_test shape : (7842, 30, 30, 3) Y_train shape : (31367,) Y_test shape : (7842,) # Converting integer class to binary class from keras.utils import to_categorical Y_train_categorical = to_categorical(Y_train, 43) Y_test_categorical = to_categorical(Y_test, 43)

第2步:數據可視化:
將使用imshow函數使數據集中的特定圖像可視化。該數據集中的圖像高度為30px,寬度為30px,并具有3個顏色通道。

# Visualizing Dataset Images i = 100 plt.imshow(X_train[i]) print("Sign category :",Y_train[i])

ConvNets背后的直覺
由于卷積神經網絡能夠檢測和識別圖像中的各種對象,因此在計算機視覺應用中非常流行。

用外行的話來說,CNN基本上是一開始就具有卷積運算的完全連接的神經網絡。這些卷積運算可用于檢測圖像中的定義圖案。它類似于人腦枕葉中的神經元。ConvNets的體系結構使用3層構建,然后堆疊形成完整的ConvNet體系結構。以下是三層:

1、卷積層。
2、池化層。
3、完全連接。

卷積層:卷積層是ConvNet的核心部分,它執行所有計算量大的任務。在整個圖像中遍歷特定模式的內核或過濾器,以檢測特定類型的特征。該遍歷的輸出將導致一個稱為要素圖的二維數組。該特征圖中的每個值都通過ReLU函數傳遞,以消除非線性。
池化層:該層負責減少數據量,因為它減少了計算量和處理所需的時間。有兩種類型的池化:平均值池和最大值池。顧名思義,“最大”池返回最大值,“平均”池返回內核覆蓋的圖像部分的平均值。
完全連接:上一步收到的二維輸出數組通過展平過程轉換為列向量。該向量被傳遞到多層神經網絡,該網絡通過一系列時期學習使用Softmax函數對圖像進行分類。

步驟3:訓練模型

```python # Importing Keras Libraries from keras.models import Sequential from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout # Creating Neural network Architecture # Initialize neural network model = Sequential() # Add 2 convolutional layers with 32 filters, a 5x5 window, and ReLU activation function model.add(Conv2D(filters = 32, kernel_size = (5, 5), activation = 'relu', input_shape = X_train.shape[1:])) model.add(Conv2D(filters = 32, kernel_size = (5, 5), activation = 'relu')) # Add max pooling layer with a 2x2 window model.add(MaxPool2D(pool_size = (2, 2))) # Add dropout layer model.add(Dropout(rate = 0.25)) # Add 2 convolutional layers with 32 filters, a 5x5 window, and ReLU activation function model.add(Conv2D(filters = 64, kernel_size = (3, 3), activation = 'relu')) model.add(Conv2D(filters = 64, kernel_size = (3, 3), activation = 'relu')) # Add max pooling layer with a 2x2 window model.add(MaxPool2D(pool_size = (2, 2))) # Add dropout layer model.add(Dropout(rate = 0.25)) # Add layer to flatten input model.add(Flatten()) # Add fully connected layer of 256 units with a ReLU activation function model.add(Dense(256, activation = 'relu')) # Add dropout layer model.add(Dropout(rate = 0.5)) # Add fully connected layer of 256 units with a Softmax activation function model.add(Dense(43, activation = 'softmax')) # Summarizing the model architecture model.summary() output: _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_1 (Conv2D) (None, 26, 26, 32) 2432 _________________________________________________________________ conv2d_2 (Conv2D) (None, 22, 22, 32) 25632 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 11, 11, 32) 0 _________________________________________________________________ dropout_1 (Dropout) (None, 11, 11, 32) 0 _________________________________________________________________ conv2d_3 (Conv2D) (None, 9, 9, 64) 18496 _________________________________________________________________ conv2d_4 (Conv2D) (None, 7, 7, 64) 36928 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 3, 3, 64) 0 _________________________________________________________________ dropout_2 (Dropout) (None, 3, 3, 64) 0 _________________________________________________________________ flatten_1 (Flatten) (None, 576) 0 _________________________________________________________________ dense_1 (Dense) (None, 256) 147712 _________________________________________________________________ dropout_3 (Dropout) (None, 256) 0 _________________________________________________________________ dense_2 (Dense) (None, 43) 11051 ================================================================= Total params: 242,251 Trainable params: 242,251 Non-trainable params: 0 _________________________________________________________________ # Compile neural network model.compile(loss = "categorical_crossentropy", optimizer = "adam", metrics = ["accuracy"]) # Train neural network history = model.fit(X_train, Y_train_categorical, batch_size = 32, epochs = 15, validation_data = (X_test, Y_test_categorical)) Output after 15 epochs: Epoch 15/15 31367/31367 [==============================] - 98s 3ms/step - loss: 0.2169 - acc: 0.9485 - val_loss: 0.0835 - val_acc: 0.9787

步驟4:模型評估:

# Ploting graph - Epoch vs Accuracy plt.plot(history.history['acc'], label='training accuracy') plt.plot(history.history['val_acc'], label='val accuracy') plt.title('Accuracy') plt.xlabel('epochs') plt.ylabel('accuracy') plt.grid() plt.legend() plt.show()

準確性與時代

# Ploting graph - Epoch vs Loss plt.plot(history.history['loss'], label='training loss') plt.plot(history.history['val_loss'], label='val loss') plt.title('Loss') plt.xlabel('epochs') plt.ylabel('loss') plt.grid() plt.legend() plt.show()

損失與時代

# Calculating Accuracy Score from sklearn.metrics import accuracy_score y_test = pd.read_csv('Test.csv') labels = y_test["ClassId"].values imgs = y_test["Path"].valuesdata = []for img in imgs:image = Image.open(img)image = image.resize((30,30))data.append(np.array(image))X_test = np.array(data)pred = model.predict_classes(X_test)from sklearn.metrics import accuracy_score print("Accuracy Score : ",accuracy_score(labels, pred)) Output: Accuracy Score : 0.9499604117181314

歡迎大家的閱讀,如果大家有不同的意見可以發表在留言區,我們一起學習,共同進步。

總結

以上是生活随笔為你收集整理的人工智能中,自动驾驶汽车是如何自动识别交通标志的?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。