学习bug汇总杂记(持续更新)

**安装环境:

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'

改路径就好了。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值