《深入浅出OCR》项目实战:基于CRNN的文字识别

基于CRNN的文本字符验证码识别

1项目介绍链接

为方便大家快速上手OCR实战,本次实战项目采用开源框架PaddleOCR,大家可以参考官网文档快速了解基本使用,项目数据为2022 DCIC赛题中提供的验证码数据集,大家可以参考其他开源项目进行学习,接下来本人将介绍使用基于CRNN网络的验证码识别项目及具体训练流程。

学习参考:

PaddleOCR官方教程

1.项目背景介绍:

本项目以DCID2022赛题为背景,以已标记字符信息的实例字符验证码图像数据为训练样本,参赛选手需基于提供的样本构建模型,对测试集中的字符验证码图像进行识别,提取有效的字符信息。训练数据集不局限于提供的数据,可以加入公开的数据集。

2 数据与评测

2.1 数据简介

提供标注信息训练数据集15000张,每张训练数据由一个4位文本字符验证码图像组成,字符随机产生,标注集对当前图像中的文本字符进行内容标注;测试数据集含25000张验证码图像。

img

img

数据参考 :基于文本字符的交易验证码识别

2.2 数据说明

本项目提供训练数据集文件train_imgs.zip,其中文件名称对应图片文本字符标签;测试数据集文件test_imgs.zip,包含待识别的图像文件。

文件名称说明
train_imgs.zip训练集图片,15000张验证码图片
test_imgs.zip测试集图片,25000张待识别验证码图片
submit_example.csv最终数据格式提交样例

2.3 评价指标

本次项目采用的评价方式为准确率(accuracy),根据测试图像数据预测的准确率进行从高到低的排序,其指标为完全识别出完整的验证码文本信息。 同等准确率的以提交结果的时间排名,先提交者胜出。

�(准确率)=所有待检测的目标数量/检测正确的目标数量P(准确率)=所有待检测的目标数量/检测正确的目标数量

3 数据集下载

数据集链接🔗:aistudio.baidu.com/aistudio/da…
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

### 3.1 数据集准备
python复制代码!ls data/data126477/
# 一共三个文件
# submit_example.csv  test_dataset.zip  training_dataset.zip
python复制代码# 解压数据集
!unzip -o data/data126477/training_dataset.zip -d data/
!unzip -o data/data126477/test_dataset.zip -d  data/
!cp data/data126477/submit_example.csv data/Archive:  data/data126477/training_dataset.zipcreating: data/training_dataset/inflating: data/training_dataset/00IS.png  inflating: data/training_dataset/00O3.png  inflating: data/training_dataset/0180.png  inflating: data/training_dataset/01BA.png ......

3.2 划分数据集

本次项目本人将15000张训练集按照8:2进行划分,12000张作为训练集 3000作为验证集,大家也可以尝试更多划分方式。

python复制代码import pandas as pd
import shutil
import os
import glob
from tqdm import tqdmfrom sklearn.model_selection import train_test_splitdata_path = 'train_data/'
dcic_data_path = './PaddleOCR/train_data/dcic_data/'
dcic_train = './PaddleOCR/train_data/dcic_data/train'
dcic_valid = './PaddleOCR/train_data/dcic_data/valid'
dcic_test = './PaddleOCR/train_data/dcic_data/test'os.makedirs(dcic_data_path, exist_ok=True)
os.makedirs(dcic_train, exist_ok=True)
os.makedirs(dcic_valid, exist_ok=True)
os.makedirs(dcic_test, exist_ok=True)# print([filepath for filepath in glob.glob('data/dcic_data/training_dataset/')])
# print(glob.glob('data/dcic_data/training_dataset/*.png'))
# print(os.listdir('data/training_dataset'))train_images = os.listdir('data/training_dataset')
test_images = os.listdir('data/test_dataset')
train_imgs, valid_imgs = train_test_split(train_images, test_size=0.2, random_state=42, shuffle=True)
print(len(train_imgs), len(valid_imgs))all_txts = []
# shutil.copy('data/dcic_data/training_dataset/0A5o.png', 'train_data/dcic_data/train/0A5o.png')
with open('./PaddleOCR/train_data/dcic_data/rec_gt_train.txt', 'w', encoding='utf-8') as f:for image in tqdm(train_imgs):shutil.copy(f'data/training_dataset/{image}', f'./PaddleOCR/train_data/dcic_data/train/{image}')txt = image.split('.png')[0]all_txts.append(txt)f.write(f'train/{image}\t{txt}' + '\n')
with open('./PaddleOCR/train_data/dcic_data/rec_gt_valid.txt', 'w', encoding='utf-8') as f:for image in tqdm(valid_imgs):shutil.copy(f'data/training_dataset/{image}', f'./PaddleOCR/train_data/dcic_data/valid/{image}')txt = image.split('.png')[0]all_txts.append(txt)f.write(f'valid/{image}\t{txt}' + '\n')
for image in tqdm(test_images):shutil.copy(f'data/test_dataset/{image}', f'./PaddleOCR/train_data/dcic_data/test/{image}')# with open('train_data/dcic_data/captcha.txt', 'w', encoding='utf-8') as f:
#     all_str = ''.join(all_txts)
#     dict_char=sorted(set(all_str))
#     for char in dict_char:
#         f.write(char+'\n')

结果进度显示如下:

shell复制代码100%|██████████| 12000/12000 [00:00<00:00, 17161.60it/s]
100%|██████████| 3000/3000 [00:00<00:00, 17321.81it/s]
...

下面展示单张图片,具体代码:

python复制代码import cv2
import matplotlib.pyplot as plt
# 读取原图
raw_img = cv2.imread("train_data/dcic_data/valid/01jQ.png")
plt.figure()
plt.subplot(2,1,1)
# 可视化原图
plt.imshow(raw_img)
# 缩放并归一化
padding_im, draw_img = resize_norm_img(raw_img)
plt.subplot(2,1,2)
# 可视化网络输入图
plt.imshow(draw_img)
plt.show()

3.3 配置文件

本次验证码识别项目采用PaddleOCR框架进行训练,使用CRNN算法,其配置文件由预设的config文件进行配置,以rec_icdar15_train.yml为例,主要配置训练轮数、batchsize、字典、数据集路径、缩放大小等参数。

yaml复制代码Train:dataset:name: SimpleDataSet# 训练数据根目录data_dir: ./train_data/ic15_data/# 训练数据标签label_file_list: ["./train_data/ic15_data/rec_gt_train.txt"]transforms:- DecodeImage: # load imageimg_mode: BGRchannel_first: False- CTCLabelEncode: # Class handling label- RecResizeImg:image_shape: [3, 32, 100]  # [3,32,320]- KeepKeys:keep_keys: ['image', 'label', 'length'] # dataloader will return list in this orderloader:shuffle: Truebatch_size_per_card: 256drop_last: Truenum_workers: 8use_shared_memory: FalseEval:dataset:name: SimpleDataSet# 评估数据根目录data_dir: ./train_data/ic15_data# 评估数据标签label_file_list: ["./train_data/ic15_data/rec_gt_test.txt"]transforms:- DecodeImage: # load imageimg_mode: BGRchannel_first: False- CTCLabelEncode: # Class handling label- RecResizeImg:image_shape: [3, 32, 100]- KeepKeys:keep_keys: ['image', 'label', 'length'] # dataloader will return list in this orderloader:shuffle: Falsedrop_last: Falsebatch_size_per_card: 256num_workers: 4use_shared_memory: Falsepython复制代码# 保留原始配置文件复制一份配置文件,作为最终验证码识别配置文件
!cp ./PaddleOCR/configs/rec/rec_icdar15_train.yml ./PaddleOCR1/rec_dcic_train.yml 

将以下内容填充到./PaddleOCR/configs/rec/rec_dcic_train.yml ,代码注释如下:

yaml复制代码Global:use_gpu: true# 训练轮数epoch_num: 300 log_smooth_window: 20print_batch_step: 10# 模型保存路径save_model_dir: ./output/rec/dcic/save_epoch_step: 3# evaluation is run every 2000 iterationseval_batch_step: [0, 2000]cal_metric_during_train: Truepretrained_model: pretrain_models/rec_mv3_none_bilstm_ctc/best_accuracycheckpoints:save_inference_dir: ./use_visualdl: Falseinfer_img: doc/imgs_words_en/word_10.png# for data or label processcharacter_dict_path: ppocr/utils/en_dict.txtmax_text_length: 4infer_mode: Falseuse_space_char: Falsesave_res_path: ./output/rec/predicts_dcic.txt
# 优化器设置
Optimizer:name: Adambeta1: 0.9beta2: 0.999lr:learning_rate: 0.0005regularizer:name: 'L2'factor: 0
# 模型结构
Architecture:model_type: recalgorithm: CRNNTransform:Backbone:name: MobileNetV3scale: 0.5model_name: largeNeck:name: SequenceEncoderencoder_type: rnn# rnn隐层单元个数,超参数hidden_size: 96Head:name: CTCHeadfc_decay: 0Loss:name: CTCLossPostProcess:name: CTCLabelDecodeMetric:name: RecMetricmain_indicator: accTrain:dataset:name: SimpleDataSet# 训练集路径data_dir: ./train_data/dcic_data/# 训练集标签文件label_file_list: ["./train_data/dcic_data/rec_gt_train.txt"]transforms:- DecodeImage: # load imageimg_mode: BGRchannel_first: False- CTCLabelEncode: # Class handling label- RecResizeImg:image_shape: [3, 32, 96]- KeepKeys:keep_keys: ['image', 'label', 'length'] # dataloader will return list in this orderloader:shuffle: Truebatch_size_per_card: 256drop_last: Truenum_workers: 0use_shared_memory: FalseEval:dataset:name: SimpleDataSetdata_dir: ./train_data/dcic_datalabel_file_list: ["./train_data/dcic_data/rec_gt_valid.txt"]transforms:- DecodeImage: # load imageimg_mode: BGRchannel_first: False- CTCLabelEncode: # Class handling label- RecResizeImg:image_shape: [3, 32, 96]- KeepKeys:keep_keys: ['image', 'label', 'length'] # dataloader will return list in this orderloader:shuffle: Falsedrop_last: Falsebatch_size_per_card: 256num_workers: 4use_shared_memory: False

4 模型介绍

4.1 CRNN模型

本项目模型采用文字识别经典CRNN模型(CNN+RNN+CTC),其中部分模型代码经过PaddleOCR源码改编,完成识别模型的搭建、训练、评估和预测过程。训练时可以手动更改config配置文件(数据训练、加载、评估验证等参数),默认采用优化器采用Adam,使用CTC损失函数。

CRNN网络结构:

在这里插入图片描述

CRNN网络结构包含三部分,从下到上依次为:

(1)卷积层。作用是从输入图像中提取特征序列。

(2)循环层。作用是预测从卷积层获取的特征序列的标签(真实值)分布。

(3)转录层。作用是把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果。 在这里插入图片描述

4.2模型训练流程:

针对CRNN网络训练,首先使用卷积神经网络网络提取文本图像的特征,其次利用BLSTM将特征向量进行融合以提取字符序列的上下文特征,得到每列特征的概率分布,最后通过转录层进行预测得到文本序列。

具体模型训练步骤如下:

1.将输入图像统一缩放至32W3。

2.利用CNN提取后图像卷积特征,得到的大小为:1W/4512。

3.通过上述输入到LSTM提取序列特征,得到W/4*n后验概率矩阵。

4.利用CTC损失,实现标签和输出一一对应,进行训练。

CRNN卷积过程:

在这里插入图片描述 在这里插入图片描述

4.3 CTC损失函数介绍:

CTC是一种Loss计算方法,用CTC代替Softmax Loss,训练样本无需对齐。引入blank字符,解决有些位置没有字符的问题,通过递推,快速计算梯度。

在这里插入图片描述

以下以apple单词为例,引入“-”符号,解释CTC网络是如何展开路径进行计算的。 在这里插入图片描述

路径展开原则:

CTC训练流程和传统的神经网络类似,构建损失函数,然后根据BP算法进行训练,不同之处在于传统的神经网络的训练准则是针对每帧数据,即每帧数据的训练误差最小,而CTC的训练准则是基于序列的,比如最大化 p(l|x) ,序列化的概率求解比较复杂,因为一个输出序列可以对应很多的路径,所有引入前后向算法来简化计算。

前向概率: 在这里插入图片描述

后向概率: 在这里插入图片描述

计算CTC Loss: 在这里插入图片描述

在这里插入图片描述

更多CRNN学习资料可参考我的这篇博客:[https://blog.csdn.net/qq_36816848/article/details/121723891](https://blog.csdn.net/qq_36816848/article/details/121723891)

5 训练评估与预测

下载预训练模型:为了加快收敛速度,建议下载训练好的模型在 比赛 数据上进行 finetune

5.1 训练

python复制代码%cd PaddleOCR/
# 下载MobileNetV3的预训练模型
!wget -nc -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar
# 解压模型参数
!tar -xf pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train.tar && rm -rf pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train.tar
!mv rec_mv3_none_bilstm_ctc_v2.0_train ./pretrain_models
bash复制代码/home/aistudio/PaddleOCR
--2022-02-19 20:43:08--  https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar
正在解析主机 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.229, 182.61.200.195, 2409:8c04:1001:1002:0:ff:b001:368a
正在连接 paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.229|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 51200000 (49M) [application/x-tar]
正在保存至:./pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train.tar”rec_mv3_none_bilstm 100%[===================>]  48.83M  17.6MB/s    in 2.8s    2022-02-19 20:43:11 (17.6 MB/s) - 已保存 “./pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train.tar” [51200000/51200000])

启动训练命令很简单,指定好配置文件即可。另外在命令行中可以通过 -o 修改配置文件中的参数值。启动训练命令如下所示

其中:

  • Global.pretrained_model: 加载的预训练模型路径
  • Global.character_dict_path : 字典路径(这里只支持26个小写字母+数字)
  • Global.eval_batch_step : 评估频率
  • Global.epoch_num: 总训练轮数
python复制代码!python3 tools/train.py -c configs/rec/rec_dcic_train.yml \-o Global.pretrained_model=./pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train/best_accuracy

5.2 模型评估

模型评估通过 configs/rec/rec_dcic_train.yml 修改Eval中的 label_file_path 设置,默认使用大赛提供的评估集,更改对应路径并加载训练最好的模型权重:

python复制代码!python tools/eval.py -c configs/rec/rec_dcic_train.yml -o Global.checkpoints=output/rec/dcic/best_accuracy

5.3 预测

使用 PaddleOCR 训练好的模型,可以通过以下脚本进行快速预测。默认预测图片存储在 infer_img 里,通过 -o Global.checkpoints 加载训练好的参数文件:

python复制代码!python tools/infer_rec.py -c configs/rec/rec_dcic_train.yml \-o Global.checkpoints=./output/rec/dcic/best_accuracy \Global.infer_img=./train_data/dcic_data/valid/01jU.png

预测结果显示:

yaml复制代码[2022/01/24 03:54:25] root INFO: Architecture : 
[2022/01/24 03:54:25] root INFO:     Backbone : 
[2022/01/24 03:54:25] root INFO:         model_name : large
[2022/01/24 03:54:25] root INFO:         name : MobileNetV3
[2022/01/24 03:54:25] root INFO:         scale : 0.5
[2022/01/24 03:54:25] root INFO:     Head : 
[2022/01/24 03:54:25] root INFO:         fc_decay : 0
[2022/01/24 03:54:25] root INFO:         name : CTCHead
[2022/01/24 03:54:25] root INFO:     Neck : 
[2022/01/24 03:54:25] root INFO:         encoder_type : rnn
[2022/01/24 03:54:25] root INFO:         hidden_size : 96
[2022/01/24 03:54:25] root INFO:         name : SequenceEncoder
[2022/01/24 03:54:25] root INFO:     Transform : None
[2022/01/24 03:54:25] root INFO:     algorithm : CRNN
[2022/01/24 03:54:25] root INFO:     model_type : rec
[2022/01/24 03:54:25] root INFO: Eval : 
[2022/01/24 03:54:25] root INFO:     dataset : 
[2022/01/24 03:54:25] root INFO:         data_dir : ./train_data/dcic_data
[2022/01/24 03:54:25] root INFO:         label_file_list : ['./train_data/dcic_data/rec_gt_valid.txt']
[2022/01/24 03:54:25] root INFO:         name : SimpleDataSet
[2022/01/24 03:54:25] root INFO:         transforms : 
[2022/01/24 03:54:25] root INFO:             DecodeImage : 
[2022/01/24 03:54:25] root INFO:                 channel_first : False
[2022/01/24 03:54:25] root INFO:                 img_mode : BGR
[2022/01/24 03:54:25] root INFO:             CTCLabelEncode : None
[2022/01/24 03:54:25] root INFO:             RecResizeImg : 
[2022/01/24 03:54:25] root INFO:                 image_shape : [3, 32, 96]
[2022/01/24 03:54:25] root INFO:             KeepKeys : 
[2022/01/24 03:54:25] root INFO:                 keep_keys : ['image', 'label', 'length']
[2022/01/24 03:54:25] root INFO:     loader : 
[2022/01/24 03:54:25] root INFO:         batch_size_per_card : 256
[2022/01/24 03:54:25] root INFO:         drop_last : False
[2022/01/24 03:54:25] root INFO:         num_workers : 4
[2022/01/24 03:54:25] root INFO:         shuffle : False
[2022/01/24 03:54:25] root INFO:         use_shared_memory : False
[2022/01/24 03:54:25] root INFO: Global : 
[2022/01/24 03:54:25] root INFO:     cal_metric_during_train : True
[2022/01/24 03:54:25] root INFO:     character_dict_path : ppocr/utils/en_dict.txt
[2022/01/24 03:54:25] root INFO:     checkpoints : ./output/rec/dcic/best_accuracy
[2022/01/24 03:54:25] root INFO:     debug : False
[2022/01/24 03:54:25] root INFO:     distributed : False
[2022/01/24 03:54:25] root INFO:     epoch_num : 300
[2022/01/24 03:54:25] root INFO:     eval_batch_step : [0, 2000]
[2022/01/24 03:54:25] root INFO:     infer_img : ./train_data/dcic_data/valid/01jU.png
[2022/01/24 03:54:25] root INFO:     infer_mode : False
[2022/01/24 03:54:25] root INFO:     log_smooth_window : 20
[2022/01/24 03:54:25] root INFO:     max_text_length : 4
[2022/01/24 03:54:25] root INFO:     pretrained_model : pretrain_models/rec_mv3_none_bilstm_ctc/best_accuracy
[2022/01/24 03:54:25] root INFO:     print_batch_step : 10
[2022/01/24 03:54:25] root INFO:     save_epoch_step : 3
[2022/01/24 03:54:25] root INFO:     save_inference_dir : ./
[2022/01/24 03:54:25] root INFO:     save_model_dir : ./output/rec/dcic/
[2022/01/24 03:54:25] root INFO:     save_res_path : ./output/rec/predicts_dcic.txt
[2022/01/24 03:54:25] root INFO:     use_gpu : True
[2022/01/24 03:54:25] root INFO:     use_space_char : False
[2022/01/24 03:54:25] root INFO:     use_visualdl : False
[2022/01/24 03:54:25] root INFO: Loss : 
[2022/01/24 03:54:25] root INFO:     name : CTCLoss
[2022/01/24 03:54:25] root INFO: Metric : 
[2022/01/24 03:54:25] root INFO:     main_indicator : acc
[2022/01/24 03:54:25] root INFO:     name : RecMetric
[2022/01/24 03:54:25] root INFO: Optimizer : 
[2022/01/24 03:54:25] root INFO:     beta1 : 0.9
[2022/01/24 03:54:25] root INFO:     beta2 : 0.999
[2022/01/24 03:54:25] root INFO:     lr : 
[2022/01/24 03:54:25] root INFO:         learning_rate : 0.0005
[2022/01/24 03:54:25] root INFO:     name : Adam
[2022/01/24 03:54:25] root INFO:     regularizer : 
[2022/01/24 03:54:25] root INFO:         factor : 0
[2022/01/24 03:54:25] root INFO:         name : L2
[2022/01/24 03:54:25] root INFO: PostProcess : 
[2022/01/24 03:54:25] root INFO:     name : CTCLabelDecode
[2022/01/24 03:54:25] root INFO: Train : 
[2022/01/24 03:54:25] root INFO:     dataset : 
[2022/01/24 03:54:25] root INFO:         data_dir : ./train_data/dcic_data/
[2022/01/24 03:54:25] root INFO:         label_file_list : ['./train_data/dcic_data/rec_gt_train.txt']
[2022/01/24 03:54:25] root INFO:         name : SimpleDataSet
[2022/01/24 03:54:25] root INFO:         transforms : 
[2022/01/24 03:54:25] root INFO:             DecodeImage : 
[2022/01/24 03:54:25] root INFO:                 channel_first : False
[2022/01/24 03:54:25] root INFO:                 img_mode : BGR
[2022/01/24 03:54:25] root INFO:             CTCLabelEncode : None
[2022/01/24 03:54:25] root INFO:             RecResizeImg : 
[2022/01/24 03:54:25] root INFO:                 image_shape : [3, 32, 96]
[2022/01/24 03:54:25] root INFO:             KeepKeys : 
[2022/01/24 03:54:25] root INFO:                 keep_keys : ['image', 'label', 'length']
[2022/01/24 03:54:25] root INFO:     loader : 
[2022/01/24 03:54:25] root INFO:         batch_size_per_card : 256
[2022/01/24 03:54:25] root INFO:         drop_last : True
[2022/01/24 03:54:25] root INFO:         num_workers : 0
[2022/01/24 03:54:25] root INFO:         shuffle : True
[2022/01/24 03:54:25] root INFO:         use_shared_memory : False
[2022/01/24 03:54:25] root INFO: profiler_options : None
[2022/01/24 03:54:25] root INFO: train with paddle 2.2.1 and device CUDAPlace(0)
W0124 03:54:25.561218  8122 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0124 03:54:25.566077  8122 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[2022/01/24 03:54:30] root INFO: resume from ./output/rec/dcic/best_accuracy
[2022/01/24 03:54:30] root INFO: infer_img: ./train_data/dcic_data/valid/01jU.png
[2022/01/24 03:54:30] root INFO: 	 result: o1lU	0.9584374
[2022/01/24 03:54:30] root INFO: success!

从上述结果中我们可以看到对应预测结果。

yaml复制代码[2022/01/24 03:54:30] root INFO: infer_img: ./train_data/dcic_data/valid/01jU.png
[2022/01/24 03:54:30] root INFO: 	 result: o1lU	0.9584374
[2022/01/24 03:54:30] root INFO: success!

预测全部测试集

python复制代码!python tools/infer_rec.py -c configs/rec/rec_dcic_train.yml \
-o Global.checkpoints=./output/rec/dcic/best_accuracy \
Global.infer_img=../data/test_dataset```python
import pandas as pdsubmit = pd.read_csv('../data/data126477/submit_example.csv')
# print(submit)nums = []
results = []
with open('output/rec/predicts_dcic.txt', 'r', encoding='utf-8') as f:# print(f.read().split('\t')[:2])data = f.read().split('\t')for i in range(2, len(data), 2):img,res=data[i - 2:i]# print(img)img=img.split('/')[-1].split('.png')[0]# print(img)nums.append(int(img))results.append(res)result_df=pd.DataFrame({'num':nums,'tag':results})
result_df=result_df.sort_values('num',ascending=True)
result_df.to_csv('baseline.csv',index=None)

6 项目总结

本次验证码识别项目基于PaddOCR框架,简述了从数据标注、预处理、模型训练与预测多个流程,帮读者熟悉Paddle基本使用与训练流程。最终本项目通过经典文字识别领域CRNN模型进行验证码识别,通过数据集划分,修改模型参数配置,训练、测试到最终预测,最终准确率可以达到 96% 以上,后期扩展可通过模型微调或者寻找更适合网络进行训练,不断优化。

7 本篇总结

本篇主要介绍《深入浅出OCR》实战:基于DBNet的文字检测,以PaddleOCR框架完成文字检测任务,尽可能详细介绍代码及项目流程,如有错误请指正,后续本人也将介绍更多实战项目,欢迎大家交流学习。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

圈子社区系统源码 开源 多端圈子社区论坛系统 社区圈子管理系统

介绍 圈子论坛小程序&#xff0c;是一款为用户提供交流分享、互动沟通的平台。在这个小程序中&#xff0c;用户可以轻松地加入各种不同兴趣爱好的圈子&#xff0c;与志同道合的朋友们交流互动。圈子论坛小程序不仅仅是一个简单的社交工具&#xff0c;更是一个打开新世界大门的…

el-table 固定前n行

el-table 固定前n行 第一种&#xff0c;通过设置前几行粘性布局 <el-table:data"tableData2"borderheight"calc(98% - 40px)"// 设置行样式:row-class-name"TableRowClassName"selection-change"handleSelectionChange" ><…

在 Java 项目中扫描识别图片中的文字(详细教程)

目录 需求&#xff1a; 步骤&#xff1a; 1、maven配置&#xff08;pom.xml&#xff09;&#xff1a; 2、下载依赖文件&#xff1a; 3、代码&#xff1a; post进行测试&#xff1a; 测试图片&#xff1a; 测试结果&#xff1a; 需求&#xff1a; 上传图片文件进行扫描…

CentOS 9安装Kubernetes(k8s)集群

前言 1、版本说明 系统版本&#xff1a;CentOS 9 k8s版本&#xff1a;v1.29.5 docker版本&#xff1a;26.1.3 harbor&#xff1a;v2.9.4 2、提前准备好1台虚拟机&#xff0c;可以参考博客&#xff1a;Vmware 17安装 CentOS9 3、虚拟机提前安装好docker&#xff0c;参考博客&a…

微信小程序多端框架打包后发布到华为市场

app上架华为应用市场 一、android 发布到华为应用市场 1、华为应用市场注册开发者账号 https://developer.huawei.com/consumer/cn/?ha_sourcesem&ha_sourceId89000605 2、进行企业认证 3、app隐私弹窗 miniapp-privacy.json 1、协议弹窗内容&#xff1a; {"tit…

C语言中的整型提升

一. 简介 本文来简单学习一下&#xff0c;C语言中的整型提升。 二. C语言中的整型提升 1. 什么是整型提升&#xff1f; C语言中的算数运算表达式总是以整型的精度进行的&#xff0c;为了获得这个精度&#xff0c;表达式的字符和短整型操作数在使用之前被隐式转换为普通类型…

Linux中Apache网站基于Http服务的访问限制(基于地址/用户)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f468;‍&#x1f4bb;Linux高级管理专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月3日11点44分 &#x1f004;️文章质量&#xff1a;95分 为了更好地控制对网站资源的访问&#xff0c;可…

谈谈JDK 漏洞 6260652

JDK 漏洞 6260652 在看ArrayList源码的过程中 发现带参构造里有一个注释&#xff1a; // c.toArray might (incorrectly) not return Object[] (see 6260652) public ArrayList(Collection<? extends E> c) {elementData c.toArray();if ((size elementData.length) …

动物收容所

题目链接 动物收容所 题目描述 注意点 若没有可以收养的动物&#xff0c;则返回[-1,-1]收纳所的最大容量为20000编号随着收养动物的增加自增 解答思路 利用队列先进先出的特点将猫和狗分别存进两个队列中&#xff0c;关键是dequeueAny这个方法中如果此时猫和狗的队列中都有…

演讲全文|林涛:MongoDB助力智能制造出海控本增效

5月29日-30日在上海世博中心举办的亚马逊云科技中国峰会圆满结束。本文整理了MongoDB北亚区方案与咨询总监林涛在白金讲堂的演讲全文&#xff0c;就《MongoDB助力智能制造出海控本增效》话题与大家共同探讨。 白金讲堂演讲视频 从全球经济竞争的角度看&#xff0c;中国制造业…

C++标准模板(STL)- 迭代器库-迭代器适配器- 逆序遍历的迭代器适配器 (二)

迭代器库-迭代器原语 迭代器库提供了五种迭代器的定义&#xff0c;同时还提供了迭代器特征、适配器及相关的工具函数。 迭代器分类 迭代器共有五 (C17 前)六 (C17 起)种&#xff1a;遗留输入迭代器 (LegacyInputIterator) 、遗留输出迭代器 (LegacyOutputIterator) 、遗留向前…

网站安全小白也能搞定的SSL证书安装免费方法

大家都知道&#xff0c;部署一个网站&#xff0c;除了购买域名&#xff0c;现在基本标配SSL证书。 我们以aliyun为例 大家看到这个&#xff0c;收费的SSL证书几千-几万1年不等。这时候&#xff0c;你就会想有没有免费的可以搞。linux老鸟都知道&#xff0c; Let’s Encrypt 、…

Megapoly.Art - Mechanic Shop Pack

Megapoly.art很高兴推出“汽车机械师包”。这个模块化包包括创建汽车机械师场景所需的一切,从简单的工具到先进的机器,包括路虎卫士的额外内容。 移动友好型低多边形建模和优化的纹理。 包信息 总计:129个预制件 - 5个独特的机器,21个建筑预制件,98个道具和奖励内容路虎(…

JVM类加载机制和双亲委派

类加载机制 java文件需要编译成字节码文件(.class文件)&#xff0c;jvm是通过类加载机制&#xff0c;将.class文件加载进内存&#xff0c;经过验证连接->初始化直到使用该对象的过程就是类加载机制&#xff0c;当new对象的时候&#xff0c;jvm首先去常量池寻找该类的符号引用…

LabVIEW电路板性能与稳定性测试系统

LabVIEW电路板性能与稳定性测试系统 概述&#xff1a; 开发基于LabVIEW的电路板性能与稳定性测试系统&#xff0c;通过集成多种测试仪器&#xff0c;实现对电路板的电气性能和长期稳定性的全面评估。系统涵盖了电压、电流、温度等多项参数的监测&#xff0c;并具备自动化测试…

Navicat+sqlite操作数据

使用navicat操作数据库&#xff08;比如sqlite数据库&#xff09;可以实现与access&#xff08;参考该文&#xff09;一样的操作&#xff0c;可以导入导出excel等格式的文件&#xff0c;如下图所示。 两种方式的sql语句的语法也基本一样。

C# PaddleOCR 单字识别效果

C# PaddleOCR 单字识别效果 效果 说明 根据《百度办公文档识别C离线SDKV1.2用户接入文档.pdf》&#xff0c;使用C封装DLL&#xff0c;C#调用。 背景 为使客户、第三方开发者等能够更快速、方便的接入使用百度办公文档识别 SDK、促进百度 OCR产品赋能更多客户&#xff0c;特设…

水泵选型指南

在现代暖通空调&#xff08;HVAC&#xff09;系统中&#xff0c;冷冻水泵是关键组件之一&#xff0c;它在提供冷却和空调效果方面起着至关重要的作用。选择合适的冷冻水泵不仅可以提高系统效率&#xff0c;还能节省能源和维护成本。本文将介绍冷冻水泵选型的关键因素和步骤。 …

【遗传算法】【机器学习】【Python】常见交叉方法(二)、多点交叉和均匀交叉

往期遗传算法文章见&#xff1a; 【遗传算法】【机器学习】【Python】常见交叉方法&#xff08;一&#xff09;、单点交叉和两点交叉 一、遗传算法流程图 交叉过程即存在于上图的”交叉“&#xff08;crossover&#xff09;步骤中。 二、多点交叉 多点交叉的原理就是&#x…

金融科技发展报告:移动支付的市场格局、趋势与优缺点

一、引言 随着科技的飞速发展,金融科技已成为推动全球经济发展的重要力量。移动支付作为金融科技的重要分支,其市场格局与趋势日益受到业界的关注。本报告将详细剖析移动支付的市场格局,并深入探讨其发展趋势,同时结合相关案例和数据,为读者呈现移动支付的优缺点,以及国…