<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你使用CNN進(jìn)行交通標(biāo)志識(shí)別(已開源)

          共 7394字,需瀏覽 15分鐘

           ·

          2022-12-30 21:51

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          在本文中,使用Python編程語言和庫Keras和OpenCV建立CNN模型,成功地對(duì)交通標(biāo)志分類器進(jìn)行分類,準(zhǔn)確率達(dá)96%。開發(fā)了一款交通標(biāo)志識(shí)別應(yīng)用程序,該應(yīng)用程序具有圖片識(shí)別和網(wǎng)絡(luò)攝像頭實(shí)時(shí)識(shí)別兩種工作方式。

          本文的GitHub:https://github.com/Daulettulegenov/TSR_CNN

          提供一個(gè)開源的交通標(biāo)志的數(shù)據(jù)集,希望能夠幫助到各位小伙伴:http://www.nlpr.ia.ac.cn/pal/trafficdata/recognition.html

          近年來,計(jì)算機(jī)視覺是現(xiàn)代技術(shù)發(fā)展的一個(gè)方向。這個(gè)方向的主要任務(wù)是對(duì)照片或攝像機(jī)中的物體進(jìn)行分類。在通常的問題中,使用基于案例的機(jī)器學(xué)習(xí)方法來解決。本文介紹了利用機(jī)器學(xué)習(xí)算法進(jìn)行計(jì)算機(jī)視覺在交通標(biāo)志識(shí)別中的應(yīng)用。路標(biāo)是一種外形固定的扁平人造物體。道路標(biāo)志識(shí)別算法應(yīng)用于兩個(gè)實(shí)際問題。第一個(gè)任務(wù)是控制自動(dòng)駕駛汽車。無人駕駛車輛控制系統(tǒng)的一個(gè)關(guān)鍵組成部分是物體識(shí)別。識(shí)別的對(duì)象主要是行人、其他車輛、交通燈和路標(biāo)。第二個(gè)使用交通標(biāo)志識(shí)別的任務(wù)是基于安裝在汽車上的DVRs的數(shù)據(jù)自動(dòng)繪制地圖。接下來將詳細(xì)介紹如果搭建能夠識(shí)別交通標(biāo)志的CNN網(wǎng)絡(luò)。

          導(dǎo)入必要的庫

          # data analysis and wranglingimport numpy as npimport pandas as pdimport osimport random
          # visualizationimport matplotlib.pyplot as pltfrom PIL import Image# machine learningfrom keras.models import Sequentialfrom keras.layers import Densefrom tensorflow.keras.optimizers import Adamfrom keras.utils.np_utils import to_categoricalfrom keras.layers import Dropout, Flattenfrom keras.layers.convolutional import Conv2D, MaxPooling2Dimport cv2from sklearn.model_selection import train_test_splitfrom keras.preprocessing.image import ImageDataGenerator


          加載數(shù)據(jù)

          Python Pandas包幫助我們處理數(shù)據(jù)集。我們首先將訓(xùn)練和測試數(shù)據(jù)集獲取到Pandas DataFrames中。我們還將這些數(shù)據(jù)集組合起來,在兩個(gè)數(shù)據(jù)集上一起運(yùn)行某些操作。

          # Importing of the Imagescount = 0images = []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 +=1print(" ")images = np.array(images)classNo = np.array(classNo)

          為了對(duì)已實(shí)現(xiàn)的系統(tǒng)進(jìn)行適當(dāng)?shù)挠?xùn)練和評(píng)估,我們將數(shù)據(jù)集分為3組。數(shù)據(jù)集分割:20%測試集,20%驗(yàn)證數(shù)據(jù)集,剩余的數(shù)據(jù)用作訓(xùn)練數(shù)據(jù)集。

          # Split DataX_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)

          該數(shù)據(jù)集包含34799張圖像,由43種類型的路標(biāo)組成。這些包括基本的道路標(biāo)志,如限速、停車標(biāo)志、讓路、優(yōu)先道路、“禁止進(jìn)入”、“行人”等。

          # DISPLAY SOME SAMPLES IMAGES OF ALL THE CLASSESnum_of_samples = []cols = 5num_classes = noOfClassesfig, 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))


          # DISPLAY A BAR CHART SHOWING NO OF SAMPLES FOR EACH CATEGORYprint(num_of_samples)plt.figure(figsize=(12, 4))plt.bar(range(0, num_classes), num_of_samples)plt.title("Distribution of the training dataset")plt.xlabel("Class number")plt.ylabel("Number of images")plt.show()


          數(shù)據(jù)集中的類之間存在顯著的不平衡。有些類的圖像少于200張,而其他類的圖像超過1000張。這意味著我們的模型可能偏向于過度代表的類別,特別是當(dāng)它對(duì)自己的預(yù)測不自信時(shí)。為了解決這個(gè)問題,我們使用了現(xiàn)有的圖像轉(zhuǎn)換技術(shù)。

          為了更好的分類,數(shù)據(jù)集中的所有圖像都被轉(zhuǎn)換為灰度圖像

          # PREPROCESSING THE IMAGESdef 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 IMAGESX_validation=np.array(list(map(preprocessing,X_validation)))X_test=np.array(list(map(preprocessing,X_test)))


          數(shù)據(jù)增強(qiáng)是對(duì)原始數(shù)據(jù)集進(jìn)行增強(qiáng)的一種方法。數(shù)據(jù)越多,結(jié)果越高,這是機(jī)器學(xué)習(xí)的基本規(guī)律。

          #AUGMENTATAION OF IMAGES: TO MAKEIT MORE GENERICdataGen= ImageDataGenerator(width_shift_range=0.1,   # 0.1 = 10%     IF MORE THAN 1 E.G 10 THEN IT REFFERS TO NO. OF  PIXELS EG 10 PIXELS                            height_shift_range=0.1,                            zoom_range=0.2,  # 0.2 MEANS CAN GO FROM 0.8 TO 1.2                            shear_range=0.1,  # MAGNITUDE OF SHEAR ANGLE                            rotation_range=10)  # DEGREESdataGen.fit(X_train)batches= dataGen.flow(X_train,y_train,batch_size=20)  # REQUESTING DATA GENRATOR TO GENERATE IMAGES  BATCH SIZE = NO. OF IMAGES CREAED EACH TIME ITS CALLEDX_batch,y_batch = next(batches)

          熱編碼用于我們的分類值y_train、y_test、y_validation。

          y_train = to_categorical(y_train,noOfClasses)y_validation = to_categorical(y_validation,noOfClasses)y_test = to_categorical(y_test,noOfClasses)

          使用Keras庫創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò)。下面是創(chuàng)建模型結(jié)構(gòu)的代碼:

          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
          # TRAINmodel = 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個(gè)卷積層和1個(gè)全連接層。首先,在模型中添加帶有32個(gè)濾波器的卷積層。接下來,我們添加一個(gè)帶有64個(gè)過濾器的卷積層。在每一層的后面,增加一個(gè)窗口大小為2 × 2的最大拉層。還添加了系數(shù)為0.25和0.5的Dropout層,以便網(wǎng)絡(luò)不會(huì)再訓(xùn)練。在最后幾行中,我們添加了一個(gè)稠密的稠密層,該層使用softmax激活函數(shù)在43個(gè)類中執(zhí)行分類。

          在最后一個(gè)epoch結(jié)束時(shí),我們得到以下值:loss = 0.0523;準(zhǔn)確度= 0.9832;Val_loss = 0.0200;Val_accuracy = 0.9943,這個(gè)結(jié)果看起來非常好。之后繪制我們的訓(xùn)練過程

          #PLOTplt.figure(1)plt.plot(history.history['loss'])plt.plot(history.history['val_loss'])plt.legend(['training','validation'])plt.title('loss')plt.xlabel('epoch')plt.figure(2)plt.plot(history.history['accuracy'])plt.plot(history.history['val_accuracy'])plt.legend(['training','validation'])plt.title('Acurracy')plt.xlabel('epoch')plt.show()score =model.evaluate(X_test,y_test,verbose=0)print('Test Score:',score[0])print('Test Accuracy:',score[1])



          #testing accuracy on test datasetfrom sklearn.metrics import accuracy_score
          y_test = pd.read_csv('Test.csv')labels = y_test["ClassId"].valuesimgs = 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)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))

          我們在測試數(shù)據(jù)集中測試了構(gòu)建的模型,得到了96%的準(zhǔn)確性。

          使用內(nèi)置函數(shù)model_name.save(),我們可以保存一個(gè)模型以供以后使用。該功能將模型保存在本地的.p文件中,這樣我們就不必一遍又一遍地重新訓(xùn)練模型而浪費(fèi)大量的時(shí)間。

          model.save("CNN_model_3.h5")

          接下來給大家看一些識(shí)別的結(jié)果

          好消息!

          小白學(xué)視覺知識(shí)星球

          開始面向外開放啦??????




          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕 亚洲 日本 欧美 | 欧美少妇坐爱视频 | 国产精品色婷婷五月视频 | 高清无码麻豆 | 青青草宗和视频 |