自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Teachable Machine 構(gòu)建圖像識(shí)別模型

開發(fā) 后端 機(jī)器學(xué)習(xí)
在本文中,我探索了 Teachable Machine,這是 Google 提供的一款基于網(wǎng)頁(yè)的工具,使用戶無(wú)需編程技能即可創(chuàng)建機(jī)器學(xué)習(xí)模型。

Teachable Machine 是由 Google 開發(fā)的一款基于網(wǎng)頁(yè)的工具,允許任何人在不需要深入了解編程或機(jī)器學(xué)習(xí)的情況下創(chuàng)建機(jī)器學(xué)習(xí)模型。它的設(shè)計(jì)易于使用且用戶友好,適合初學(xué)者、教育工作者,甚至是想要探索人工智能概念的孩子們。

Teachable Machine 支持的模型

Teachable Machine 支持以下機(jī)器學(xué)習(xí)模型:

  • 圖像分類 — 識(shí)別圖像中的物體
  • 音頻分類 — 識(shí)別聲音、語(yǔ)音或其他音頻輸入
  • 姿態(tài)分類 — 識(shí)別人體姿態(tài)或動(dòng)作

要訓(xùn)練模型,您需要為 Teachable Machine 提供自己的數(shù)據(jù)集,例如圖像或錄音?;谶@些數(shù)據(jù),Teachable Machine 會(huì)自動(dòng)訓(xùn)練模型。

模型訓(xùn)練完成后,您可以直接在 Teachable Machine 的網(wǎng)頁(yè)界面中進(jìn)行測(cè)試。此外,您還可以選擇下載訓(xùn)練好的模型,并將其集成到自己的應(yīng)用程序中以供編程使用。訓(xùn)練好的模型可以用于各種類型的應(yīng)用程序,包括:

  • 網(wǎng)頁(yè)應(yīng)用程序(通過 TensorFlow.js)
  • 基于 Python 的桌面應(yīng)用程序(通過 TensorFlow)
  • 移動(dòng)應(yīng)用程序(通過 TensorFlow Lite)

開始使用

要開始使用 Teachable Machine,請(qǐng)?jiān)L問 https://teachablemachine.withgoogle.com/。您將看到以下界面:

點(diǎn)擊Get Started按鈕,您將看到以下屏幕:

在本文中,我將使用 Teachable Machine 訓(xùn)練一個(gè)模型來(lái)識(shí)別水果。具體來(lái)說(shuō),我的模型將幫助我們區(qū)分香蕉和草莓。選擇Image Project,您將看到以下界面:

選擇Standard image model項(xiàng)目,您將看到以下屏幕:

定義類別

在任何分類任務(wù)中,第一步是定義您想要識(shí)別的類別。在本例中,我們將專注于區(qū)分香蕉和草莓的圖像,創(chuàng)建兩個(gè)類別:**Banana** 和 **Strawberry**。要設(shè)置此內(nèi)容,只需雙擊默認(rèn)標(biāo)簽“Class 1”和“Class 2”,并將它們重命名為您的類別:

請(qǐng)注意,您可以通過點(diǎn)擊屏幕底部的 **Add a class** 按鈕來(lái)創(chuàng)建更多類別:

為每個(gè)類別上傳圖像

定義類別后,下一步是為每個(gè)類別添加圖像。您可以直接使用網(wǎng)絡(luò)攝像頭拍攝圖像,或者為了方便起見,上傳現(xiàn)有的圖像。

點(diǎn)擊Upload按鈕:

您可以將幾張圖像拖放到下面的框中:

在我的示例中,我已經(jīng)將一系列圖像拖放到兩個(gè)類別中:

訓(xùn)練模型

為每個(gè)類別添加圖像后,就可以開始訓(xùn)練模型了。點(diǎn)擊 **Train Model** 按鈕:

模型訓(xùn)練完成后,您應(yīng)該能夠看到類似以下內(nèi)容:

測(cè)試模型

打開Input選項(xiàng),您應(yīng)該能夠通過直接將圖像拖放到下面的框中來(lái)測(cè)試模型:

在上面的示例中,模型以 100% 的置信度檢測(cè)到圖像是草莓。您還可以使用網(wǎng)絡(luò)攝像頭測(cè)試模型。例如,在下圖中,我使用手機(jī)顯示了一串香蕉的圖片,模型準(zhǔn)確地預(yù)測(cè)為“Banana”:

導(dǎo)出模型

雖然在網(wǎng)頁(yè)上直接測(cè)試模型很方便,但將其集成到自己的應(yīng)用程序中則更具吸引力。幸運(yùn)的是,您可以將訓(xùn)練好的模型導(dǎo)出為獨(dú)立文件,從而在應(yīng)用程序中以編程方式使用它。要導(dǎo)出模型,請(qǐng)點(diǎn)擊Export Model按鈕:

模型可以導(dǎo)出為:

  • TensorFlow.js(用于網(wǎng)頁(yè)應(yīng)用程序)
  • TensorFlow(用于基于 Python 的應(yīng)用程序)
  • TensorFlow Lite(用于移動(dòng)應(yīng)用程序)

選擇您想要的模型類型,然后點(diǎn)擊 **Download my model** 按鈕。在本例中,我將下載 TensorFlow 模型。一個(gè)名為 `converted_keras.zip` 的文件將被下載。解壓縮該文件,您將看到其中包含兩個(gè)文件:

  • keras_model.h5 — 訓(xùn)練好的模型
  • labels.txt — 包含類別列表的文件,例如 Banana 和 Strawberry

Teachable Machine 還提供了如何使用訓(xùn)練好的模型進(jìn)行編程的示例代碼。我們將在下一節(jié)中介紹這一點(diǎn)。

使用 Python 使用導(dǎo)出的模型

訓(xùn)練好的模型導(dǎo)出并下載后,現(xiàn)在是時(shí)候看看如何在 Python 應(yīng)用程序中使用它了。在嘗試之前,請(qǐng)注意以下幾點(diǎn):

  • Teachable Machine 生成的示例代碼基于較舊版本的 TensorFlow。因此,您需要確保您的機(jī)器使用較舊版本的 TensorFlow。
  • 由于使用了較舊版本的 TensorFlow,您還需要將 Python 的版本限制為較早的版本。

嘗試示例代碼的最佳方法是創(chuàng)建一個(gè)虛擬環(huán)境。您可以通過運(yùn)行以下命令來(lái)創(chuàng)建名為 `tf_old` 的虛擬環(huán)境,使用 Python 3.11 并安裝必要的 Anaconda 包:

$ conda create -n tf_old python=3.11 anaconda

虛擬環(huán)境創(chuàng)建完成后,激活它并啟動(dòng) Jupyter Notebook:

$ conda activate tf_old
$ jupyter notebook

Jupyter Notebook 啟動(dòng)后,您可以創(chuàng)建一個(gè)新的筆記本并開始編寫代碼。確保 `keras_model.h5` 和 `labels.txt` 文件與您的 Jupyter Notebook 位于同一文件夾中。

首先,如前所述,您需要安裝較舊版本的 TensorFlow。在我的測(cè)試中,TensorFlow 2.13.0 版本與 Python 3.11 中的示例代碼兼容。為此,請(qǐng)使用以下命令安裝 TensorFlow 和 Pillow 包:

!pip install tensorflow==2.13.0 
!pip install pillow

現(xiàn)在,您可以使用以下代碼片段加載訓(xùn)練好的模型并加載名為 `fruit1.jpg` 的測(cè)試圖像:

from keras.models import load_model  # TensorFlow 是 Keras 工作的基礎(chǔ)
from PIL import Image, ImageOps      # 安裝 pillow 而不是 PIL
import numpy as np


# 禁用科學(xué)計(jì)數(shù)法以提高可讀性
np.set_printoptions(suppress=True)


# 加載模型
model = load_model("keras_Model.h5", compile=False)


# 加載標(biāo)簽
class_names = open("labels.txt", "r").readlines()


# 創(chuàng)建形狀正確的數(shù)組以輸入到 Keras 模型中
# 數(shù)組中可以放入的圖像數(shù)量由形狀元組中的第一個(gè)位置決定,本例中為 1
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)


# 將此路徑替換為您的圖像路徑
image = Image.open("fruit1.jpg").convert("RGB")


# 將圖像調(diào)整為至少 224x224,然后從中心裁剪
size = (224, 224)
image = ImageOps.fit(image, size, Image.Resampling.LANCZOS)


# 將圖像轉(zhuǎn)換為 numpy 數(shù)組
image_array = np.asarray(image)


# 歸一化圖像
normalized_image_array = (image_array.astype(np.float32) / 127.5) - 1


# 將圖像加載到數(shù)組中
data[0] = normalized_image_array


# 模型預(yù)測(cè)
prediction = model.predict(data)
index = np.argmax(prediction)
class_name = class_names[index]
confidence_score = prediction[0][index]


# 打印預(yù)測(cè)結(jié)果和置信度分?jǐn)?shù)
print("Class:", class_name[2:], end="")
print("Confidence Score:", confidence_score)

`fruit1.jpg` 的輸出如下:

1/1 [==============================] - 0s 485ms/step
Class: Strawberry
Confidence Score: 0.9998473

如果您遇到以下錯(cuò)誤:

TypeError: Error when deserializing class 'DepthwiseConv2D' using config={'name': 'expanded_conv_depthwise', 'trainable': True, 'dtype': 'float32', 'kernel_size': [3, 3], 'strides': [1, 1], 'padding': 'same', 'data_format': 'channels_last', 'dilation_rate': [1, 1], 'groups': 1, 'activation': 'linear', 'use_bias': False, 'bias_initializer': {'class_name': 'Zeros', 'config': {}}, 'bias_regularizer': None, 'activity_regularizer': None, 'bias_constraint': None, 'depth_multiplier': 1, 'depthwise_initializer': {'class_name': 'VarianceScaling', 'config': {'scale': 1, 'mode': 'fan_avg', 'distribution': 'uniform', 'seed': None}}, 'depthwise_regularizer': None, 'depthwise_constraint': None}.
Exception encountered: Unrecognized keyword arguments passed to DepthwiseConv2D: {'groups': 1}

這很可能意味著您正在使用較新版本的 TensorFlow,該版本與示例代碼不兼容。

構(gòu)建網(wǎng)頁(yè)前端

與其每次測(cè)試新圖像時(shí)都修改代碼,不如通過使用 Gradio 包裝代碼來(lái)簡(jiǎn)化流程。Gradio 提供了一個(gè)直觀的基于網(wǎng)頁(yè)的界面,允許用戶上傳圖像并查看預(yù)測(cè)結(jié)果,而無(wú)需修改底層代碼。首先,安裝 Gradio 包:

!pip install gradio

以下代碼片段使用 Gradio 創(chuàng)建了一個(gè)網(wǎng)頁(yè)前端,允許用戶上傳圖像并實(shí)時(shí)從訓(xùn)練好的模型中獲取預(yù)測(cè)結(jié)果。該界面使用戶能夠輕松地與模型交互,而無(wú)需手動(dòng)修改或運(yùn)行代碼:

import gradio as gr
from keras.models import load_model  # TensorFlow 是 Keras 工作的基礎(chǔ)
from PIL import Image, ImageOps      # 安裝 pillow 而不是 PIL
import numpy as np


# 加載模型
model = load_model("keras_Model.h5", compile=False)


# 加載標(biāo)簽
class_names = open("labels.txt", "r").readlines()


# 定義預(yù)測(cè)函數(shù)
def classify_image(image):
    # 將圖像調(diào)整為 224x224 并歸一化
    size = (224, 224)
    image = ImageOps.fit(image, size, Image.Resampling.LANCZOS).convert("RGB")
    image_array = np.asarray(image)
    normalized_image_array = (image_array.astype(np.float32) / 127.5) - 1
    data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
    data[0] = normalized_image_array


    # 使用模型進(jìn)行預(yù)測(cè)
    prediction = model.predict(data)
    index = np.argmax(prediction)
    class_name = class_names[index].strip()  # 去除任何尾隨空格或換行符
    confidence_score = prediction[0][index]    
    return f"{class_name}, Confidence Score: {float(confidence_score)}"


# 創(chuàng)建 Gradio 界面
interface = gr.Interface(
    fn = classify_image,
    inputs = gr.Image(type="pil"),     # 接受圖像作為輸入
    outputs = [
        gr.Label(label="Prediction"),  # 類別名稱和置信度分?jǐn)?shù)作為標(biāo)簽輸出
    ],
    title = "Image Classifier",
    description = "上傳圖像,模型將將其分類為預(yù)定義的類別之一。"
)


# 啟動(dòng) Gradio 應(yīng)用程序
interface.launch()

運(yùn)行代碼后,您將看到以下界面:

將草莓圖像拖放到左側(cè)的框中,然后點(diǎn)擊 **Submit** 按鈕。您將在右側(cè)看到結(jié)果:

總結(jié)

在本文中,我探索了 Teachable Machine,這是 Google 提供的一款基于網(wǎng)頁(yè)的工具,使用戶無(wú)需編程技能即可創(chuàng)建機(jī)器學(xué)習(xí)模型。我介紹了該工具,并解釋了如何為區(qū)分香蕉和草莓圖像等任務(wù)定義類別。我演示了如何為這些類別添加圖像、測(cè)試模型并將其導(dǎo)出以集成到自定義應(yīng)用程序中。此外,我還展示了如何使用 Gradio 創(chuàng)建一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)界面,允許使用導(dǎo)出的模型進(jìn)行實(shí)時(shí)預(yù)測(cè)。

責(zé)任編輯:趙寧寧 來(lái)源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2022-10-20 09:33:35

2022-10-11 23:35:28

神經(jīng)網(wǎng)絡(luò)VGGNetAlexNet

2024-06-18 08:16:49

2021-04-09 20:49:44

PythonOCR圖像

2023-11-24 09:26:29

Java圖像

2022-10-19 07:42:41

圖像識(shí)別神經(jīng)網(wǎng)絡(luò)

2016-12-01 14:23:32

iosandroid

2018-04-24 10:45:00

Python人工智能圖像識(shí)別

2023-11-30 09:55:27

鴻蒙鄰分類器

2019-06-10 00:45:01

谷歌開源圖像識(shí)別

2020-09-14 14:10:04

開發(fā)技能代碼

2014-01-14 17:43:37

NEC圖像識(shí)別

2015-12-03 16:01:18

Google人像識(shí)別API

2024-06-07 11:24:20

2017-09-08 13:30:32

深度學(xué)習(xí)圖像識(shí)別卷積神經(jīng)網(wǎng)絡(luò)

2022-09-09 14:42:17

應(yīng)用開發(fā)ETS

2023-09-25 10:13:59

Java識(shí)別

2024-11-11 07:00:00

Python圖像識(shí)別

2017-11-06 16:50:38

人工智能圖像識(shí)別數(shù)據(jù)邏輯

2019-08-13 11:39:29

編程語(yǔ)言技術(shù)Python
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)