ハギングフェイスにおけるコンピュータビジョンの状況 🤗
'コンピュータビジョンのハギングフェイスにおける状況 🤗'
弊社の自慢は、コミュニティとともに人工知能の分野を民主化することです。その使命の一環として、私たちは過去1年間でコンピュータビジョンに注力し始めました。🤗 Transformersにビジョントランスフォーマー(ViT)を含めるというPRから始まったこの取り組みは、現在では8つの主要なビジョンタスク、3000以上のモデル、およびHugging Face Hub上の100以上のデータセットに成長しました。
ViTがHubに参加して以来、多くのエキサイティングな出来事がありました。このブログ記事では、コンピュータビジョンの持続的な進歩をサポートするために何が起こったのか、そして今後何がやってくるのかをまとめます。
以下は、カバーする内容のリストです:
- サポートされているビジョンタスクとパイプライン
- 独自のビジョンモデルのトレーニング
timm
との統合- Diffusers
- サードパーティーライブラリのサポート
- デプロイメント
- その他多数!
コミュニティの支援:一つずつのタスクを可能にする 👁
Hugging Face Hubは、次の単語予測、マスクの埋め込み、トークン分類、シーケンス分類など、さまざまなタスクのために10万以上のパブリックモデルを収容しています。現在、我々は8つの主要なビジョンタスクをサポートし、多くのモデルチェックポイントを提供しています:
- 画像分類
- 画像セグメンテーション
- (ゼロショット)オブジェクト検出
- ビデオ分類
- 奥行き推定
- 画像から画像への合成
- 無条件画像生成
- ゼロショット画像分類
これらのタスクのそれぞれについて、Hub上で探索するための少なくとも10個のモデルチェックポイントがあります。さらに、ビジョンと言語の交差点に位置するタスクもサポートしています。例えば:
- 画像からテキスト(キャプション、OCR)
- テキストから画像
- ドキュメントの質問応答
- ビジュアルの質問応答
これらのタスクには、ViT、Swin、DETRなどの最先端のトランスフォーマベースのアーキテクチャだけでなく、ConvNeXt、ResNet、RegNetなどの純粋な畳み込みアーキテクチャも含まれます。ResNetなどのアーキテクチャは、多くの産業用途において依然として非常に重要であり、🤗 Transformersではこれらの非トランスフォーマアーキテクチャのサポートも行っています。
また、Hub上のモデルはTransformersライブラリだけでなく、他のサードパーティーライブラリからも提供されていることも重要です。たとえば、Hubでは無条件の画像生成などのタスクをサポートしていますが、Transformersではまだそのタスクをサポートするモデルがありません(次のようなモデルなど)。すべてのMLタスクをサポートすることは、協力的なオープンソースの機械学習エコシステムを育成するための私たちの使命の一環です。
パイプラインのサポート
私たちは、実践者が機械学習を簡単に取り入れるためのツールを提供するためにパイプラインを開発しました。パイプラインは、与えられた入力に対して特定のタスクにおける推論を簡単に行う方法を提供します。パイプラインでは、7つのビジョンタスクをサポートしています。以下は、奥行き推定のためにパイプラインを使用する例です:
from transformers import pipeline
depth_estimator = pipeline(task="depth-estimation", model="Intel/dpt-large")
output = depth_estimator("http://images.cocodataset.org/val2017/000000039769.jpg")
# これは、各ピクセルのメートル単位の奥行きを示す値を持つテンソルです
output["depth"]
ビジュアルの質問応答などのタスクでも、インターフェースは同じままです:
from transformers import pipeline
oracle = pipeline(model="dandelin/vilt-b32-finetuned-vqa")
image_url = "https://huggingface.co/datasets/mishig/sample_images/resolve/main/tiger.jpg"
oracle(question="動物は何をしていますか?", image=image_url, top_k=1)
# [{'score': 0.778620, 'answer': '横たわっている'}]
独自のモデルのトレーニング
既製のモデルを使用して推論を行うことは、始める良い方法ですが、ファインチューニングはコミュニティが最も恩恵を受ける方法です。特に、データセットがカスタムであり、事前学習モデルのパフォーマンスが良くない場合には、ファインチューニングが重要です。
Transformersは、トレーニングに関連するすべてのことに対してTrainer APIを提供しています。現在、Trainer
は、画像分類、画像セグメンテーション、ビデオ分類、物体検出、奥行き推定のタスクをシームレスにサポートしています。他のビジョンタスクのモデルのファインチューニングもサポートされていますが、Trainer
ではサポートされていません。
Transformerモデルに損失計算が含まれている限り、与えられたタスクの損失を計算するためにモデルを微調整することができます。問題がある場合は、GitHubで報告してください。
コードはどこで見つけられますか?
- モデルのドキュメント
- Hugging Faceのノートブック
- Hugging Faceの例示スクリプト
- タスクのページ
Hugging Faceの例示スクリプトには、MAEなどの異なる自己教師あり事前学習戦略や、CLIPなどの対照的な画像テキスト事前学習戦略などが含まれています。これらのスクリプトは、研究コミュニティだけでなく、カスタムデータコーパスでのゼロからの事前学習を実行したい実践者にとっても貴重なリソースです。
ただし、一部のタスクは本来的に微調整に適していません。これには、ゼロショット画像分類(CLIPなど)、ゼロショット物体検出(OWL-ViTなど)、ゼロショットセグメンテーション(CLIPSegなど)などがあります。この記事では、これらのモデルについて再検討します。
データセットとの統合
データセットは、さまざまなモダリティの数千のデータセットに簡単にアクセスできます。先に述べたように、Hubにはコンピュータビジョン向けの100以上のデータセットがあります。ここではいくつかの例を挙げます: ImageNet-1k、Scene Parsing、NYU Depth V2、COYO-700M、LAION-400Mなど。これらのデータセットがHubにあるため、わずか2行のコードで簡単にロードできます:
from datasets import load_dataset
dataset = load_dataset("scene_parse_150")
これらのデータセットに加えて、albumentationsやKorniaなどの拡張ライブラリとの統合サポートも提供しています。コミュニティは、Datasetsの柔軟性とパフォーマンス、およびこれらのライブラリが提供する強力な拡張変換を活用することができます。これらに加えて、画像分類、画像セグメンテーション、物体検出、深度推定のための専用のデータロードガイドも提供しています。
🤗 🤝 timm
timm
は、最新のPyTorch画像モデル、事前学習済みの重み、およびトレーニング、推論、および検証のためのユーティリティスクリプトのオープンソースコレクションです。
Hubには200以上のtimm
モデルがあり、さらに増えています。この統合について詳しく知るには、ドキュメントを参照してください。
🧨 Diffusers
Diffusersは、事前学習済みのビジョンとオーディオの拡散モデルを提供し、推論とトレーニングのためのモジュラーツールボックスとして機能します。このライブラリを使用すると、自然言語の入力から合理的な画像を生成するなど、他の創造的な用途を含むことができます。以下に例を示します:
from diffusers import DiffusionPipeline
generator = DiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
generator.to(“cuda”)
image = generator("アーティストが描いたリスの画像").images[0]
この種の技術は、新世代のクリエイティブアプリケーションを活性化するだけでなく、異なるバックグラウンドから来たアーティストにも役立ちます。Diffusersと異なるユースケースについて詳しく知るには、公式ドキュメントを参照してください。
Diffusionベースのモデルに関する文献は急速に発展しているため、私たちはJonathan Whitakerと協力してそれに関するコースを開発しました。このコースは無料ですので、こちらをチェックしてください。
サードパーティのライブラリへのサポート
Hugging Faceエコシステムの中心には、Hugging Face Hubがあり、人々が機械学習で効果的に協力できるようにします。先に述べたように、Hubでは🤗 Transformersのモデルだけでなく、他のサードパーティのライブラリのモデルもサポートしています。このため、独自のライブラリをHubと統合するためのいくつかのユーティリティを提供しています。これを行う主な利点の1つは、モデルやデータセットなどのアーティファクトをコミュニティと簡単に共有できるようになるため、ユーザーがモデルを試すことが容易になることです。
Hubにモデルをホストすると、それらにカスタムの推論ウィジェットを追加することもできます。推論ウィジェットを使用すると、ユーザーはモデルを素早く確認することができます。これにより、ユーザーエンゲージメントの向上に役立ちます。
コンピュータビジョンデモのためのスペース
Spacesを使用すると、機械学習モデルを簡単にデモンストレーションすることができます。SpacesはGradio、Streamlit、およびDockerとの直接の統合をサポートしており、実践者がモデルをショーケースする際に大きな柔軟性を持つことができます。独自の機械学習フレームワークを持ち込んでSpacesでデモを構築することができます。
Gradioライブラリは、ビデオ、ギャラリー、およびModel3Dなどの空間上でコンピュータビジョンアプリケーションを構築するためのいくつかのコンポーネントを提供しています。コミュニティは、Spacesによって駆動されるいくつかの素晴らしいコンピュータビジョンアプリケーションの構築に取り組んできました:
- 入力画像の予測された深度マップから3Dボクセルを生成する
- オープンボキャブラリの意味セグメンテーション
- キャプションを生成してビデオをナレーションする
- YouTubeのビデオを分類する
- ゼロショットビデオ分類
- ビジュアル質問応答
- ゼロショット画像分類を使用して、キャプションを生成するための最適な画像を見つける
🤗 AutoTrain
AutoTrainは、テキスト分類、テキスト要約、固有表現認識などの最先端の機械学習モデルを「ノーコード」でトレーニングするためのソリューションを提供しています。コンピュータビジョンについては、現在は画像分類のサポートがありますが、今後もさらなるタスクカバレッジが期待できます。
AutoTrainはまた、自動モデル評価も可能にします。このアプリケーションでは、🤗 TransformersモデルをHub上のさまざまなデータセットで評価することができます。評価結果は公開のリーダーボードに表示されます。詳細については、このブログ記事をご覧ください。
技術的な哲学
このセクションでは、コンピュータビジョンのサポートを🤗Transformersに追加する際の設計上の選択肢について、コミュニティが認識することができるように、私たちの哲学を共有したいと思います。
TransformersはNLPから始まりましたが、現在はビジョン、音声、ビジョン言語、強化学習など、複数のモダリティをサポートしています。これらのすべてのモダリティに対して、Transformersの対応するモデルは共通の利点を享受しています:
from_pretrained()
を使った簡単なモデルのダウンロードpush_to_hub()
を使った簡単なモデルのアップロード- 効率的なチェックポイントの分割技術による大規模なチェックポイントのロードのサポート
- Optimumなどの最適化サポート
- モデル設定からの初期化
- PyTorchとTensorFlowの両方のサポート(非網羅的)
- その他多数
トークナイザーとは異なり、ビジョンモデルのためのデータの準備を担当するプリプロセッサ(このような)があります。私たちは、ビジョンモデルを使用するユーザー体験が引き続き簡単で似ているようにするために、努力を重ねてきました:
from transformers import ViTImageProcessor, ViTForImageClassification
import torch
from datasets import load_dataset
dataset = load_dataset("huggingface/cats-image")
image = dataset["test"]["image"][0]
image_processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224")
model = ViTForImageClassification.from_pretrained("google/vit-base-patch16-224")
inputs = image_processor(image, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
# モデルは1000のImageNetクラスの1つを予測します
predicted_label = logits.argmax(-1).item()
print(model.config.id2label[predicted_label])
# エジプトの猫
オブジェクト検出のような難しいタスクでも、ユーザー体験はあまり変わりません:
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
image_processor = AutoImageProcessor.from_pretrained("microsoft/conditional-detr-resnet-50")
model = AutoModelForObjectDetection.from_pretrained("microsoft/conditional-detr-resnet-50")
inputs = image_processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# outputs(バウンディングボックスとクラスのロジット)をCOCO APIに変換する
target_sizes = torch.tensor([image.size[::-1]])
results = image_processor.post_process_object_detection(
outputs, threshold=0.5, target_sizes=target_sizes
)[0]
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
box = [round(i, 2) for i in box.tolist()]
print(
f"位置{box}で{model.config.id2label[label.item()]}を{round(score.item(), 3)}の確信度で検出しました"
)
結果:
位置[38.31, 72.1, 177.63, 118.45]で信頼度0.833でリモコンを検出しました
位置[9.2, 51.38, 321.13, 469.0]で信頼度0.831で猫を検出しました
位置[340.3, 16.85, 642.93, 370.95]で信頼度0.804で猫を検出しました
位置[334.48, 73.49, 366.37, 190.01]で信頼度0.683でリモコンを検出しました
位置[0.52, 1.19, 640.35, 475.1]で信頼度0.535でソファーを検出しました
ビジョンのためのゼロショットモデル
セグメンテーションや検出などのコアなビジョンタスクを興味深い方法で再定式化し、さらなる柔軟性をもたらすモデルが急増しています。我々はTransformersからいくつかのモデルをサポートしています:
- CLIPは、プロンプトを使用してゼロショットの画像分類を可能にします。画像を与えると、CLIPモデルに対して「{}の画像」という自然言語クエリをプロンプトとして与えます。答えとしてクラスラベルを得ることを期待しています。
- OWL-ViTは、言語条件つきのゼロショットオブジェクト検出と画像条件つきのワンショットオブジェクト検出を可能にします。つまり、学習中にそれらを検出することをモデルが学習しなかったとしても、画像中のオブジェクトを検出することができます!詳細については、このノートブックを参照してください。
- CLIPSegは、言語条件つきのゼロショット画像セグメンテーションと画像条件つきのワンショット画像セグメンテーションをサポートしています。つまり、学習中にそれらをセグメントすることをモデルが学習しなかったとしても、画像中のオブジェクトをセグメントすることができます!このアイデアを示すこのブログ記事を参照してください。GroupViTもゼロショットセグメンテーションのタスクをサポートしています。
- X-CLIPは、ビデオへのゼロショット汎化を紹介しています。具体的には、ゼロショットのビデオ分類をサポートしています。詳細については、このノートブックをチェックしてください。
コミュニティは、🤗Transformersからさらに多くのビジョンのためのゼロショットモデルのサポートが近日中に期待できます。
デプロイメント
私たちのCTOであるJulienの言葉を借りれば、「本物のアーティストは出荷する」🚀
これらのビジョンモデルのデプロイメントは、🤗Inference Endpointsを介してサポートしています。Inference Endpointsは、画像分類、オブジェクト検出、画像セグメンテーションに関連する互換性のあるモデルと直接統合されます。他のタスクには、カスタムハンドラを使用することができます。また、🤗Transformersから多くのビジョンモデルを提供しているため、デプロイメントにはカスタムハンドラの使用または次のリソースの利用をお勧めします:
- TF Servingを使用したHugging FaceでのTensorFlowビジョンモデルのデプロイメント
- TF Servingを使用したKubernetesでの🤗 ViTのデプロイメント
- Vertex AIでの🤗 ViTのデプロイメント
- TFXとVertex AIでのViTのデプロイメント
結論
この記事では、Hugging Faceエコシステムから現在サポートされているものを紹介し、次世代のコンピュータビジョンアプリケーションの開発を支援することを目指しました。これらのオファリングを使用して、信頼性のあるアプリケーションを構築することを楽しんでいただければ幸いです。
しかし、まだまだやるべきことはたくさんあります。以下にいくつかの予定されていることをご紹介します:
- 🤗Datasetsからのビデオの直接サポート
- 画像の類似性など、より産業に関連したタスクのサポート
- 画像データセットのTensorFlowとの相互運用性
- 🤗コミュニティによるコンピュータビジョンのコース
いつものように、パッチ、PR、モデルチェックポイント、データセット、その他の貢献は歓迎します!🤗
謝辞:Omar Sanseviero、Nate Raw、Niels Rogge、Alara Dirik、Amy Roberts、Maria Khalusova、Lysandre Debutによるブログのドラフトへの厳格かつタイムリーなレビューに感謝します。ブログのサムネイルを作成してくれたChunte Leeにも感謝します。
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