**安装环境:
1、一般来讲,根据教程复现的代码如果出现torch.fx或者啥模块找不到,
1)考虑cuda和pytorch版本是否冲突了
nvidia-smi
nvidia-smi出来的是cuda的最高支持版本
nvcc --version
这个指令或者nvcc --V都是可以查到当前环境安装的实际cuda版本。
如果这个指令显示not found,参考:https://blog.csdn.net/weixin_44750512/article/details/123156020
conda list | grep torch
上面这个指令可以查看pytorch的版本
如果不配对,就按照自己系统能支持的版本和代码要求的版本综合考虑安装。
下载官网:https://pytorch.org/
下拉网页找到上面这个,找对应指令即可(查找cuda版本ctr+f更快捷)
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
2、环境变量没添加
3、检验是否安装正确
python -c "import torch; print(torch.rand(3,3))"
**显卡驱动问题
问题1:输入nvidia-smi显示未知错误。unkown error
方法1:最好的办法,关机重启
sudo reboot
方法2:重装显卡驱动,参考:https://blog.csdn.net/kuku123465/article/details/130250940
这里关机可能出现一个别人博客里面没有的bug
已经切换到root超级用户还是没有权限,说明管理服务器的人没给权限给你。找人。。。
mmdetection的bug系列
bug1:'ConfigDict' object has no attribute 'dataset'
使用workflow时边训练边测试出现的bug
找到train.py中223那一行,发现这里:
cfg.data.train当中没有dataset,只有pipeline,因此改为:
val_dataset.pipeline = cfg.data.train.get(
'pipeline', cfg.data.train.get('pipeline'))
即可正常运行。
vscode远程使用matplotlib
安装matplot扩展-->>>>---扩展设置----->>>--在交互窗口运行
成功!!!!!
bug杂记:
1、路径转义符错误,使用r加上路径
PP-OCRv4文字识别系列
linux环境安装
- 新建虚拟环境比如paddle_env
conda create -n paddle_env python==3.8
- 安装paddle
飞桨PaddlePaddle-源于产业实践的开源深度学习平台
找到适合自己cuda版本的paddle
python -m pip install paddlepaddle-gpu==2.2.2.post110 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
检查paddle-gpu是否安装成功
python
import paddle
paddle.utils.run_check()
如果显示paddlepaddle is installed successfully!安装成功
然后使用pip list | grep paddle查看版本号
- 安装PaddleOCR whl包
pip install paddleocr>=2.0.1
- 安装paddleOCR里面的环境需要的包
pip install -r requirements.txt
到目前为止,可以使用paddleOCR了
文字识别使用教程
数据集准备
dataset_dir # 数据集根目录,目录名称可以改变
├── images # 存放图像的目录,目录名称可以改变,但要注意和train.txt val.txt的内容对应
├── train.txt # 训练集标注文件,文件名称不可改变,内容举例:images/111085122871_0.JPG\t百度
├── val.txt # 验证集标注文件,文件名称不可改变,内容举例:images/111085122871_0.JPG\t百度
└── dict.txt # 字典文件,文件名称不可改变。字典文件将所有出现的字符映射为字典的索引,每行为一个单字,内容举例:百
下载预训练模型
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md
配置文件修改
Global:
debug: false
use_gpu: true
epoch_num: 50 # 200
log_smooth_window: 5 # 20
print_batch_step: 10
save_model_dir: ./output/0112_2
save_epoch_step: 1 # 10
eval_batch_step: [0, 2000] # [0, 2000]
cal_metric_during_train: true
pretrained_model: ./pretrain_models/ch_PP-OCRv4_rec_train/student.pdparams # 预训练模型
checkpoints: # 中断之后继续训练的路径
save_inference_dir: ./output/0112_2/save_inference_dir
use_visualdl: false # false
infer_img: ./train_data/test_data/ # doc/imgs_words/ch/word_1.jpg
character_dict_path: ./train_data/dict.txt # 添加自己数据集的字典
max_text_length: &max_text_length 13 # 最长的文本字符长度
infer_mode: True
use_space_char: true # 是否识别空格
distributed: true
save_res_path: ./output/0112_2/predicts_ppocrv4.txt
Optimizer:
name: Adam
beta1: 0.9
beta2: 0.999
lr:
name: Cosine
learning_rate: 0.0001 # 0.001 # 数据过拟合应该调小学习率
warmup_epoch: 2 # 5
regularizer:
name: L2
factor: 1.0e-05 # 3.0e-05 # 如果数据过拟合了要调大L2正则化的数值
Architecture:
model_type: rec
algorithm: SVTR_LCNet #[SVTR_LCNet, ]
Transform:
Backbone:
name: PPLCNetV3
scale: 0.95
Head:
name: MultiHead
head_list:
- CTCHead:
Neck:
name: svtr
dims: 120
depth: 2
hidden_dims: 120
kernel_size: [1, 3]
use_guide: True
Head:
fc_decay: 0.00001
- NRTRHead:
nrtr_dim: 384
max_text_length: *max_text_length
Loss:
name: MultiLoss
loss_config_list:
- CTCLoss:
- NRTRLoss:
PostProcess:
name: CTCLabelDecode
Metric:
name: RecMetric
main_indicator: acc
Train:
dataset:
name: MultiScaleDataSet
ds_width: false
data_dir: ./train_data/
ext_op_transform_idx: 1
label_file_list:
- ./train_data/train_list.txt
# ratio_list: [1.0, 0.1]
transforms:
- DecodeImage:
img_mode: BGR
channel_first: false
- RecConAug:
prob: 0.5
ext_data_num: 2
image_shape: [48, 320, 3]
max_text_length: *max_text_length
- RecAug:
- MultiLabelEncode:
gtc_encode: NRTRLabelEncode
- KeepKeys:
keep_keys:
- image
- label_ctc
- label_gtc
- length
- valid_ratio
sampler:
name: MultiScaleSampler
scales: [[320, 32], [320, 48], [320, 64]]
first_bs: &bs 32
fix_bs: false
divided_factor: [8, 16] # w, h
is_training: True
loader:
shuffle: true
batch_size_per_card: *bs
drop_last: true
num_workers: 4
Eval:
dataset:
name: SimpleDataSet
data_dir: ./train_data
label_file_list:
- ./train_data/test_list.txt # fake
# - ./train_data/val_list.txt # real
transforms:
- DecodeImage:
img_mode: BGR
channel_first: false
- MultiLabelEncode:
gtc_encode: NRTRLabelEncode
- RecResizeImg:
image_shape: [3, 48, 320]
- KeepKeys:
keep_keys:
- image
- label_ctc
- label_gtc
- length
- valid_ratio
loader:
shuffle: false
drop_last: false
batch_size_per_card: 32
num_workers: 4
训练:
单机单卡
python tools/train.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml
单机多卡
python -m paddle.distributed.launch --gpus '0,' tools/train.py -c myconfigs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml
多机多卡
python -m paddle.distributed.launch --ips="xx.xx.xx.xx,xx.xx.xx.xx" --gpus '0,1,2,3' tools/train.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml
中断之后继续训练
python tools/train.py -c myconfigs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.checkpoints=output/rec_ppocr_v4/latest.pdparams
推理
python tools/eval.py -c myconfigs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.checkpoints={path/to/weights}/best_accuracy
python tools/eval.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.checkpoints=output/20230111_rec_ppocr_v4/best_accuracy
模型导出
python tools/export_model.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.checkpoints=output/rec_ppocr_v4/best_accuracy Global.save_inference_dir=./inference/best_model_20240111/
inference/en_PP-best_model_20240111/ ├── inference.pdiparams # 识别inference模型的参数文件 ├── inference.pdiparams.info # 识别inference模型的参数信息,可忽略 └── inference.pdmodel # 识别inference模型的program文件
导出之后有.pdmodel模型
测试可视化
python tools/infer/predict_rec.py --rec_char_dict_path=./train_data/dict.txt --rec_model_dir=./inference/best_model_20240111/ --image_dir=train_data/test_data/ --draw_img_save_dir=./inference/Visual_best_model_20240111/ --max_text_length=13
# 可视化单张图
python tools/infer_rec.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.checkpoints=output/rec_ppocr_v4/best_accuracy.pdparams Global.infer_img=train_data/test_data/1.png
paadleOCR遇到的bugs:
1、OSError: (External) Cublas error, CUBLAS_STATUS_NOT_INITIALIZED. The cuBLAS library was not Initial
解决:有内存泄漏问题,将其终止
ps -ef |grep python3
pkill -9 python3
2、SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception. [Hint: Expected killed_ != true, but received killed_:1 == true:1.] (at ../paddle/fluid/operators/reader/blocking_queue.h:175)
解决办法:修改了配置文件里面的最大字符长度从11-->>13就好了
我看到其他人修改num_work好了
3、ori_data = json.load(json_file)
File "D:\desk\anaconda3\lib\json__init__.py", line 293, in load return loads(fp.read(), UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position 747: illegal multibyte sequence
解决办法:有些图像格式编码是gbk,显示UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4导致无法读取json(安装chardet已解决)
4、某个JPGE格式的图像保存为全黑---->>检查发现部分图像用Image.open(path)读取的时候图像的height和weight互换了?待解决
5、During handling of the above exception, another exception occurred: RecursionError: maximum recursion depth exceeded in comparison
很多人说是数据集txt文件格式错误
我的解决方法:将配置文件里面的train路径
data_dir:
- ./train_data/real_data_0116
改为:
data_dir: ./train_data/real_data_0116
然后就解决了。
这个路径问题同时也会引发这些bug:
1、FatalError: Process abort signal
is detected by the operating system.
2、AttributeError: 'DataLoaderIterMultiProcess' object has no attribute 'shutdown'
改路径就好了。