Ubuntu Weekly Recipe

第880回GPUに画像の文字を解析させる⁠あるいはPyTorch入門

今回はAI文章画像解析エンジンであるYomiTokuを通じて、GPUメーカーごとに用意されているPyTorchのインストール方法を紹介します。

PyTorchとGPU

PyTorchに関しては本連載でも何度となく登場しており、直近だと第877回でした。筆者も文字起こしをする必要がある場合には使用してみたくなりました。

PyTorchと何かというのは、gihyo.jpの記事機械学習フレームワークPyTorch、Linux Foundationの傘下プロジェクトにでも軽く紹介されています。元々はMetaのプロジェクトであったのが現在は独立していること、機械学習用のフレームワークでGPUアクセラレーション機能をサポートしていることがわかります。

GPUアクセラレーションはGPUのメーカー、もっといえばここではGPGPUフレームワークとしますが、具体的にはCUDAやROCmなどに分けることになります。PyTorchでGPU側の違いを吸収してくれれば、プログラム側では特に考えなくてもよくなることがプログラム開発者のメリットです。理想どおりにいくかどうかはさておきですが。

一方、以前よりOCRに興味があって、本連載でも第577回第770回で紹介したことがありました。昨今はLLMにOCRをさせるというのも普通に行われており、そのツールとしてYomiTokuを見つけました。OSSではないので必ずしも筆者の好みに合っているわけではありませんが、今回の題材にぴったりなのでここで検証することとしました。

PyTorchのダウンロード

概要

PyTorchのダウンロードは「Start Locally」のページでOSなどを選択し、⁠Run this Command」に表示される文字列を実行する、というのが基本的な作法です。

図1 PyTorchの対応表

また、PyTorchのインストール前に第850回を参考に、venvあるいはpyenvあるいはuvなどでPythonの仮想実行環境を作成しておいてください。ここでは特に深い考えがあるわけではありませんがvenvを使用しています。

CUDA編

図1を見てすぐに気づくのは、CUDAのバージョンが12.6と12.8と12.9が用意されていることです。しかし、Ubuntu 24.04 LTSのCUDAのバージョンは12.0.1です。現在の最新バージョンは13.0で、12.0.1は2023年1月リリースなので、Ubuntu 24.04 LTSのリリース時点でも古かったことになります。

ここで思い出すのが、先週のUbuntu Weekly Topicsで取り上げられたCUDAツールキットとランタイムのUbuntuリポジトリ経由での配布⁠⁠です。筆者を含めてすごいことだなという感想を抱いた人も少なくないのではないでしょうか。

しかし、少なくとも現段階の24.04 LTSではリリース文にあるようなCUDAの複数バージョンがUbuntuのリポジトリを通じて提供されるというふうにはなっていません。普通に考えればmultiverseリポジトリに追加されるのですが、そのような形跡は見当たりませんでした。snapも同様です。Ubuntu Proのリボジトに追加されたのかとも考えて手元で有効にしてみましたが、やはり新しいバージョンのCUDAは見つかりませんでした。いかにもすぐに使用できますのように見せかけるよう書かれていますが、慎重に原文を読むと、たしかにリリース文の時点で使用可能になっているという断定的な記述もありません。

よって従来どおりの方法でCUDA 12.9をインストールして、PyTorchを使用します。NVIDIAのプロプライエタリなドライバーのインストールについては割愛します。

$ sudo apt install python3-pip python3.12-venv
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo apt install ./cuda-keyring_1.1-1_all.deb
$ sudo apt update
$ sudo apt install cuda-toolkit-12-9
$ python3 -m venv ~/yomitoku
$ source ~/yomitoku/bin/activate
$ pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu129

ROCm編

ROCmは、先日7.0.07.0.1がリリースされています。しかし、本記事の公開時点ではPyTorchはROCm 7.0には対応していません。というわけで、1つ前のバージョンである6.4系列をインストールする必要があります。

次のコマンドを実行してください。

$ sudo apt install python3-pip python3.12-venv
$ wget https://repo.radeon.com/amdgpu-install/6.4.3/ubuntu/noble/amdgpu-install_6.4.60403-1_all.deb
$ sudo apt install ./amdgpu-install_6.4.60403-1_all.deb
$ sudo apt update
$ sudo apt install python3-setuptools python3-wheel
$ sudo usermod -a -G render,video $LOGNAME
$ sudo apt install -y rocm amdgpu-dkms

再起動後、続けて次のコマンドを実行します。

$ python3 -m venv ~/yomitoku
$ source ~/yomitoku/bin/activate
$ pip3 install torch torchvision --index-url https://download.pytorch.org/whl/rocm6.4

oneAPI編

IntelのoneAPIでもPyTorchは使えるのですが、このページをよく読むとプログラム側での対応も必要となることがわかります。ソースコードを軽く確認した限りでは、YomiTokuでは対応していませんでした。

YomiTokuを動作させる

最後にYomiTokuを動作させます。まずはインストールからです。Pythonの仮想実行環境下で次のコマンドを実行してください。

$ pip3 install yomitoku

サンプル画像は、第577回で使用したものをそのまま利用することにします図2図3⁠。こちらでは正解率が98.6%でしたが、YomiTokuではどうでしょうか。

図2 横書きサンプル
図3 縦書きサンプル

ただし、YomiTokuでは短編の長さが720ピクセル以上であることを推奨しています。今回はそれを下回るサイズなので、精度が低下する可能性はあります。このあたりも注目すべきポイントです。

図2と図3をダウンロードし、~/Pictures/sample/フォルダー以下に配置したとして、次のコマンドでYomiTokuを実行します。

$ yomitoku ~/Pictures/sample/horizonal-sample.png -f md -o ~/Documents/ -v --ignore_line_break

わりとわかりやすいオプションですが、horizonal-sample.pngが処理の対象であり、結果をMarkdown形式で~/Documents/フォルダーに保存します。保存時は元画像にある改行は無視します。縦書きのサンプルを使用する場合はhorizonal-sample.pngをvertical-sample.pngに変更します。

第577回と同様の方法で比較して精度を確認してみたところ、図4のようになりました。

図4 Meldで比較したところ

これは縦書きサンプルでの結果ですが、横書きサンプルでも100%の精度でした。前述のとおり画像サイズでは不利でしたが、それでも100%一致し、AIによる画像解析の可能性を大いに感じました。

おすすめ記事

記事・ニュース一覧