用PaddleOCR的PPOCRLabel來微調醫療診斷書和收據 (WSL 2跑Ubuntu 22.04)

基於機器閱讀理解和指令微調的統一信息抽取框架之診斷書醫囑資訊擷取分析
https://blog.twman.org/2023/07/HugIE.html

~ 認真考慮要不要把相關標註的數據開源出來 ~
https://huggingface.co/spaces/DeepLearning101/CathayTWOCR
https://github.com/Deep-Learning-101/CathayTWOCR

一切都是從這個神奇的需求開始的,因為要識別醫療診斷書中的醫囑內容,所以前期處理的OCR識別就非常重要,雖然 PaddleOCR (https://github.com/PaddlePaddle/PaddleOCR) 已經很強,但是卡在很多格式內容或者簡體和繁體字的問題,所以常常OCR識別的內容就出包,然後導致醫囑的分析也就容易跟著翻車啦 (但BU端才不管你這些呢 >"<);所以只能再次抱著壯士斷腕的決心,再自己標註一次數據了 ! 那麼,值得一提的是,標註NLP的工具可以用標文字蠻不錯的 Doccano (https://github.com/doccano/doccano) 或者是可以標圖像和文字的 Label Studio (https://labelstud.io/),但是要標給OCR用,感覺上還是得用 PPOCRLabelv2但是因為平常不太可能開著 Ubuntu 來處理這個工作,所以只能先想辦法從 WINDOWS 10 上安裝 WSL (1或2),然後再幫它啟用桌面,然後採遠端桌面登入,接著再來安裝中文輸入法等等;總計有這幾個動作:

  • WINDOWS 10 啟用 WSL
  • WSL 啟動 Ubuntu 再啟用桌面
  • WINDOWS 10 遠端桌面至 WSL 的 Ubuntu
  • 安裝 PaddleOCR、PPOCRLabelv2 
  • 幫 WSL 的 Ubuntu 安裝繁體中文輸入法
整個搞很久後,才想到 ~~~ 啊 ! 它有WINDOWS 版啊 XD ~ 但還是加減把相關過程還有參考的文件都記錄下來吧 ! 
  • WINDOWS 10 安裝 PaddleOCR、PPOCRLabelv2 的一堆奇怪的問題記錄
WINDOWS 10 啟用 WSL



那接著就是先啟用 WSL 1 或 2,目前已知就是差在要怎樣直接遠端桌面,或者是透過 XLaunch來連線;我目前是啟用 WSL 2 啦 ! 所以裝好後就是到 Microsoft 商店取得 Ubuntu 22.04.2 LTS (在上面的連結) 啦 ! 照官網所寫,其實安裝跟啟動非常簡單,然後就是設定帳號跟密碼,主要是給你能使用 sudo 這樣 ! 網上有的教學說要再另外裝 terminal,但我裝好是直接有個 Ubuntu 22.04.2 的終端機可以啟動啦 ! 

$ $ sudo apt update && sudo apt upgrade
$ sudo apt install -y xfce4 xrdp xfce4-goodies

首先就是要更新還有安裝遠端桌面和繁體中文輸入法所需套件,安裝xfce4過程中會出現選擇顯示管理DM選擇的提示,建議用lightdm。


$ sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
$ sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
$ sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
$ sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
$ echo xfce4-session > ~/.xsession

修改 xrdp 設定,並註解掉 X11 那兩行,然後新增 xfce 那兩行,接著就是啟動 RDP 然後看狀態

$ sudo vi /etc/xrdp/startwm.sh
# test -x /etc/X11/Xsession && exec /etc/X11/Xsession
# exec /bin/sh /etc/X11/Xsession
# xfce
startxfce4

$ sudo /etc/init.d/xrdp start
$ sudo /etc/init.d/xrdp status
* xrdp-sesman is running
* xrdp is running


接著就是安裝Fctix5設定新酷音輸入法;其中,別忘了要到設定裡的地區和語言設定語言支援,不過不知為啥,我的是沒辦法設定,但是卻有直接一個 Fctix5 的選項,點一點就這樣意外搞定?


$ sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-config-qt fcitx5-chewing

以上就是在Windows 10 跑 WSL 2,然後設定遠端桌面跟注音輸入法(繁體),陸續參考了以下文章

接著就是安裝 PaddleOCR 還有 PPOCRLabelv2,每次在做這些工作時,總會想到為何那麼多人在抗中保台,結果放眼望去,台灣都沒相關的數據或者工具套件開源出來?不然就是開了然後限學術用 ? XD

https://github.com/PaddlePaddle/PaddleOCR
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/PPOCRLabel/README_ch.md

https://zhuanlan.zhihu.com/p/523972865
PPv3-OCR自定義數據從訓練到部署

然後這時發現其實可以省掉上面的 WSL,直接裝 WINDOWS 版就可以了 XD
所以最後就補充一些碰到的問題,然後分別參考了那些連結解決的吧


最後 ! 附上一個PPOCRLabelv2標註的擷圖


還有 PaddleOCR 訓練擷圖吧 ! 2023/07/15訓練集有100萬張,驗證集有1萬張。


2023/07/25,120萬資料,V100 * 8,訓練了45000秒
  • 30萬,common字典產生 
    • 3w 長文
  • 90萬,醫囑資料產生
    • 10w 數字
    • 10w 英文
    • 5w大寫
    • 5w小寫
  • 70w 醫囑
    • 20萬長文 (15-20字)
    • 50萬短文 (5-12字)



最後就是又到了把整個模型佈到 HuggingFace Hub 上了,像下方連結


https://pypi.org/project/paddleocr/#:~:text=.99999964%5D-,3%20Use%20custom%20model,-When%20the%20built

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/quickstart.md#22-python%E8%84%9A%E6%9C%AC%E4%BD%BF%E7%94%A8

參考如上連結,想用 python 直接調用自定義數據的訓練模型,但是看log最後都會變為使用官方預訓練模型 (會出現如 det=True, rec=True, type=ocr 等等,並另外本地端執行自定義數據訓練和官方預訓練模型確認是官方預訓練模型結果)。

ocr = PaddleOCR(det_model_dir='{your_det_model_dir}', rec_model_dir='{your_rec_model_dir}', rec_char_dict_path='{your_rec_char_dict_path}', cls_model_dir='{your_cls_model_dir}', use_angle_cls=True)
result = ocr.ocr(img, cls=True, det=False, rec=False)