Mask R-CNNをCOCO以外のデータセットで学習するために、maskrcnn-benchmarkで提供されているdockerを使おうとしたらいろいろとエラーが起こり詰まったので、遭遇したエラーと解決した方法をメモしておきます。
#エラーと解決策
##ImportError: libGL.so.1: cannot open shared object file: No such file or directory
このエラーは、cv2のインポートをしようとした時に出た。
####解決方法
サイトを調べるうちに、このエラーは以下のコマンドを実行すれば解決できることがわかった。
$pip install opencv-python
$pip install opencv-contrib-python
$apt-get install -y libgl1-mesa-dev
しかし、3行目の実行でE: Unable to locate package
というエラーが発生した。
この問題を解決した方法は、
$sudo apt update
これにより、libGLがインポートできるようになった。
##ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
libGLがインポートできるようになったが、今度はこのエラーが出るようになった。
このエラーは「opencv-python自体はpipでインストールされており、cv2は見つかったものの、依存関係にある外部ライブラリが見つからない」という事を意味しているらしい。
####解決方法
色々調べてDockerFileを書き換え、lib~となっているパッケージをRUN以下に追加した
RUN apt-get update -y \
&& apt-get install -y apt-utils git curl ca-certificates bzip2 cmake tree htop bmon iotop g++ \
&& apt-get install -y libglib2.0-0 libsm6 libxext6 libxrender-dev\
&& apt-get install -y --no-install-recommends \
build-essential \
wget \
git \
vim \
sudo \
libgl1-mesa-glx \
libglib2.0-0 \
libopencv-dev \
libsm6 \
libxrender1 \
libxext6 \
libgl1-mesa-dev \
curl \
tmux && \
rm -rf /var/lib/apt/lists/*
しかしこれだけでは動かなかった。その後以下のコマンドを実行したところ、動かすことができた。
$apt update
$apt-get install -y libglib2.0-0 libsm6 libxrender1 libxext6
##ImportError: numpy.core.multiarray failed to import
これはnumpyが古いバージョンであるために発生するエラーらしい。
####解決方法
numpyをアップデートしてあげる。
##Dockerfileをビルドする際に発生するエラー
提供されているDockerfileの一部が古く、自分の環境では動かすことができなかったので、以下の点を修正した。
-
pytorch-nightly
→pytorch torchvision
(36行目) - apex と vision の github からインストールする部分はコメントアウト(40行〜42行目、50行〜52行目)
しかし、
/bin/sh: 1: /miniconda/bin/conda: not found
というエラーが出てしまった。
####解決方法
Dockerfile内のminiconda
をすべて/opt/conda/
に変更した。
次に
/bin/sh: 1: /opt/conda/bin/conda: not found
というエラーが出た。
####解決方法
miniconda
のインストール部分を変更(13行目以下)
-
/miniconda
→/tmp/miniconda
に変更 - パスを https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh に変更
これによってエラーが出ずに最後までビルドができた。
##error: command 'gcc' failed with exit status 1
demoディレクトリ内のMask_R-CNN_demo.ipynb
を動かそうとしたが、Jupyter notebookがうまく使えなかったため、新しく作成したPythonファイルにコードをコピーして実行した。
すると、apexがないというエラーが出たので、
git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install --cuda_ext --cpp_ext
を実行したところ、setup.py
の実行で
error: command 'gcc' failed with exit status 1
というエラーが出た。
####解決方法
以下のコマンドを実行することで、setup.pyが最後まで動いた。
git checkout f3a960f80244cf9e80558ab30f7f7e8cbf03c0a0
##cv2.error: OpenCV(4.5.2) : -1: error: (-5:Bad argument) in function 'putText'
デモからコードをコピーしてきたファイルmaskrcnn-demo.py
を実行したところ、
Traceback (most recent call last):
File "maskrcnn-demo.py", line 57, in <module>
predictions = coco_demo.run_on_opencv_image(image)
File "/notebooks/maskrcnn-benchmark/demo/predictor.py", line 220, in run_on_opencv_image
result = self.overlay_class_names(result, top_predictions)
File "/notebooks/maskrcnn-benchmark/demo/predictor.py", line 404, in overlay_class_names
image, s, (x, y), cv2.FONT_HERSHEY_SIMPLEX, .5, (255, 255, 255), 1
cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'putText'
> Overload resolution failed:
> - Can't parse 'org'. Sequence item with index 0 has a wrong type
> - Can't parse 'org'. Sequence item with index 0 has a wrong type
というエラーが発生した。
####解決方法
このエラーはpredictor.py
のputText()
という関数の引数が、int型になっていなかったことが原因。引数のxとyをint型にしてあげたことで、きちんと画像が出力された。
元のコード↓
cv2.putText(
image, s, (x, y), cv2.FONT_HERSHEY_SIMPLEX, .5, (255, 255, 255), 1
)
修正後のコード↓
cv2.putText(
image, s, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, .5, (255, 255, 255), 1
)
#まとめ
今回はいろいろなサイトを調べて解決をしました。最後に自分が調べたサイトのURLを貼っておくので、参考にしてください。各自の環境によって異なる解決法があると思いますが、エラー解決の助けに少しでもなれたら幸いです。
#参考サイト
(OpenCVのエラー系)
https://qiita.com/kenichiro-yamato/items/459b9597a940fb87c321
https://qiita.com/toshitanian/items/5da24c0c0bd473d514c8
https://qiita.com/hatorijobs/items/c503840c13672e12d188
https://qiita.com/narista/items/a3d7d26ae50d54c2553a
https://stackoverflow.com/questions/62786028/importerror-libgthread-2-0-so-0-cannot-open-shared-object-file-no-such-file-o
(maskrcnn-benchmarkのdemoコードのエラー)
https://github.com/facebookresearch/maskrcnn-benchmark/issues/1257)
https://github.com/facebookresearch/maskrcnn-benchmark/issues/1217