亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Tensorflow?hub完成目標檢測過程詳解

 更新時間:2023年04月12日 11:58:14   作者:我是王大你是誰  
這篇文章主要為大家介紹了使用Tensorflow?hub完成目標檢測過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

本文主要介紹使用 tensorflow hub 中的 CenterNet HourGlass104 Keypoints 模型來完成簡單的目標檢測任務。使用到的主要環(huán)境是:

  • tensorflow-cpu=2.10
  • tensorflow-hub=0.11.0
  • tensorflow-estimator=2.6.0
  • python=3.8
  • protobuf=3.20.1

導入必要的庫

首先導入必要的 python 包,后面要做一些復雜的安裝和配置工作,需要一點耐心和時間。在運行下面代碼的時候可能會報錯:

TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

你只需要重新使用 pip 安裝,將 protobuf 降低到 3.20.x 版本即可。

import os
import pathlib
import matplotlib
import matplotlib.pyplot as plt
import io
import scipy.misc
import numpy as np
from six import BytesIO
from PIL import Image, ImageDraw, ImageFont
from six.moves.urllib.request import urlopen
import tensorflow as tf
import tensorflow_hub as hub
tf.get_logger().setLevel('ERROR')

準備數(shù)據(jù)和模型

(1)到 github.com/protocolbuf… 用迅雷下載對應操作系統(tǒng)的壓縮包,我的是 win7 版本: github.com/protocolbuf…

(2)下載好之后隨便解壓到自定義目錄,我的是 “主目錄\protoc-22.1-win64”,然后將其中的 “主目錄\protoc-22.1-win64\bin” 路徑添加到用戶環(huán)境變量中的 PATH 變量中,重新打開命令行,輸入 protoc --version ,如果能正常返回版本號說明配置成功,可以開始使用。

(3)進入命令行,在和本文件同一個目錄下,執(zhí)行命令

git clone --depth 1 https://github.com/tensorflow/models 

,將 models 文件夾下載下來,進入 models/research/ 下,使用命令執(zhí)行

protoc object_detection/protos/*.proto --python_out=.

將 models/research/object_detection/packages/tf2/setup.py 拷貝到和 models/research/ 下,然后使用執(zhí)行本文件的 python 對應的 pip 去執(zhí)行安裝包操作

..\Anaconda3\envs\tfcpu2.10_py38\Scripts\pip.exe install . -i https://pypi.tuna.tsinghua.edu.cn/simple 

中間可能會報錯“error: netadata-generation-failed”,一般都是某個包安裝的時候出問題了,我們只需要看詳細的日志,單獨用 pip 進行安裝即可,單獨安裝完之后,再去執(zhí)行上面的根據(jù) setup.py 的整裝操作,反復即可,過程有點麻煩但還是都可以安裝成功的。

(4)這里的模型本來在:

https://tfhub.dev/tensorflow/centernet/hourglass\_512x512\_kpts/1 

但是由于網(wǎng)絡問題無法獲取,所以我們可以改為從

https://storage.googleapis.com/tfhub-modules/tensorflow/centernet/hourglass\_512x512\_kpts/1.tar.gz 

獲取模型。

from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as viz_utils
from object_detection.utils import ops as utils_ops
PATH_TO_LABELS = './models/research/object_detection/data/mscoco_label_map.pbtxt'
category_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS, use_display_name=True)
model_path = 'https://storage.googleapis.com/tfhub-modules/tensorflow/centernet/hourglass_512x512_kpts/1.tar.gz'
print('TensorFlow Hub 中的模型地址: {}'.format(model_path))
print('加載模型...')
hub_model = hub.load(model_path)
print('加載成功!')

打印結果:

TensorFlow Hub 中的模型地址: https://storage.googleapis.com/tfhub-modules/tensorflow/centernet/hourglass_512x512_kpts/1.tar.gz
加載模型...
WARNING:absl:Importing a function (__inference_batchnorm_layer_call_and_return_conditional_losses_42408) with ops with custom gradients. Will likely fail if a gradient is requested.
WARNING:absl:Importing a function (__inference_batchnorm_layer_call_and_return_conditional_losses_209416) with ops with custom gradients. Will likely fail if a gradient is requested.
...
WARNING:absl:Importing a function (__inference_batchnorm_layer_call_and_return_conditional_losses_56488) with ops with custom gradients. Will likely fail if a gradient is requested.
加載成功!

(5)在這里我們主要定義了一個函數(shù) load_image_into_numpy_array 來加載從網(wǎng)上下載圖片的圖片,并將其轉換為模型可以適配的輸入類型。

(6)IMAGES_FOR_TEST 字典中記錄了多個可以用來測試的圖片,但是這些都是在網(wǎng)上,用的使用需要調(diào)用 load_image_into_numpy_array 函數(shù)。

(7)COCO17_HUMAN_POSE_KEYPOINTS 記錄了人體姿態(tài)關鍵點。

(8)我們這里展示了 dogs 這張圖片,可以看到兩條可愛的小狗。

def load_image_into_numpy_array(path):
    image = None
    if(path.startswith('http')):
        response = urlopen(path)
        image_data = response.read()
        image_data = BytesIO(image_data)
        image = Image.open(image_data)
    else:
        image_data = tf.io.gfile.GFile(path, 'rb').read()
        image = Image.open(BytesIO(image_data))
    (im_width, im_height) = image.size
    return np.array(image.getdata()).reshape((1, im_height, im_width, 3)).astype(np.uint8)
IMAGES_FOR_TEST = {
  'Beach' : 'models/research/object_detection/test_images/image2.jpg',
  'Dogs' : 'models/research/object_detection/test_images/image1.jpg',
  'Naxos Taverna' : 'https://upload.wikimedia.org/wikipedia/commons/6/60/Naxos_Taverna.jpg',
  'Beatles' : 'https://upload.wikimedia.org/wikipedia/commons/1/1b/The_Coleoptera_of_the_British_islands_%28Plate_125%29_%288592917784%29.jpg',
  'Phones' : 'https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Biblioteca_Maim%C3%B3nides%2C_Campus_Universitario_de_Rabanales_007.jpg/1024px-Biblioteca_Maim%C3%B3nides%2C_Campus_Universitario_de_Rabanales_007.jpg',
  'Birds' : 'https://upload.wikimedia.org/wikipedia/commons/0/09/The_smaller_British_birds_%288053836633%29.jpg',
}
COCO17_HUMAN_POSE_KEYPOINTS = [(0, 1), (0, 2),(1, 3),(2, 4),(0, 5),(0, 6),(5, 7),(7, 9),(6, 8),(8, 10),(5, 6),(5, 11), (6, 12),(11, 12),(11, 13),(13, 15),(12, 14),(14, 16)]
%matplotlib inline
selected_image = 'Dogs' 
image_path = IMAGES_FOR_TEST[selected_image]
image_np = load_image_into_numpy_array(image_path)
plt.figure(figsize=(24,32))
plt.imshow(image_np[0])
plt.show()

目標檢測

我們這里將經(jīng)過處理的小狗的圖片傳入模型中,會返回結果,我們只要使用結果來繪制出所檢測目標的框,以及對應的類別,分數(shù),可以看出來結果是相當?shù)臏蚀_的,甚至通過人的腿就能識別出人的框。

results = hub_model(image_np)
result = {key:value.numpy() for key,value in results.items()}
label_id_offset = 0
image_np_with_detections = image_np.copy()
keypoints, keypoint_scores = None, None
if 'detection_keypoints' in result:
    keypoints = result['detection_keypoints'][0]
    keypoint_scores = result['detection_keypoint_scores'][0]
viz_utils.visualize_boxes_and_labels_on_image_array(
      image_np_with_detections[0],
      result['detection_boxes'][0],
      (result['detection_classes'][0] + label_id_offset).astype(int),
      result['detection_scores'][0],
      category_index,
      use_normalized_coordinates=True,
      max_boxes_to_draw=200,
      min_score_thresh=.30,
      agnostic_mode=False,
      keypoints=keypoints,
      keypoint_scores=keypoint_scores,
      keypoint_edges=COCO17_HUMAN_POSE_KEYPOINTS)
plt.figure(figsize=(24,32))
plt.imshow(image_np_with_detections[0])
plt.show()

以上就是使用Tensorflow hub完成目標檢測過程詳解的詳細內(nèi)容,更多關于Tensorflow hub目標檢測的資料請關注腳本之家其它相關文章!

相關文章

  • 如何用PyPy讓你的Python代碼運行得更快

    如何用PyPy讓你的Python代碼運行得更快

    這篇文章主要介紹了如何用PyPy讓你的Python代碼運行得更快,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python類的多重繼承問題深入分析

    Python類的多重繼承問題深入分析

    昨天在Python類的多重繼承那里糾結了好久,咨詢了不少高手之后,才完全搞明白,現(xiàn)在把類的特性整理下,供以后參考,也給有需要的小伙伴們參考下
    2014-11-11
  • Python中標準庫OS的常用方法總結大全

    Python中標準庫OS的常用方法總結大全

    python中的OS庫提供了使用各種操作系統(tǒng)功能的接口。是經(jīng)常用到的一個庫,所以這篇文章主要給大家總結介紹了關于Python中標準庫OS的常用方法,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Python openpyxl讀取單元格字體顏色過程解析

    Python openpyxl讀取單元格字體顏色過程解析

    這篇文章主要介紹了Python openpyxl讀取單元格字體顏色過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python Numpy中數(shù)據(jù)的常用保存與讀取方法

    Python Numpy中數(shù)據(jù)的常用保存與讀取方法

    這篇文章主要介紹了Python Numpy中數(shù)據(jù)的常用保存與讀取方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • python常用運維腳本實例小結

    python常用運維腳本實例小結

    這篇文章主要介紹了python常用運維腳本實例小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Python FtpLib模塊應用操作詳解

    Python FtpLib模塊應用操作詳解

    這篇文章主要介紹了Python FtpLib模塊應用操作,結合實例形式詳細分析了FtpLib模塊的功能、配置、應用相關操作技巧與使用注意事項,需要的朋友可以參考下
    2019-12-12
  • python定時按日期備份MySQL數(shù)據(jù)并壓縮

    python定時按日期備份MySQL數(shù)據(jù)并壓縮

    這篇文章主要為大家詳細介紹了python定時按日期備份MySQL數(shù)據(jù)并壓縮,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python 詳解如何使用GPU大幅提高效率

    python 詳解如何使用GPU大幅提高效率

    CuPy是一個開源矩陣庫,使用NVIDIA CUDA加速。CuPy使用Python提供GPU加速計算。CUPY使用CUDA相關庫,包括 CuBLAS、CUDNN、Curand、CuoSver、CuPaSeSE、Cufft和NCCL,以充分利用GPU架構
    2021-11-11
  • Python基于pyjnius庫實現(xiàn)訪問java類

    Python基于pyjnius庫實現(xiàn)訪問java類

    這篇文章主要介紹了Python基于pyjnius庫實現(xiàn)訪問java類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論