Transformers.js v4 入門ガイド
Hugging Faceが開発するブラウザ向けAI推論ライブラリ。サーバー不要・完全無料でAIをブラウザ上で実行できます。v4の新機能と実践コードを徹底解説。
目次
1. Transformers.jsとは
Transformers.jsは、Hugging Faceが開発するJavaScript/TypeScript向けのAI推論ライブラリです。 PythonのTransformersライブラリと同等のAPIをJavaScriptで提供し、ブラウザやNode.js上でAIモデルを直接実行できます。
最大の特徴はサーバーが一切不要であること。ユーザーのブラウザ内でモデルの読み込みから推論まですべて完結するため、 データがデバイスの外に出ることがありません。プライバシーに配慮したAIアプリケーションを構築でき、APIコストもゼロです。
完全プライバシー
データはブラウザ内で処理。サーバーに送信されません。
完全無料
APIキー不要・課金なし。モデルはHugging Faceから無料取得。
オフライン対応
初回ダウンロード後はキャッシュから実行。ネット接続不要。
低遅延
ネットワーク往復なし。デバイス上で即座に推論結果を取得。
2. バージョンの歴史
v2(2023年)
- ✓ONNX Runtime Web(WASM)ベースの推論
- ✓基本的なNLPタスク(テキスト分類・翻訳・要約)をサポート
- ✓約30種のモデルアーキテクチャに対応
v3(2024年)
- ✓WebGPU対応を追加(GPU高速化)
- ✓Vision系タスク(画像分類・物体検出・セグメンテーション)を大幅強化
- ✓100+モデルアーキテクチャに拡大
- ✓Whisper(音声認識)、SAM(セグメンテーション)など大型モデル対応
v4(2025年〜)
- ✓C++ WebGPUランタイムで3-10倍の高速化を実現
- ✓200+モデルアーキテクチャをサポート
- ✓Qwen3、SmolLM2などの最新LLMに対応
- ✓マルチモーダルモデル(画像+テキスト)のネイティブサポート
- ✓メモリ効率の大幅改善(大型モデルでもブラウザで動作)
3. v4の新機能
C++ WebGPUランタイム
v4の最大の進化は、推論バックエンドが刷新されたことです。従来のONNX Runtime Web(JavaScript/WASM)から、 C++で実装されたネイティブWebGPUランタイムに移行し、3-10倍の高速化を実現しました。
特にGPUを搭載したデバイスでは劇的な速度向上が見られ、リアルタイム推論が実用レベルになりました。 テキスト生成では毎秒50-100トークン以上の速度が出るケースもあります。
200+ モデルアーキテクチャ対応
BERT、GPT-2、ViT、Whisper、SAMなどの定番モデルに加え、v4では以下のような最新モデルにも対応しています。
パフォーマンス比較
※ 計測環境: M2 MacBook Pro / Chrome 130 / WebGPU有効。実際の速度はデバイスにより異なります。経験則(要検証)
4. インストールと基本セットアップ
Transformers.js v4はnpmからインストールできます。React / Next.js / Vite / vanilla JSなど、あらゆるフロントエンドフレームワークで利用可能です。
# npm
npm install @huggingface/transformers
# yarn
yarn add @huggingface/transformers
# pnpm
pnpm add @huggingface/transformers基本的な使い方
import { pipeline } from "@huggingface/transformers";
// パイプラインを作成(タスクとモデルを指定)
const classifier = await pipeline(
"image-classification", // タスク名
"Xenova/mobilenetv2_1.0_224", // モデルID
{ device: "webgpu" } // v4: WebGPUを使用
);
// 推論実行
const result = await classifier("https://example.com/photo.jpg");
console.log(result);
// => [{ label: "tabby cat", score: 0.92 }, ...]ポイント
- -
pipeline()はタスク名とモデルIDを指定するだけでモデルをダウンロード・初期化 - - 初回はHugging Faceからモデルをダウンロード(数十MB〜数百MB)
- - 2回目以降はブラウザのキャッシュから読み込み(オフライン対応)
- -
device: "webgpu"を指定するとGPUアクセラレーションが有効化
5. 画像分類(Image Classification)
画像に写っているものを分類するタスクです。1000カテゴリの物体を識別するImageNetモデルや、 特定ドメイン向けのカスタムモデルを利用できます。
import { pipeline } from "@huggingface/transformers";
// MobileNetV2で画像分類(軽量・高速)
const classifier = await pipeline(
"image-classification",
"Xenova/mobilenetv2_1.0_224",
{ device: "webgpu" }
);
// ファイルまたはURLから分類
const result = await classifier(imageElement);
console.log(result);
// => [
// { label: "golden retriever", score: 0.89 },
// { label: "Labrador retriever", score: 0.05 },
// { label: "cocker spaniel", score: 0.02 }
// ]
// Top-5結果を取得
const top5 = await classifier(imageElement, { topk: 5 });6. 物体検出(Object Detection)
画像内の物体の位置(バウンディングボックス)とカテゴリを同時に検出します。 YOLO系やDETRなどのモデルが利用可能です。
import { pipeline } from "@huggingface/transformers";
// YOLOv10で物体検出(高速・高精度)
const detector = await pipeline(
"object-detection",
"onnx-community/yolov10n",
{ device: "webgpu" }
);
const result = await detector(imageElement, {
threshold: 0.5, // 信頼度50%以上のみ
});
console.log(result);
// => [
// { label: "person", score: 0.95,
// box: { xmin: 10, ymin: 20, xmax: 200, ymax: 400 } },
// { label: "dog", score: 0.88,
// box: { xmin: 300, ymin: 150, xmax: 500, ymax: 350 } }
// ]
// Canvasにバウンディングボックスを描画
result.forEach(({ label, score, box }) => {
ctx.strokeRect(box.xmin, box.ymin,
box.xmax - box.xmin, box.ymax - box.ymin);
ctx.fillText(
`${label} ${(score * 100).toFixed(0)}%`,
box.xmin, box.ymin - 5
);
});7. テキスト生成(Qwen / SmolLM)
v4ではブラウザ上でのLLM(大規模言語モデル)推論が実用レベルに到達しました。 Qwen3(0.6B-4B)やSmolLM2(135M-1.7B)などの軽量LLMを、WebGPU高速化で快適に動かせます。
import { pipeline } from "@huggingface/transformers";
// Qwen3 0.6B(ブラウザで動く軽量LLM)
const generator = await pipeline(
"text-generation",
"onnx-community/Qwen3-0.6B-ONNX",
{ device: "webgpu" }
);
// テキスト生成
const result = await generator(
"エッジAIの利点を3つ教えてください。",
{
max_new_tokens: 256,
temperature: 0.7,
do_sample: true,
}
);
console.log(result[0].generated_text);
// ストリーミング生成(1トークンずつ出力)
const streamer = await pipeline(
"text-generation",
"onnx-community/SmolLM2-360M-Instruct-ONNX",
{ device: "webgpu" }
);
for await (const token of streamer.stream("こんにちは!")) {
process.stdout.write(token);
}8. 音声認識(Whisper)
OpenAIのWhisperモデルをブラウザ上で実行し、音声をテキストに変換します。 日本語を含む100以上の言語に対応。v4のWebGPU高速化により、音声のリアルタイム文字起こしが可能になりました。
import { pipeline } from "@huggingface/transformers";
// Whisper small(日本語対応の音声認識)
const transcriber = await pipeline(
"automatic-speech-recognition",
"onnx-community/whisper-small",
{
device: "webgpu",
dtype: "fp16", // 半精度でメモリ削減
}
);
// 音声ファイルから文字起こし
const result = await transcriber(audioBlob, {
language: "japanese",
task: "transcribe",
chunk_length_s: 30, // 30秒ずつ処理
stride_length_s: 5, // 5秒のオーバーラップ
return_timestamps: true, // タイムスタンプ付き
});
console.log(result.text);
// => "エッジAIとは、クラウドではなく..."
console.log(result.chunks);
// => [
// { text: "エッジAIとは、", timestamp: [0.0, 1.5] },
// { text: "クラウドではなく...", timestamp: [1.5, 3.2] }
// ]当サイトで体験
9. 画像セグメンテーション(SAM)
Meta AIのSAM(Segment Anything Model)をブラウザ上で実行し、画像内の任意の物体をピクセルレベルで切り出します。 クリックやプロンプトで指定した領域を高精度にセグメンテーションできます。
import {
SamModel, AutoProcessor, RawImage
} from "@huggingface/transformers";
// SAMモデルとプロセッサをロード
const model = await SamModel.from_pretrained(
"Xenova/sam-vit-base",
{ device: "webgpu" }
);
const processor = await AutoProcessor.from_pretrained(
"Xenova/sam-vit-base"
);
// 画像を読み込み
const image = await RawImage.read("photo.jpg");
// クリック座標を指定してセグメンテーション
const inputs = await processor(image, {
input_points: [[[450, 600]]], // クリック位置
input_labels: [[1]], // 1=前景, 0=背景
});
// 推論実行
const outputs = await model(inputs);
const masks = await processor.post_process_masks(
outputs.pred_masks,
inputs.original_sizes,
inputs.reshaped_input_sizes,
);
// masks[0] にセグメンテーションマスクが格納当サイトで体験
10. バックエンド比較
Transformers.js v4は3つの推論バックエンドを選択できます。デバイスやブラウザの対応状況に応じて最適なバックエンドを選びましょう。
// バックエンドの切り替え方法
// WebGPU(推奨 - 最速)
const pipe = await pipeline("task", "model", {
device: "webgpu"
});
// WASM(フォールバック - 全ブラウザ対応)
const pipe = await pipeline("task", "model", {
device: "wasm"
});
// 自動選択(WebGPU対応ならWebGPU、非対応ならWASM)
const device = navigator.gpu ? "webgpu" : "wasm";
const pipe = await pipeline("task", "model", { device });11. カスタムモデルのONNX変換
独自に学習したPyTorchモデルをTransformers.jsで使うには、ONNX形式に変換する必要があります。 Hugging Faceのoptimumライブラリを使えば、コマンド1つで変換できます。
# Optimumをインストール
pip install optimum[exporters]
# PyTorchモデルをONNXに変換
optimum-cli export onnx \
--model your-model-name \
--task image-classification \
./onnx_model/
# 量子化(モデルサイズを1/4に圧縮)
optimum-cli export onnx \
--model your-model-name \
--task image-classification \
--optimize O3 \
./onnx_model_quantized/# Hugging Face Hubにアップロード
huggingface-cli upload your-username/your-model-onnx \
./onnx_model/
# Transformers.jsから使用
import { pipeline } from "@huggingface/transformers";
const pipe = await pipeline(
"image-classification",
"your-username/your-model-onnx",
{ device: "webgpu" }
);注意点
- - すべてのPyTorch演算がONNXでサポートされているわけではありません
- - カスタムレイヤーを使用している場合は手動でのグラフ修正が必要な場合があります
- - 量子化するとモデルサイズは大幅に減りますが、若干の精度低下があります
- - 変換前にPython上で動作確認を行ってからONNXに変換しましょう
12. パフォーマンス最適化Tips
WebGPUを優先的に使用
navigator.gpuをチェックし、対応ブラウザではWebGPUを自動選択。非対応時はWASMにフォールバック。
量子化モデルを選択
fp16やint8量子化モデルを使うことで、ダウンロードサイズとメモリ使用量を大幅削減。精度への影響は最小限。
Web Workerで非同期処理
モデルの読み込みと推論をWeb Workerで実行し、メインスレッドのブロックを防止。UIの応答性を維持。
キャッシュ戦略の活用
Cache APIやIndexedDBを活用してモデルをキャッシュ。2回目以降の読み込みを高速化し、オフライン対応も実現。
入力サイズの最適化
画像の入力サイズを必要最小限にリサイズ。512x512 → 224x224に縮小するだけで推論速度が5倍以上改善。
バッチ処理の活用
複数の画像やテキストをまとめて推論するバッチ処理で、GPUの並列処理能力を最大限活用。
13. 関連デモで体験する
当サイトでは、Transformers.jsを使ったさまざまなAIデモをブラウザ上で体験できます。すべて無料・サーバー不要で動作します。