基于深度学习,机器学习,卷积神经网络,OpenCV的交通标志识别交通标志检测

这篇具有很好参考价值的文章主要介绍了基于深度学习,机器学习,卷积神经网络,OpenCV的交通标志识别交通标志检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要内容

在本文中,使用Python编程语言和库Keras和OpenCV建立CNN模型,成功地对交通标志分类器进行分类,准确率达96%。开发了一款交通标志识别应用程序,该应用程序具有图片识别和网络摄像头实时识别两种工作方式。

设计项目案例演示地址: 链接

毕业设计代做一对一指导项目方向涵盖:

基于Python,MATLAB设计,OpenCV,,CNN,机器学习,R-CNN,GCN,LSTM,SVM,BP神经网络,数字识别,贝叶斯,逻辑回
归,卷积神经网络等算法的中文文本分类.车牌识别,知识图谱,数字图像处理,手势识别,边缘检测,图像增强,
图像分类,图像分割,色彩增强,低照度。缺陷检测,病害识别,图像缺陷检测,裂缝识别,
交通标志识别,夜间车牌识别,人数统计,火焰烟雾火,车道线识别,人脸识别等系

写作目的

近年来,计算机视觉是现代技术发展的一个方向。这个方向的主要任务是对照片或摄像机中的物体进行分类。在通常的问题中,使用基于案例的机器学习方法来解决。本文介绍了利用机器学习算法进行计算机视觉在交通标志识别中的应用。路标是一种外形固定的扁平人造物体。道路标志识别算法应用于两个实际问题。第一个任务是控制自动驾驶汽车。无人驾驶车辆控制系统的一个关键组成部分是物体识别。识别的对象主要是行人、其他车辆、交通灯和路标。第二个使用交通标志识别的任务是基于安装在汽车上的DVRs的数据自动绘制地图。接下来将详细介绍如果搭建能够识别交通标志的CNN网络。

模型训练

数据加载

Python Pandas包帮助我们处理数据集。我们首先将训练和测试数据集获取到Pandas DataFrames中。我们还将这些数据集组合起来,在两个数据集上一起运行某些操作。

count = 0
images = []
classNo = []
myList = os.listdir(path)
print("Total Classes Detected:",len(myList))
noOfClasses=len(myList)
print("Importing Classes.....")
for x in range (0,len(myList)):
    myPicList = os.listdir(path+"/"+str(count))
    for y in myPicList:
        curImg = cv2.imread(path+"/"+str(count)+"/"+y)
        curImg = cv2.resize(curImg, (30, 30))
        images.append(curImg)
        classNo.append(count)
    print(count, end =" ")
    count +=1
print(" ")
images = np.array(images)
classNo = np.array(classNo)

为了对已实现的系统进行适当的训练和评估,我们将数据集分为3组。数据集分割:20%测试集,20%验证数据集,剩余的数据用作训练数据集

# Split Data
X_train, X_test, y_train, y_test = train_test_split(images, classNo, test_size=testRatio)
X_train, X_validation, y_train, y_validation = train_test_split(X_train, y_train, test_size=validationRatio)

该数据集包含34799张图像,由43种类型的路标组成。这些包括基本的道路标志,如限速、停车标志、让路、优先道路、“禁止进入”、“行人”等。

# DISPLAY SOME SAMPLES IMAGES OF ALL THE CLASSES
num_of_samples = []
cols = 5
num_classes = noOfClasses
fig, axs = plt.subplots(nrows=num_classes, ncols=cols, figsize=(5, 300))
fig.tight_layout()
for i in range(cols):
    for j,row in data.iterrows():
        x_selected = X_train[y_train == j]
        axs[j][i].imshow(x_selected[random.randint(0, len(x_selected)- 1), :, :], cmap=plt.get_cmap("gray"))
        axs[j][i].axis("off")
        if i == 2:
            axs[j][i].set_title(str(j)+ "-"+row["Name"])
            num_of_samples.append(len(x_selected))

数据分布
基于卷积神经网络的交通标志识别系统的设计与实现用什么数据库做动态网页,深度学习,机器学习,cnn
数据集中的类之间存在显著的不平衡。有些类的图像少于200张,而其他类的图像超过1000张。这意味着我们的模型可能偏向于过度代表的类别,特别是当它对自己的预测不自信时。为了解决这个问题,我们使用了现有的图像转换技术。

为了更好的分类,数据集中的所有图像都被转换为灰度图像

# PREPROCESSING THE IMAGES
def grayscale(img):
    img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    return img

def equalize(img):
    img =cv2.equalizeHist(img)
    return img

def preprocessing(img):
    img = grayscale(img)     # CONVERT TO GRAYSCALE
    img = equalize(img)      # STANDARDIZE THE LIGHTING IN AN IMAGE
    img = img/255            # TO NORMALIZE VALUES BETWEEN 0 AND 1 INSTEAD OF 0 TO 255
    return img

X_train=np.array(list(map(preprocessing,X_train)))  # TO IRETATE AND PREPROCESS ALL IMAGES
X_validation=np.array(list(map(preprocessing,X_validation)))
X_test=np.array(list(map(preprocessing,X_test)))

Keras库创建一个神经网络

下面是创建模型结构的代码:

def myModel():
    model = Sequential()
    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'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(rate=0.25))
    model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
    model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(rate=0.25))
    model.add(Flatten())
    model.add(Dense(256, activation='relu'))
    model.add(Dropout(rate=0.5))
    model.add(Dense(43, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

模型训练

下面来到了最关键的模型训练部分:

# TRAIN
model = myModel()
print(model.summary())
history = model.fit(X_train, y_train, batch_size=batch_size_val, epochs=epochs_val, validation_data=(X_validation,y_validation))

模型结果

模型保存:


# TRAIN
model = myModel()
print(model.summary())
history = model.fit(X_train, y_train, batch_size=batch_size_val, epochs=epochs_val, validation_data=(X_validation,y_validation))

上面的代码使用了6个卷积层和1个全连接层。首先,在模型中添加带有32个滤波器的卷积层。接下来,我们添加一个带有64个过滤器的卷积层。在每一层的后面,增加一个窗口大小为2 × 2的最大拉层。还添加了系数为0.25和0.5的Dropout层,以便网络不会再训练。在最后几行中,我们添加了一个稠密的稠密层,该层使用softmax激活函数在43个类中执行分类。

在最后一个epoch结束时,我们得到以下值:loss = 0.0523;准确度= 0.9832;Val_loss = 0.0200;Val_accuracy = 0.9943,这个结果看起来非常好。之后绘制我们的训练过程。
基于卷积神经网络的交通标志识别系统的设计与实现用什么数据库做动态网页,深度学习,机器学习,cnn

模型测试和模型保存

我们在测试数据集中测试了构建的模型,得到了96%的准确性。 使用内置函数model_name.save(),我们可以保存一个模型以供以后使用。该功能将模型保存在本地的.文件中,这样我们就不必一遍又一遍地重新训练模型而浪费大量的时间。

#testing accuracy on test dataset
from sklearn.metrics import accuracy_score

y_test = pd.read_csv('Test.csv')
labels = y_test["ClassId"].values
imgs = y_test["Path"].values
data=[]
for img in imgs:
    image = Image.open(img)
    image = image.resize((30,30))
    data.append(np.array(image))
X_test=np.array(data)
X_test=np.array(list(map(preprocessing,X_test)))
predict_x=model.predict(X_test) 
pred=np.argmax(predict_x,axis=1)
print(accuracy_score(labels, pred))

测试结果

基于卷积神经网络的交通标志识别系统的设计与实现用什么数据库做动态网页,深度学习,机器学习,cnn

基于卷积神经网络的交通标志识别系统的设计与实现用什么数据库做动态网页,深度学习,机器学习,cnn文章来源地址https://www.toymoban.com/news/detail-781166.html

代码获取:

设计项目案例演示地址: 链接

毕业设计代做一对一指导项目方向涵盖:

基于Python,MATLAB设计,OpenCV,,CNN,机器学习,R-CNN,GCN,LSTM,SVM,BP神经网络,数字识别,贝叶斯,逻辑回
归,卷积神经网络等算法的中文文本分类.车牌识别,知识图谱,数字图像处理,手势识别,边缘检测,图像增强,
图像分类,图像分割,色彩增强,低照度。缺陷检测,病害识别,图像缺陷检测,裂缝识别,
交通标志识别,夜间车牌识别,人数统计,火焰烟雾火,车道线识别,人脸识别等系



到了这里,关于基于深度学习,机器学习,卷积神经网络,OpenCV的交通标志识别交通标志检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包