mahjong-models / README.md
kaito4681's picture
Fix classifier labels and region classes
400cd87 verified
|
Raw
History Blame Contribute Delete
3.59 kB
---
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 裏向き
```