баг с кропом
if im.width > 1200:
im = im.crop((0, 0, 1200, H))
text = text # редко
кроп хардкожен
КАРТИНКА
сарсыарда сырдык буолбутун кэннэ кустуу барыахха...
после кропа
сарсыарда сырдык буолбутун кэннэ
TARGET
сарсыарда сырдык буолбутун кэннэ кустуу барыахха...
таким образом модель в эпохе получает невыполнимую задачу
картинка и результат при инференсе? а если без кропа передавать изображение и сжать его до 1200?
агась сжать до 1200 будет круче чем резать
примерчик
im = im.resize((1200, 48))
тогда резаться не будет но учти надо высоту зафиксировать или соотношния сторон
примерчик юниформ скейла
scale = min(1.0, 1200 / im.width)
new_w = round(im.width * scale)
new_h = round(im.height * scale)
im = im.resize((new_w, new_h), Image.BILINEAR)
и получится 1200 × 32
но вообше можно как у гуглов делать адаптивную шириру строки
im = im.resize(
(max(8, int(im.width * H / im.height)), H),
Image.BILINEAR
)
лучше всего сделать экспортер результато масштабировании чтобы посмотреть что текст не деформировался от скейла а то crnn дрейфовать может
а попробуйте SVTRv2 + CTC обучить я ставлю на то что патчи прям круто шелкают задачу класификаций ну прям хоть почерк медсестры с рб2 поможет расшифровать а ctc прям лапочка вместо Дооооорро бббо сразу будет норм дорообо потомучто он предсказывает символы для каждого участка благо байду показывал результаты локального миксинга и глобального атеншна до ctc как референс почитай арксив PaddleOCR там все очень красиво написали товарищи с столички
еше надо прям понять что синт датасет если его состаривать или искажать детермированным алгоритмом сверточник попытается зазубрить алгоритм состаривания или искажения а на реальных фотках моделька будет плохим поэтому его надо штрафовать или исправить алгоритм генерации синта

