pytorch验证码识别crnn+ctcloss+beam_search_decoder从0到1(附避坑要点!)

本文介绍了使用PyTorch进行验证码识别的完整过程,包括数据处理、模型构建、CTC Loss函数的应用及训练细节。通过自定义Dataset加载数据,利用RNN和CNN网络结构,配合nn.CTCLoss进行训练。文中强调了标签编码的注意事项,如保持字符顺序一致,并确保空白字符在第一位。此外,还提到了训练后的模型泛化能力问题,由于数据量小,模型可能无法很好地泛化到新验证码。最后,作者分享了项目代码并推荐了fast_ctc_loss库作为替代方案。
摘要由CSDN通过智能技术生成

数据说明:

网络上分享到的验证码数据,只有1040张图片。

 制作dataloader

import os

import cv2 as cv
import torch
from torch.utils.data import Dataset

class CodeDataset(Dataset):

    def __init__(self, path='', transform=None):#, transform=None
        self.path = path
        self.transform = transform
        self.imgs = []
        for root, dirs, files in os.walk(path):
            for file in files:
                self.imgs.append(file)

        self.n_samples = self.imgs.__len__()
        self.labels = [i.split('.')[0] for i in self.imgs]
        unique_set=set(char for label in self.labels for char in label)
        self.map=sorted(list(unique_set))
        self.characters = ['-']+sorted(list(unique_set))
        self.myclass_len=len(self.characters)
        self.char_to_num = dict((c, i) for i, c in enumerate(self.characters))
        self.num_to_char = dict((i, c) for i, c in enumerate(self.characters))


    def __getitem__(self, index):
        img_path = os.path.join(self.path, self.imgs[index])
        to_img = cv.imread(img_path)
        if self.transform:
 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值