ステップバイステップガイド: FastAPI を使用して YOLO モデルをデプロイする手順

ステップバイステップガイド: FastAPI を使用して YOLO モデルをデプロイする手順

コンピューター ビジョンの分野では、You Only Look Once (YOLO) アルゴリズムが画期的なアルゴリズムとして登場しました。非常に高い精度でリアルタイムに物体を検出できるため、監視や自律走行車から画像やビデオの分析に至るまで、さまざまなアプリケーションで強力なツールとなります。しかし、YOLO の真の可能性は、実際の現実世界のシステムにシームレスに統合されたときにのみ実現されます。ここで、Python で API を構築するための最新の高速 Web フレームワークである FastAPI が登場し、YOLO モデルの展開におけるパートナーとして簡単に利用できるようになります。

YOLO モデルを Web アプリケーションにデプロイし、ユーザーが簡単な API 呼び出しでリアルタイムのオブジェクト検出を実行できるようになることを想像してみてください。スマート セキュリティ システム、野生生物監視アプリケーション、小売分析プラットフォームを構築する場合でも、このガイドでは、開発環境のセットアップから FastAPI を使用して完全に機能する YOLO モデルの展開までのプロセスを順を追って説明します。

このチュートリアルを詳しく読み進めていくと、YOLO の魔法、つまり瞬く間に画像やビデオ内のオブジェクトを識別できる仕組みがわかります。また、この強力なアルゴリズムを、スピードとシンプルさを重視する開発者向けに設計されたフレームワークである FastAPI と統合する技術も習得します。この旅の終わりまでに、クラウド、ローカル サーバー、さらにはエッジ デバイスに展開できる独自のリアルタイム オブジェクト検出 API を作成するためのツールと知識が身につきます。

したがって、経験豊富なコンピューター ビジョン エンジニアであっても、YOLO と FastAPI の世界を探求したい好奇心旺盛な開発者であっても、準備を整えてください。私たちは、YOLO モデルを段階的に展開する専門的な旅を始めます。物体検出の夢を現実にする準備はできていますか?さあ始めましょう!

パート1: 環境の設定

FastAPI を使用して YOLO モデルを展開する世界に飛び込む前に、開発環境が正しく設定されていることを確認する必要があります。このセクションでは、プロセスを段階的に説明します。

1. Pythonをインストールする

まず、システムに Python がインストールされていることを確認します。 Python の最新バージョンは、公式 Web サイト (https://www.python.org/downloads/) からダウンロードするか、Anaconda などのパッケージ マネージャーを使用してダウンロードできます。 Python がインストールされているかどうかを確認するには、ターミナルまたはコマンド プロンプトを開いて次のコマンドを実行します。

 python - version

2. 仮想環境を作成する

プロジェクトの依存関係を分離しておくには、仮想環境を作成するのが最適です。こうすることで、異なるプロジェクト間の競合を回避できます。 Python の組み込み venv モジュールを使用して仮想環境を作成しましょう。ターミナルを開き、プロジェクトのルート ディレクトリに移動します。次のコマンドを実行します。

 # Create a virtual environment (replace 'myenv' with your preferred environment name) python -m venv myenv # Activate the virtual environment (Windows) myenv\Scripts\activate # Activate the virtual environment (macOS/Linux) source myenv/bin/activate

ターミナルプロンプトが変化し、仮想環境がアクティブであることが示されます。

注意: 'myenv' を、希望する仮想環境名に置き換えることを忘れないでください。

3. 依存関係をインストールする

仮想環境で作業するようになったので、必要な依存関係をインストールします。これらには、FastAPI、Uvicorn (FastAPI アプリケーションを提供するためのツール)、YOLO 関連ライブラリ、およびプロジェクトに必要なその他のパッケージが含まれます。 pip を使用してこれらの依存関係をインストールします。

 pip install fastapi uvicorn opencv-python-headless numpy

4. YOLOモデルの設定

YOLO を使用するには、ultralytics から yolov8 ライブラリをインストールする必要があります。

 pip install ultralytics

開発環境がセットアップされたので、YOLO と FastAPI のエキサイティングな世界に飛び込む準備が整いました。次のセクションでは、YOLO のパワーを活用してリアルタイムのオブジェクト検出を行う方法と、それを提供する FastAPI アプリケーションを構築する方法について説明します。

パート2: FastAPIアプリケーションの作成

さあ、モデルをデプロイするための FastAPI アプリケーションの構築を始めましょう。このセクションでは、オブジェクト検出 API の基本を設定するプロセスについて説明します。

1. プロジェクト構造

まず、プロジェクト構造を整理することから始めましょう。 FastAPI プロジェクト用のディレクトリを作成し、そこに移動します。

 mkdir object_detection_api cd object_detection_api

このプロジェクト ディレクトリ内に、FastAPI アプリケーションのさまざまなコンポーネント用のファイルとフォルダーを作成します。

2. FastAPIアプリケーションを初期化する

FastAPI を使用すると、Web アプリケーションの構築が非常に簡単になります。 FastAPI アプリケーション用の Python スクリプト (通常は main.py という名前) を作成します。

 touch main.py

それでは、コードを書き始めましょう。お気に入りのテキスト エディターまたは IDE で main.py を開き、FastAPI をインポートします。これで、FastAPI アプリケーションが初期化されます。このアプリケーションは、オブジェクト検出 API の基盤として機能します。

3. 最初のルートを作成する

FastAPI では、Python 関数を使用してルートを定義します。シンプルな「Hello, World!」ルートから始めましょう。 main.py に次のコードを追加します。

 @app.get("/") async def read_root(): return {"message": "Hello, World!"}

このコードは、ルート URL ("/") への GET リクエストに応答し、"message" フィールドを含む JSON 応答を返すルートを定義します。

4. FastAPIアプリケーションをローカルで実行する

ここで、FastAPI アプリケーションをローカルでテストします。ターミナルを開き、main.py を含むプロジェクト ディレクトリに移動します。まだ行っていない場合は、仮想環境をアクティブ化します。

 source myenv/bin/activate # Replace 'myenv' with your environment name

次に、Uvicorn を使用して FastAPI アプリケーションを実行します。

 uvicorn main:app --reload

このコマンドは、Uvicorn に main.py モジュールからアプリ オブジェクトを実行し、開発時に自動リロードを有効にするように指示します。 FastAPI アプリケーションがローカルで実行されていることを示す出力が表示されます。デフォルトでは http://127.0.0.1:8000 で実行されます。

5. Hello Worldルートにアクセスする

Web ブラウザを開くか、curl などのツールを使用して「Hello, World!」ルートにアクセスします。

 curl http://127.0.0.1:8000/

「Hello, World!」メッセージを含む JSON 応答が返されるはずです。 FastAPI アプリケーションを実行したら、次は、オブジェクト検出用の YOLOv8 モデルを統合するという興味深い部分に進むことができます。次のセクションでは、YOLOv8 モデルを準備し、それを FastAPI とシームレスに統合する方法について説明します。

パート3: YOLOv8とFastAPIの統合

FastAPI アプリケーションが完成したので、リアルタイムのオブジェクト検出のために YOLOv8 モデルを統合するプロセスを詳しく見ていきましょう。このセクションでは、YOLOv8 を FastAPI とシームレスに統合する手順について説明します。

1. YOLOv8モデルをロードする

まず、FastAPI アプリケーションに YOLOv8 モデルをロードしてみましょう。 main.py を開き、ファイルの先頭に次のコードを追加して必要なモジュールをインポートします。

 import cv2 import numpy as np from ultralytics import YOLO

2. ターゲット検出ルートを作成する

ここで、オブジェクト検出用の画像を受け入れるルートを FastAPI で作成しましょう。新しいルーティング関数を次のように定義します。

 from fastapi import File, UploadFile model = YOLO("yolov8n.pt") @app.post("/detect/") async def detect_objects(file: UploadFile): # Process the uploaded image for object detection image_bytes = await file.read() image = np.frombuffer(image_bytes, dtype=np.uint8) image = cv2.imdecode(image, cv2.IMREAD_COLOR) # Perform object detection with YOLOv8 detections = model.predict(image) return {"detections": detections}

ここでは、アップロードされた画像ファイルを受け入れる /detect/ というルートを作成しました。アップロードされた画像に対してオブジェクト検出を実行するために、model.predict() を使用します。

3. テストターゲット検出ルーティング

YOLOv8 を統合したので、オブジェクト検出ルーティングをテストできます。 Uvicorn を使用して FastAPI アプリケーションを起動します。

 uvicorn main:app --reload

次に、オブジェクト検出用の画像ファイルをアップロードするために、 /detect/ルートに POST リクエストが送信されます。これは、 curlや Postman などのツールを使用して実行できます。

 curl -X POST -F "[email protected]" http://127.0.0.1:8000/detect/

オブジェクト検出結果を含む JSON 応答が届きます。おめでとう! YOLOv8 と FastAPI を統合して、リアルタイムのオブジェクト検出を実現しました。次のセクションでは、API を強化し、ドキュメントを追加し、デプロイメント オプションを検討します。

パート4: FastAPIアプリケーションをデプロイする

FastAPI アプリケーションを構築したので、次はそれをデプロイし、オブジェクト検出 API をユーザーが利用できるようにします。このセクションでは、テスト用のローカル展開や本番環境用のクラウドベースの展開など、さまざまな展開オプションについて説明します。

1. テストのためのローカル展開

本番環境にデプロイする前に、FastAPI アプリケーションがローカルで適切に動作するかどうかをテストすることが重要です。 FastAPI アプリケーションをローカルで実行するには、ターミナルを開き、main.py を含むプロジェクト ディレクトリに移動し、仮想環境がまだアクティブ化されていない場合はアクティブ化します。

 source myenv/bin/activate # Replace 'myenv' with your environment name

次に、Uvicorn を使用して FastAPI アプリケーションを起動します。

 uvicorn main:app --reload

これで、FastAPI アプリケーションに http://127.0.0.1:8000/ からアクセスできるようになります。 curl、Postman、または Web ブラウザを使用して API エンドポイントをテストできます。

2. クラウドベースの本番環境への導入

FastAPI アプリケーションを本番環境にデプロイする準備ができたら、クラウドベースのデプロイ オプションをいくつか利用できます。人気のある選択肢としては、次のようなものがあります。

  • AWS (Amazon Cloud Services): AWS Elastic Beanstalk、AWS Lambda、Amazon EC2 などのサービスを使用して、AWS に FastAPI アプリケーションをデプロイできます。
  • Google Cloud Platform (GCP): GCP は、Google App Engine、Google Cloud Functions、または Google Kubernetes Engine (GKE) を使用したデプロイメント オプションを提供します。
  • Microsoft Azure: Azure では、Azure App Service、Azure Functions、または Azure Kubernetes Service (AKS) を使用したデプロイ オプションが提供されます。
  • Heroku: Heroku は、FastAPI アプリケーションを含む Web アプリケーションを簡単にデプロイできるユーザーフレンドリーなプラットフォームです。

具体的な展開方法は、選択したクラウド プロバイダーによって異なる場合があります。通常、次のものが必要になります。

  • アカウントを作成し、選択したクラウド プラットフォームでプロジェクトを設定します。
  • ランタイム環境や依存関係の指定など、デプロイメント設定を構成します。
  • プラットフォームのデプロイメント ツールまたは CLI を使用して、FastAPI アプリケーションをクラウドにデプロイします。
  • 必要に応じて、デプロイされたアプリケーションを監視および拡張します。

3. 適切なサーバーを選択する

クラウドベースのサーバーにデプロイする場合は、サーバーの種類を柔軟に選択できます。一般的なオプションは次のとおりです。

  • HTTP サーバー: Nginx や Apache などの従来の HTTP サーバーの背後に FastAPI アプリケーションをデプロイできます。この設定はパフォーマンスとセキュリティの向上に役立ちます。
  • ASGI サーバー: ASGI (Asynchronous Server Gateway Interface) 展開の場合、Uvicorn、Hypercorn、または Daphne を使用できます。 Uvicorn は通常、FastAPI アプリケーションに推奨されます。
  • サーバーレス: サーバーレス デプロイメントを選択した場合は、AWS Lambda、Azure Functions、または Google Cloud Functions を使用できます。このアプローチはコスト効率が高く、需要に応じて自動的に拡張されます。

4. 継続的インテグレーションと継続的デプロイメント (CI/CD)

デプロイメント プロセスを自動化するには、CI/CD パイプラインを実装することを検討してください。 Jenkins、Travis CI、GitLab CI/CD、GitHub Actions などのツールを使用すると、コード リポジトリに変更がプッシュされたときにテストとデプロイメントを自動化できます。 CI/CD のベスト プラクティスに従うことで、スムーズで信頼性の高いデプロイメント プロセスを保証し、運用環境でのエラーのリスクを軽減できます。

<<:  カナダ工学アカデミー会員のソン・リャン氏:将来の人工知能システムはネットワークの形で存在するだろう

>>:  5四半期連続で前年同期比で減少: AIはデルの危機を逆転できるか?

ブログ    

推薦する

インドネシアのゴミ分別:人工知能が役に立つ

上海市は7月に「史上最も厳しいゴミ分別措置」を実施し始めて以来、ゴミ分別は多くの人々の日常生活におけ...

大型模型シリーズ - RAGの解釈

RAG は、2023 年に最も人気のある LLM ベースのアプリケーション システム アーキテクチャ...

変革管理における生成AIの課題

AI が社会に重大なリスクをもたらすという警告が見出しで報じられているにもかかわらず、ボストン コン...

キャッシュに関して最も懸念される問題は何ですか?種類は何ですか?リサイクル戦略とアルゴリズム?

[[342437]]著者は、正確なタイミング タスクと遅延キュー処理機能を備えた、高同時実行シナリ...

...

次世代ビッグデータ・人工知能基盤技術の発展と動向

2018 年はオープンソース ソフトウェアの歴史の中で最もエキサイティングな年でした。2 件の IP...

インダストリー4.0: AIを活用した障害検出

[[359728]] AI の向上とマシン ビジョン制御の向上を組み合わせることで、スマート製造業界...

中国チームの「6軸セル3Dプリンター」が雑誌でトップに!心筋組織は体外で6ヶ月以上生存する

3Dバイオプリンティング技術は、3Dプリンターを使用して細胞や生物学的材料を含む「インク」を特定の形...

推奨システムにおける自然言語処理 (NLP) の応用

[[195357]]パーソナライズされた推奨はビッグデータ時代に欠かせない技術であり、電子商取引、情...

AIと大量動画が出会うと、IBMは20秒で新時代への扉を開く

序文:約 60,000 時間のビデオから、ある人物の素晴らしい瞬間の 1 分を見つけるにはどうすれば...

会話型 AI は FMCG 業界でどのように導入されていますか?

今日、ますます多くの消費財 (CPG) 企業が、日用消費財 (FMCG) 事業に AI テクノロジー...

マルチラベル分類とは何ですか?ここにいくつかの実用的な古典的な方法があります

これはおそらく、マルチラベル分類のための最も実用的なヒントです。ご存知のとおり、バイナリ分類タスクは...

分散キャッシュの実装: Java と MongoDB のキャッシュ一貫性戦略

インターネット アプリケーションの急速な発展に伴い、分散システムにおけるキャッシュが重要な役割を果た...

中国のトップ 10 の技術革新の一覧。世界をリードする技術も持っています。

国内の科学技術イノベーション主体はいずれも「中核技術を自主的に掌握し、外国の独占を打ち破る」という目...

機械学習と古典的なアルゴリズムの概念をわかりやすい言葉で説明しました。初心者必読

データ分野では、多くの人が機械学習について語っていますが、それが何であるかを明確に説明できる人はごく...