見出し画像

YOLO-v9 の訓練がエラーメッセージを吐かずに止まる (2024/10/3)

以前に書いた記事に従って yolo-v9 の環境構築をしたところ,訓練プログラムが回らないというエラーに遭遇しました.解決に結構な時間を取られてしまったので,奮闘のログを残しておきます.


1. エラーの内容

yolo-v9 の 訓練プログラム (train.py) を動かそうとしたところ,画像の読み込みに入った段階から先に進まず,プログラムが止まってしまいました.

ひと仕事したかのような顔で止まっています

エラーメッセージを出力してくれれば,検索するなり chat GPT に聞くなり,GitHub の Issue を漁るなりすると解決の手掛かりがつかめることが多いのですが,今回は何も吐かずに止まっています.

2. 試したこと

(忙しい人は 3 に飛んでください)

まず疑ったのは,GPU メモリの不足です.モデルのサイズ,バッチサイズ,オプションの workers の数字などをどんどん下げていったのですが,一向に直りません.

次に考えたのは,Nvidia driver - CUDA Toolkit - cuDNN のバージョン不一致です.そこで,以下のプログラムを試しました.

# check_cuda.py
import torch
print(torch.__version__)
print(torch.cuda.is_available())

pytorch のバージョンは 2.3.1, cuda_is_available には True と出力されました.
CUDA が認識されないという記事はよく見るのですが,その場合は cuda_is_available が False と出るようです.True と出たのに認識されないという記事は見当たりませんでした.

python train_dual.py (中略) --device cpu

続いて,cpu でも訓練を回してみました.yolo-v9 には cpu で訓練を回すというオプションがあります.正直誰が使うのかなと思っていたのですが,こんな時に役に立つのですね.
結果は,cpu でも同じエラーが出ました.なので,メモリや CUDA の認識等の GPU 周りのエラーではないことが分かりました.

3. 原因らしきもの

前回の記事は 2024 年の 3 月に書いたもので,当時構築した環境は今も問題なく動いています.となると,ライブラリ間の依存関係が容疑者候補に挙がります.環境構築の際にやった変なことといえば,,,

自分はプログラムは回ったものの、しつこく AttributeError が出ました。GitHub の Issue を参考に、Pillow を再インストールしたら直りました。

自作データセットで物体検出モデル yolov9 を訓練する | mim

GitHub の Issue には,Pillow は 9.5.0 をバージョン指定して入れるように書いてありましたが,これが悪さをしている可能性があります.さらに調べると,以下のような Issue がありました.

これが原因かは分かりませんが,Pillow の 9.5.0 は新しい torchvision とあまり相性が良くない可能性はありそうです.
(自分の torchvision のバージョンは 0.18.1 でした)

4. 解決策

プログラムが動きさえすればいい場合

そもそも Pillow のバージョンを落としたのは以下のエラーログが何度も出たからだったのですが,エラーメッセージが出るだけでプログラムは回ります.なので,Pillow のバージョンを最新版に戻してあげれば,大量の AttributeError は出ますがプログラムは実行されます.

# 2024 年 10 月時点の最新版
pip install pillow==10.4.0

これで実行すると一応プログラムは動きます.

醜いですが,動いてはいます

もう少し出力にもこだわりたい場合

自分は基本は動けばいい派なのですが,ログに「Error」の文字が出てしまうのはさすがに避けたいです.

そこでもう一度 Issue に戻ってみると,今年の 5/1 に書き込みが追加されています.Pillow の バージョンは新しい (例えば 10.4.0) まま,utils/plots.py の 86 行目を以下のように書き換えれば良いとのことです.

# w, h = self.font.getsize(label)     # 書き換え前
_, _, w, h = self.font.getbbox(label) # 書き換え後

これで訓練コードを回すと,Attribution Error を吐くことなく正常に訓練が終了しました.
この記事が皆様の物体検出ライフの参考になれば幸いです.


【CM】こんな記事も書いています.


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?