基于CRNN的文本字符验证码识别
1项目介绍链接:
为方便大家快速上手OCR实战,本次实战项目采用开源框架PaddleOCR,大家可以参考官网文档快速了解基本使用,项目数据为2022 DCIC赛题中提供的验证码数据集,大家可以参考其他开源项目进行学习,接下来本人将介绍使用基于CRNN网络的验证码识别项目及具体训练流程。
学习参考:
PaddleOCR官方教程
1.项目背景介绍:
本项目以DCID2022赛题为背景,以已标记字符信息的实例字符验证码图像数据为训练样本,参赛选手需基于提供的样本构建模型,对测试集中的字符验证码图像进行识别,提取有效的字符信息。训练数据集不局限于提供的数据,可以加入公开的数据集。
2 数据与评测
2.1 数据简介
提供标注信息训练数据集15000张,每张训练数据由一个4位文本字符验证码图像组成,字符随机产生,标注集对当前图像中的文本字符进行内容标注;测试数据集含25000张验证码图像。
数据参考 :基于文本字符的交易验证码识别
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扫描下方二维码免费领取🆓
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 的正确特征了。