首页 PaddleOCR 帖子详情
寻求训练检测模型时的优化建议(行驶证场景)
收藏
快速回复
PaddleOCR 问答检测OCR 992 4
寻求训练检测模型时的优化建议(行驶证场景)
收藏
快速回复
PaddleOCR 问答检测OCR 992 4

场景:

行驶证正面

问题:

db模型训练的精度已经达到了hmean: 0.9908009135992529, precision: 0.988941508388332, recall: 0.9926673240789906

但在检测的结果里,短文本的检测框和长文本的检测框,框的大小难以紧密程度难以达成一致,下面3张图是调试了3种unclip_ratio的结果:

unclip_ratio=1.6的时候,短文本的框很棒!(长文本GG

unclip_ratio=3的时候,长文本的框很棒!(短文本GG

unclip_ratio=2.3的时候,,你可能会说“哎呀这不是差不多可以了嘛”......对于短文本来说蛮过得去,但如果是以像是字符'P'为结尾的长文本,在识别时会识别成'F'....(因为截断了)

回到正题!想问的是,有没有啥手段能让 短文本的检测框和长文本的检测框的紧密程度一致求大佬的帮助!!!

ps.

1.其他的DBPostProcess都调过了木用

2.在做标注时,短文本和长文本的框都是相对紧贴的

 

0
收藏
回复
全部评论(4)
时间顺序
划飞桨的Daniel
#2 回复于2021-10

我吹响号角,帮你呼唤一个大佬过来

0
回复
Double_V
#3 回复于2021-10

@ ioracion

你好,这个发现很好玩啊,之前倒没注意这个现象;

我刚才可视化发布的中文模型,看了下结果,发现短文本的检测框太大不是一个普遍现象,大多数框都是比较紧致的(unclip_ratio=1.6)

- 训练出来保存的模型应该有多个,可以试试其他epoch的模型,可视化看看是不是也有这个现象

- 在unlcip_ratio 2.3 到3 之间找一个中间值,是否能得到比较合适的结果

- 或者设置比较小的unclip_ratio,设置后处理参数use_dilation为True(对分割的map做膨胀)

另外,问下,你训练的时候用的unclip_ratio是多少?

0
回复
i
ioracion
#4 回复于2021-10
@ ioracion 你好,这个发现很好玩啊,之前倒没注意这个现象; 我刚才可视化发布的中文模型,看了下结果,发现短文本的检测框太大不是一个普遍现象,大多数框都是比较紧致的(unclip_ratio=1.6) - 训练出来保存的模型应该有多个,可以试试其他epoch的模型,可视化看看是不是也有这个现象 - 在unlcip_ratio 2.3 到3 之间找一个中间值,是否能得到比较合适的结果 - 或者设置比较小的unclip_ratio,设置后处理参数use_dilation为True(对分割的map做膨胀) 另外,问下,你训练的时候用的unclip_ratio是多少?
展开

感谢大佬回复QAQ

1.我也试了下发布的(中英文通用PP-OCR server)模型,用同样的参数文件,发现就没有我这个问题...框都很贴合文字

2.看epoch模型的效果可能是个突破口!我重新训练看看(之前只留了best和latest模型)

3.unlcip_ratio 2.3 到3 之间都试过了,都是短文本的框太大了- -

4.试了下use_dilation,设置为False的时候,短文本的框相对会更小些(跟设置为True的时候相比)

5.这个模型训练用的unclip_ratio是2.4(然后昨天昨天又试了下用unclip_ratio=1.6来训练,对比上面3种不同unclip_ratio的结果,发现结果差不多,指标差不了多少,感觉是其他因素导致框不紧致的问题...

 

其他信息补充:

1.训练时用的paddleocr版本是2.0.4

2.这个模型训练的数据是多种场景混合的(包括其他证件像是身份证、驾驶证、少量车牌等),怀疑是不是场景太杂导致的,于是只保留了行驶证正面的照片(1000张)来训练,最后发现还是存在这样的问题

3.怀疑是不是图片大小差太多导致的,剔除了很小很模糊的图片,对很大的图片做了缩放,现在文件的大小在[94KB,650KB]之间,唯一觉得处理不好的地方是,没有做等比缩放。。处理的逻辑是这样:(导致缩放别扭的检测跟识别效果都很差- -)

if img.shape[1]>1280:
    if img.shape[1]>img.shape[0]:
        img= cv2.resize(img, (1280, 900))
    else:
        img= cv2.resize(img, (900, 1280))
else:
    pass

4.附上训练用的参数

Global:
  debug: false
  use_gpu: true
  epoch_num: 1500
  log_smooth_window: 20
  print_batch_step: 2
  save_model_dir: ./output/all_det_20210813/
  save_epoch_step: 1500
  eval_batch_step: 150
  load_static_weights: false
  cal_metric_during_train: false
  pretrained_model: null
  checkpoints: ./output/all_det_20210813/latest
  save_inference_dir: null
  use_visualdl: false
  infer_img: doc/imgs_en/img_10.jpg
  save_res_path: ./output/det_db/predicts_db.txt
  distributed: false
Architecture:
  model_type: det
  algorithm: DB
  Transform: null
  Backbone:
    name: ResNet
    layers: 18
    disable_se: true
  Neck:
    name: DBFPN
    out_channels: 256
  Head:
    name: DBHead
    k: 50
Loss:
  name: DBLoss
  balance_loss: true
  main_loss_type: DiceLoss
  alpha: 5
  beta: 10
  ohem_ratio: 3
Optimizer:
  name: Adam
  beta1: 0.9
  beta2: 0.999
  lr:
    name: Cosine
    learning_rate: 0.001
    warmup_epoch: 2
  regularizer:
    name: L2
    factor: 0
PostProcess:
  name: DBPostProcess
  thresh: 0.3
  box_thresh: 0.6
  max_candidates: 1000
  unclip_ratio: 2.4
Metric:
  name: DetMetric
  main_indicator: hmean
Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data/all_210813/
    label_file_list:
    - ./train_data/all_210813/Label.txt
    ratio_list:
    - 1.0
    transforms:
    - DecodeImage:
        img_mode: BGR
        channel_first: false
    - DetLabelEncode: null
    - IaaAugment:
        augmenter_args:
        - type: Affine
          args:
            rotate:
            - -10
            - 10
        - type: Resize
          args:
            size:
            - 0.5
            - 3
    - EastRandomCropData:
        size:
        - 960
        - 960
        max_tries: 50
        keep_ratio: true
    - MakeBorderMap:
        shrink_ratio: 0.4
        thresh_min: 0.3
        thresh_max: 0.7
    - MakeShrinkMap:
        shrink_ratio: 0.4
        min_text_size: 8
    - NormalizeImage:
        scale: 1./255.
        mean:
        - 0.485
        - 0.456
        - 0.406
        std:
        - 0.229
        - 0.224
        - 0.225
        order: hwc
    - ToCHWImage: null
    - KeepKeys:
        keep_keys:
        - image
        - threshold_map
        - threshold_mask
        - shrink_map
        - shrink_mask
  loader:
    shuffle: true
    drop_last: false
    batch_size_per_card: 12
    num_workers: 0

 

 

 

 

0
回复
i
ioracion
#5 回复于2021-10

更新不同epoch的结果,到epoch16的时候指标感觉很不错了,但还是同样的问题。16跟15相比的话,会发现15的长文本框刚刚好、段文本框太大,到16后,短文本框虽然小了,但长文本框也小了...

best metric, hmean: 0.9821138986931223, precision: 0.9709072048283667, recall: 0.993582320015441, fps: 22.424835840399837, best_epoch: 16

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户