基于分割的文本检测网络
检测方法:
基于回归的方法(文本框):
基于分割(基于像素点的分类)的方法(DBNet):
分割:
考:https://www.bilibili.com/video/BV1xf4y1p7Gf?p=2
https://zhuanlan.zhihu.com/p/94677957
项目层级(README)
模型部分:
config/open_dataset_resnet18_FPN_DBhead_polyLR.yaml 配置模型参数,模型结构
models/model.py 完整的DBnet过程
models/backbone/resnet.py 上图对应卷积部分(在models/backbone/_init_.py中实例化。resnet.py __all__ = ['build_backbone'])
models/neck/FPN.py 上图对应卷积部分(models/neck/_init_.py实例化。resnet.py __all__ = ['build_neck'])
models/head/DBHead.py 上图对应卷积部分(models/neck/_init_.py实例化。resnet.py __all__ = ['build_neck'])
推理部分:
tools/predict.py(models/_init_.py实例化model)
推理部分的后处理部分:
post_processing/seg_detector_representer.py
label制作部分:
data_loader/modules/make_shrink_map.py(通过文本框得到probability(shrink) map标注,原图大小)
data_loader/modules/make_border_map.py(threshold map标注)
train部分:
tools/train.py
trainer/trainer.py(_on_epoch_finish()函数:一个epoch评估一次)
评估部分:
DBnet\utils\ocr_metric\icdar2015\quad_metric.py (DetectionIoUEvaluator()核心)
指标: recall, precision, hmean
控制台:训练查看readme文件;预测修改predict.sh文件
DBNet代码实现过程,部分函数原理:
1.推理部分+后处理部分
转置卷积=up-sampling :nn.ConvTranspose2d(in_channels // 4, in_channels // 4, 2, 2)
推理阶段,计算点的轮廓
2.label制作部分:
threshold map label制作
3.训练评估部分
评估多边形/矩形
trainer/trainer.py(_on_epoch_finish()函数:一个epoch评估一次)
DBnet\utils\ocr_metric\icdar2015\quad_metric.py (DetectionIoUEvaluator()核心)
DBnet\utils\ocr_metric\icdar2015\detection\iou.py ---->继上部调用evaluate_image()
DBnet\utils\ocr_metric\icdar2015\quad_metric.py (gather_measure()函数)把所有batch整个一下,求得整个数据集上的评估结果
(trainer/trainer.py调用_eval()函数,再调gather_measure()函数)