1标志图片_交通标志识别

本文探讨了交通标志识别在无人驾驶中的关键作用,通过使用神经网络对Belgian Traffic Sign Dataset进行学习,实现了约7%的正确识别率。文章详细介绍了数据预处理过程,包括图像的读取、形状变换以及数据扩充,以提高模型的泛化能力。此外,还展示了数据集的目录结构和数据加载函数的编写,确保输入图像的一致性。
摘要由CSDN通过智能技术生成

       摘要:随着人工智能技术的快速发展,推动了无人驾驶技术的进步。正确识别交通标志对于无人驾驶起着至关重要的作用。通过搭建视神经网络,来学习Belgian数据集中的交通标志。交通标识识别正确率在7%左右。

     一、数据预处理 

     本实验代码基于文献1改进而来,修改了因版本不同出现的错误问题。(比利时交通标志数据集)Belgian Traffic Sign Dataset数据集,下载地址:BelgiumTS - Belgian Traffic Sign Dataset (ethz.ch),如图1所示。共有62个交通标志,其中训练集和测试集一下分别有62个子目录,名字为00000 to 00061。目录名代表了所属分类标签,图片存储格式为.ppm,使用skimage库进行读取。

8b1cb9097db1f70b089100ae005ab7fb.png

                                    图1 数据集下载

       神经网络想要能够获得较好的分类效果,需要在大批量的数据集上进行训练。因此为了能够使神经网络能够很好的识别出不同形态的交通标志,需要对原有的数据集进行扩展,将交通标志图像进行不同形态的变换来扩充数据集。

       例如,对于MNIST数据集中的样本进行形状变换来扩充数据集,原始数据显示如图2所示。

读入MNIST数据集并显示:

import numpy as npimport structimport matplotlib.pyplot as plt# 训练集文件train_images_idx3_ubyte_file = './dataset/MNIST/raw/train-images-idx3-ubyte'# 训练集标签文件train_labels_idx1_ubyte_file = './dataset/MNIST/raw/train-labels-idx1-ubyte'# 测试集文件test_images_idx3_ubyte_file = './dataset/MNIST/raw/t10k-images-idx3-ubyte'# 测试集标签文件test_labels_idx1_ubyte_file = './dataset/MNIST/raw/t10k-labels-idx1-ubyte'def decode_idx3_ubyte(idx3_ubyte_file):    """    解析idx3文件的通用函数    :param idx3_ubyte_file: idx3文件路径    :return: 数据集    """    # 读取二进制数据    bin_data = open(idx3_ubyte_file, 'rb').read()    # 解析文件头信息,依次为魔数、图片数量、每张图片高、每张图片宽    offset = 0    fmt_header = '>iiii' #因为数据结构中前4行的数据类型都是32位整型,所以采用i格式,但我们需要读取前4行数据,所以需要4个i。我们后面会看到标签集中,只使用2个ii。    magic_number, num_images, num_rows, num_cols = struct.unpack_from(fmt_header, bin_data, offset)    print('魔数:%d, 图片数量: %d张, 图片大小: %d*%d' % (magic_number, num_images, num_rows, num_cols))    # 解析数据集    image_size = num_rows * num_cols    offset += struct.calcsize(fmt_header)  #获得数据在缓存中的指针位置,从前面介绍的数据结构可以看出,读取了前4行之后,指针位置(即偏移位置offset)指向0016。    print(offset)    fmt_image = '>' + str(image_size) + 'B'  #图像数据像素值的类型为unsigned char型,对应的format格式为B。这里还有加上图像大小784,是为了读取784个B格式数据,如果没有则只会读取一个值(即一副图像中的一个像素值)    print(fmt_image,offset,struct.calcsize(fmt_image))    images = np.empty((num_images, num_rows, num_cols))    #plt.figure()    for i in range(num_images):        if (i + 1) % 10000 == 0:            print('已解析 %d' % (i + 1) + '张')            print(offset)        images[i] = np.array(struct.unpack_from(fmt_image, bin_data, offset)).reshape((num_rows, num_cols))        #print(images[i])        offset += struct.calcsize(fmt_image)#        plt.imshow(images[i],'gray')#        plt.pause(0.00001)#        plt.show()    #plt.show()    return imagesdef decode_idx1_ubyte(idx1_ubyte_file):    """    解析idx1文件的通用函数    :param idx1_ubyte_file: idx1文件路径    :return: 数据集    """    # 读取二进制数据    bin_data = open(idx1_ubyte_file, 'rb').read()    # 解析文件头信息,依次为魔数和标签数    offset = 0    fmt_header = '>ii'    magic_number, num_images = struct.unpack_from(fmt_header, bin_data, offset)    print('魔数:%d, 图片数量: %d张' % (magic_number, num_images))    # 解析数据集    offset += struct.calcsize(fmt_header)    fmt_image = '>B'    labels = np.empty(num_images)    for i in range(num_images):        if (i + 1) % 10000 == 0:            print ('已解析 %d' % (i + 1) + '张')        labels[i] = struct.unpack_from(fmt_image, bin_data, offset)[0]        offset += struct.calcsize(fmt_image)    return labelsdef load_train_images(idx_ubyte_file=train_images_idx3_ubyte_file):    """    TRAINING SET IMAGE FILE (train-images-idx3-ubyte):    [offset] [type]          [value]          [description]    0000     32 bit integer  0x00000803(2051) magic number    0004     32 bit integer  60000            number of images    0008     32 bit integer  28               number of rows    0012     32 bit integer  28               number of columns    0016     unsigned byte   ??               pixel    0017     unsigned byte   ??               pixel    ........    xxxx     unsigned byte   ??               pixel    Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).    :param idx_ubyte_file: idx文件路径    :return: n*row*col维np.array对象,n为图片数量    """    return decode_idx3_ubyte(idx_ubyte_file)def load_train_labels(idx_ubyte_file=train_labels_idx1_ubyte_file):    """    TRAINING SET LABEL FILE (train-labels-idx1-ubyte):    [offset] [type]          [value]          [description]    0000     32 bit integer  0x00000801(2049) magic number (MSB first)    0004     32 bit integer  60000            number of items    0008     unsigned byte   ??               label    0009     unsigned byte   ??               label    ........    xxxx     unsigned byte   ??               label    The labels values are 0 to 9.    :param idx_ubyte_file: idx文件路径    :return: n*1维np.array对象,n为图片数量    """    return decode_idx1_ubyte(idx_ubyte_file)def load_test_images(idx_ubyte_file=test_images_idx3_ubyte_file):    """    TEST SET IMAGE FILE (t10k-images-idx3-ubyte):    [offset] [type]          [value]          [description]    0000     32 bit integer  0x00000803(2051) magic number    0004     32 bit integer  10000            number of images    0008     32 bit integer  28               number of rows    0012     32 bit integer  28               number of columns    0016     unsigned byte   ??               pixel    0017     unsigned byte   ??               pixel    ........    xxxx     unsigned byte   ??               pixel    Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).    :param idx_ubyte_file: idx文件路径    :return: n*row*col维np.array对象,n为图片数量    """    return decode_idx3_ubyte(idx_ubyte_file)def load_test_labels(idx_ubyte_file=test_labels_idx1_ubyte_file):    """    TEST SET LABEL FILE (t10k-labels-idx1-ubyte):    [offset] [type]          [value]          [description]    0000     32 bit integer  0x00000801(2049) magic number (MSB first)    0004     32 bit integer  10000            number of items    0008     unsigned byte   ??               label    0009     unsigned byte   ??               label    ........    xxxx     unsigned byte   ??               label    The labels values are 0 to 9.    :param idx_ubyte_file: idx文件路径    :return: n*1维np.array对象,n为图片数量    """    return decode_idx1_ubyte(idx_ubyte_file)
def display_images_and_labels(images, labels):    """Display the first image of each label.&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值