「IntelのOpenVINOツールキットを使用したAI最適化と展開のマスタリング」
「AI最適化と展開のマスタリング:IntelのOpenVINOツールキットの活用法」
イントロダクション
人間の労働力を置き換えるAIの影響が増しているため、私たちはほぼ毎日AIについて話題にしています。AIを活用したソフトウェアの構築は、短期間で急速に成長しています。企業やビジネスは、信頼性のある責任あるAIをアプリケーションに統合し、収益を増やすことを信じています。アプリケーションにAIを統合する最も困難な部分は、モデルの推論とモデル訓練に使用される計算リソースです。既に多くのテクニックが存在しており、モデルの推論時のパフォーマンスを最適化し、より少ない計算リソースでモデルを訓練します。この問題を解決するために、IntelはOpenVINO Toolkitを導入しました。OpenVINOは革新的なオープンソースツールキットであり、AIの推論を最適化して展開することができます。
学習目標
この記事では、以下の内容を理解します。
- OpenVINO Toolkitとは何か、AIの推論モデルを最適化し展開するための目的を理解します。
- OpenVINOの実用的なユースケース、特にエッジにおけるAIの将来における重要性を探求します。
- Google ColabでOpenVINOを使用して画像内のテキスト検出プロジェクトを実装する方法を学びます。
- OpenVINOの主な特徴と利点、モデルの互換性とハードウェアアクセラレータのサポート、およびさまざまな産業とアプリケーションに与える影響を探求します。
この記事はData Science Blogathonの一環として公開されました。
OpenVINOとは何ですか?
OpenVINO(オープンビジュアル推論およびニューラルネットワーク最適化)は、Intelチームによって開発されたオープンソースツールキットで、ディープラーニングモデルの最適化を容易にするものです。OpenVINOツールキットのビジョンは、AIのディープラーニングモデルを効率的かつ効果的にオンプレミス、オンデバイス、またはクラウド上で展開することです。
OpenVINO Toolkitは特に価値があります。なぜなら、TensorFlow、PyTorch、Onnx、Caffeなどのような人気のあるディープラーニングフレームワークをサポートしているからです。好きなフレームワークを使用してモデルをトレーニングし、OpenVINOを使用してIntelのハードウェアアクセラレータ(CPU、GPU、FPGA、VPUなど)にデプロイするために変換と最適化を行うことができます。
推論に関しては、OpenVINO Toolkitはモデルの量子化と圧縮のためのさまざまなツールを提供しており、推論の精度を損なうことなくディープラーニングモデルのサイズを大幅に削減することができます。
なぜOpenVINOを使用するのですか?
AIの人気は現在も衰える気配がありません。この人気により、オンプレミスやオンデバイスでAIアプリケーションを実行するためのアプリケーションがますます開発されることは明らかです。OpenVINOが優れているいくつかの重要な領域は、なぜOpenVINOを使用することが重要かを理解するための理想的な選択肢となっています。
OpenVINOモデルズー
OpenVINOは、安定した拡散、音声、オブジェクト検出などのタスクに対する事前トレーニング済みのディープラーニングモデルを提供するモデルズーを提供しています。これらのモデルはプロジェクトの出発点として利用することができ、時間とリソースを節約することができます。
モデルの互換性
OpenVINOはTensorFlow、PyTorch、ONNx、Caffeを含む多くのディープラーニングフレームワークをサポートしています。これは、好みのフレームワークを使用してモデルをトレーニングし、OpenVINO Toolkitを使用してデプロイのために変換と最適化を行うことができることを意味します。
高性能
OpenVINOは高速な推論のために最適化されており、コンピュータビジョン、ロボティクス、IoTデバイスなどのリアルタイムアプリケーションに適しています。FPGA、GPU、TPUなどのハードウェアアクセラレーションを利用して高スループット低レイテンシを実現しています。
インテルOpenVINOを使用したエッジの未来のAI
AI in Edgeは解決が最も困難な領域です。ハードウェア制約を解決するための最適化されたソリューションを構築することは、OpenVINOの助けを借りればもはや不可能ではありません。このツールキットによるAI in Edgeの未来は、さまざまな産業やアプリケーションを革新する可能性を持っています。
OpenVINOがAI in Edgeに適している理由を見てみましょう。
- まず、お気に入りのディープラーニングフレームワークを使用してモデルを構築し、それをOpenVINOのコアモデルに変換することが主要な手順です。もう一つの選択肢として、OpenVINOモデルズーを使用して事前にトレーニングされたモデルを使用することもできます。
- モデルがトレーニングされたら、次は圧縮です。OpenVINOツールキットにはニューラルネットワーク圧縮フレームワーク(NNCF)があります。
- モデルの最適化プロセスでは、IRデータが使用されます。IRデータとは、ディープラーニングモデルの中間表現を指し、既にOpenVINOで展開のために最適化および変換されているものです。モデルの重みは.XMLおよび.binファイル形式で提供されます。
- モデルが展開される際、OpenVINOインファレンスエンジンは、ターゲットハードウェア上のIRデータをロードして使用し、さまざまなアプリケーションに対して高速かつ効率的な推論を可能にします。
このアプローチにより、OpenVINOはAI in Edgeにおいて重要な役割を果たすことができます。次に、OpenVINOツールキットを使用して画像のテキスト検出を実装するためのコードプロジェクトに取り組んでみましょう。
OpenVINOツールキットを使用した画像のテキスト検出
このプロジェクトの実装では、Google ColabをVoAGIとして使用してアプリケーションを正常に実行します。このプロジェクトでは、OpenVINOモデルズーからhorizontal-text-detection-0001モデルを使用します。この事前トレーニングされたモデルは、入力画像の水平テキストを検出し、データのblobを形状(100,5)で返します。この応答は、(x_min, y_min, x_max, y_max, conf)フォーマットのように見えます。
ステップバイステップのコード実装
インストール
!pip install openvino
必要なライブラリのインポート
このアプリケーションを実行するために、必要なモジュールをインポートしましょう。OpenVINOには、提供されたソースコードURLから事前トレーニング済みの重みをダウンロードするためのutilsヘルパー関数が用意されています。
import urllib.requestbase = "https://raw.githubusercontent.com/openvinotoolkit/openvino_notebooks"utils_file = "/main/notebooks/utils/notebook_utils.py"urllib.request.urlretrieve( url= base + utils_file, filename='notebook_utils.py')from notebook_utils import download_file
notebook_utilsが正常にダウンロードされたことを確認できたら、残りのモジュールをすばやくインポートしましょう。
import openvinoimport cv2import matplotlib.pyplot as pltimport numpy as npfrom pathlib import Path
重みのダウンロード
水平テキスト検出のIRデータモデルウェイトファイルをダウンロードするパスを初期化します。ファイル形式は.xmlおよび.binです。
base_model_dir = Path("./model").expanduser()model_name = "horizontal-text-detection-0001"model_xml_name = f'{model_name}.xml'model_bin_name = f'{model_name}.bin'model_xml_path = base_model_dir / model_xml_namemodel_bin_path = base_model_dir / model_bin_name
以下のコードスニペットでは、事前トレーニング済みのモデルのウェイトが存在するパスを簡素化するために3つの変数を使用しています。
model_zoo = "https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.3/models_bin/1/"algo = "horizontal-text-detection-0001/FP32/"xml_url = "horizontal-text-detection-0001.xml"bin_url = "horizontal-text-detection-0001.bin"model_xml_url = model_zoo+algo+xml_urlmodel_bin_url = model_zoo+algo+bin_urldownload_file(model_xml_url, model_xml_name, base_model_dir)download_file(model_bin_url, model_bin_name, base_model_dir)
モデルの読み込み
OpenVINOはOpenVINOツールキットとの対話に使用するCoreクラスを提供します。Coreクラスは、モデルと推論の実行に関するさまざまなメソッドや関数を提供します。read_modelメソッドを使用してmodel_xml_pathを渡すことでモデルを読み込みます。モデルを読み込んだ後は、特定のターゲットデバイスに対してモデルをコンパイルします。
core = Core()model = core.read_model(model=model_xml_path)compiled_model = core.compile_model(model=model, device_name="CPU")input_layer_ir = compiled_model.input(0)output_layer_ir = compiled_model.output("boxes")
上記のコードスニペットでは、コンパイルされたモデルは入力画像の形状(704,704,3)、RGB画像ですが、PyTorch形式の(1,3,704,704)を返します。ここで、1はバッチサイズ、3はチャンネル数、704は高さと幅です。出力は(x_min、y_min、x_max、y_max、conf)を返します。では、入力画像を読み込んでみましょう。
画像の読み込み
モデルの重みは[1,3,704,704]です。したがって、入力画像をこの形状に合わせてリサイズする必要があります。Google Colabまたはコードエディターで入力画像をアップロードし、この場合、画像ファイルの名前はsample_image.jpgです。
image = cv2.imread("sample_image.jpg")# N,C,H,W = バッチサイズ、チャンネル数、高さ、幅N, C, H, W = input_layer_ir.shape# ネットワークの予想入力サイズに合わせて画像サイズを変更resized_image = cv2.resize(image, (W, H))# ネットワークの入力形状にreshapeします。input_image = np.expand_dims(resized_image.transpose(2, 0, 1), 0)print("モデルの重みの形状:")print(input_layer_ir.shape)print("リサイズ後の画像:")print(input_image.shape)
入力画像を表示します。
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))plt.axis("off")
推論エンジン
以前は、モデルの重みを使用してモデルをコンパイルしました。入力画像に関連してモデルをコンパイルします。
# 推論リクエストを作成します。boxes = compiled_model([input_image])[output_layer_ir]# ゼロのみのボックスを削除します。boxes = boxes[~np.all(boxes == 0, axis=1)]
予測
コンパイルされたモデルは、バウンディングボックスの座標を返します。cv2モジュールを使用して矩形を作成し、putTextを使用して検出されたテキストの上に信頼度を追加します。
def detect_text(bgr_image, resized_image, boxes, threshold=0.3, conf_labels=True): # 画像の比率を計算するために画像の形状を取得します。 (real_y, real_x), (resized_y, resized_x) = bgr_image.shape[:2], resized_image.shape[:2] ratio_x, ratio_y = real_x / resized_x, real_y / resized_y # 画像をBGRからRGB形式に変換します。 rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB) # 非ゼロのボックスを反復処理します。 for box in boxes: # 配列の最後から信頼度を取得します。 conf = box[-1] if conf > threshold: (x_min, y_min, x_max, y_max) = [ int(max(corner_position * ratio_y, 10)) if idx % 2 else int(corner_position * ratio_x) for idx, corner_position in enumerate(box[:-1]) ] # ポジションに基づいてボックスを描画します。パラメータは: # 画像、開始点、終了点、色、太さです。 rgb_image = cv2.rectangle(rgb_image, (x_min, y_min), (x_max, y_max),(0,255, 0), 10) # ポジションと信頼度に基づいて画像にテキストを追加します。 if conf_labels: rgb_image = cv2.putText( rgb_image, f"{conf:.2f}", (x_min, y_min - 10), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 0, 0), 8, cv2.LINE_AA, ) return rgb_image
出力画像を表示します
plt.imshow(detect_text(image, resized_image, boxes));plt.axis("off")
結論
まとめると、OpenVINO Toolkitを使用して画像内のテキストを検出するプロジェクトを成功裏に構築しました。IntelチームはToolkitを絶えず改善しています。OpenVINOはStable Diffusion、ControlNet、Speech-to-textなどの事前トレーニング済みのジェネレーティブAIモデルもサポートしています。
キーポイント
- OpenVINOは、AIディープラーニングモデルを最適化し、オンプレミス、オンデバイス、またはクラウドでアプリケーションを展開するための革新的なオープンソースツールです。
- OpenVINOの主な目標は、さまざまなモデルの量子化と圧縮を行い、推論の精度を損なうことなく、ディープラーニングモデルのサイズを大幅に削減することです。
- このツールキットは、GPU、FPGA、ASIC、TPUなどのハードウェアアクセラレータでAIアプリケーションを展開できます。
- さまざまな産業はOpenVINOを採用し、AIをエッジで活用することで大きな成果を上げることができます。
- モデルズーの事前トレーニング済みモデルの利用は非常に簡単であり、わずか数行のコードで画像内のテキスト検出を実装しました。
よくある質問
この記事に表示されるメディアはAnalytics Vidhyaの所有物ではなく、著者の裁量により使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles