Instructions to use HaseLab/mahjong-models with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use HaseLab/mahjong-models with ultralytics:
# Couldn't find a valid YOLO version tag. # Replace XX with the correct version. from ultralytics import YOLOvXX model = YOLOvXX.from_pretrained("HaseLab/mahjong-models") source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
| library_name: ultralytics | |
| tags: | |
| - mahjong | |
| - object-detection | |
| - image-segmentation | |
| - image-classification | |
| - yolo | |
| - resnet | |
| # Mahjong models | |
| 麻雀卓の領域分割、各領域内の牌検出、牌種分類を行うための学習済みモデルです。 | |
| ## ファイル | |
| | ファイル | 役割 | 出力 | | |
| | --- | --- | --- | | |
| | `regions-yolo-26n.pt` | 卓上画像から手牌・河・副露などの領域を抽出 | 14クラスのセグメンテーション | | |
| | `tile-yolo-26n.pt` | 領域画像から個々の牌面を抽出 | `tile` 1クラスのセグメンテーション | | |
| | `classifier-resnet50.pt` | 正規化した牌面画像の牌種・裏向きを分類 | 39クラス | | |
| ## Git submoduleとして使用する | |
| Git Xetをインストールしてから、親リポジトリの`models/`へsubmoduleとして追加します。 | |
| ```bash | |
| 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するまでは、既存の利用者が取得するモデルは変わりません。 | |
| ## 推奨パイプライン | |
| ### 推論の流れ | |
| ```text | |
| 入力画像 | |
| │ | |
| ▼ | |
| 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種類です。 | |
| ```text | |
| 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クラスとして検出します。 | |
| ```text | |
| 0 tile 牌面 | |
| ``` | |
| 牌種は後段のResNet-50で分類します。 | |
| ### ResNet-50 | |
| 再学習した`classifier-resnet50.pt`は、38牌種と`back`を合わせた次の39クラスを出力します。 | |
| indexはImageFolderのクラス名を`sorted()`した辞書順です。必ず次の順序を使用してください。 | |
| ```text | |
| 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 裏向き | |
| ``` | |