最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python之tensorflow手把手實(shí)例講解斑馬線識(shí)別實(shí)現(xiàn)

 更新時(shí)間:2021年09月22日 15:44:29   作者:鑫xing  
目前智慧城市的發(fā)展,人們生活處處有科技,比如人臉識(shí)別,智慧交通,無人駕駛等前沿的科技產(chǎn)品也都融入了人們生活中;本篇文章帶你從頭開始實(shí)現(xiàn)斑馬線識(shí)別

一,斑馬線的數(shù)據(jù)集

數(shù)據(jù)集的構(gòu)成:

test train
zebra corssing:56 zebra corssing:168
other:54 other:164

二,代碼部分

1.導(dǎo)包

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import numpy as np
import matplotlib.pyplot as plt
import keras

2.數(shù)據(jù)導(dǎo)入

train_dir=r'C:\Users\zx\深度學(xué)習(xí)\Zebra\train'
test_dir=r'C:\Users\zx\深度學(xué)習(xí)\Zebra\test'
train_datagen = ImageDataGenerator(rescale=1/255,
                                   rotation_range=10,  #旋轉(zhuǎn)
                                   horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(train_dir,
                                                    (50,50),
                                                    batch_size=1,
                                                    class_mode='binary',
                                                    shuffle=False)
test_datagen = ImageDataGenerator(rescale=1/255)
test_generator = test_datagen.flow_from_directory(test_dir,
                                                 (50,50),
                                                  batch_size=1,
                                                  class_mode='binary',
                                                  shuffle=False)

3.搭建模型

模型的建立仁者見智,可自己調(diào)節(jié)尋找更好的模型。

model = tf.keras.models.Sequential([
    # 第一層卷積,卷積核為,共16個(gè),輸入為150*150*1
    tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same',input_shape=(50,50,3)),
    tf.keras.layers.MaxPooling2D((2,2)),
    
    # 第二層卷積,卷積核為3*3,共32個(gè),
    tf.keras.layers.Conv2D(32,(3,3),activation='relu'),
    tf.keras.layers.MaxPooling2D((2,2)),
    
    # 第三層卷積,卷積核為3*3,共64個(gè),
    tf.keras.layers.Conv2D(64,(3,3),activation='relu'),
    tf.keras.layers.MaxPooling2D((2,2)),
    
    # 第四層卷積,卷積核為3*3,共128個(gè)
#     tf.keras.layers.Conv2D(128,(3,3),activation='relu'),
#     tf.keras.layers.MaxPooling2D((2,2)),
    
    # 數(shù)據(jù)鋪平
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(32,activation='relu'),
    tf.keras.layers.Dense(16,activation='relu'),
    tf.keras.layers.Dense(2,activation='softmax')
])
print(model.summary())
model.compile(optimize='adam',
             loss=tf.keras.losses.sparse_categorical_crossentropy,
              metrics=['acc'])

4,模型訓(xùn)練

history = model.fit(train_generator,
                    epochs=20,
                    verbose=1)
model.save('./Zebra.h5')

模型訓(xùn)練過程:

在這里插入圖片描述

可以看到我們的模型在20輪的訓(xùn)練后acc從0.63上升到了0.96左右。

5,模型評(píng)估

model.evaluate(test_generator)

在這里插入圖片描述

#可視化
plt.plot(history.history['acc'], label='accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.7, 1])
plt.legend(loc='lower right')
plt.title('acc')
plt.show()

在這里插入圖片描述

6,模型預(yù)測(cè)

雖然我們的模型在訓(xùn)練過程中acc一度達(dá)到0.96,但測(cè)試集才是檢驗(yàn)?zāi)P偷奈ㄒ粯?biāo)準(zhǔn),在model.evaluate(test_generator)中的評(píng)分只有0.91左右,說明我們的模型已經(jīng)能以很高的正確率來完成”斑馬線“與“非斑馬線”的二分類問題了,但我們還是要查看具體是哪些數(shù)據(jù)沒有被模型正確得識(shí)別。

pred=model.predict(test_generator) #獲取test集的輸出
filenames = test_generator.filenames  #獲取test數(shù)據(jù)的文件名

錯(cuò)誤輸出過程:

  • 1,循環(huán)測(cè)試集長(zhǎng)度,通過if語句先判斷others還是zebra,再通過one-hot編碼判斷是否預(yù)測(cè)正確。
  • 2,根據(jù)labels可知others': 0, 'zebra crossing': 1,以此來判斷是否預(yù)測(cè)正確。
  • 3,對(duì) filenames[0]='others\\103.png',進(jìn)行切片處理。
  • 4,找到others的‘s'或 zebra crossing的‘g',使用find()在基礎(chǔ)上+2為正切片的起點(diǎn)(樣本編號(hào)前有'\'符號(hào),故+2才能正確取出編號(hào))。
  • 5,如 :將filenames[i]的值賦給a,a[int(a.find('s')+2):]則表示為 'xx.png'。
  • 6,將取出的樣本編號(hào)與路徑拼接,讀取后作圖。
  • 7,break跳出循環(huán)。
for i in range(len(filenames)):
    if filenames[i][:6]=='others':
        if np.argmax(pred[i]) != 0:
            a=filenames[i]
            plt.figure()
            print('預(yù)測(cè)錯(cuò)誤的圖片:'+a[int(a.find('s')+2):])
            print('錯(cuò)誤識(shí)別為"zebra crossing",正確類型是"others"')
            print('預(yù)測(cè)標(biāo)簽為:'+str(np.argmax(pred[i]))+',真實(shí)標(biāo)簽為:0')
            img = plt.imread('Zebra/test/others/'+a[int(a.find('s')+2):])
            plt.imshow(img)
            plt.title(a[int(a.find('s')+2):])
            plt.grid(False)
            break
    if filenames[i][:6]=='zebra ':
        if np.argmax(pred[i]) != 1:
            b= filenames[i]
            plt.figure()
            print('預(yù)測(cè)錯(cuò)誤的圖片:'+b[int(b.find('g')+2):])
            print('錯(cuò)誤識(shí)別為"others",正確類型是"zebra crossing"')
            print('預(yù)測(cè)標(biāo)簽為:'+str(np.argmax(pred[i]))+',真實(shí)標(biāo)簽為:1')
            img = plt.imread('Zebra/test/zebra crossing/'+b[int(b.find('g')+2):])
            plt.imshow(img)
            plt.title(b[int(b.find('g')+2):])
            plt.grid(False)
            break

在這里插入圖片描述

看到這個(gè)錯(cuò)誤樣本,我猜想可能是因?yàn)榘唏R線的部分只占了圖像的一半左右,所以預(yù)測(cè)錯(cuò)誤了。

這里是我做預(yù)測(cè)判斷的思路,本可以不這么復(fù)雜的可以用test_generator.labels來獲取數(shù)據(jù)的標(biāo)簽,再做判斷。

test_generator.labels

在這里插入圖片描述

上面只輸出了第一個(gè)錯(cuò)誤的樣本,所以接下來我們要看所有錯(cuò)誤預(yù)測(cè)的樣本

sum=0
for i in range(len(filenames)):
    if filenames[i][:6]=='others':
        if np.argmax(pred[i]) != 0:
            a=filenames[i]
            print('預(yù)測(cè)錯(cuò)誤的圖片:'+a[int(a.find('s')+2):]+',錯(cuò)誤識(shí)別為"zebra crossing",正確類型是"others"')
            sum=sum+1
    if filenames[i][:6]=='zebra ':
        if np.argmax(pred[i]) != 1:
            b= filenames[i]
            print('預(yù)測(cè)錯(cuò)誤的圖片:'+b[int(b.find('g')+2):]+',錯(cuò)誤識(shí)別為"others",正確類型是"zebra crossing"')
            sum=sum+1
print('錯(cuò)誤率:'+str(sum/100)+'%')
print('正確率:'+str((10000-sum)/100)+'%')

在這里插入圖片描述

三,分析

在構(gòu)建模型時(shí)我嘗試在最后一層只用一個(gè)神經(jīng)元,用sigmoid激活函數(shù),其他參數(shù)不變,在同樣epochs=20的條件,也能很快收斂,達(dá)到很高的acc,測(cè)試集的評(píng)分也能在0.9左右,但是在最后輸出全部錯(cuò)誤樣本的時(shí)候發(fā)現(xiàn)錯(cuò)誤的樣本遠(yuǎn)超過softmax,可能其中有些參數(shù)我沒有根據(jù)sigmoid來調(diào)整,所以會(huì)有如此高的錯(cuò)誤率,歡迎在評(píng)論區(qū)討論。

到此這篇關(guān)于python之tensorflow手把手實(shí)例講解斑馬線識(shí)別實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python tensorflow 斑馬線識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)感知機(jī)(PLA)算法

    Python實(shí)現(xiàn)感知機(jī)(PLA)算法

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)感知機(jī)(PLA)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python 轉(zhuǎn)義字符詳細(xì)介紹

    Python 轉(zhuǎn)義字符詳細(xì)介紹

    這篇文章主要介紹了Python 轉(zhuǎn)義字符詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解

    Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解

    這篇文章主要為大家介紹了OpenCV中的幾個(gè)形態(tài)學(xué)運(yùn)算,例如:腐蝕&膨脹、開&閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算黑帽運(yùn)算,感興趣的可以了解一下
    2022-04-04
  • Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼

    Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼

    這篇文章主要介紹了Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼,需要的朋友可以參考下
    2016-08-08
  • 詳解Python變量與注釋高級(jí)用法

    詳解Python變量與注釋高級(jí)用法

    變量與注釋是表達(dá)作者思想的基礎(chǔ),他們對(duì)代碼質(zhì)量的貢獻(xiàn)母庸質(zhì)疑,這篇文章主要介紹了Python變量與注釋高級(jí)用法,需要的朋友可以參考下
    2022-08-08
  • python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟

    python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟

    本文主要介紹了python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 如何利用Python動(dòng)態(tài)展示排序算法

    如何利用Python動(dòng)態(tài)展示排序算法

    Python是一種簡(jiǎn)單易學(xué),功能強(qiáng)大的編程語言,它有高效率的高層數(shù)據(jù)結(jié)構(gòu),能夠簡(jiǎn)單、有效地實(shí)現(xiàn)面向?qū)ο缶幊?下面這篇文章主要給大家介紹了關(guān)于如何利用Python動(dòng)態(tài)展示排序算法的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Python獲取圖片像素BGR值并生成純色圖

    Python獲取圖片像素BGR值并生成純色圖

    這篇文章主要介紹了利用Python獲取圖片像素BGR值,并將其生成純色圖。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01
  • Python3如何使用tabulate打印數(shù)據(jù)

    Python3如何使用tabulate打印數(shù)據(jù)

    這篇文章主要介紹了Python3如何使用tabulate打印數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python多線程編程(五):死鎖的形成

    Python多線程編程(五):死鎖的形成

    這篇文章主要介紹了Python多線程編程(五):死鎖的形成,本文講解了死鎖的概念、死鎖示例、避免死鎖的方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

芦溪县| 江陵县| 苍梧县| 正宁县| 双峰县| 嘉黎县| 大埔区| 三门峡市| 霍林郭勒市| 咸阳市| 清丰县| 夏邑县| 龙口市| 长宁区| 伊通| 都安| 博白县| 克东县| 武鸣县| 宾川县| 句容市| 吉林省| 三门峡市| 阜宁县| 安徽省| 江华| 车险| 武陟县| 利津县| 肇州县| 滦平县| 蒲城县| 满城县| 东兰县| 喀什市| 沭阳县| 万山特区| 息烽县| 腾冲县| 文山县| 靖安县|