Ocr之PaddleOcr模型訓練

目錄

一、系統環境

1 鏡像拉取ppocr 進行部署

2 安裝paddlepaddle

二、訓練前的準備

1 下載源碼

2 預模型下載

3 修改模型訓練文件yml

4 編排訓練集

5 執行腳本進行訓練

6 需要修改文件夾名稱

三、開始訓練

1 執行訓練命令

2 對第一次評估進行解釋

3 引言

五、總結


一、系統環境

1. 鏡像拉取ppocr 進行部署

注:gitee上有提供環境準備的鏈接【鏈接】
注:其中用到了下方紅框命令
在這里插入圖片描述

2. 安裝paddlepaddle

pip install paddlepaddle

二、訓練前的準備

1. 下載源碼

切換到 /paddle/目錄下 下載源碼

cd /paddle
git clone https://gitee.com/paddlepaddle/PaddleOCR.git
# 切換版本
git checkout origin/release/2.7

2. 預模型下載

注:預訓練模型:已經訓練好的模型。在此模型基礎上訓練,對生成新的模型進行增強

在這里插入圖片描述

注:進入PP-OCR系列模型下載頁面
注:此處下載的訓練模型內容是 ch_det_mobile_v2.0_det ( 跟隨參考文章 )
在這里插入圖片描述

  • 下載后在docker容器中創建目錄將模型保存至目錄中

注:首先創建目錄

mkdir /paddle/PaddleOCR/Preliminary_training

在這里插入圖片描述

  • 使用公開數據集

注:可訓練自己的數據集,這里跳過,直接使用公開數據集 訓練自己的數據集 參考文章 >>|
注:公開數據集下載說明 >>|
注:共3部分 下載圖片和標注
在這里插入圖片描述
注:進入網站進行下載時需要注冊登錄
在這里插入圖片描述注:下圖就是下載后的內容
注:下載的文件需要對文件夾名稱做修改(留作彩蛋,文章后面會說) 去那 >>|
在這里插入圖片描述

3. 修改模型訓練文件yml

注:修改預訓練模型的位置。修改use_gpu: false(因本機使用的是cpu)
在這里插入圖片描述

4. 將下載的訓練集進行編排

注:編排如圖
在這里插入圖片描述

5. 執行腳本進行訓練

注:選擇配置文件進行訓練,這里選擇 ./configs/det/det_mv3_db.yml det_mv3_db的意思基于db和mobileNetV3算法的文本檢測配置文件
注:處理執行時遇到的問題

  • 問題1:處理模塊不存在問題
    ModuleNotFoundError: No module named 'skimage' , 'imgaug', 'pyclipper', 'tqdm', 'rapidfuzz'

注:安裝相關模塊進行解決

# 安裝圖像處理模塊
pip install scikit-image
# 安裝圖像增強模塊
pip install imgaug
# 安裝形狀裁剪模塊
pip install pyclipper
# 安裝嵌入式數據庫模塊
pip install lmdb
# 安裝進度條庫
pip install tqdm
# 安裝字符串匹配庫
pip install rapidfuzz
  • 問題2:對象無此屬性錯誤
    在這里插入圖片描述注:編輯報錯文件/paddle/PaddleOCR/tools/program.py 進行修改。將dist.ParallelEnv().dev_id 為 dist.get_rank()
    錯誤處理參考文章 >> |

在這里插入圖片描述

6. 修改文件夾名稱(彩蛋)

注:修改訓練文件夾 ch4_training_images 為 標注文件中(train_icdar2015_label.txt)圖片路徑的名稱 icdar_c4_train_imgs
注:或者修改標注文件的內容也可以,保持一致。避免執行訓練腳本時報錯
在這里插入圖片描述注:查看標注文件 train_icdar2015_label.txt

cat ./train_data/icdar2015/text_localization/train_icdar2015_label.txt

在這里插入圖片描述
注:故將ch4_training_images 文件夾名稱改成 icdar_c4_train_imgs/
在這里插入圖片描述

三. 開始訓練

1. 執行訓練命令

python tools/train.py -c configs/det/det_mv3_db.yml 
  • 在錯誤處理完二中出現的問題后執行又出現了運行期間的系統級別問題

注:解決方案是修改配置文件參數,兼容系統當前系統性能 參考 >> |
注:需要修改配置文件 yml參數 num_workers = 0, 避免報錯(內存空間不足)。空間足夠大cpu核數夠高可以嘗試修改其他數值(這里沒有再進行測試) 參考 >> |
在這里插入圖片描述

  • 解決后再次執行
python tools/train.py -c configs/det/det_mv3_db.yml 

在這里插入圖片描述

  • 下面是虛擬機配置簡單概括

注:cpu配置 4個處理器,2個內核數量
在這里插入圖片描述
注:內存8G
在這里插入圖片描述

2. 訓練期間第一次評估進行解釋

注:使用的文心 做的翻譯, 向他問了下面這段內容:

[2024/03/02 13:36:13] ppocr INFO: epoch: [1/1200], global_step: 10, lr: 0.001000, loss: 8.048188, loss_shrink_maps: 4.862389, loss_threshold_maps: 2.202206, loss_binary_maps: 0.975967, loss_cbn: 0.000000, avg_reader_cost: 0.13627 s, avg_batch_cost: 89.83051 s, avg_samples: 16.0, ips: 0.17811 samples/s, eta: 78 days, 14:11:27

注:最后的 eta 時間很大,果斷放棄,看來應該用小一點的訓練集去做
在這里插入圖片描述

3. 引言。

注:后期會訓練自定義模型在此更新鏈接 Ocr之PaddleOcr嘗試訓練自定義模型 >> |

五、總結

1. 本篇文章只下載了檢測模型進行訓練測試。后期還會生成推理模型和對識別模型進行訓練并測試并對鏈接進行更新
  • 推理模型生成 >>|
  • 識別模型訓練 >>|
2. 不同電腦的配置會對模型訓練時產生不一樣問題。文章中對出現的問題在網上進行搜索,基本都能定位到問題的原因和解決方案。
3. 對模型進行訓練的目的。我在工作中使用到了paddleocr識別模型,但是相比較TesseractOCR識別各有千秋。這里希望PaddleOCR能夠更好用,所以希望自己能夠進一步對他進行訓練,期待PaddleOCR能變的更好用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716537.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716537.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716537.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NestJS使用模板引擎ejs

模板引擎? 模板引擎是一種用于生成動態內容的工具,它通過將預定義的模板與特定數據結合,來生成最終的輸出。? 在NodeJS開發中,我們會使用模板引擎來渲染一些常用的頁面,比如渲染代表404的Not Found 頁面,502的Bad …

異常值檢測-值域法 頭歌代碼解釋

這關做得不是很明白,如果有清楚的同志可以在評論區里面討論 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.neighbors import LocalOutlierFactor # 導入數據 abc pd.read_csv(deaths.csv) ## 只分析其中的Population和L…

C語言對類型的轉換

C語言對類型的轉換 文章目錄 C語言對類型的轉換整形提升和截斷整形提升整形提升規則整形提升的意義 截斷截斷規則 算數轉換 我們都知道,C語言中內置了多種整形類型,占用空間從大到小,基本滿足各類使用場景(比如超長數字的運算就不…

【【C語言簡單小題學習-1】】

實現九九乘法表 // 輸出乘法口訣表 int main() {int i 0;int j 0;for (i 1; i < 9; i){for (j 1; j < i;j)printf("%d*%d%d ", i , j, i*j);printf("\n"); }return 0; }猜數字的游戲設計 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdi…

源碼視角,vue3為什么推薦用ref,而不是reactive

ref 和 reactive 是 Vue3 中實現響應式數據的核心 API。ref 用于包裝基本數據類型&#xff0c;而 reactive 用于處理對象和數組。盡管 reactive 似乎更適合處理對象&#xff0c;但 Vue3 官方文檔更推薦使用 ref。 我的想法&#xff0c;ref就是比reactive好用&#xff0c;官方也…

Java 中對包含關系的判斷

本文將為您詳細講解 Java 中對包含關系的判斷&#xff0c;包括數組、字符串等&#xff0c;并提供相應的代碼例子。 1. 數組包含關系判斷 在 Java 中&#xff0c;數組包含關系判斷通常使用循環來實現。以下是幾種常見的判斷方法&#xff1a; 示例 1&#xff1a;使用 for…

Unity曲柄滑塊四桿機構運動計算

一、運動效果 二、機構的介紹 曲柄長度&#xff1a;a&#xff0c;線段AB長度 連桿長度&#xff1a;b&#xff0c;線段BC長度 偏心距離&#xff1a;e&#xff0c;滑塊軌跡與曲柄中心點A的垂直距離 三、已知點A點B和e的值&#xff0c;計算C點的位置 1、計算s的值 var h math.…

通過多進程并發方式(fork)實現服務器(注意要回收子進程)

以下內容為視頻學習記錄。 1、父進程accept后返回的文件描述符為cfd以及用于創建連接的lfd; 調用fork()創建子進程后&#xff0c;子進程繼承cfd,lfd&#xff0c;通過該cfd與連接過來的客戶端通信,lfd對子進程來說沒用&#xff0c;可以直接close(lfd); 對于父進程來說&#x…

雙非二本找實習前的準備day4

學習目標&#xff1a; 每天2-3到簡單sql&#xff08;刷完即止&#xff09;&#xff0c;每天復習代碼隨想錄上的題目3道算法&#xff08;時間充足可以繼續&#xff09;&#xff0c;背誦的八股的問題也在這里記錄了 今日碎碎念&#xff1a; 1&#xff09;偶爾還是貪玩游戲&…

Vue中的計算屬性和方法有什么區別?

Vue.js是一款流行的JavaScript前端框架&#xff0c;提供了豐富的功能和便捷的開發方式。在Vue中&#xff0c;計算屬性和方法是常用的兩種方式來處理數據和邏輯。但它們之間存在一些區別&#xff0c;本文將詳細介紹Vue中計算屬性和方法的區別&#xff0c;并通過示例代碼加深理解…

183896-00-6,Biotin-C3-PEG3-C3-NH2,可以選擇性降解靶蛋白

您好&#xff0c;歡迎來到新研之家 文章關鍵詞&#xff1a;183896-00-6&#xff0c;Biotin-C3-PEG3-C3-NH2&#xff0c;Biotin-C3-PEG3-C3-amine&#xff0c;生物素-C3-PEG3-C3-胺 一、基本信息 【產品簡介】&#xff1a;Biotin-PEG3-C3-NH2是一種PROTAC linker&#xff0c;…

381. 有線電視網絡(網絡流,最小割,《算法競賽進階指南》)

381. 有線電視網絡 - AcWing題庫 給定一張 n 個點 m 條邊的無向圖&#xff0c;求最少去掉多少個點&#xff0c;可以使圖不連通。 如果不管去掉多少個點&#xff0c;都無法使原圖不連通&#xff0c;則直接返回 n。 輸入格式 輸入包含多組測試數據。 每組數據占一行&#xf…

Python推導式大全與實戰:精通列表、字典、集合和生成器推導式【第115篇—python:推導式】

Python推導式大全與實戰&#xff1a;精通列表、字典、集合和生成器推導式 Python語言以其簡潔、優雅的語法而聞名&#xff0c;其中推導式是其獨特之處之一。推導式是一種在一行代碼中構建數據結構的強大方式&#xff0c;它涵蓋了列表、字典、集合和生成器。本篇博客將全面介紹…

YOLOv8實例分割實戰:ONNX模型轉換及TensorRT部署

課程鏈接&#xff1a;https://edu.csdn.net/course/detail/39320 PyTorch版的YOLOv8支持高性能的實時實例分割。 TensorRT是針對英偉達GPU的加速工具。 ONNX &#xff08;Open Neural Network Exchange&#xff09; 作為一個開放的網絡模型中間表示&#xff08;IR&#xff0…

Redis命令大全

通用命令 KEYS pattern&#xff1a;查找所有符合給定模式&#xff08;pattern&#xff09;的 key。EXISTS key&#xff1a;檢查指定 key 是否存在。TYPE key&#xff1a;返回指定 key 的數據類型。DEL key [key …]&#xff1a;刪除指定的 key。RENAME key newkey&#xff1a;…

spring boot 修復 Spring Framework URL解析不當漏洞(CVE-2024-22243)

漏洞描述 當應用程序使用UriComponentsBuilder來解析外部提供的URL&#xff08;如通過查詢參數&#xff09;并對解析的URL的主機執行驗證檢查時可能容易受到Open重定向攻擊和SSRF攻擊&#xff0c;導致網絡釣魚和內部網絡探測等。 受影響產品或系統 6.1.0 < Spring Framew…

Vue項目的快速搭建

Vue項目的快速搭建 一、下載并安裝node.js二、安裝Vue腳手架三、創建vue項目四、項目啟動五、VS Code下載安裝 一、下載并安裝node.js 首先確保已經安裝了Node.js。如果沒有安裝&#xff0c;可以去官網&#xff08;https://nodejs.org/&#xff09;下載并安裝最新版本的Node.j…

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示應用

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹TM1638鍵盤數碼管模塊概述TM1638鍵盤數碼管…

mybatis-傳遞參數的方式

mybatis 傳遞參數的7種方法 在實際開發過程中&#xff0c;增刪改查操作都要涉及到請求參數的傳遞&#xff0c;今天這節就集中講下在mybatis中傳遞參數的7中方法 單個參數的傳遞很簡單沒有什么好將的&#xff0c;這里主要說下多個參數的傳遞 1、第一種方式 匿名參數 順序傳遞…

[electron]窗口 BrowserWindow

優雅的顯示窗口 const {app, BrowserWindow} require(electron);function createMainwindow(){const mainwindow new BrowserWindow({x: 300,y: 400,width: 600,height: 600,});mainwindow.loadFile(index.html); }app.on(ready, ()>{createMainwindow(); });對于這樣的代…