真实面经题目 · 原创解析
DBNet 和 CTC 分别解决 OCR 中的什么问题,核心原理是什么?
这题考 OCR 检测和识别两段核心链路:DBNet 负责把文字区域找出来,CTC 负责在无字符级对齐标注时训练序列识别。
真实面经题目 · 原创解析
这题考 OCR 检测和识别两段核心链路:DBNet 负责把文字区域找出来,CTC 负责在无字符级对齐标注时训练序列识别。
OCR 通常先检测再识别。DBNet 属于文本检测方法,目标是从图像中定位文字区域,它用可微分二值化把概率图、阈值图和近似二值图一起学习,让文本边界更清晰,后处理再把连通区域转成文本框或文本多边形。CTC 属于序列识别训练目标,解决输入特征帧和输出字符序列长度不一致、没有逐字符对齐标注的问题。它引入 blank 标签,把所有折叠后等价于目标字符串的路径概率求和,训练时最大化目标序列概率,解码时再去 blank、合并重复字符。
DBNet 和 CTC 不在同一层解决问题。DBNet 解决检测,即图像里哪里是文字;CTC 解决识别训练,即检测到的文字图像如何转成字符序列,尤其是不知道每个字符对应输入特征中哪个位置时如何监督。
传统文本检测会预测文本概率图,再通过固定阈值二值化得到文字区域。DBNet 把二值化近似成可微模块,同时学习概率图和阈值图,让模型能根据局部边界难度自适应地产生更干净的文本区域。
训练时通常有文本区域概率图、阈值图和近似二值图三类监督。概率图关注是否为文本,阈值图关注边界处如何切开相邻文本,二值图让最终可分割区域更接近后处理需要的结果。
识别网络输出的是一串时间步或宽度方向特征,每个位置给出字符分布,但标注通常只有完整字符串。CTC 不要求字符级位置标注,而是枚举所有可能对齐路径,把折叠后得到目标字符串的路径概率加起来。
CTC 解码会先取每个时间步概率最高的标签,再合并连续重复字符并删除 blank。它适合横向序列文字识别,训练简单稳定;如果文本排列复杂、需要强语言建模或字符间依赖,可能需要 attention decoder、Transformer decoder 或语言模型重排序补充。
固定阈值对模糊边界、粘连文本和不同尺度文字不够稳定,阈值图能让模型在局部自适应地区分文本和背景。
blank 用来表示当前时间步不输出字符,也用于分隔连续相同字符,避免折叠重复字符时把真实重复字符误合并。
CTC 假设输出顺序基本单调,训练不需要显式对齐;attention decoder 学习对输入位置的软选择,表达更灵活但训练和解码通常更复杂。
检测框裁剪不完整、角度不准或包含太多背景都会让识别网络输入质量下降,所以检测召回、边界和矫正都直接影响识别准确率。