| タイトル | 絵文字 | 色から | コロルト | SDK | app_port |
|---|---|---|---|---|---|
yuzumarker.fontdetection | ? | 青 | 黄色 | Docker | 7860 |
初めてのCJK(中国語、日本、韓国語)フォント認識モデル
このリポジトリには、異なるフォントを持つシーンテキスト画像のデータセットを自動的に生成するためのデータも含まれています。データセットは、VCB-StudioによるCJKフォントパックとpixiv.netの数千の背景画像を使用して生成されます。
PIXIVデータは、ランダムに削られただけなので共有されません。あなたが好きなようにあなたのデータ分布に適合する独自の背景データセットを準備することができます。
テキストコーパスの場合、
すべてのテキストには、実際のデータをシミュレートするために英語のテキストも混合されています。
dataset/fontsディレクトリに抽出します。dataset/pixivimagesディレクトリに配置します。python dataset_filename_preprocess.py準備が完了しました。次のコマンドを使用して、データセットを生成できます。
python font_ds_generate_script.py 1 1コマンドの2つのパラメーターの後に続くことに注意してください。 2つ目は、タスクを複数のパーティションに分割することです。最初のパーティションは、実行するパーティションタスクのインデックスです。たとえば、タスクを4つのパーティションで実行する場合は、次のコマンドを並行して実行して、プロセスをスピードアップできます。
python font_ds_generate_script.py 1 4
python font_ds_generate_script.py 2 4
python font_ds_generate_script.py 3 4
python font_ds_generate_script.py 4 4生成されたデータセットは、 dataset/font_imgディレクトリに保存されます。
batch_generate_script_cmd_32.batおよびbatch_generate_script_cmd_64.batは、32のパーティションと64のパーティションと並行してデータセットを生成するために使用できるWindowsのバッチスクリプトであることに注意してください。
タスクは、ユーザーによって予期せずまたは故意に終了する可能性があるためです。スクリプトには、同じ画像の再生成を避けるためのキャッシュメカニズムがあります。
この場合、スクリプトは、このタスク中にキャッシュの破損を検出できない可能性があります(ファイルに書き込むときに終了することによって引き起こされる可能性があります)。したがって、生成されたデータセットをチェックするスクリプトを提供し、破損した画像とラベルを削除します。
python font_ds_detect_broken.pyスクリプトを実行した後、削除された破損したファイルの穴を埋めるために、生成スクリプトを再実行することをお勧めします。
Linuxクラスターで生成スクリプトを実行する場合は、環境セットアップスクリプトlinux_venv_setup.shも提供します。
前提条件は、 python3-venvがインストールされたLinuxクラスターがあり、 python3パスで利用できることです。
環境をセットアップするには、次のコマンドを実行します。
./linux_venv_setup.shスクリプトは、 venvディレクトリに仮想環境を作成し、必要なすべてのパッケージをインストールします。スクリプトは、PILのテキストレンダリングに必要なlibraqmもインストールし、ほとんどのLinuxサーバー分布でデフォルトでインストールされないため、ほとんどの場合に必要です。
環境がセットアップされた後、タスクスケジューラをコンパイルして、生成タスクを並行して展開する場合があります。
主なアイデアは、スクリプトの直接使用に似ていますが、ここでは3つのパラメーターを受け入れることを除いて、
TOTAL_MISSION :タスクのパーティションの総数MIN_MISSION :実行するタスクの最小パーティションインデックスMAX_MISSION :実行するタスクの最大パーティションインデックスコンパイルコマンドは次のとおりです。
gcc -D MIN_MISSION= < MIN_MISSION >
-D MAX_MISSION= < MAX_MISSION >
-D TOTAL_MISSION= < TOTAL_MISSION >
batch_generate_script_linux.c
-o < object-file-name > .outたとえば、64のパーティションでタスクを実行し、4つのマシンで作業を紡ぎたい場合は、各マシンで次のコマンドをコンパイルできます。
# Machine 1
gcc -D MIN_MISSION=1
-D MAX_MISSION=16
-D TOTAL_MISSION=64
batch_generate_script_linux.c
-o mission-1-16.out
# Machine 2
gcc -D MIN_MISSION=17
-D MAX_MISSION=32
-D TOTAL_MISSION=64
batch_generate_script_linux.c
-o mission-17-32.out
# Machine 3
gcc -D MIN_MISSION=33
-D MAX_MISSION=48
-D TOTAL_MISSION=64
batch_generate_script_linux.c
-o mission-33-48.out
# Machine 4
gcc -D MIN_MISSION=49
-D MAX_MISSION=64
-D TOTAL_MISSION=64
batch_generate_script_linux.c
-o mission-49-64.out次に、各マシンでコンパイルされたオブジェクトファイルを実行して、生成タスクを開始できます。
./mission-1-16.out # Machine 1
./mission-17-32.out # Machine 2
./mission-33-48.out # Machine 3
./mission-49-64.out # Machine 4また、生成タスクの進捗を確認する別のヘルパースクリプトもあります。以下として使用できます。
python font_ds_stat.py生成はCPUバウンドであり、生成速度はCPUのパフォーマンスに大きく依存しています。実際、仕事自体はエンジニアリングの問題です。
一部のフォントは、生成プロセス中に問題があります。スクリプトにはconfig/fonts.ymlにマニュアル除外リストがあり、その場での資格のないフォント検出もサポートしています。スクリプトは、問題のあるフォントを自動的にスキップし、将来のモデルトレーニングのためにそれらをログにします。
datasetディレクトリの下でデータセットを準備すると、モデルのトレーニングを開始できます。データセットの複数のフォルダーを使用できることに注意してください。また、コマンドライン引数によってフォルダーへのパスを提供する限り、スクリプトは自動的にマージされます。
$ python train.py -h
usage: train.py [-h] [-d [DEVICES ...]] [-b SINGLE_BATCH_SIZE] [-c CHECKPOINT] [-m {resnet18,resnet34,resnet50,resnet101,deepfont}] [-p] [-i] [-a {v1,v2,v3}]
[-l LR] [-s [DATASETS ...]] [-n MODEL_NAME] [-f] [-z SIZE] [-t {medium,high,heighest}] [-r]
optional arguments:
-h , --help show this help message and exit
-d [DEVICES ...], --devices [DEVICES ...]
GPU devices to use (default: [0])
-b SINGLE_BATCH_SIZE, --single-batch-size SINGLE_BATCH_SIZE
Batch size of single device (default: 64)
-c CHECKPOINT, --checkpoint CHECKPOINT
Trainer checkpoint path (default: None)
-m {resnet18,resnet34,resnet50,resnet101,deepfont}, --model {resnet18,resnet34,resnet50,resnet101,deepfont}
Model to use (default: resnet18)
-p , --pretrained Use pretrained model for ResNet (default: False)
-i, --crop-roi-bbox Crop ROI bounding box (default: False)
-a {v1,v2,v3}, --augmentation {v1,v2,v3}
Augmentation strategy to use (default: None)
-l LR, --lr LR Learning rate (default: 0.0001)
-s [DATASETS ...], --datasets [DATASETS ...]
Datasets paths, seperated by space (default: [ ' ./dataset/font_img ' ])
-n MODEL_NAME, --model-name MODEL_NAME
Model name (default: current tag)
-f , --font-classification-only
Font classification only (default: False)
-z SIZE, --size SIZE Model feature image input size (default: 512)
-t {medium,high,heighest}, --tensor-core {medium,high,heighest}
Tensor core precision (default: high)
-r , --preserve-aspect-ratio-by-random-crop
Preserve aspect ratio (default: False)合成されたデータセットで、
| バックボーン | データ8月 | 前処理 | 作物 文章 bbox | 保存する 側面 比率 | 出力 規範 | 入力サイズ | ハイパー パラメーション | 精度 | 専念 | データセット | 精度 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| ディープフォント | ✔✔§* | ✅ | シグモイド | 105x105 | I 1 | [収束できない] | 665559F | i 5 | bfloat16_3x | ||
| ディープフォント | ✔✔§* | ✅ | シグモイド | 105x105 | IV 4 | [収束できない] | 665559F | 私 | bfloat16_3x | ||
| Resnet-18 | シグモイド | 512x512 | 私 | 18.58% | 5C43F60 | 私 | float32 | ||||
| Resnet-18 | シグモイド | 512x512 | II 2 | 14.39% | 5A85FD3 | 私 | bfloat16_3x | ||||
| Resnet-18 | タン | 512x512 | ii | 16.24% | FF82FE6 | 私 | bfloat16_3x | ||||
| Resnet-18 | ✅* 8 | タン | 512x512 | ii | 27.71% | A976004 | 私 | bfloat16_3x | |||
| Resnet-18 | ✅* | タン | 512x512 | 私 | 29.95% | 8364103 | 私 | bfloat16_3x | |||
| Resnet-18 | ✅* | シグモイド | 512x512 | 私 | 29.37%[早期停止] | 8D2E833 | 私 | bfloat16_3x | |||
| Resnet-18 | ✅* | シグモイド | 416x416 | 私 | [トレンドの低い] | D5A3215 | 私 | bfloat16_3x | |||
| Resnet-18 | ✅* | シグモイド | 320x320 | 私 | [トレンドの低い] | AFCDD80 | 私 | bfloat16_3x | |||
| Resnet-18 | ✅* | シグモイド | 224x224 | 私 | [トレンドの低い] | 8b9de80 | 私 | bfloat16_3x | |||
| Resnet-34 | ✅* | シグモイド | 512x512 | 私 | 32.03% | 912d566 | 私 | bfloat16_3x | |||
| Resnet-50 | ✅* | シグモイド | 512x512 | 私 | 34.21% | E980B66 | 私 | bfloat16_3x | |||
| Resnet-18 | ✅* | ✅ | シグモイド | 512x512 | 私 | 31.24% | 416C7bb | 私 | bfloat16_3x | ||
| Resnet-18 | ✅* | ✅ | ✅ | シグモイド | 512x512 | 私 | 34.69% | 855E240 | 私 | bfloat16_3x | |
| Resnet-18 | ✔✔️* 9 | ✅ | ✅ | シグモイド | 512x512 | 私 | 38.32% | 1750035 | 私 | bfloat16_3x | |
| Resnet-18 | ✔✔§* | ✅ | ✅ | シグモイド | 512x512 | III 3 | 38.87% | 0693434 | 私 | bfloat16_3x | |
| Resnet-50 | ✔✔§* | ✅ | ✅ | シグモイド | 512x512 | iii | 48.99% | BC0F7FC | II 6 | bfloat16_3x | |
| Resnet-50 | ✔✔️ | ✅ | ✅ | シグモイド | 512x512 | iii | 48.45% | 0F071A5 | ii | bfloat16_3x | |
| Resnet-50 | ✔✔️ | ✅ | ✅ | ✅11 | シグモイド | 512x512 | iii | 46.12% | 0F071A5 | ii | BFLOAT16 |
| Resnet-50 | ❕10 | ✅ | ✅ | シグモイド | 512x512 | iii | 43.86% | 0F071A5 | ii | BFLOAT16 | |
| Resnet-50 | ❕ | ✅ | ✅ | ✅ | シグモイド | 512x512 | iii | 41.35% | 0F071A5 | ii | BFLOAT16 |
learning rate = 0.0001, lambda = (2, 0.5, 1)learning rate = 0.00005, lambda = (4, 0.5, 1)learning rate = 0.001, lambda = (2, 0.5, 1)learning rate = 0.01, lambda = (2, 0.5, 1)https://huggingface.co/gyrojeff/yuzumarker.fontdetection/tree/mainで入手可能
Pytorch 2.0でtorch.compileを使用してすべてをトレーニングしたため、前提条件のモデルを使用する場合は、Pytorch 2.0をインストールし、 demo.pyのようにtorch.compileでコンパイルする必要があることに注意してください。
デモを展開するには、 ./dataset/fonts fontsの下のフォントデータセット全体またはfont_demo_cache.binと呼ばれるモデルのフォントを示すキャッシュファイルが必要です。これは後にリソースとしてリリースされます。
展開するには、最初に次のスクリプトを実行してデモフォントイメージを生成します(フォントデータセットがある場合):
python generate_font_sample_image.py次に、次のスクリプトを実行して、デモサーバーを起動します。
$ python demo.py -h
usage: demo.py [-h] [-d DEVICE] [-c CHECKPOINT] [-m {resnet18,resnet34,resnet50,resnet101,deepfont}] [-f] [-z SIZE] [-s] [-p PORT] [-a ADDRESS]
optional arguments:
-h, --help show this help message and exit
-d DEVICE, --device DEVICE
GPU devices to use (default: 0), -1 for CPU
-c CHECKPOINT, --checkpoint CHECKPOINT
Trainer checkpoint path (default: None). Use link as huggingface:// < user > / < repo > / < file > for huggingface.co models, currently only supports model file in the root
directory.
-m {resnet18,resnet34,resnet50,resnet101,deepfont}, --model {resnet18,resnet34,resnet50,resnet101,deepfont}
Model to use (default: resnet18)
-f, --font-classification-only
Font classification only (default: False)
-z SIZE, --size SIZE Model feature image input size (default: 512)
-s, --share Get public link via Gradio (default: False)
-p PORT, --port PORT Port to use for Gradio (default: 7860)
-a ADDRESS, --address ADDRESS
Address to use for Gradio (default: 127.0.0.1)Dockerがマシンで利用可能である場合、Dockerによって直接展開できます。
最後のセクションで提供されたコマンドライン引数に従って、 Dockerfileの最後の行を変更してニーズを伴うことがあります。
Docker画像を作成します:
docker build -t yuzumarker.fontdetection .Docker画像を実行します:
docker run -it -p 7860:7860 yuzumarker.fontdetectionこのプロジェクトは、https://huggingface.co/spaces/gyrojeff/yuzumarker.fontdetectionにも展開されています
この作業を使用する場合は、次の方法で引用してください。ありがとう。
@misc{qin2023yuzumarkerfont,
author = {Haoyun Qin},
title = {YuzuMarker.FontDetection},
year = {2023},
url = {https://github.com/JeffersonQin/YuzuMarker.FontDetection},
note = {GitHub repository}
}