問題
LabelImgを使っていると使い始めは問題なかったが,
しばらく使っていると突然クラッシュして画像を開くと必ず落ちるようになってしまった。
コマンドプロンプトには
IndexError: list index out of range
とだけエラーが表示されるが何の形式が間違っているのかが分からなかった。
解決できたので備忘録を残しておきます。
環境
Windows 11 Pro 22H2
Anaconda
LabelImgはpipでインストール(Anaconda PowerShellを使用)
問題の原因と対処法
IndexError: list index out of rangeとは,LabelImgでラベリングしていたクラスについてでした。
LabelImgが出力するclasses.txtにはアノテーションしたクラスの一覧が記載されています。
各ファイルのアノテーションデータには座標の前にクラスの番号が記されていますが,それがclasses.txtの一行目から0,1,2と対応しています。
ここまで記すと多くの方が察されると思いますが,各ファイルのアノテーションデータのクラス番号と,クラス一覧ファイルのクラスの数が一致していないと上記エラーのみ出力してクラッシュするようです。
正直に言うと,これについてはクラッシュしないでちゃんとエラー文を吐いてほしかったと思ってしまいます…
そのため,対処法は簡単で,一覧か各ファイルのクラス番号かのどちらかを修正することで起動するようになります。
しかし,厄介な仕様があるようで,クラス一覧ファイルを修正しても,ディレクトリの変更等があった場合は勝手に書き換えられてしまうようです。
そのため,根本的な解決としては,アノテーションデータを誤って記載していた場合などは,そちらをすべて修正するのが良いようです。
アノテーションデータの修正については行頭を変更するようなスクリプトを組んで一括で修正するのが良いかなと思います。
以上,参考にしていただければ幸いです。
参考サイト