Mahjong models

麻雀卓の領域分割、各領域内の牌検出、牌種分類を行うための学習済みモデルです。

ファイル

ファイル 役割 出力
regions-yolo-26n.pt 卓上画像から手牌・河・副露などの領域を抽出 14クラスのセグメンテーション
tile-yolo-26n.pt 領域画像から個々の牌面を抽出 tile 1クラスのセグメンテーション
classifier-resnet50.pt 正規化した牌面画像の牌種・裏向きを分類 39クラス

Git submoduleとして使用する

Git Xetをインストールしてから、親リポジトリのmodels/へsubmoduleとして追加します。

git xet install
git xet --version

git submodule add \
  https://huggingface.co/HaseLab/mahjong-models \
  models

git add .gitmodules models
git commit -m "Add model artifacts as submodule"

submoduleはモデルリポジトリの特定コミットを参照します。Hugging Face側のモデルを更新しても、親リポジトリ側でsubmoduleの参照を更新してcommitするまでは、既存の利用者が取得するモデルは変わりません。

推奨パイプライン

推論の流れ

入力画像
  │
  ▼
Region YOLO
  regions-yolo-26n.pt
  手牌・河・副露などの領域をセグメンテーション
  │
  ▼
Tile YOLO
  tile-yolo-26n.pt
  Region YOLOの検出領域をそのまま入力し、
  領域内にある個々の牌面をセグメンテーション
  │
  ▼
牌面を正方形化
  検出ポリゴンの四隅から透視変換
  出力: 224 × 224 RGB
  │
  ▼
ResNet-50
  classifier-resnet50.pt
  正規化した牌面から38牌種または裏向きを分類
  │
  ▼
予測結果
  例: 5m(5萬)

クラス

Region YOLO

regions-yolo-26n.ptのクラスは次の14種類です。

 0  self_hand  自分の手牌
 1  discard_0  自分の河
 2  discard_1  右家の河
 3  discard_2  対面の河
 4  discard_3  左家の河
 5  meld_0     自分の副露
 6  meld_1     右家の副露
 7  meld_2     対面の副露
 8  meld_3     左家の副露
 9  dora       ドラ表示牌
10  riichi_0   自分のリーチ棒
11  riichi_1   右家のリーチ棒
12  riichi_2   対面のリーチ棒
13  riichi_3   左家のリーチ棒

家番号は、カメラ側の自分を0、右家を1、対面を2、左家を3とします。

Tile YOLO

tile-yolo-26n.ptは牌種を区別せず、すべての牌面を1クラスとして検出します。

0  tile  牌面

牌種は後段のResNet-50で分類します。

ResNet-50

再学習したclassifier-resnet50.ptは、38牌種とbackを合わせた次の39クラスを出力します。 indexはImageFolderのクラス名をsorted()した辞書順です。必ず次の順序を使用してください。

 0  0m  赤5萬
 1  0p  赤5筒
 2  0s  赤5索
 3  0z  赤白
 4  1m  1萬
 5  1p  1筒
 6  1s  1索
 7  1z  東
 8  2m  2萬
 9  2p  2筒
10  2s  2索
11  2z  南
12  3m  3萬
13  3p  3筒
14  3s  3索
15  3z  西
16  4m  4萬
17  4p  4筒
18  4s  4索
19  4z  北
20  5m  5萬
21  5p  5筒
22  5s  5索
23  5z  白
24  6m  6萬
25  6p  6筒
26  6s  6索
27  6z  發
28  7m  7萬
29  7p  7筒
30  7s  7索
31  7z  中
32  8m  8萬
33  8p  8筒
34  8s  8索
35  9m  9萬
36  9p  9筒
37  9s  9索
38  back  裏向き
Downloads last month
200
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support