改訂モデルスタック報告 — YOLOX-Nano + mahjong_huge + ONNX Runtime Web
商用利用クリーンな OSS フルスタック (Apache 2.0 / CC BY 4.0 / MIT) で Mahjong Vision を構築する技術選定書
📅 改訂日: 2026-05-14
🎯 目的: クラウドファンディング・量産フェーズの法務リスク排除
📄 ライセンス: Apache 2.0 + CC BY 4.0 + MIT
← INDEX
設計ボトルネック
緑卓実測 + RF 判断
公開モデル素性
転移学習
目次
エグゼクティブサマリ
新スタック構成 (4 レイヤー)
YOLOX-Nano 詳細
mahjong_huge / Riichi Mahjong Detection データセット
FluffyStuff/riichi-mahjong-tiles SVG 素材
ONNX Runtime Web ランタイム
旧スタック (YOLOv8 + Roboflow) との比較
移行ステップ + 想定工数
クレジット表記 (CC BY 4.0 帰属表示)
1. エグゼクティブサマリ
結論: Mahjong Vision のモデル + 推論ランタイムを
YOLOX-Nano (Apache 2.0) + mahjong_huge (CC BY 4.0) + FluffyStuff tiles (CC BY 4.0) + ONNX Runtime Web (MIT)
のフル OSS スタックに改訂する。これにより:
YOLOv8 (Ultralytics AGPL-3.0) の 商用利用時のソース開示義務 を回避
Roboflow Hosted Inference (¥9,000/月) の 固定費を排除 (関連: Roboflow 契約判断レポート )
ブラウザ内推論 (ORT Web) で サーバーレス・プライバシー保護 な実機デモ実現
FluffyStuff の SVG タイルで 合成データ品質が向上 (現在の procedural モードから本物相当に)
1.1 1 行サマリ (帰属表示用)
検出モデル: YOLOX-Nano (Copyright (c) 2021-2022 Megvii Inc., Apache License 2.0)
学習データ: mahjong_huge / Riichi Mahjong Detection by riichimahjongdetection (CC BY 4.0)
改変: 2 つのデータセットを統合、アノテーション形式を YOLO から COCO に変換、
クラス体系を日本リーチ麻雀標準 37 クラスに統一。本データセットを用いて検出モデルを学習。
牌画像: riichi-mahjong-tiles by Martin Persson (CC BY 4.0)
改変: SVG を 120×160 PNG にエクスポートして使用。
推論ランタイム: ONNX Runtime Web (Microsoft, MIT License)
2. 新スタック構成 (4 レイヤー)
L1: 検出モデル
YOLOX-Nano
Megvii Inc. が 2021 年に発表した anchor-free YOLO。Nano サイズで 0.9M params、416×416 入力、CPU 推論 25ms/枚目安。
Apache License 2.0
L2: 訓練データ
mahjong_huge / Riichi Mahjong Detection
Roboflow Universe で公開されている大規模リーチ麻雀検出データセット。複数の関連プロジェクトを統合し 37 クラスに統一。
CC BY 4.0
L3: 合成データ素材
FluffyStuff/riichi-mahjong-tiles
Martin Persson 原画ベースの SVG 麻雀牌。萬子・筒子・索子・字牌 + 赤牌 + 裏面の全種をカバー。
CC BY 4.0
L4: 推論ランタイム
ONNX Runtime Web
Microsoft 製のクロスプラットフォーム推論エンジン。WebAssembly + WebGL でブラウザ内 YOLO 推論 を実現。
MIT License
ライセンスの組み合わせ可否:
Apache 2.0 + CC BY 4.0 + MIT の組み合わせは 商用製品にそのまま配布可能 。
必要なのは「クレジット表記の同梱」のみ (本ドキュメント Section 9 参照)。
AGPL-3.0 のような派生物ソース開示義務はゼロ 。
3. YOLOX-Nano 詳細
3.1 仕様
項目 値
公式リポジトリ github.com/Megvii-BaseDetection/YOLOX
ライセンス Apache License 2.0 (LICENSE )
Author Megvii Inc. (旷视科技, 北京)
パラメータ数 約 0.9M (Nano), 8.9M (Small)
入力解像度 416×416 (Nano 標準), 640×640 (Small)
アンカー anchor-free (NMS のみ)
論文 "YOLOX: Exceeding YOLO Series in 2021" (arXiv:2107.08430)
COCO mAP@0.5:0.95 (Nano) 25.8% (416×416), Tesla V100 で 65 FPS
ONNX エクスポート 公式 tools/export_onnx.py でサポート
3.2 YOLOv8 (Ultralytics, AGPL-3.0) との比較
項目 YOLOX-Nano YOLOv8n (Ultralytics)
ライセンス Apache 2.0 (商用クリーン) AGPL-3.0 (商用配布で開示義務)
params 0.9M 3.2M
COCO mAP@0.5:0.95 25.8% 37.3%
商用ライセンス料 無料 $1,000+/月 (Enterprise plan)
ONNX export 公式サポート 公式サポート
商用配布 OK (帰属表示のみ)AGPL-3.0 準拠が必要 (ソース開示 or Enterprise 購入)
3.3 訓練コマンド (実行例)
# 1. リポジトリ取得
git clone https://github.com/Megvii-BaseDetection/YOLOX.git
cd YOLOX
pip install -r requirements.txt
pip install -v -e .
# 2. データセットを COCO 形式に配置 (詳細は次セクション)
# datasets/mahjong/
# ├── annotations/
# │ ├── train.json
# │ └── val.json
# ├── train/ # 画像ファイル
# └── val/
# 3. exp ファイルを用意 (exps/example/mahjong_nano.py)
# 内容: depth=0.33, width=0.25, num_classes=37, data_dir="datasets/mahjong"
# 4. 訓練
python tools/train.py -f exps/example/mahjong_nano.py -d 1 -b 64 --fp16
# 5. ONNX エクスポート
python tools/export_onnx.py \
--output-name yolox_nano_mahjong.onnx \
-f exps/example/mahjong_nano.py \
-c YOLOX_outputs/mahjong_nano/best_ckpt.pth
4. mahjong_huge / Riichi Mahjong Detection データセット
4.1 データセット情報
4.2 改変方針 (本プロジェクト用)
2 つのデータセット (Japanese Riichi + Chinese Mahjong から日本牌を抽出) を統合
アノテーション形式を YOLO 形式から COCO JSON 形式に変換 (YOLOX 標準が COCO)
クラス体系を日本リーチ麻雀標準 37 クラスに統一
本プロジェクトで抽出した M-League フレーム (実物 201 枚) を追加
合成データ 5,000 枚を追加 (Section 5 参照)
4.3 想定データ規模
ソース 枚数
mahjong_huge / Riichi Mahjong Detection 数千枚 (実 download 後に確定)
本プロジェクト M-League フレーム (マスク済) 201 枚
合成データ (FluffyStuff SVG ベース) 5,000 枚
合計 1 万枚規模 = MVP 訓練に十分
5. FluffyStuff/riichi-mahjong-tiles SVG 素材
5.1 素材情報
項目 値
リポジトリ github.com/FluffyStuff/riichi-mahjong-tiles
原画著作者 Martin Persson (martinpersson.org)
ベクター化 FluffyStuff および後継 contributors
ライセンス CC BY 4.0
形式 SVG (Regular + Black variants)
カバー範囲 萬子 1-9・筒子 1-9・索子 1-9・字牌 7・赤牌 (5m赤・5p赤・5s赤)・裏面
5.2 合成データ生成への組込
現状の scripts/generate-synthetic-mahjong.py は procedural モード (白枠 + 中央文字) で動作中。
FluffyStuff SVG を 120×160 PNG にエクスポートして synth/tiles/ に配置すると、
本物相当のタイル絵柄 で訓練データを生成できる。
5.3 SVG → PNG エクスポートコマンド
# Inkscape CLI で一括エクスポート (Windows)
$tiles = Get-ChildItem "riichi-mahjong-tiles/Regular/*.svg"
foreach ($svg in $tiles) {
$png = "synth/tiles/$($svg.BaseName).png"
inkscape --export-type=png --export-width=120 --export-height=160 --export-filename=$png $svg.FullName
}
# または Python (cairosvg)
import cairosvg
import os
for svg in os.listdir("riichi-mahjong-tiles/Regular/"):
cairosvg.svg2png(
url=f"riichi-mahjong-tiles/Regular/{svg}",
write_to=f"synth/tiles/{svg.replace('.svg', '.png')}",
output_width=120, output_height=160,
)
5.4 既存 procedural 素材との比較
項目 procedural モード (現状) FluffyStuff SVG (改訂後)
視覚品質 白枠 + 文字のみ 本物相当の絵柄
萬子の漢数字 「1m」等の英数字 正しい漢数字 (一二三四...)
筒子の丸模様 未再現 正確な丸数表現
索子の竹模様 未再現 正確な竹本数表現
字牌の文字 東南西北白發中 装飾入りで本物相当
赤牌 未対応 5m/5p/5s 赤がある
裏面 未対応 あり
合成品質 PoC レベル 訓練データとして実用レベル
6. ONNX Runtime Web ランタイム
6.1 仕様
項目 値
提供者 Microsoft
公式サイト onnxruntime.ai/docs/tutorials/web/
ライセンス MIT License
npm パッケージ onnxruntime-web
バックエンド WebAssembly (SIMD), WebGL, WebGPU
対応ブラウザ Chrome / Edge / Firefox / Safari (WebGPU は限定)
6.2 ブラウザ内推論の利点
サーバーレス : 推論コストゼロ (ユーザーの CPU/GPU で動作)
プライバシー : 画像がサーバーに送られない (麻雀対局の私的データ保護)
オフライン動作 : ネット切断時も継続
低遅延 : ネットワーク往復ゼロ (50-100ms 削減)
スケール無制限 : 100 ユーザー / 10,000 ユーザーでもサーバー費ゼロ
6.3 統合コード例 (TypeScript)
// docs-site/live-demo.html で動作させるコード骨格
import * as ort from "onnxruntime-web";
async function loadModel() {
const session = await ort.InferenceSession.create(
"/models/yolox_nano_mahjong.onnx",
{ executionProviders: ["wasm"] }
);
return session;
}
async function detect(session: ort.InferenceSession, imageData: ImageData) {
// 1. 前処理 (416x416 リサイズ + 正規化)
const tensor = preprocess(imageData);
// 2. 推論
const results = await session.run({ images: tensor });
// 3. 後処理 (NMS, デコード)
return postprocess(results.output);
}
6.4 Cloudflare Pages との相性
本プロジェクトはすでに mahjong-scorekeeping-docs.pages.dev を Cloudflare Pages で公開中。
ONNX Runtime Web は 静的ファイル (.onnx) として配信できる ので、
Pages にモデルをアップロードするだけで 無料でブラウザデモが公開可能 :
docs-site/
├── index.html
├── live-demo.html # 新規: ブラウザ推論デモ
└── models/
└── yolox_nano_mahjong.onnx # 約 3-5 MB
7. 旧スタック (YOLOv8 + Roboflow) との比較
7.1 全レイヤー比較表
レイヤー 旧スタック 新スタック (本書) 改善
検出モデル
YOLOv8m (Ultralytics)
YOLOX-Nano (Megvii)
ライセンス: AGPL-3.0 → Apache 2.0
モデル課金
Enterprise $1,000+/月
無料
¥120,000/月 削減
訓練データ
test-upsgd/mahjong-tiles (29 枚)
mahjong_huge (数千枚) + 自前
規模 100 倍以上
訓練インフラ
Roboflow Cloud Training
ローカル GPU (RTX4090) で YOLOX 訓練
制御権 + コスト削減
推論インフラ
Roboflow Hosted ($60/月)
ONNX Runtime Web (無料・ブラウザ)
サーバーレス・プライバシー強化
合成データ素材
procedural (白枠 + 文字)
FluffyStuff SVG (本物相当)
合成品質大幅向上
合計年間運用費
¥108,000-¥240,000+
¥0
¥108K-¥240K 節約
商用配布
AGPL-3.0 注意 (ソース開示 or Enterprise)
クレジット表記のみ
法務リスク排除
7.2 ライセンス互換性マトリクス
組み合わせ 互換性 備考
Apache 2.0 (YOLOX) + CC BY 4.0 (データ・素材) ✅ 完全互換 帰属表示で OK
Apache 2.0 (YOLOX) + MIT (ORT Web) ✅ 完全互換 MIT は最寛容
Apache 2.0 + AGPL-3.0 ❌ 不互換 AGPL は混合不可
商用 + 私的修正 ✅ Apache/MIT/CC BY 全て OK 修正・販売・配布自由
8. 移行ステップ + 想定工数
8.1 移行 Phase 計画
Phase 作業 工数 成果物
P1
YOLOX リポジトリ clone + Python 環境構築
2 時間
動作確認済 venv
P2
mahjong_huge データセット ダウンロード + COCO 変換 + クラス統一
4 時間
datasets/mahjong/
P3
FluffyStuff SVG → 120×160 PNG エクスポート + synth/tiles/ に配置
1 時間
34 種 PNG タイル
P4
合成データ 5,000 枚 再生成 (本物素材使用)
0.5 時間
synth/output-real/
P5
YOLOX-Nano 訓練 (RTX4090, 80 epochs)
4-6 時間
yolox_nano_mahjong.pth
P6
ONNX export + 量子化
1 時間
yolox_nano_mahjong.onnx (3-5 MB)
P7
ONNX Runtime Web デモページ作成 (docs-site/live-demo.html)
6-8 時間
ブラウザ推論デモ
P8
既存 detection スクリプト (analyze-still-frame 等) を Roboflow API から ONNX Runtime に切替
4 時間
サーバーレス化
P9
クレジット表記の各所への追加 + 法務確認
2 時間
LICENSE.txt 更新
合計 24-30 時間 (3-4 営業日)
8.2 移行リスク
リスク 確度 緩和策
YOLOX-Nano が YOLOv8 より精度低い
中
YOLOX-S にアップグレード可能 (params 8.9M, COCO mAP 40.5%)
mahjong_huge データセットがアクセス不能になる
低
初回ダウンロード時に ZIP をローカル保存 + 自前撮影で補強
ORT Web で WebGPU が一部ブラウザで動かない
中
WASM へフォールバック (全ブラウザ対応)
SVG タイルが M-League 牌と微妙に違う
低
実物 M-League フレーム 201 枚を訓練データに混合済
9. クレジット表記 (CC BY 4.0 帰属表示)
本スタックを商用製品に組み込む際の必須クレジット表記 :
Mahjong Vision uses the following open source components:
- YOLOX object detection framework
Copyright (c) 2021-2022 Megvii Inc.
Licensed under the Apache License, Version 2.0.
Source: https://github.com/Megvii-BaseDetection/YOLOX
- mahjong_huge / Riichi Mahjong Detection dataset
by riichimahjongdetection on Roboflow Universe.
Licensed under CC BY 4.0.
Modified: integrated multiple datasets, converted YOLO annotations to COCO,
and unified class structure to 37-class Japanese Riichi Mahjong standard.
Used to train the detection model.
Source: https://universe.roboflow.com/riichimahjongdetection/riichi-mahjong-detection
- riichi-mahjong-tiles vector graphics
by Martin Persson (FluffyStuff).
Licensed under CC BY 4.0.
Modified: exported SVG to 120×160 PNG and used as synthetic training data.
Source: https://github.com/FluffyStuff/riichi-mahjong-tiles
- ONNX Runtime Web
by Microsoft Corporation.
Licensed under the MIT License.
Source: https://onnxruntime.ai/docs/tutorials/web/
9.1 表記場所
製品の About 画面 / Settings 画面
クラウドファンディング Makuake 本ページ「使用 OSS 一覧」セクション
Web デモ (live-demo.html) のフッター
リポジトリ Root の LICENSE.txt または NOTICE.txt
注意: CC BY 4.0 は「帰属表示 」が必須義務。
クレジットを省略・改変するとライセンス違反 になる。
特にクラウドファンディング公開時に Makuake 本ページに記載漏れがないか法務チェックリスト に追加必須。