| judul | emoji | warna dari | Colorto | SDK | app_port |
|---|---|---|---|---|---|
Yuzumarker.fontdetection | ? | biru | kuning | buruh pelabuhan | 7860 |
Model pengakuan font CJK (Cina, Jepang, Korea) pertama
Repositori ini juga berisi data untuk secara otomatis menghasilkan dataset gambar teks adegan dengan font yang berbeda. Dataset dihasilkan menggunakan paket font CJK oleh VCB-Studio dan ribuan gambar latar belakang dari pixiv.net.
Data PIXIV tidak akan dibagikan karena hanya tergores secara acak. Anda dapat menyiapkan dataset latar belakang Anda sendiri yang sesuai dengan distribusi data Anda sesuka Anda.
Untuk corpus teks,
Semua teks juga dicampur dengan teks bahasa Inggris untuk mensimulasikan data dunia nyata.
dataset/fonts .dataset/pixivimages .python dataset_filename_preprocess.pySekarang persiapan selesai. Perintah berikut dapat digunakan untuk menghasilkan dataset:
python font_ds_generate_script.py 1 1Perhatikan bahwa perintah diikuti oleh dua parameter. Yang kedua adalah membagi tugas menjadi beberapa partisi, dan yang pertama adalah indeks tugas yang dipartisi untuk dijalankan. Misalnya, jika Anda ingin menjalankan tugas dalam 4 partisi, Anda dapat menjalankan perintah berikut secara paralel untuk mempercepat proses:
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 yang dihasilkan akan disimpan di direktori dataset/font_img .
Perhatikan bahwa batch_generate_script_cmd_32.bat dan batch_generate_script_cmd_64.bat adalah skrip batch untuk windows yang dapat digunakan untuk menghasilkan dataset secara paralel dengan 32 partisi dan 64 partisi.
Karena tugas mungkin diakhiri secara tidak terduga atau sengaja oleh pengguna. Script memiliki mekanisme caching untuk menghindari menghasilkan kembali gambar yang sama.
Dalam hal ini, skrip mungkin tidak dapat mendeteksi korupsi dalam cache (mungkin disebabkan oleh penghentian saat menulis ke file) selama tugas ini, sehingga kami juga menyediakan skrip memeriksa dataset yang dihasilkan dan menghapus gambar dan label yang rusak.
python font_ds_detect_broken.pySetelah menjalankan skrip, Anda mungkin ingin menjalankan kembali skrip generasi untuk mengisi lubang file rusak yang dihapus.
Jika Anda ingin menjalankan skrip generasi pada cluster Linux, kami juga menyediakan skrip pengaturan lingkungan linux_venv_setup.sh .
Prasyaratnya adalah bahwa Anda memiliki cluster Linux dengan python3-venv terpasang dan python3 tersedia di jalur.
Untuk mengatur lingkungan, jalankan perintah berikut:
./linux_venv_setup.sh Script akan menciptakan lingkungan virtual di direktori venv dan menginstal semua paket yang diperlukan. Skrip diperlukan dalam kebanyakan kasus karena skrip juga akan menginstal libraqm yang diperlukan untuk rendering teks PIL dan sering tidak diinstal secara default di sebagian besar distribusi server Linux.
Setelah lingkungan diatur, Anda dapat menyusun penjadwal tugas untuk menggunakan tugas pembuatan secara paralel.
Gagasan utamanya mirip dengan penggunaan langsung skrip, kecuali bahwa di sini kita menerima tiga parameter,
TOTAL_MISSION : Jumlah total partisi tugasMIN_MISSION : Indeks partisi minimum dari tugas yang akan dijalankanMAX_MISSION : Indeks partisi maksimum dari tugas yang akan dijalankandan perintah kompilasi adalah sebagai berikut:
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 > .outMisalnya jika Anda ingin menjalankan tugas dalam 64 partisi, dan ingin memfitnah pekerjaan pada 4 mesin, Anda dapat menyusun perintah berikut pada setiap mesin:
# 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.outKemudian Anda dapat menjalankan file objek yang dikompilasi pada setiap mesin untuk memulai tugas pembuatan.
./mission-1-16.out # Machine 1
./mission-17-32.out # Machine 2
./mission-33-48.out # Machine 3
./mission-49-64.out # Machine 4Ada juga skrip penolong lain untuk memeriksa kemajuan tugas generasi. Itu dapat digunakan sebagai berikut:
python font_ds_stat.pyGenerasi terikat CPU, dan kecepatan generasi sangat tergantung pada kinerja CPU. Memang pekerjaan itu sendiri adalah masalah teknik.
Beberapa font bermasalah selama proses generasi. Script memiliki daftar pengecualian manual di config/fonts.yml dan juga mendukung deteksi font yang tidak memenuhi syarat dengan cepat. Skrip akan secara otomatis melewatkan font yang bermasalah dan mencatatnya untuk pelatihan model di masa depan.
Siapkan dataset di bawah direktori dataset , Anda dapat mulai melatih model. Perhatikan bahwa Anda dapat memiliki lebih dari satu folder dataset, dan skrip akan secara otomatis menggabungkannya selama Anda menyediakan jalur ke folder dengan argumen baris perintah.
$ 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)Pada dataset yang disintesis kami,
| Tulang punggung | Data Aug | Pretrained | Tanaman Teks Bbox | Melestarikan Aspek Perbandingan | Keluaran Norma | Ukuran input | Hiper Param | Akurat | Melakukan | Dataset | Presisi |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Deepfont | ✔️* | ✅ | Sigmoid | 105x105 | I 1 | [Tidak bisa bertemu] | 665559f | I 5 | bfloat16_3x | ||
| Deepfont | ✔️* | ✅ | Sigmoid | 105x105 | IV 4 | [Tidak bisa bertemu] | 665559f | SAYA | bfloat16_3x | ||
| Resnet-18 | Sigmoid | 512x512 | SAYA | 18,58% | 5C43F60 | SAYA | float32 | ||||
| Resnet-18 | Sigmoid | 512x512 | II 2 | 14,39% | 5A85FD3 | SAYA | bfloat16_3x | ||||
| Resnet-18 | Tanh | 512x512 | Ii | 16,24% | ff82fe6 | SAYA | bfloat16_3x | ||||
| Resnet-18 | ✅* 8 | Tanh | 512x512 | Ii | 27,71% | A976004 | SAYA | bfloat16_3x | |||
| Resnet-18 | ✅* | Tanh | 512x512 | SAYA | 29,95% | 8364103 | SAYA | bfloat16_3x | |||
| Resnet-18 | ✅* | Sigmoid | 512x512 | SAYA | 29,37% [pemberhentian awal] | 8D2E833 | SAYA | bfloat16_3x | |||
| Resnet-18 | ✅* | Sigmoid | 416x416 | SAYA | [Tren Bawah] | D5A3215 | SAYA | bfloat16_3x | |||
| Resnet-18 | ✅* | Sigmoid | 320x320 | SAYA | [Tren Bawah] | AFCDD80 | SAYA | bfloat16_3x | |||
| Resnet-18 | ✅* | Sigmoid | 224x224 | SAYA | [Tren Bawah] | 8B9DE80 | SAYA | bfloat16_3x | |||
| ResNet-34 | ✅* | Sigmoid | 512x512 | SAYA | 32,03% | 912d566 | SAYA | bfloat16_3x | |||
| ResNet-50 | ✅* | Sigmoid | 512x512 | SAYA | 34,21% | E980B66 | SAYA | bfloat16_3x | |||
| Resnet-18 | ✅* | ✅ | Sigmoid | 512x512 | SAYA | 31,24% | 416c7bb | SAYA | bfloat16_3x | ||
| Resnet-18 | ✅* | ✅ | ✅ | Sigmoid | 512x512 | SAYA | 34,69% | 855E240 | SAYA | bfloat16_3x | |
| Resnet-18 | ✔️* 9 | ✅ | ✅ | Sigmoid | 512x512 | SAYA | 38,32% | 1750035 | SAYA | bfloat16_3x | |
| Resnet-18 | ✔️* | ✅ | ✅ | Sigmoid | 512x512 | III 3 | 38,87% | 0693434 | SAYA | bfloat16_3x | |
| ResNet-50 | ✔️* | ✅ | ✅ | Sigmoid | 512x512 | AKU AKU AKU | 48,99% | BC0F7FC | II 6 | bfloat16_3x | |
| ResNet-50 | ✔️ | ✅ | ✅ | Sigmoid | 512x512 | AKU AKU AKU | 48,45% | 0F071A5 | Ii | bfloat16_3x | |
| ResNet-50 | ✔️ | ✅ | ✅ | ✅ 11 | Sigmoid | 512x512 | AKU AKU AKU | 46,12% | 0F071A5 | Ii | bfloat16 |
| ResNet-50 | ❕ 10 | ✅ | ✅ | Sigmoid | 512x512 | AKU AKU AKU | 43,86% | 0F071A5 | Ii | bfloat16 | |
| ResNet-50 | ❕ | ✅ | ✅ | ✅ | Sigmoid | 512x512 | AKU AKU AKU | 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)Tersedia di: https://huggingface.co/gyrojeff/yuzumarker.fontdetection/tree/main
Perhatikan bahwa karena saya melatih semuanya di PyTorch 2.0 dengan torch.compile , jika Anda ingin menggunakan model pretrained, Anda perlu menginstal Pytorch 2.0 dan mengkompilasinya dengan torch.compile seperti di demo.py
Untuk menggunakan demo, Anda akan memerlukan seluruh dataset font di bawah ./dataset/fonts atau file cache yang menunjukkan font model yang disebut font_demo_cache.bin . Ini kemudian akan dirilis sebagai sumber daya.
Untuk menggunakan, pertama -tama jalankan skrip berikut untuk menghasilkan gambar font demo (jika Anda memiliki dataset font):
python generate_font_sample_image.pyKemudian jalankan skrip berikut untuk memulai server demo:
$ 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)Jika Docker tersedia di mesin Anda, Anda dapat menggunakan langsung oleh Docker seperti yang saya lakukan untuk ruang pelukan.
Anda dapat mengikuti argumen baris perintah yang disediakan di bagian terakhir untuk mengubah baris terakhir dari Dockerfile untuk mengakomodasi kebutuhan Anda.
Bangun gambar Docker:
docker build -t yuzumarker.fontdetection .Jalankan gambar Docker:
docker run -it -p 7860:7860 yuzumarker.fontdetectionProyek ini juga dikerahkan pada ruang pelukan: https://huggingface.co/spaces/gyrojeff/yuzumarker.fontdetection
Jika Anda menggunakan pekerjaan ini, silakan kutip dengan cara berikut. Terima kasih.
@misc{qin2023yuzumarkerfont,
author = {Haoyun Qin},
title = {YuzuMarker.FontDetection},
year = {2023},
url = {https://github.com/JeffersonQin/YuzuMarker.FontDetection},
note = {GitHub repository}
}