ホームページ  >  記事  >  テクノロジー周辺機器  >  ポートレートカットアウト推論のための TensorFlow 深層学習フレームワークモデル推論パイプライン

ポートレートカットアウト推論のための TensorFlow 深層学習フレームワークモデル推論パイプライン

PHPz
PHPz転載
2024-03-26 13:00:39769ブラウズ

概要

ModelScope ユーザーがプラットフォームによって提供されるさまざまなモデルを迅速かつ便利に使用できるようにするために、公式 ModelScope モデルの実装を含む、完全に機能する Python ライブラリのセットが提供されています。これらのモデルを推論や微調整などに利用するために必要なデータの前処理、後処理、効果評価などの機能に関するコードのほか、シンプルで使いやすいAPIと豊富な使用例を提供します。このライブラリを呼び出すことで、ユーザーはわずか数行のコードを記述するだけでモデルの推論、トレーニング、評価などのタスクを完了でき、また、これを基に二次開発を迅速に実行して独自の革新的なアイデアを実現することもできます。

ライブラリによって現在提供されているアルゴリズム モデルは、画像、自然言語処理、音声、マルチモダリティ、科学の 5 つの主要な AI 分野と、数十のアプリケーション シナリオ タスクをカバーしています。具体的なタスクについては、ドキュメント: タスクの紹介。

ディープ ラーニング フレームワーク

ModelScope ライブラリは現在、Pytorch や Tensorflow などのディープ ラーニング フレームワークをサポートしています。今後さらに多くのフレームワークが継続的に更新および拡張される予定ですので、ご期待ください。すべての公式モデルは、ModelScope ライブラリを介してモデル推論に使用でき、一部のモデルはトレーニングと評価にライブラリを使用することもできます。詳しい使用方法については、対応するモデルのモデル カードを参照してください。

モデル推論パイプライン

モデル推論

ディープ ラーニングでは、推論とは、モデルがデータを予測するプロセスを指します。 ModelScope が推論を実行するときは、パイプラインを使用して必要な操作を順番に実行します。一般的なパイプラインには通常、データの前処理、モデルの前方推論、データの後処理という 3 つのステップが含まれます。

パイプラインの概要

pipeline() メソッドは、ModelScope フレームワークの最も基本的なユーザー メソッドの 1 つであり、さまざまな分野でモデル推論を迅速に実行するために使用できます。 Pipeline() メソッドを使用すると、ユーザーは 1 行のコードで特定のタスクのモデル推論を簡単に完了できます。

pipeline() メソッドは、ModelScope フレームワークの最も基本的なユーザー メソッドの 1 つであり、さまざまな分野でモデル推論を迅速に実行するために使用できます。 Pipeline() メソッドを使用すると、ユーザーは 1 行のコードで特定のタスクのモデル推論を簡単に完了できます。

パイプラインの使用法

この記事では、パイプライン方式を使用して推論用のモデルを読み込む方法を簡単に紹介します。パイプライン方式により、ユーザーはタスクの種類と推論用のモデル名に基づいて、モデル ウェアハウスから必要なモデルを簡単に取得できます。この方法の主な利点は、使いやすく、モデル推論を迅速かつ効率的に実行できることです。パイプライン方式の利便性は、ユーザーがモデルの特定の詳細を理解する必要がなく、モデルを取得して適用する直接的な方法を提供するため、モデルを使用するための敷居が下がることです。パイプライン方式を使用すると、ユーザーは問題の解決と

  • 環境の準備
  • 重要なパラメーター
  • パイプラインの基本的な使用方法
  • 前処理の指定に集中できます。 、推論用のモデル
  • さまざまなシナリオのタスク推論のためのパイプラインの使用例

パイプラインの基本的な使い方

中国語の単語の分割

パイプライン関数特定のタスク名の指定をサポートしています。タスクのデフォルト モデルをロードし、対応するパイプライン オブジェクトを作成します。

Python コード

from modelscope.pipelines import pipelineword_segmentation = pipeline('word-segmentation')input_str = '开源技术小栈作者是Tinywan,你知道不?'print(word_segmentation(input_str))

PHP コード

<?php $operator = PyCore::import("operator");$builtins = PyCore::import("builtins");$pipeline = PyCore::import('modelscope.pipelines')->pipeline;$word_segmentation = $pipeline("word-segmentation");$input_str = "开源技术小栈作者是Tinywan,你知道不?";PyCore::print($word_segmentation($input_str));

オンライン変換ツール: https://www.swoole.com/py2php/

結果の出力

/usr/local/php-8.2.14/bin/php demo.php 2024-03-25 21:41:42,434 - modelscope - INFO - PyTorch version 2.2.1 Found.2024-03-25 21:41:42,434 - modelscope - INFO - Loading ast index from /home/www/.cache/modelscope/ast_indexer2024-03-25 21:41:42,577 - modelscope - INFO - Loading done! Current index file version is 1.13.0, with md5 f54e9d2dceb89a6c989540d66db83a65 and a total number of 972 components indexed2024-03-25 21:41:44,661 - modelscope - WARNING - Model revision not specified, use revision: v1.0.32024-03-25 21:41:44,879 - modelscope - INFO - initiate model from /home/www/.cache/modelscope/hub/damo/nlp_structbert_word-segmentation_chinese-base2024-03-25 21:41:44,879 - modelscope - INFO - initiate model from location /home/www/.cache/modelscope/hub/damo/nlp_structbert_word-segmentation_chinese-base.2024-03-25 21:41:44,880 - modelscope - INFO - initialize model from /home/www/.cache/modelscope/hub/damo/nlp_structbert_word-segmentation_chinese-baseYou are using a model of type bert to instantiate a model of type structbert. This is not supported for all configurations of models and can yield errors.2024-03-25 21:41:48,633 - modelscope - WARNING - No preprocessor field found in cfg.2024-03-25 21:41:48,633 - modelscope - WARNING - No val key and type key found in preprocessor domain of configuration.json file.2024-03-25 21:41:48,633 - modelscope - WARNING - Cannot find available config to build preprocessor at mode inference, current config: {'model_dir': '/home/www/.cache/modelscope/hub/damo/nlp_structbert_word-segmentation_chinese-base'}. trying to build by task and model information.2024-03-25 21:41:48,639 - modelscope - INFO - cuda is not available, using cpu instead.2024-03-25 21:41:48,640 - modelscope - WARNING - No preprocessor field found in cfg.2024-03-25 21:41:48,640 - modelscope - WARNING - No val key and type key found in preprocessor domain of configuration.json file.2024-03-25 21:41:48,640 - modelscope - WARNING - Cannot find available config to build preprocessor at mode inference, current config: {'model_dir': '/home/www/.cache/modelscope/hub/damo/nlp_structbert_word-segmentation_chinese-base', 'sequence_length': 512}. trying to build by task and model information./home/www/anaconda3/envs/tinywan-modelscope/lib/python3.10/site-packages/transformers/modeling_utils.py:962: FutureWarning: The `device` argument is deprecated and will be removed in v5 of Transformers.warnings.warn({'output': ['开源', '技术', '小', '栈', '作者', '是', 'Tinywan', ',', '你', '知道', '不', '?']}

複数のサンプルの入力

パイプライン オブジェクトは、複数のサンプル リスト入力の受け渡しもサポートしており、各要素が入力サンプルの戻り結果に対応する、対応する出力リストを返します。複数のテキストの推論方法は、入力データがパイプライン内のイテレーターを使用して個別に処理され、同じ戻りリストに追加されるというものです。

Python コード

from modelscope.pipelines import pipelineword_segmentation = pipeline('word-segmentation')inputs =['开源技术小栈作者是Tinywan,你知道不?','webman这个框架不错,建议你看看']print(word_segmentation(inputs))

PHP コード

<?php $operator = PyCore::import("operator");$builtins = PyCore::import("builtins");$pipeline = PyCore::import('modelscope.pipelines')->pipeline;$word_segmentation = $pipeline("word-segmentation");$inputs = new PyList(["开源技术小栈作者是Tinywan,你知道不?", "webman这个框架不错,建议你看看"]);PyCore::print($word_segmentation($inputs));

出力

[{'output': ['开源', '技术', '小', '栈', '作者', '是', 'Tinywan', ',', '你', '知道', '不', '?']},{'output': ['webman', '这个', '框架', '不错', ',', '建议', '你', '看看']}]

バッチ推論

パイプラインのバッチ推論のサポートは、上記の「複数のテキストの入力」に似ていますが、異なる点は、バッチ前推論がユーザーが指定したbatch_sizeスケールでモデル前方プロセスに実装されることです。

inputs =['今天天气不错,适合出去游玩','这本书很好,建议你看看']# 指定batch_size参数来支持批量推理print(word_segmentation(inputs, batch_size=2))# 输出[{'output': ['今天', '天气', '不错', ',', '适合', '出去', '游玩']}, {'output': ['这', '本', '书', '很', '好', ',', '建议', '你', '看看']}]

データ セットの入力

from modelscope.msdatasets import MsDatasetfrom modelscope.pipelines import pipelineinputs = ['今天天气不错,适合出去游玩', '这本书很好,建议你看看']dataset = MsDataset.load(inputs, target='sentence')word_segmentation = pipeline('word-segmentation')outputs = word_segmentation(dataset)for o in outputs:print(o)# 输出{'output': ['今天', '天气', '不错', ',', '适合', '出去', '游玩']}{'output': ['这', '本', '书', '很', '好', ',', '建议', '你', '看看']}

推論の前処理とモデルの指定

パイプライン関数は、受信するインスタンス化の前処理オブジェクトをサポートします。およびモデル オブジェクトにより、ユーザーが推論プロセス中に前処理とモデルをカスタマイズできるようになります。

推論用のモデル オブジェクトの作成

Python コード

from modelscope.models import Modelfrom modelscope.pipelines import pipelinemodel = Model.from_pretrained('damo/nlp_structbert_word-segmentation_chinese-base')word_segmentation = pipeline('word-segmentation', model=model)inputs =['开源技术小栈作者是Tinywan,你知道不?','webman这个框架不错,建议你看看']print(word_segmentation(inputs))

PHP コード

<?php $operator = PyCore::import("operator");$builtins = PyCore::import("builtins");$Model = PyCore::import('modelscope.models')->Model;$pipeline = PyCore::import('modelscope.pipelines')->pipeline;$model = $Model->from_pretrained("damo/nlp_structbert_word-segmentation_chinese-base");$word_segmentation = $pipeline("word-segmentation", model: $model);$inputs = new PyList(["开源技术小栈作者是Tinywan,你知道不?", "webman这个框架不错,建议你看看"]);PyCore::print($word_segmentation($inputs));

出力

[{'output': ['开源', '技术', '小', '栈', '作者', '是', 'Tinywan', ',', '你', '知道', '不', '?']},{'output': ['webman', '这个', '框架', '不错', ',', '建议', '你', '看看']}]

推論用のプリプロセッサとモデル オブジェクトの作成

from modelscope.models import Modelfrom modelscope.pipelines import pipelinefrom modelscope.preprocessors import Preprocessor, TokenClassificationTransformersPreprocessormodel = Model.from_pretrained('damo/nlp_structbert_word-segmentation_chinese-base')tokenizer = Preprocessor.from_pretrained(model.model_dir)# Or call the constructor directly: # tokenizer = TokenClassificationTransformersPreprocessor(model.model_dir)word_segmentation = pipeline('word-segmentation', model=model, preprocessor=tokenizer)inputs =['开源技术小栈作者是Tinywan,你知道不?','webman这个框架不错,建议你看看']print(word_segmentation(inputs))[{'output': ['开源', '技术', '小', '栈', '作者', '是', 'Tinywan', ',', '你', '知道', '不', '?']},{'output': ['webman', '这个', '框架', '不错', ',', '建议', '你', '看看']}]

Image

注:

  1. OpenCV ライブラリがインストールされていることを確認してください。インストールされていない場合は、pip
pip install opencv-python

を介してインストールできます。インストールされていない場合は、次のプロンプトが表示されます。 PHP Fatal error: Uncaught PyError: No module names 'cv2' in /home/www/build /ai/demo3.php:4

  1. 深層学習フレームワーク パッケージ TensorFlow ライブラリがインストールされていることを確認してください

それ以外の場合は、modelscope を求めるプロンプトが表示されます。 Pipelines.cv.image_matting_pipeline には TensorFlow ライブラリが必要ですが、お使いの環境では見つかりませんでした。インストール ページ (https://www.tensorflow.org/install) の手順を確認し、お使いの環境に一致する手順に従ってください。

エラー メッセージは、TensorFlow ライブラリに依存する、modelscope.pipelines.cv.image_matting_pipeline という名前のモジュールを使用しようとしていることを示しています。ただし、必要な TensorFlow 依存関係が欠落しているため、モジュールは正しく動作しません。

次のコマンドを使用して、TensorFlow の最新バージョンをインストールできます

pip install tensorflow

ポートレートカットアウト推論のための TensorFlow 深層学習フレームワークモデル推論パイプライン##Picture

縦向きの切り抜き ( 'portrait -matting')

入力画像

ポートレートカットアウト推論のための TensorFlow 深層学習フレームワークモデル推論パイプライン画像

Python コード

import cv2from modelscope.pipelines import pipelineportrait_matting = pipeline('portrait-matting')result = portrait_matting('https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/image_matting.png')cv2.imwrite('result.png', result['output_img'])
PHP コード tinywan-images.php

<?php $operator = PyCore::import("operator");$builtins = PyCore::import("builtins");$cv2 = PyCore::import('cv2');$pipeline = PyCore::import('modelscope.pipelines')->pipeline;$portrait_matting = $pipeline("portrait-matting");$result = $portrait_matting("https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/image_matting.png");$cv2->imwrite("tinywan_result.png", $result->__getitem__("output_img"));

ローカル ファイルの読み込み image$result = $portrait_matting("./tinywan.png");

実行結果

/usr/local/php-8.2.14/bin/php tinywan-images.php 2024-03-25 22:17:25,630 - modelscope - INFO - PyTorch version 2.2.1 Found.2024-03-25 22:17:25,631 - modelscope - INFO - TensorFlow version 2.16.1 Found.2024-03-25 22:17:25,631 - modelscope - INFO - Loading ast index from /home/www/.cache/modelscope/ast_indexer2024-03-25 22:17:25,668 - modelscope - INFO - Loading done! Current index file version is 1.13.0, with md5 f54e9d2dceb89a6c989540d66db83a65 and a total number of 972 components indexed2024-03-25 22:17:26,990 - modelscope - WARNING - Model revision not specified, use revision: v1.0.02024-03-25 22:17:27.623085: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.2024-03-25 22:17:27.678592: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.2024-03-25 22:17:28.551510: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT2024-03-25 22:17:29,206 - modelscope - INFO - initiate model from /home/www/.cache/modelscope/hub/damo/cv_unet_image-matting2024-03-25 22:17:29,206 - modelscope - INFO - initiate model from location /home/www/.cache/modelscope/hub/damo/cv_unet_image-matting.2024-03-25 22:17:29,209 - modelscope - WARNING - No preprocessor field found in cfg.2024-03-25 22:17:29,210 - modelscope - WARNING - No val key and type key found in preprocessor domain of configuration.json file.2024-03-25 22:17:29,210 - modelscope - WARNING - Cannot find available config to build preprocessor at mode inference, current config: {'model_dir': '/home/www/.cache/modelscope/hub/damo/cv_unet_image-matting'}. trying to build by task and model information.2024-03-25 22:17:29,210 - modelscope - WARNING - Find task: portrait-matting, model type: None. Insufficient information to build preprocessor, skip building preprocessorWARNING:tensorflow:From /home/www/anaconda3/envs/tinywan-modelscope/lib/python3.10/site-packages/modelscope/utils/device.py:60: is_gpu_available (from tensorflow.python.framework.test_util) is deprecated and will be removed in a future version.Instructions for updating:Use `tf.config.list_physical_devices('GPU')` instead.2024-03-25 22:17:29,213 - modelscope - INFO - loading model from /home/www/.cache/modelscope/hub/damo/cv_unet_image-matting/tf_graph.pbWARNING:tensorflow:From /home/www/anaconda3/envs/tinywan-modelscope/lib/python3.10/site-packages/modelscope/pipelines/cv/image_matting_pipeline.py:45: FastGFile.__init__ (from tensorflow.python.platform.gfile) is deprecated and will be removed in a future version.Instructions for updating:Use tf.gfile.GFile.2024-03-25 22:17:29,745 - modelscope - INFO - load model done

出力画像

## #######写真##################

以上がポートレートカットアウト推論のための TensorFlow 深層学習フレームワークモデル推論パイプラインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。