| 제목 | 이모티콘 | 색상 | Colorto | SDK | app_port |
|---|---|---|---|---|---|
yuzumarker.fontdetection | ? | 파란색 | 노란색 | 도커 | 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명령에 이어 두 개의 매개 변수가 이어집니다. 두 번째는 작업을 여러 파티션으로 나누는 것이며, 첫 번째는 실행되는 파티션 된 작업의 색인입니다. 예를 들어, 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 클러스터에서 Generation Script를 실행하려면 환경 설정 스크립트 linux_venv_setup.sh 도 제공합니다.
전제 조건은 python3-venv 가 설치된 Linux 클러스터가 있고 python3 경로에 사용할 수 있다는 것입니다.
환경을 설정하려면 다음 명령을 실행하십시오.
./linux_venv_setup.sh 스크립트는 venv 디렉토리에서 가상 환경을 생성하고 필요한 모든 패키지를 설치합니다. 스크립트는 또한 스크립트가 PIL의 텍스트 렌더링에 필요한 libraqm 설치하기 때문에 대부분의 경우 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 디렉토리 아래에 데이터 세트를 준비하면 모델 교육을 시작할 수 있습니다. 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 | 보존하다 측면 비율 | 산출 표준 | 입력 크기 | 하이퍼 파라 | 정확한 | 저지르다 | 데이터 세트 | 정도 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 딥 폰트 | ✔️* | ✅ | Sigmoid | 105x105 | I 1 | [수렴 할 수 없음] | 665559f | I 5 | bfloat16_3x | ||
| 딥 폰트 | ✔️* | ✅ | Sigmoid | 105x105 | IV 4 | [수렴 할 수 없음] | 665559f | 나 | bfloat16_3x | ||
| RESNET-18 | Sigmoid | 512x512 | 나 | 18.58% | 5C43F60 | 나 | float32 | ||||
| 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에서 사용할 수 있습니다
torch.compile 사용하여 Pytorch 2.0에서 모든 것을 교육 했으므로 사전에 사전 된 모델을 사용하려면 Pytorch 2.0을 설치하고 demo.py 에서와 같이 torch.compile 으로 컴파일해야합니다.
데모를 배포하려면 ./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 run -it -p 7860:7860 yuzumarker.fontdetection이 프로젝트는 Huggingface Space : 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}
}