一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

告別性能瓶頸:使用 Google Coral TPU 為樹莓派注入強(qiáng)大AI計(jì)算力!

上海晶珩電子科技有限公司 ? 2025-03-25 09:30 ? 次閱讀

bc27e802-0918-11f0-9434-92fbcf53809c.jpg

使用機(jī)器學(xué)習(xí)的應(yīng)用程序通常需要高計(jì)算能力。這些計(jì)算通常發(fā)生在顯卡的GPU上。Raspberry Pi并不專門設(shè)計(jì)用于運(yùn)行計(jì)算密集型應(yīng)用程序。但Google Coral USB加速器能在此提供幫助!借助此設(shè)備,我們可以在視頻中實(shí)現(xiàn)實(shí)時(shí)計(jì)算,如對(duì)象識(shí)別。

在本教程中,我們將探討如何在Raspberry Pi上集成和使用Google Coral。然后,我們將利用Raspberry Pi攝像頭中的視頻流創(chuàng)建實(shí)時(shí)對(duì)象檢測(cè)。

所需硬件部件

我在本教程中使用了以下硬件部件。許多組件在之前的教程中已經(jīng)使用過。

Raspberry Pi*

Edge TPU:Google Coral USB加速器

官方Raspberry Pi攝像頭模塊 或 USB網(wǎng)絡(luò)攝像頭

用于識(shí)別的簡(jiǎn)單對(duì)象(辦公用品、水果等)

最佳選擇:一個(gè)為Raspberry Pi和USB加速器配備散熱器的外殼(也可3D打?。?。

Google Coral USB加速器比Raspberry Pi4小,應(yīng)通過USB 3.0端口連接。

bc3d4238-0918-11f0-9434-92fbcf53809c.png

Google Coral USB加速器用于什么?

Google Coral USB加速器包含一個(gè)專門為神經(jīng)網(wǎng)絡(luò)計(jì)算而設(shè)計(jì)的處理器。這個(gè)處理器被稱為Edge-TPU(Tensor Processing Unit)。

以下視頻對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行了很好的解釋,包括它們到底是什么,以及為什么你經(jīng)常在閱讀機(jī)器學(xué)習(xí)相關(guān)內(nèi)容時(shí)會(huì)看到它們:


因此,主要任務(wù)之一是解決這些神經(jīng)網(wǎng)絡(luò)(以矩陣的形式),而Edge TPU特別擅長(zhǎng)于此。Google提供了特殊的庫,以便我們可以利用Coral USB加速器的特性。

在Raspberry Pi上安裝Google Coral Edge TPU

為了使用Coral Edge TPU的處理能力,我們需要安裝一些軟件包。為此,我們主要遵循TPU網(wǎng)站的步驟。使用 USB 加速器入門:https://coral.ai/docs/accelerator/get-started/使用 SSH 和 Putty 遠(yuǎn)程訪問樹莓派https://tutorials-raspberrypi.com/raspberry-pi-remote-access-by-using-ssh-and-putty/打開終端(或通過SSH連接),然后輸入以下命令:

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.listcurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -sudo apt-get update

之后,我們可以安裝Edge TPU運(yùn)行時(shí):

sudo apt-get install libedgetpu1-std

注意:如果你想安裝一個(gè)“更快”的運(yùn)行時(shí)(意味著:頻率更高),請(qǐng)使用以下命令:sudo apt-get install libedgetpu1-max。但是,請(qǐng)記住,不能同時(shí)安裝這兩個(gè)版本。此外,高頻版本會(huì)使工作溫度升高,因此你應(yīng)僅在具備足夠好的散熱條件時(shí)使用它。

安裝完成后,你可以將USB加速器連接到Raspberry Pi(最好連接到藍(lán)色的USB 3.0端口)。如果在安裝之前已經(jīng)連接,請(qǐng)暫時(shí)斷開并重新連接。

現(xiàn)在,我們安裝Python軟件包。為此,以下命令已足夠:

sudo apt-get install python3-pycoral --yes

安裝TensorFlow Lite

我們還需要TensorFlow Lite。首先,我們檢查版本:

pip3 show tflite_runtime

我的結(jié)果如下:

Name: tflite-runtimeVersion: 2.5.0Summary: TensorFlow Lite is for mobile and embedded devices.Home-page: https://www.tensorflow.org/lite/Author: Google, LLCAuthor-email: packages@tensorflow.orgLicense: Apache 2.0Location: /usr/lib/python3/dist-packagesRequires:Required-by: pycoral

如果你尚未安裝TensorFlow,可以按以下方式操作,然后再次運(yùn)行命令:

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.listcurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -sudo apt-get updatesudo apt-get install python3-tflite-runtime

使用Google Coral和Raspberry Pi攝像頭在視頻中進(jìn)行對(duì)象識(shí)別

接下來,我們希望在視頻流中實(shí)時(shí)激活對(duì)象檢測(cè)。計(jì)算將在Edge TPU上運(yùn)行。為了顯示圖像,我們有幾個(gè)選項(xiàng)。我們可以使用例如PyGame、PiCamera或OpenCV等軟件包。我更喜歡OpenCV,因?yàn)樗试S我們使用計(jì)算機(jī)視覺領(lǐng)域的更多功能。

首先,我們通過CSI連接Raspberry Pi攝像頭,或通過USB連接網(wǎng)絡(luò)攝像頭。大多數(shù)網(wǎng)絡(luò)攝像頭會(huì)自動(dòng)被檢測(cè)到

讓我們從一個(gè)示例項(xiàng)目開始。再次打開終端:

mkdir google-coral && cd google-coralgit clone https://github.com/google-coral/examples-camera --depth 1

下一步,我們加載預(yù)訓(xùn)練模型。您也可以選擇使用自己訓(xùn)練的模型。然而,在我們這個(gè)簡(jiǎn)單的例子中,我們只加載了MobileNet SSD300模型:,它已經(jīng)可以識(shí)別許多物體。

MobileNet SSD300模型:https://resources.wolframcloud.com/NeuralNetRepository/resources/SSD-MobileNet-V2-Trained-on-MS-COCO-Data

cd examples-camerash download_models.sh

這個(gè)過程需要幾分鐘。之后,我們切換到OpenCV文件夾并安裝依賴項(xiàng)(如果你想使用另一個(gè)示例,這里有這個(gè)選項(xiàng))。

cd opencvbash install_requirements.sh

現(xiàn)在我們可以啟動(dòng)示例應(yīng)用程序了。為此,你需要一個(gè)桌面環(huán)境。如果你不是直接在Raspberry Pi上工作,我建議使用遠(yuǎn)程桌面連接。

如何建立 Raspberry Pi 遠(yuǎn)程桌面連接:https://tutorials-raspberrypi.com/raspberry-pi-remote-desktop-connection/

python3 detect.py

這會(huì)打開一個(gè)新的窗口,顯示視頻流。在視頻流中,檢測(cè)到的物體會(huì)用矩形標(biāo)記出來。你還可以看到計(jì)算出的物體被檢測(cè)到的概率(以百分比表示)(即根據(jù)算法,這個(gè)物體被識(shí)別為特定物體的可能性有多大)。

bc5d8e4e-0918-11f0-9434-92fbcf53809c.jpg

現(xiàn)在讓我們仔細(xì)查看代碼,以了解發(fā)生了什么:

# Copyright 2019 Google LLC## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## https://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License. """A demo that runs object detection on camera frames using OpenCV. TEST_DATA=../all_models Run face detection model:python3 detect.py \ --model ${TEST_DATA}/mobilenet_ssd_v2_face_quant_postprocess_edgetpu.tflite Run coco model:python3 detect.py \ --model ${TEST_DATA}/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite \ --labels ${TEST_DATA}/coco_labels.txt """import argparseimport cv2import os from pycoral.adapters.common import input_sizefrom pycoral.adapters.detect import get_objectsfrom pycoral.utils.dataset import read_label_filefrom pycoral.utils.edgetpu import make_interpreterfrom pycoral.utils.edgetpu import run_inference def main(): default_model_dir = '../all_models' default_model = 'mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite' default_labels = 'coco_labels.txt' parser = argparse.ArgumentParser() parser.add_argument('--model', help='.tflite model path', default=os.path.join(default_model_dir,default_model)) parser.add_argument('--labels', help='label file path', default=os.path.join(default_model_dir, default_labels)) parser.add_argument('--top_k', type=int, default=3, help='number of categories with highest score to display') parser.add_argument('--camera_idx', type=int, help='Index of which video source to use. ', default = 0) parser.add_argument('--threshold', type=float, default=0.1, help='classifier score threshold') args = parser.parse_args() print('Loading {} with {} labels.'.format(args.model, args.labels)) interpreter = make_interpreter(args.model) interpreter.allocate_tensors() labels = read_label_file(args.labels) inference_size = input_size(interpreter) cap = cv2.VideoCapture(args.camera_idx) while cap.isOpened(): ret, frame = cap.read() if not ret: break cv2_im = frame cv2_im_rgb = cv2.cvtColor(cv2_im, cv2.COLOR_BGR2RGB) cv2_im_rgb = cv2.resize(cv2_im_rgb, inference_size) run_inference(interpreter, cv2_im_rgb.tobytes()) objs = get_objects(interpreter, args.threshold)[:args.top_k] cv2_im = append_objs_to_img(cv2_im, inference_size, objs, labels) cv2.imshow('frame', cv2_im) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() def append_objs_to_img(cv2_im, inference_size, objs, labels): height, width, channels = cv2_im.shape scale_x, scale_y = width / inference_size[0], height / inference_size[1] for obj in objs: bbox = obj.bbox.scale(scale_x, scale_y) x0, y0 = int(bbox.xmin), int(bbox.ymin) x1, y1 = int(bbox.xmax), int(bbox.ymax) percent = int(100 * obj.score) label = '{}% {}'.format(percent, labels.get(obj.id, obj.id)) cv2_im = cv2.rectangle(cv2_im, (x0, y0), (x1, y1), (0, 255, 0), 2) cv2_im = cv2.putText(cv2_im, label, (x0, y0+30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 2) return cv2_im if __name__ == '__main__': main()

  • 首先,包含了所需的PyCoral庫。
  • 在主函數(shù)中,定義了可以從命令行傳遞的參數(shù)(如指定模型等)。
  • 加載模型及其標(biāo)簽,并根據(jù)模型確定尺寸(此處為300×300)。
  • 然后打開視頻流(cap = cv2.VideoCapture(args.camera_idx))。

接下來是核心部分:

objs = get_objects(interpreter, args.threshold)[:args.top_k]

  • 此過程中會(huì)確定“分類分?jǐn)?shù)”最高的3個(gè)元素(且分?jǐn)?shù)需高于閾值)。
  • 隨后,在圖像上標(biāo)記每個(gè)檢測(cè)到的物體。

響應(yīng)特定對(duì)象

如果我們想在檢測(cè)到某個(gè)特定對(duì)象(例如一個(gè)人)時(shí)立即觸發(fā)一個(gè)動(dòng)作,現(xiàn)在應(yīng)該怎么做呢?

為此,我們首先來看一下get_objects函數(shù)的返回值:

[Object(id=16, score=0.5, bbox=BBox(xmin=-2, ymin=102, xmax=158, ymax=296)), Object(id=0, score=0.16015625, bbox=BBox(xmin=6, ymin=114, xmax=270, ymax=300)), Object(id=61, score=0.12109375, bbox=BBox(xmin=245, ymin=166, xmax=301, ymax=302))]

我們看到,每個(gè)檢測(cè)到的對(duì)象都包含一個(gè)ID、一個(gè)分?jǐn)?shù)以及一個(gè)帶有坐標(biāo)的邊界框。為了確定檢測(cè)到了哪個(gè)對(duì)象,我們需要查看標(biāo)簽:

{0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus', 6: 'train', 7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant', 12: 'stop sign', 13: 'parking meter', 14: 'bench', 15: 'bird', 16: 'cat', 17: 'dog', 18: 'horse', 19: 'sheep', 20: 'cow', 21: 'elephant', 22: 'bear', 23: 'zebra',24: 'giraffe', 26: 'backpack', 27: 'umbrella', 30: 'handbag', 31: 'tie', 32: 'suitcase', 33: 'frisbee', 34: 'skis', 35: 'snowboard', 36: 'sports ball', 37: 'kite', 38: 'baseball bat', 39: 'baseball glove', 40: 'skateboard', 41: 'surfboard', 42: 'tennis racket', 43: 'bottle', 45: 'wine glass', 46: 'cup', 47: 'fork', 48: 'knife', 49: 'spoon', 50: 'bowl', 51: 'banana', 52: 'apple', 53: 'sandwich', 54: 'orange', 55: 'broccoli', 56: 'carrot', 57: 'hot dog', 58: 'pizza', 59: 'donut', 60: 'cake', 61: 'chair', 62: 'couch', 63: 'potted plant',64: 'bed', 66: 'dining table', 69: 'toilet', 71: 'tv', 72: 'laptop', 73: 'mouse', 74: 'remote', 75: 'keyboard', 76: 'cell phone', 77: 'microwave', 78: 'oven', 79: 'toaster', 80: 'sink', 81: 'refrigerator', 83: 'book', 84: 'clock', 85: 'vase', 86: 'scissors', 87: 'teddy bear', 88: 'hair drier', 89: 'toothbrush'}

在我的案例中,識(shí)別到的對(duì)象有貓(ID=16)、人(ID=0)和椅子(ID=61)。

如果你想知道這些標(biāo)簽是從哪里來的:它們是在模型中訓(xùn)練的,因此被包含在內(nèi)。如果你創(chuàng)建自己的模型,也可以只包含對(duì)你而言重要的一個(gè)或幾個(gè)對(duì)象。例如,識(shí)別你自己的臉也是可能的。在上面的例子中,我們想在檢測(cè)到某個(gè)特定對(duì)象(例如ID=5的公交車)時(shí)立即觸發(fā)一個(gè)動(dòng)作。為此,我們首先查找該對(duì)象的ID。接下來,我們需要檢查是否找到了具有該ID的對(duì)象。我們還可以為分?jǐn)?shù)添加一個(gè)閾值(例如0.8)。偽代碼看起來像這樣:

found_scores = [o.score for o in objs if o.id == 5]if len(found_scores) > 0 and max(found_scores) >= 0.8:# do something

正如你所見,對(duì)其做出反應(yīng)非常簡(jiǎn)單。之后,我們可以保存照片。

結(jié)論

對(duì)于那些覺得Raspberry Pi的計(jì)算能力不夠的人來說,Google的Edge TPU提供了一個(gè)很好的機(jī)會(huì)。與高端顯卡相比,USB加速器也非常便宜。高端顯卡的平均價(jià)格超過一千美元。

以300x300px的分辨率運(yùn)行對(duì)象檢測(cè)非常流暢。也可以使用更高的分辨率,但你必須注意設(shè)備的溫度。我建議為連續(xù)運(yùn)行增加一個(gè)額外的風(fēng)扇。

此外,Google還提供了其他包含學(xué)習(xí)內(nèi)容的存儲(chǔ)庫。對(duì)于Coral的其他用例,這個(gè)存儲(chǔ)庫仍然很有趣,并且除了其他內(nèi)容外,還配備了圖像識(shí)別的示例。

https://github.com/google-coral/pycoral順便說一下,我們也可以使用TensorFlow創(chuàng)建自己的對(duì)象識(shí)別模型。為此,我們首先需要標(biāo)注圖像,然后訓(xùn)練一個(gè)模型。如果你感興趣,未來將提供相關(guān)的教程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    33554

    瀏覽量

    274263
  • TPU
    TPU
    +關(guān)注

    關(guān)注

    0

    文章

    151

    瀏覽量

    21024
  • 樹莓派
    +關(guān)注

    關(guān)注

    120

    文章

    1906

    瀏覽量

    106719
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    從CPU、GPU再到TPU,GoogleAI芯片是如何一步步進(jìn)化過來的?

    趨勢(shì)了,我認(rèn)為這也是Google生產(chǎn)Tensor processing unit的一個(gè)重要出發(fā)點(diǎn)。至此,TPU便登上歷史舞臺(tái)。隨著機(jī)器學(xué)習(xí)算法越來越多的應(yīng)用在各個(gè)領(lǐng)域并表現(xiàn)出優(yōu)越的性能,例如街景、郵件
    發(fā)表于 03-15 11:40

    阿里云MaxCompute,用計(jì)算力讓數(shù)據(jù)發(fā)聲

    產(chǎn)品,用計(jì)算力讓數(shù)據(jù)發(fā)聲。計(jì)算的價(jià)值絕不止計(jì)算本身,而是讓本不會(huì)說話的數(shù)據(jù)發(fā)聲。從***到圓周率,從萬有引力定律到二進(jìn)制,從固化的物體到虛擬的思維都由數(shù)據(jù)注入。阿里云大數(shù)據(jù)
    發(fā)表于 01-22 17:45

    好奇~!谷歌的 Edge TPU 專用 ASIC 旨在將機(jī)器學(xué)習(xí)推理能力引入邊緣設(shè)備

    或者嵌入式 CPU 的硬件方案相比,Edge TPU 的模型推理性能應(yīng)該明顯更強(qiáng)。大約一個(gè)月之前,我們?cè)?Geekbench 網(wǎng)站上發(fā)現(xiàn)了一段來自“Google Coral”這一神秘設(shè)
    發(fā)表于 03-05 21:20

    CORAL-EDGE-TPU:珊瑚開發(fā)板TPU

    ,可在低功耗轉(zhuǎn)換機(jī)器學(xué)習(xí)(ML)邊緣計(jì)算功能中實(shí)現(xiàn)高性能,本地推理。Coral Dev Board TPU的小巧外形可實(shí)現(xiàn)快速原型設(shè)計(jì),涵蓋物聯(lián)網(wǎng)(IOT)和需要快速設(shè)備ML推理的通用
    發(fā)表于 05-29 10:43

    樹莓是什么

    樹莓樹莓是什么樹莓(英文名為Raspberry Pi,簡(jiǎn)寫
    發(fā)表于 11-12 06:09

    BHR-AI-HX-M1產(chǎn)品概述

    基于ZYNQ7020的低成本低功耗嵌入式AI計(jì)算模組1 產(chǎn)品概述BHR-AI-HX-M1,內(nèi)嵌EMBEDEEP EEP-TPU AI處理核,
    發(fā)表于 12-14 08:58

    谷歌人工智能之路:以強(qiáng)大創(chuàng)造AI注入發(fā)展活力

    長(zhǎng)期以來,谷歌一直在其核心產(chǎn)品中大量使用AI技術(shù),不斷研發(fā)新的AI產(chǎn)品。以強(qiáng)大創(chuàng)造AI
    發(fā)表于 11-12 10:38 ?992次閱讀

    2018中國(guó)AI計(jì)算力報(bào)告發(fā)布

    今天上午,浪潮公司聯(lián)合IDC在2018中國(guó)人工智能計(jì)算大會(huì)上發(fā)布了《2018中國(guó)AI計(jì)算力發(fā)展報(bào)告》(以下簡(jiǎn)稱《報(bào)告》)。報(bào)告通過對(duì)AI計(jì)算力
    的頭像 發(fā)表于 09-15 08:37 ?4404次閱讀

    炸裂!小小樹莓要搭上 Google 的人工智能了

    樹莓以及 Google 獲取進(jìn)一步信息,對(duì)方都表示暫時(shí)未能透露更多信息,但有望可在 2017 年見到新進(jìn)展。Google 向來都致力于
    發(fā)表于 04-02 14:48 ?351次閱讀

    Python的PyCoral迎來多項(xiàng)更新,邊緣AI注入更多精彩

    針對(duì) Edge TPU 優(yōu)化 https://coral.ai/models Coral(https://coral.ai)是一個(gè)可用于構(gòu)建本地
    的頭像 發(fā)表于 11-26 09:47 ?2536次閱讀

    樹莓

    樹莓樹莓是什么樹莓(英文名為Raspberry Pi,簡(jiǎn)寫
    發(fā)表于 11-07 11:05 ?16次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>

    什么叫AI計(jì)算AI計(jì)算力是什么?

    什么叫AI計(jì)算AI計(jì)算力是什么? 隨著科技的不斷發(fā)展,人工智能(AI)已經(jīng)成為當(dāng)今最熱門的技術(shù)之一。而在人工智能中,
    的頭像 發(fā)表于 08-24 15:49 ?7795次閱讀

    樹莓攜手Hailo其新品注入人工智能功能

    套件用于支持樹莓5的AI功能。此次合作將以先進(jìn)的人工智能功能助力專業(yè)以及創(chuàng)作愛好者在智能家居、安全、機(jī)器人等領(lǐng)域中提升解決方案效率。 Hailo的首席執(zhí)行官兼聯(lián)合創(chuàng)始人Orr Danon表示:“我們非常榮幸能為
    的頭像 發(fā)表于 06-06 10:18 ?559次閱讀

    樹莓新推AI HAT+:26 TOPS高性能版本震撼登場(chǎng)

     在成功推出樹莓AI套件與AI攝像頭后,樹莓再次擴(kuò)大其A
    的頭像 發(fā)表于 11-07 13:44 ?937次閱讀

    性能飆升!使用Python并行計(jì)算榨干樹莓!

    Deepseek的引爆,讓AI大模型的本地化部署并應(yīng)用于實(shí)際項(xiàng)目中變?yōu)榭赡?。開發(fā)者們意識(shí)到——除了提升硬件性能,邊緣設(shè)備的算優(yōu)化也是未來趨勢(shì)!當(dāng)全球創(chuàng)客都在用樹莓
    的頭像 發(fā)表于 03-26 17:08 ?231次閱讀
    讓<b class='flag-5'>性能</b>飆升!使用Python并行<b class='flag-5'>計(jì)算</b>榨干<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>算<b class='flag-5'>力</b>!