私的AI研究会 > PyTorch9
公開されている AIモデルを改良して性能を向上させる開発手法を学ぶ。
一般的な条件下での性能をある程度妥協して、特定の条件下において性能を向上させる。
「PyTorch ではじめる AI開発」の著者が公開している OCR プログラムでは、文に縦書きと横書きがあるという日本語の特性によって認識精度が低下するという問題を含んでいる。
OCR プログラムを横書き専用とすることで、横書きの文字列に対する OCR の認識精度を向上させる。
「Chapter 08」では「文字種類の認識」を行うモデルのファインチューニングを行った。
ここでは「文の検出」と「文字領域の検出」を行うニューラルネットワークを位置から学習させることで新たに作成する。
(py37) $ cd ~/workspace_py37/ (py37) $ mkdir chapter09 (py37) $ cd chapter09
(py37) $ git clone -b version2 https://github.com/tanreinama/OCR_Japanease/ Cloning into 'OCR_Japanease'... remote: Enumerating objects: 128, done. remote: Counting objects: 100% (128/128), done. remote: Compressing objects: 100% (97/97), done. remote: Total 128 (delta 57), reused 80 (delta 24), pack-reused 0 Receiving objects: 100% (128/128), 3.46 MiB | 21.32 MiB/s, done. Resolving deltas: 100% (57/57), done. (py37) $ ls OCR_Japanease
(py37) $ cd OCR_Japanease/ (py37) $ wget https://nama.ne.jp/models/ocr_jp-v2.zip --2021-10-11 16:34:14-- https://nama.ne.jp/models/ocr_jp-v2.zip nama.ne.jp (nama.ne.jp) をDNSに問いあわせています... 112.78.112.176 nama.ne.jp (nama.ne.jp)|112.78.112.176|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 180256769 (172M) [application/zip] `ocr_jp-v2.zip' に保存中 ocr_jp-v2.zip 100%[===================>] 171.91M 11.6MB/s in 14s 2021-10-11 16:34:28 (12.2 MB/s) - `ocr_jp-v2.zip' へ保存完了 [180256769/180256769] (py37) $ unzip ocr_jp-v2.zip Archive: ocr_jp-v2.zip inflating: models/detectionnet.model inflating: models/classifiernet.model (py37) $ cp -r models OCR_Japanease/
(py37) $ cd ~/workspace_py37/chapter09/ (py37) $ cp -r OCR_Japanease/misc ./ (py37) $ cp -r OCR_Japanease/nets ./ (py37) $ cp -r OCR_Japanease/models ./ (py37) $ cp -r ~/workspace_py37/sample/chapt09/chapt09.ipynb ./ (py37) $ cp -r ~/workspace_py37/sample/chapt09/yokogaki.png ./ (py37) $ cp -r ~/workspace_py37/sample/chapt09/chapt09_1.py ./chapt09_1a.py
~/workspace_py37/chapter09/ . ├── chapt09.ipynb ├── chapt09_1a.py ├── misc │ ├── detection.py │ ├── nihongo.py │ ├── nms.py │ └── structure.py ├── models │ ├── classifiernet.model │ └── detectionnet.model ├── nets │ ├── block.py │ ├── classifiernet.py │ └── detectionnet.py └── yokogaki.png
(py37) $ cd ~/workspace_py37/chapter09/OCR_Japanease/ (py37) $ python3 ocr_japanease.py --cpu ../yokogaki.png file "../yokogaki.png" detected in 150 dpi. [Block #0] 横書き日本語のテスト 文字文字 [Block #1] AIAこは ひ カタ [Block #2] らがな [Block #3] 認識認識 [Block #4] カナ [Block #5] I [Block #6] こ横書き※ テスト画像では画像に含まれている文字は認識されているが、文字と文字のつながりでできる「文」については正しく認識できていない。
「DetectionNet」の動作を可視化して確認する。
(py37) $ cd ~/workspace_py37/chapter09/ (py37) $ pip install jupyter Collecting jupyter Downloading jupyter-1.0.0-py2.py3-none-any.whl (2.7 kB) :
(py37) $ cd ~/workspace_py37/chapter09/ (py37) $ jupyter notebook [I 14:23:06.039 NotebookApp] ローカルディレクトリからノートブックをサーブ: /home/mizutu/workspace_py37/chapter09 [I 14:23:06.039 NotebookApp] Jupyter Notebook 6.4.4 is running at: [I 14:23:06.039 NotebookApp] http://localhost:8888/?token=478e25ec2281b76d3b65067aade61b647252f7789574b678 [I 14:23:06.039 NotebookApp] or http://127.0.0.1:8888/?token=478e25ec2281b76d3b65067aade61b647252f7789574b678 [I 14:23:06.039 NotebookApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。 [C 14:23:06.093 NotebookApp] To access the notebook, open this file in a browser: file:///home/mizutu/.local/share/jupyter/runtime/nbserver-5174-open.html Or copy and paste one of these URLs: http://localhost:8888/?token=478e25ec2281b76d3b65067aade61b647252f7789574b678 or http://127.0.0.1:8888/?token=478e25ec2281b76d3b65067aade61b647252f7789574b678 :
: [I 15:01:35.584 NotebookApp] Shutting down 0 terminals (py37) mizutu@ubuntu-vbox:~/workspace_py37/chapter09$
(py37) cd ~/workspace_py37/chapter09 (py37) $ cp ~/workspace_py37/sample/chapt09/chapt09_1.py chapt09_1a.py :
~/workspace_py37/chapter09/ . ├── nets │ ├── block.py │ └── detectionnet.py ├── misc │ └── nihongo.py ├── fontss │ ├── ipaexg.ttf │ └── ipaexm.ttf └── chapt09_1a.py
(py37) > cd ~\workspace_py37\chapter09 (py37) > python3 chapt09_1a.py 100%|███████████████████████████████| 100000/100000 [28:34:11<00:00, 1.03s/it]・CPU (Intel® Core™ i7-1185G7)
(py37) $ cd ~/workspace_py37/chapter09 (py37) $ python3 chapt09_1a.py 0%| | 11/100000 [01:19<199:44:48, 7.19s/it] :
機種 | 開始日時 | 終了日時 | 処理時間 (h:m) |
GeForce GTX 1050 Ti Intel® Core™ i7-6700 | 10/17 09:30 | 10/18 13:05 | 27:35 |
DELL Latitude 7520 Intel® Core™ i7-1185G7 CPU | --/-- --:-- | --/-- --:-- | --:-- |
● 学習結果のモデルは「chapt09-model.pth」として保存されている。
●「Jupyter Notebook」を起動しブラウザからアクセスして「chapt09.ipynb」を開く。
(py37) $ cd ~/workspace_py37/chapter09 (py37) $ jupyter notebook
● [2]モデルファイルを読み込んでいるセルのファイル名を変更する。
● ノートブック全体を再実行する。
(py37) $ cd ~/workspace_py37/chapter09/OCR_Japanease (py37) $ cp ../chapt09-model1.pth ./models/detectionnet.model (py37) $ python3 ocr_japanease.py --cpu ../yokogaki.png file "../yokogaki.png" detected in 150 dpi. [Block #0] のテスト 文 AIAIご ひらがな カタカナ [Block #1] 認識認識 [Block #2] こば横書き [Block #3] 日本語 [Block #4] 字文字 [Block #5] 横書き
(py37) $ cd ~/workspace_py37/chapter09/OCR_Japanease (py37) $ cp ../../chapter08/chapt08-model1.pth ./models/classifiernet.model (py37) $ python3 ocr_japanease.py --cpu ../yokogaki.png [Block #0] のテスト 文 AIAIご ひらがな カタカナ [Block #1] 認識認識 [Block #2] こば横書き [Block #3] 日本語 [Block #4] 字文字 [Block #5] 横書き※ 書籍の結果と違って認識率はもう一つ。原因を後日調査する。
(py37) $ ls -l ~/workspace_py37/chapter09/OCR_Japanease/models 合計 188768 -rw-r--r-- 1 mizutu mizutu 96085770 10月 18 15:06 classifiernet.model -rw-r--r-- 1 mizutu mizutu 97209519 10月 18 15:01 detectionnet.model (py37) $ls -l ~/workspace_py37/chapter09 合計 95048 drwxrwxr-x 8 mizutu mizutu 4096 10月 18 14:48 OCR_Japanease -rw-rw-r-- 1 mizutu mizutu 97209519 10月 18 13:05 chapt09-model1.pth -rw-rw-r-- 1 mizutu mizutu 66617 10月 18 13:37 chapt09.ipynb -rw-rw-r-- 1 mizutu mizutu 12235 10月 17 08:15 chapt09_1a.py drwxrwxr-x 2 mizutu mizutu 4096 10月 11 19:55 fonts drwxrwxr-x 3 mizutu mizutu 4096 10月 16 14:16 misc drwxrwxr-x 2 mizutu mizutu 4096 2月 27 2021 models drwxrwxr-x 3 mizutu mizutu 4096 10月 16 14:16 nets -rw-rw-r-- 1 mizutu mizutu 15372 3月 26 2021 yokogaki.png (py37) $ ls -l ~/workspace_py37/chapter08 合計 93860 drwxrwxr-x 8 mizutu mizutu 4096 10月 18 14:49 OCR_Japanease -rw-rw-r-- 1 mizutu mizutu 96085770 10月 15 14:13 chapt08-model1.pth -rw-rw-r-- 1 mizutu mizutu 5033 10月 11 20:05 chapt08_1a.py drwxrwxr-x 2 mizutu mizutu 4096 10月 11 19:55 fonts drwxrwxr-x 3 mizutu mizutu 4096 10月 12 05:51 misc drwxrwxr-x 3 mizutu mizutu 4096 10月 12 05:51 nets