| ชื่อ | อีโมจิ | สีจาก | น้ำโคลอร์โต | SDK | app_port |
|---|---|---|---|---|---|
yuzumarker.fontdetection | - | สีฟ้า | สีเหลือง | นักเทียบท่า | 7860 |
รูปแบบการจดจำแบบอักษรของ CJK (จีน, ญี่ปุ่น, เกาหลี) เป็นครั้งแรก
ที่เก็บนี้ยังมีข้อมูลสำหรับการสร้างชุดข้อมูลของภาพข้อความฉากโดยอัตโนมัติด้วยแบบอักษรที่แตกต่างกัน ชุดข้อมูลถูกสร้างขึ้นโดยใช้ CJK Font Pack โดย VCB-Studio และอิมเมจพื้นหลังนับพันจาก Pixiv.net
ข้อมูล Pixiv จะไม่ถูกแชร์เนื่องจากมีการคัดลอกแบบสุ่ม คุณสามารถเตรียมชุดข้อมูลพื้นหลังของคุณเองที่เหมาะสมกับการกระจายข้อมูลของคุณตามที่คุณต้องการ
สำหรับคลังข้อความ
ข้อความทั้งหมดยังผสมกับข้อความภาษาอังกฤษเพื่อจำลองข้อมูลในโลกแห่งความเป็นจริง
dataset/fontsdataset/pixivimagespython dataset_filename_preprocess.pyตอนนี้การเตรียมการเสร็จสมบูรณ์ คำสั่งต่อไปนี้สามารถใช้เพื่อสร้างชุดข้อมูล:
python font_ds_generate_script.py 1 1โปรดทราบว่าคำสั่งจะตามด้วยพารามิเตอร์สองตัว อันที่สองคือการแบ่งงานออกเป็นหลายพาร์ติชันและอันแรกคือดัชนีของงานที่พาร์ติชันที่จะเรียกใช้ ตัวอย่างเช่นหากคุณต้องการรันงานใน 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 เป็นสคริปต์แบทช์สำหรับ windows ที่สามารถใช้ในการสร้างชุดข้อมูลในแบบขนานกับ 32 พาร์ติชันและ 64 พาร์ติชัน
เนื่องจากงานอาจถูกยกเลิกโดยไม่คาดคิดหรือจงใจโดยผู้ใช้ สคริปต์มีกลไกการแคชเพื่อหลีกเลี่ยงการสร้างภาพเดียวกันอีกครั้ง
ในกรณีนี้สคริปต์อาจไม่สามารถตรวจจับการทุจริตในแคช (อาจเกิดจากการยกเลิกเมื่อเขียนไปยังไฟล์) ในระหว่างงานนี้ดังนั้นเราจึงให้สคริปต์ตรวจสอบชุดข้อมูลที่สร้างขึ้นและลบภาพและฉลากที่เสียหาย
python font_ds_detect_broken.pyหลังจากเรียกใช้สคริปต์คุณอาจต้องการเรียกใช้สคริปต์การสร้างใหม่เพื่อเติมเต็มหลุมของไฟล์ที่ถูกลบออก
หากคุณต้องการเรียกใช้สคริปต์การสร้างบนคลัสเตอร์ Linux เรายังมีสคริปต์การตั้งค่าสภาพแวดล้อม linux_venv_setup.sh
สิ่งที่จำเป็นต้องมีคือคุณมีคลัสเตอร์ Linux ที่ติดตั้ง python3-venv และ python3 มีอยู่ในเส้นทาง
ในการตั้งค่าสภาพแวดล้อมให้เรียกใช้คำสั่งต่อไปนี้:
./linux_venv_setup.sh สคริปต์จะสร้างสภาพแวดล้อมเสมือนจริงในไดเรกทอรี venv และติดตั้งแพ็คเกจที่จำเป็นทั้งหมด สคริปต์เป็นสิ่งจำเป็นในกรณีส่วนใหญ่เนื่องจากสคริปต์จะติดตั้ง libraqm ซึ่งจำเป็นสำหรับการเรนเดอร์ข้อความของ PIL และมักจะไม่ได้ติดตั้งโดยค่าเริ่มต้นในการแจกแจงเซิร์ฟเวอร์ 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)ในชุดข้อมูลสังเคราะห์ของเรา
| กระดูกสันหลัง | ข้อมูล ส.ค. | ที่ได้ก่อน | พืชผล ข้อความ บ็อกซ์ | อนุรักษ์ ด้าน อัตราส่วน | เอาท์พุท บรรทัดฐาน | ขนาดอินพุต | ไฮเปอร์ พารามิเตอร์ | ถูกต้อง | ให้สัญญา | ชุดข้อมูล | ความแม่นยำ |
|---|---|---|---|---|---|---|---|---|---|---|---|
| ฟอร์ตฟอน | * | sigmoid | 105x105 | ฉัน 1 | [ไม่สามารถมาบรรจบกัน] | 665559F | ฉัน 5 | bfloat16_3x | |||
| ฟอร์ตฟอน | * | sigmoid | 105x105 | iv 4 | [ไม่สามารถมาบรรจบกัน] | 665559F | ฉัน | bfloat16_3x | |||
| resnet-18 | sigmoid | 512x512 | ฉัน | 18.58% | 5C43F60 | ฉัน | ลอย 32 | ||||
| resnet-18 | sigmoid | 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 | * | sigmoid | 512x512 | ฉัน | 29.37% [หยุดก่อน] | 8d2e833 | ฉัน | bfloat16_3x | |||
| resnet-18 | * | sigmoid | 416x416 | ฉัน | [แนวโน้มที่ต่ำกว่า] | D5A3215 | ฉัน | bfloat16_3x | |||
| resnet-18 | * | sigmoid | 320x320 | ฉัน | [แนวโน้มที่ต่ำกว่า] | AFCDD80 | ฉัน | bfloat16_3x | |||
| resnet-18 | * | sigmoid | 224x224 | ฉัน | [แนวโน้มที่ต่ำกว่า] | 8B9DE80 | ฉัน | bfloat16_3x | |||
| resnet-34 | * | sigmoid | 512x512 | ฉัน | 32.03% | 912D566 | ฉัน | bfloat16_3x | |||
| resnet-50 | * | sigmoid | 512x512 | ฉัน | 34.21% | E980B66 | ฉัน | bfloat16_3x | |||
| resnet-18 | * | sigmoid | 512x512 | ฉัน | 31.24% | 416C7BB | ฉัน | bfloat16_3x | |||
| resnet-18 | * | sigmoid | 512x512 | ฉัน | 34.69% | 855E240 | ฉัน | bfloat16_3x | |||
| resnet-18 | ✔* 9 | sigmoid | 512x512 | ฉัน | 38.32% | 1750035 | ฉัน | bfloat16_3x | |||
| resnet-18 | * | sigmoid | 512x512 | III 3 | 38.87% | 0693434 | ฉัน | bfloat16_3x | |||
| resnet-50 | * | sigmoid | 512x512 | III | 48.99% | BC0F7FC | II 6 | bfloat16_3x | |||
| resnet-50 | sigmoid | 512x512 | III | 48.45% | 0F071A5 | II | bfloat16_3x | ||||
| resnet-50 | ✅ 11 | sigmoid | 512x512 | III | 46.12% | 0F071A5 | II | bfloat16 | |||
| resnet-50 | ❕ 10 | sigmoid | 512x512 | III | 43.86% | 0F071A5 | II | bfloat16 | |||
| resnet-50 | sigmoid | 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 เป็นวิธีที่ฉันทำเพื่อ HuggingFace Space
คุณสามารถติดตามอาร์กิวเมนต์บรรทัดคำสั่งที่ให้ไว้ในส่วนสุดท้ายเพื่อเปลี่ยนบรรทัดสุดท้ายของ Dockerfile เพื่อรองรับความต้องการของคุณ
สร้างภาพนักเทียบท่า:
docker build -t yuzumarker.fontdetection .เรียกใช้ภาพนักเทียบท่า:
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}
}