DeepVAC-compliant PSENet implementation.
本项目实现了符合DeepVAC规范的OCR检测模型PSENet
项目依赖
- deepvac >= 0.5.6
- pytorch >= 1.8.0
- torchvision >= 0.7.0
- opencv-python
- numpy
- pyclipper
- Polygon3
- pillow
1. 阅读DeepVAC规范
可以粗略阅读,建立起第一印象
使用Deepvac规范指定Docker镜像
-
获取文本检测数据集 CTW1500格式的数据集,CTW1500下载地址:
-
数据集配置 在config.py文件中作如下配置:
# line 42-43, config for train dataset
sample_path = <your train image path>
label_path = <your train gt path>
# line 60-61, config for val dataset
sample_path = <your val image path>
label_path = <your val gt path>
- dataloader相关配置
# line 44-57 for train dataset, line 62-71 for val dataset
is_transform = True # 是否动态数据增强
img_size = 640 # 输入图片大小(img_size, img_size)
config.datasets.PseTrainDataset = AttrDict()
config.datasets.PseTrainDataset.kernel_num = 7
config.datasets.PseTrainDataset.min_scale = 0.4
config.core.train_dataset = PseTrainDataset(config, sample_path, label_path, is_transform, img_size)
config.core.train_loader = torch.utils.data.DataLoader(
dataset = config.core.train_dataset,
batch_size = 12,
shuffle = True,
num_workers = 4,
pin_memory = True,
sampler = None
)
python3 train.py
- 编译PSE
cd modules/cpp
make
- 测试相关配置
# line 75-91
config.core.model_path = <trained-model-path>
config.core.kernel_num = 7
config.core.min_kernel_area = 10.0
config.core.min_area = 300.0
config.core.min_score = 0.93
config.core.binary_th = 1.0
config.core.scale = 1
sample_path = <your test images path>
config.core.test_dataset = PseTestDataset(config, sample_path, long_size=1280)
config.core.test_loader = torch.utils.data.DataLoader(
dataset = config.core.test_dataset,
batch_size = 1,
shuffle = False,
num_workers = 0,
pin_memory = True
)
- 运行测试脚本:
python3 test.py
如果训练过程中未开启config.cast.script_model_dir开关,可以在测试过程中转化torchscript模型
- 转换torchscript模型(*.pt)
config.cast.script_model_path = "output/script.pt"
按照步骤6完成测试,torchscript模型将保存至config.cast.script_model_dir指定文件位置
- 加载torchscript模型
config.core.jit_model_path = <torchscript-model-path>
如果要在本项目中开启如下功能:
- 预训练模型加载
- checkpoint加载
- 使用tensorboard
- 启用TorchScript
- 转换ONNX
- 转换NCNN
- 转换CoreML
- 开启量化
- 开启自动混合精度训练
- 采用ema策略(config.ema)
- 采用梯度积攒到一定数量在进行反向更新梯度策略(config.nominal_batch_factor)
请参考DeepVAC