darknet YOLOでCannot load image STB Reason: can't fopenとエラーが出たときの対処法

darknet YOLOで、用意した画像データセットを使って学習しようとしたら、Cannot load image ../data/my-data/000001.jpg STB Reason: can't fopenというエラーが発生する。このときは、画像データセットへのパスを相対パスから絶対パスに修正する。

Kauzmichi Shirai

darknet YOLOで、用意した画像データセットを使って学習しようとしたら、Cannot load image "../data/my-data/000001.jpg" STB Reason: can't fopenというエラーが発生した。
動作環境はGoogle Colab。
たとえば、darknet/data/my-dataに画像データセットを入れて、次のコマンドで学習させようとしたら発生する。

./darknet detector \
        train \
        cfg/my-data.data \
        cfg/my-network.cfg \
        /content/darknet53.conv.7

エラーは画像データセットへのパスが間違えているので、発生していた。
Google Colabで実行すると、パスをよく間違えるので、絶対パスに修正した。
画像データセットへのパスはcfg/my-dataで定義しているtrain=valid=で定義しているファイルに記載されている。
たとえば、train=cfg/my-data-train.txt valid=cfg/my-data-test.txtであれば、my-data-train.txtとmy-data-test.txtに各画像が指定されている。
my-data-train.txt、my-data-test.txtを次のように絶対パスで記載すると、エラーは解消された。

/content/darknet/data/my-data/000001.jpg

この絶対パスはGoogle Colabの場合なので、各環境に合わせて画像データセットへの絶対パスにする必要がある。