| 標題 | 表情符號 | 顏色 | 科洛特 | SDK | app_port |
|---|---|---|---|---|---|
Yuzumarker.FontDetection | ? | 藍色的 | 黃色的 | Docker | 7860 |
有史以來第一個CJK(中文,日語,韓國)字體識別模型
該存儲庫還包含用於自動生成具有不同字體的場景文本圖像數據集的數據。該數據集是使用VCB-Studio和pixiv.net的數千個背景圖像生成數據集的。
Pixiv數據將不會共享,因為它只是隨機刮擦。您可以準備自己的背景數據集,以適合您的數據分發。
對於文本語料庫,
所有文本還與英文文本混合在一起,以模擬現實世界中的數據。
dataset/fonts目錄。dataset/pixivimages目錄中。python dataset_filename_preprocess.py現在準備工作已經完成。以下命令可用於生成數據集:
python font_ds_generate_script.py 1 1請注意,該命令之後是兩個參數。第二個是將任務分為多個分區,第一個是要運行的分區任務的索引。例如,如果要在四個分區中運行任務,則可以並行運行以下命令以加快流程:
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個分區並行生成數據集。
由於該任務可能會被用戶意外或故意終止。該腳本具有緩存機制,可以避免重新生成相同的圖像。
在這種情況下,腳本可能無法檢測到此任務期間的緩存中的損壞(可能是由於終止文件終止而引起的),因此我們還提供了一個檢查生成的數據集並刪除損壞的圖像和標籤的腳本。
python font_ds_detect_broken.py運行腳本後,您可能需要重新運行生成腳本以填充已刪除的損壞文件的孔。
如果您想在Linux簇上運行“生成腳本”,我們還提供了環境設置腳本linux_venv_setup.sh 。
先決條件是,您的Linux群集已安裝了python3-venv ,並且路徑中有python3 。
要設置環境,請運行以下命令:
./linux_venv_setup.sh該腳本將在venv目錄中創建虛擬環境,並安裝所有必需的軟件包。在大多數情況下,腳本是必需的,因為腳本還將安裝pil文本渲染所需的libraqm ,並且通常在大多數Linux服務器分佈中默認不安裝。
設置環境後,您可以編譯任務調度程序以並行部署生成任務。
主要思想類似於腳本的直接用法,除了我們接受三個參數,
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)在我們的合成數據集中
| 骨幹 | 數據AUG | 預估計 | 莊稼 文字 bbox | 保存 方面 比率 | 輸出 規範 | 輸入大小 | 超級 參數 | 準確 | 犯罪 | 數據集 | 精確 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| DeepFont | ✔️* | ✅ | 乙狀結腸 | 105x105 | 我1 | [無法收斂] | 665559f | 我5 | bfloat16_3x | ||
| DeepFont | ✔️* | ✅ | 乙狀結腸 | 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 | Tanh | 512x512 | ii | 16.24% | FF82FE6 | 我 | bfloat16_3x | ||||
| Resnet-18 | ✅* 8 | Tanh | 512x512 | ii | 27.71% | A976004 | 我 | bfloat16_3x | |||
| Resnet-18 | ✅* | Tanh | 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
請注意,由於我使用torch.compile培訓了Pytorch 2.0上的所有內容,因此,如果您想使用驗證的型號,則需要安裝Pytorch 2.0並使用torch.compile進行編譯,如demo.py中。
要部署演示,您需要在./dataset/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該項目還部署在HuggingFace空間上: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}
}