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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

深度学习100例 - 卷积神经网络(CNN)实现车牌识别 | 第15天

發布時間:2025/4/5 卷积神经网络 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习100例 - 卷积神经网络(CNN)实现车牌识别 | 第15天 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 🔗 運行環境:python3
  • 🚩 作者:K同學啊
  • 🥇 選自專欄:《深度學習100例》
  • 🔥 推薦專欄:《新手入門深度學習》
  • 📚 精選專欄:《Matplotlib教程》
  • 🧿 優秀專欄:《Python入門100題》

文章目錄

  • 一、前期工作
    • 1.設置GPU
    • 2.導入數據
    • 3.數據可視化
    • 4.標簽數字化
  • 二、構建一個tf.data.Dataset
    • 1.預處理函數
    • 2.加載數據
    • 3.配置數據
  • 三、搭建網絡模型
  • 四、設置動態學習率
  • 五、編譯
  • 六、訓練
  • 七、模型評估
  • 八、保存和加載模型
  • 九、預測

一、前期工作

🚩 我的環境:

  • 語言環境:Python3.6.5
  • 編譯器:jupyter notebook
  • 深度學習環境:TensorFlow2.4.1
  • 數據和代碼:📌【傳送門】

🚩 來自專欄:《深度學習100例》

🚩 往期精彩:

  • 深度學習100例-卷積神經網絡(CNN)實現mnist手寫數字識別 | 第1天
  • 深度學習100例-卷積神經網絡(CNN)彩色圖片分類 | 第2天
  • 深度學習100例-卷積神經網絡(CNN)服裝圖像分類 | 第3天
  • 深度學習100例-卷積神經網絡(CNN)花朵識別 | 第4天
  • 深度學習100例-卷積神經網絡(CNN)天氣識別 | 第5天
  • 深度學習100例-卷積神經網絡(VGG-16)識別海賊王草帽一伙 | 第6天
  • 深度學習100例-卷積神經網絡(VGG-19)識別靈籠中的人物 | 第7天
  • 深度學習100例 -卷積神經網絡(ResNet-50)鳥類識別 | 第8天
  • 深度學習100例-循環神經網絡(RNN)實現股票預測 | 第9天
  • 深度學習100例-循環神經網絡(LSTM)實現股票預測 | 第10天
  • 深度學習100例-卷積神經網絡(AlexNet)手把手教學 | 第11天
  • 手把手教你用 CNN 識別驗證碼 - 深度學習100例 | 第12天
  • 深度學習100例 - 卷積神經網絡(Inception V3)識別手語 | 第13天
  • 這也太強了吧,我用它識別交通標志,準確率竟然高達97.9% | 第14天
  • 如果你還是一名小白,可以看看我這個專門為你寫的專欄:《小白入門深度學習》,幫助零基礎的你入門深度學習。

    1.設置GPU

    如果使用的是CPU可以注釋掉這部分的代碼,不影響運行。

    import tensorflow as tfgpus = tf.config.list_physical_devices("GPU")if gpus:tf.config.experimental.set_memory_growth(gpus[0], True) #設置GPU顯存用量按需使用tf.config.set_visible_devices([gpus[0]],"GPU")

    2.導入數據

    import matplotlib.pyplot as plt # 支持中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號import os,PIL,random,pathlib# 設置隨機種子盡可能使結果可以重現 import numpy as np np.random.seed(1)# 設置隨機種子盡可能使結果可以重現 import tensorflow as tf tf.random.set_seed(1) data_dir = "D:/jupyter notebook/DL-100-days/datasets/015_licence_plate" data_dir = pathlib.Path(data_dir)pictures_paths = list(data_dir.glob('*')) pictures_paths = [str(path) for path in pictures_paths] pictures_paths[:3] ['D:\\jupyter notebook\\DL-100-days\\datasets\\015_licence_plate\\000000000_藏WP66B0.jpg','D:\\jupyter notebook\\DL-100-days\\datasets\\015_licence_plate\\000000001_津D8Z15T.jpg','D:\\jupyter notebook\\DL-100-days\\datasets\\015_licence_plate\\000000002_陜Z813VB.jpg'] image_count = len(list(pictures_paths))print("圖片總數為:",image_count) 圖片總數為: 619 # 獲取數據標簽 all_label_names = [path.split("_")[-1].split(".")[0] for path in pictures_paths] all_label_names[:3] ['藏WP66B0', '津D8Z15T', '陜Z813VB']

    3.數據可視化

    plt.figure(figsize=(10,5)) plt.suptitle("數據示例",fontsize=15)for i in range(20):plt.subplot(5,4,i+1)plt.xticks([])plt.yticks([])plt.grid(False)# 顯示圖片images = plt.imread(pictures_paths[i])plt.imshow(images)# 顯示標簽plt.xlabel(all_label_names[i],fontsize=13)plt.show()

    4.標簽數字化

    char_enum = ["京","滬","津","渝","冀","晉","蒙","遼","吉","黑","蘇","浙","皖","閩","贛","魯",\"豫","鄂","湘","粵","桂","瓊","川","貴","云","藏","陜","甘","青","寧","新","軍","使"]number = [str(i) for i in range(0, 10)] # 0 到 9 的數字 alphabet = [chr(i) for i in range(65, 91)] # A 到 Z 的字母char_set = char_enum + number + alphabet char_set_len = len(char_set) label_name_len = len(all_label_names[0])# 將字符串數字化 def text2vec(text):vector = np.zeros([label_name_len, char_set_len])for i, c in enumerate(text):idx = char_set.index(c)vector[i][idx] = 1.0return vectorall_labels = [text2vec(i) for i in all_label_names]

    二、構建一個tf.data.Dataset

    1.預處理函數

    def preprocess_image(image):image = tf.image.decode_jpeg(image, channels=1)image = tf.image.resize(image, [50, 200])return image/255.0def load_and_preprocess_image(path):image = tf.io.read_file(path)return preprocess_image(image)

    2.加載數據

    構建 tf.data.Dataset 最簡單的方法就是使用 from_tensor_slices 方法。

    AUTOTUNE = tf.data.experimental.AUTOTUNEpath_ds = tf.data.Dataset.from_tensor_slices(pictures_paths) image_ds = path_ds.map(load_and_preprocess_image, num_parallel_calls=AUTOTUNE) label_ds = tf.data.Dataset.from_tensor_slices(all_labels)image_label_ds = tf.data.Dataset.zip((image_ds, label_ds)) image_label_ds <ShuffleDataset shapes: ((50, 200, 1), (7, 69)), types: (tf.float32, tf.float64)> train_ds = image_label_ds.take(5000).shuffle(5000) # 前5000個batch val_ds = image_label_ds.skip(5000).shuffle(1000) # 跳過前5000,選取后面的

    3.配置數據

    先復習一下prefetch()函數。prefetch()功能詳細介紹:CPU 正在準備數據時,加速器處于空閑狀態。相反,當加速器正在訓練模型時,CPU 處于空閑狀態。因此,訓練所用的時間是 CPU 預處理時間和加速器訓練時間的總和。prefetch()將訓練步驟的預處理和模型執行過程重疊到一起。當加速器正在執行第 N 個訓練步時,CPU 正在準備第 N+1 步的數據。這樣做不僅可以最大限度地縮短訓練的單步用時(而不是總用時),而且可以縮短提取和轉換數據所需的時間。如果不使用prefetch(),CPU 和 GPU/TPU 在大部分時間都處于空閑狀態:

    使用prefetch()可顯著減少空閑時間:

    BATCH_SIZE = 16train_ds = train_ds.batch(BATCH_SIZE) train_ds = train_ds.prefetch(buffer_size=AUTOTUNE)val_ds = val_ds.batch(BATCH_SIZE) val_ds = val_ds.prefetch(buffer_size=AUTOTUNE) val_ds <PrefetchDataset shapes: ((None, 50, 200, 1), (None, 7, 69)), types: (tf.float32, tf.float64)>

    三、搭建網絡模型

    目前這里主要是帶大家跑通代碼、整理一下思路,大家可以自行優化網絡結構、調整模型參數。后續我也會針對性的出一些調優的案例的。

    from tensorflow.keras import datasets, layers, modelsmodel = models.Sequential([layers.Conv2D(32, (3, 3), activation='relu', input_shape=(50, 200, 1)),#卷積層1,卷積核3*3layers.MaxPooling2D((2, 2)), #池化層1,2*2采樣layers.Conv2D(64, (3, 3), activation='relu'), #卷積層2,卷積核3*3layers.MaxPooling2D((2, 2)), #池化層2,2*2采樣layers.Flatten(), #Flatten層,連接卷積層與全連接層 # layers.Dense(1000, activation='relu'), #全連接層,特征進一步提取layers.Dense(1000, activation='relu'), #全連接層,特征進一步提取 # layers.Dropout(0.2), layers.Dense(label_name_len * char_set_len),layers.Reshape([label_name_len, char_set_len]),layers.Softmax() #輸出層,輸出預期結果 ]) # 打印網絡結構 model.summary() Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 48, 198, 32) 320 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 24, 99, 32) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 22, 97, 64) 18496 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 11, 48, 64) 0 _________________________________________________________________ flatten (Flatten) (None, 33792) 0 _________________________________________________________________ dense (Dense) (None, 1000) 33793000 _________________________________________________________________ dense_1 (Dense) (None, 483) 483483 _________________________________________________________________ reshape (Reshape) (None, 7, 69) 0 _________________________________________________________________ softmax (Softmax) (None, 7, 69) 0 ================================================================= Total params: 34,295,299 Trainable params: 34,295,299 Non-trainable params: 0 _________________________________________________________________

    四、設置動態學習率

    這里先羅列一下學習率大與學習率小的優缺點。

    • 學習率大

      • 優點:1、加快學習速率。2、有助于跳出局部最優值。
      • 缺點:1、導致模型訓練不收斂。2、單單使用大學習率容易導致模型不精確。
    • 學習率小

      • 優點:1、有助于模型收斂、模型細化。2、提高模型精度。
      • 缺點:1、很難跳出局部最優值。2、收斂緩慢。

    注意:這里設置的動態學習率為:指數衰減型(ExponentialDecay)。在每一個epoch開始前,學習率(learning_rate)都將會重置為初始學習率(initial_learning_rate),然后再重新開始衰減。計算公式如下:

    learning_rate = initial_learning_rate * decay_rate ^ (step / decay_steps)

    # 設置初始學習率 initial_learning_rate = 1e-3lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate, decay_steps=20, # 敲黑板!!!這里是指 steps,不是指epochsdecay_rate=0.96, # lr經過一次衰減就會變成 decay_rate*lrstaircase=True)# 將指數衰減學習率送入優化器 optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)

    五、編譯

    model.compile(optimizer=optimizer,loss='categorical_crossentropy',metrics=['accuracy'])

    六、訓練

    epochs = 50history = model.fit(train_ds,validation_data=val_ds,epochs=epochs )

    七、模型評估

    acc = history.history['accuracy'] val_acc = history.history['val_accuracy']loss = history.history['loss'] val_loss = history.history['val_loss']epochs_range = range(epochs)plt.figure(figsize=(12, 4)) plt.subplot(1, 2, 1)plt.plot(epochs_range, acc, label='Training Accuracy') plt.plot(epochs_range, val_acc, label='Validation Accuracy') plt.legend(loc='lower right') plt.title('Training and Validation Accuracy')plt.subplot(1, 2, 2) plt.plot(epochs_range, loss, label='Training Loss') plt.plot(epochs_range, val_loss, label='Validation Loss') plt.legend(loc='upper right') plt.title('Training and Validation Loss') plt.show()

    八、保存和加載模型

    # 保存模型 model.save('model/15_model.h5') # 加載模型 new_model = tf.keras.models.load_model('model/15_model.h5')

    九、預測

    def vec2text(vec):"""還原標簽(向量->字符串)"""text = []for i, c in enumerate(vec):text.append(char_set[c])return "".join(text)plt.figure(figsize=(10, 8)) # 圖形的寬為10高為8for images, labels in val_ds.take(1):for i in range(6):ax = plt.subplot(5, 2, i + 1) # 顯示圖片plt.imshow(images[i])# 需要給圖片增加一個維度img_array = tf.expand_dims(images[i], 0) # 使用模型預測驗證碼predictions = model.predict(img_array)plt.title(vec2text(np.argmax(predictions, axis=2)[0]),fontsize=15)plt.axis("off")


    往期精彩:

  • 深度學習100例-卷積神經網絡(CNN)實現mnist手寫數字識別 | 第1天
  • 深度學習100例-卷積神經網絡(CNN)彩色圖片分類 | 第2天
  • 深度學習100例-卷積神經網絡(CNN)服裝圖像分類 | 第3天
  • 深度學習100例-卷積神經網絡(CNN)花朵識別 | 第4天
  • 深度學習100例-卷積神經網絡(CNN)天氣識別 | 第5天
  • 深度學習100例-卷積神經網絡(VGG-16)識別海賊王草帽一伙 | 第6天
  • 深度學習100例-卷積神經網絡(VGG-19)識別靈籠中的人物 | 第7天
  • 深度學習100例 -卷積神經網絡(ResNet-50)鳥類識別 | 第8天
  • 深度學習100例-循環神經網絡(RNN)實現股票預測 | 第9天
  • 深度學習100例-循環神經網絡(LSTM)實現股票預測 | 第10天
  • 深度學習100例-卷積神經網絡(AlexNet)手把手教學 | 第11天
  • 手把手教你用 CNN 識別驗證碼 - 深度學習100例 | 第12天
  • 深度學習100例 - 卷積神經網絡(Inception V3)識別手語 | 第13天
  • 這也太強了吧,我用它識別交通標志,準確率竟然高達97.9% | 第14天
  • 🚀 來自專欄:《深度學習100例》

    關注、點贊、收藏,送我上熱搜,謝謝大家啦!


    最后再送大家一本,幫助大家拿到 BAT 等一線大廠 offer 的數據結構刷題筆記,是谷歌和阿里的大佬寫的,對于算法薄弱或者需要提高的同學都十分受用(提取碼:9go2 ):

    谷歌和阿里大佬的Leetcode刷題筆記

    以及我整理的7K+本開源電子書,總有一本可以幫到你 💖(提取碼:4eg0)

    7K+本開源電子書

    總結

    以上是生活随笔為你收集整理的深度学习100例 - 卷积神经网络(CNN)实现车牌识别 | 第15天的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 日本zzjj | 黄网在线播放 | 在线超碰 | 中文字幕第12页 | 久久国产露脸精品国产 | www.夜夜操| 国产精品v欧美精品v日韩精品 | 欧美无吗| 色玖玖| 另类色综合 | 深夜福利免费视频 | 国产在线一级片 | 国产第一页在线观看 | 麻豆专区 | 人人妻人人爽人人澡人人精品 | 影音先锋欧美资源 | 国产性色视频 | 91丝袜呻吟高潮美腿白嫩在线观看 | 亚洲欧美乱综合图片区小说区 | 女同性做爰三级 | av手机免费在线观看 | 一级香蕉视频在线观看 | 久久狠狠高潮亚洲精品 | 一本一道av | 香蕉视频网页版 | 用舌头去添高潮无码视频 | 亚洲爱v| 美女又大又黄 | 91久久久久久久久久久久久 | 91精品免费在线观看 | 香蕉私人影院 | 久久精品在线播放 | 一个人看的毛片 | 99视频热| 亚洲第一福利网站 | 人日人视频 | 亚洲精品久久久久久国产精华液 | 国产伦精品一区二区三区视频我 | 丰满人妻一区二区三区53号 | 97超碰福利 | 伊人久久成人 | 青草操 | 91精选 | 成人欧美视频在线观看 | 成人在线午夜 | 久久99深爱久久99精品 | 中文字幕在线播放日韩 | 一级黄色在线 | 一区不卡在线 | 亚洲综合影视 | 日韩欧美字幕 | 性欧美极品另类 | 亚洲少妇网站 | 中文在线最新版天堂 | www插插插 | 一级片一区二区三区 | 欧美日韩国产激情 | 内地级a艳片高清免费播放 91在线精品一区二区 | av在线播放一区二区三区 | 日韩天堂网 | 中文视频一区二区 | 国产精品精品国产 | 亚洲第一精品在线 | 国内自拍在线观看 | 在线视频观看免费 | 欧美无马 | 精品动漫一区二区三区在线观看 | 天堂一级片| 亚洲日本精品一区 | 日韩成人黄色 | 亚洲综合大片69999 | videos另类灌满极品另类 | 久久久999视频 | 大地资源高清播放在线观看 | 国模在线 | 亚洲经典在线 | 99日精品 | 日韩精品 欧美 | 久久国产精品综合 | 麻豆传媒在线看 | 欧美日韩一区视频 | 亚洲国产日韩一区二区 | 天天拍天天色 | 日日好av| ⅹxxxxhd亚洲日本hd老师 | 欧美黄色片 | 美女福利一区 | 久久视频免费观看 | 青青99| 欧美在线一级片 | 波多一区二区 | 久艹在线视频 | 特级西西444www大胆免费看 | 久久av免费看 | av男人的天堂网 | 韩国电影一区二区三区 | 丁香花高清在线 | 欧美视频一区二区在线观看 | 国产亚洲av片在线观看18女人 |