質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Darknet

Darknetは、C言語で記述されたオープンソースのニューラルネットフレームワークで簡単にインストールすることが可能です。学習済みモデルとアルゴリズムも配布しており、ダウンロードすれば容易に動かすこともできます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

YOLOv4(darknet)の推論時、libdarknet.soが見つからず実行できない

roritamago
roritamago

総合スコア5

Darknet

Darknetは、C言語で記述されたオープンソースのニューラルネットフレームワークで簡単にインストールすることが可能です。学習済みモデルとアルゴリズムも配布しており、ダウンロードすれば容易に動かすこともできます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

334閲覧

投稿2022/06/07 11:54

やりたいこと

YOLOv4(darknet版)を自作データセットで転移学習を行い、物体検出を行いたいです.
環境はGoogle Colabiratoryで行います.
また,検出を行うファイル形式は画像(.png)です.

やったこと・参考にしたサイト

基本的にこのサイトのYOLOv4の項目を参考にして進めました.このサイトはAlexeyAB氏のYOLOv4のgitページのHow to train (to detect your custom objects) の項目を参考に書かれています.
サイトの通りにしたこととしては,

  • フォルダの構成
  • yolov4-custom.cfgの書き換え

 (クラス数などは自分のデータセットに合わせて書き換えた)

  • Makefileの書き換え

以上です.
makefileを実行した際に600行ほどのwarning:が出ましたが,Errorが1つもなかったので無視しました.
以下は実際にColabo上で実行したコードになります.
セルごとに分けています.

python

# Google ColabとGoogle Driveを連携 from google.colab import drive drive.mount('/content/drive')

python

%%bash # ディレクトリの移動 cd /content/drive/MyDrive/signal_detection/ # gitのダウンロード git clone https://github.com/AlexeyAB/darknet.git

python

# change makefile to have GPU and OPENCV enabled %cd /content/drive/MyDrive/signal_detection/darknet !sed -i 's/OPENCV=0/OPENCV=1/' Makefile !sed -i 's/GPU=0/GPU=1/' Makefile !sed -i 's/CUDNN=0/CUDNN=1/' Makefile !sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile

python

!make

python

#初期重みのダウンロード %cd /content/drive/MyDrive/signal_detection/darknet !wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137

python

学習の実行 !./darknet detector train data/obj.data cfg/yolov4-custom.cfg yolov4.conv.137 -dont_show -map

発生した問題

YOLOv4の転移学習が終わり,学習済み重みが準備出来たので推論を行うことにしました.
推論したいのは画像ですので,上記で参考にしたgitのdarknetフォルダ内にあるdarknet_images.pyを用いて推論を行おうとすると

libdarknet.so: cannot open shared object file: No such file or directory

のエラーが発生しました.
以下エラー全文です.

Error

/content/drive/MyDrive/signal_detection/darknet Traceback (most recent call last): File "darknet_images.py", line 8, in <module> import darknet File "/content/drive/MyDrive/signal_detection/darknet/darknet.py", line 236, in <module> lib = CDLL(cwd + "/libdarknet.so", RTLD_GLOBAL) File "/usr/lib/python3.7/ctypes/__init__.py", line 364, in __init__ self._handle = _dlopen(self._name, mode) OSError: /content/drive/MyDrive/signal_detection/darknet/libdarknet.so: cannot open shared object file: No such file or directory

困っていること

libdarknet.soへの絶対パスを通してあげると動くという旨の海外のstack over flowを見つけたので自身のドライブ上でlibdarknet.soの検索を行いましたが見つからなかったのでそもそもこのファイルが作成されていないことがわかりました.

YOLOv3で推論を行う際にlibdarknet.soがnot foundのエラーが出た方のQiitaにはMakeが上手くいっていればこの問題は起こらない旨のことが書かれていました.

そこで,はじめにmakeを実行したさいにものすごい量の警告がでていたことを思い出しました.
一応目を通してみたのですがいまいち原因がわかりません.
個人的にはmakeが正常に実行されていないせいで,libdarkne.soが作成されておらず,またmakeが正常に実行されていない原因はmakeを実行した際の大量の警告文にあると考えているのですが,正直警告文だけで600行もあるのでどうにもならない気がしています.
似たようなことになったことがある方,有識者の方,お助けいただけないでしょうか.
よろしくお願いいします.

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

roritamago

2022/06/07 11:55

以下,makefile実行時の警告全文です. chmod +x *.sh g++ -std=c++11 -std=c++11 -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/image_opencv.cpp -o obj/image_opencv.o ./src/image_opencv.cpp: In function ‘void draw_detections_cv_v3(void**, detection*, int, float, char**, image**, int, int)’: ./src/image_opencv.cpp:946:23: warning: variable ‘rgb’ set but not used [-Wunused-but-set-variable] float rgb[3]; ^~~ ./src/image_opencv.cpp: In function ‘void draw_train_loss(char*, void**, int, float, float, int, int, float, int, char*, float, int, int, double)’: ./src/image_opencv.cpp:1147:13: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation] if (iteration_old == 0) ^~ ./src/image_opencv.cpp:1150:10: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’ if (iteration_old != 0){ ^~ ./src/image_opencv.cpp: In function ‘void cv_draw_object(image, float*, int, int, int*, float*, int*, int, char**)’: ./src/image_opencv.cpp:1444:14: warning: unused variable ‘buff’ [-Wunused-variable] char buff[100]; ^~~~ ./src/image_opencv.cpp:1420:9: warning: unused variable ‘it_tb_res’ [-Wunused-variable] int it_tb_res = cv::createTrackbar(it_trackbar_name, window_name, &it_trackbar_value, 1000); ^~~~~~~~~ ./src/image_opencv.cpp:1424:9: warning: unused variable ‘lr_tb_res’ [-Wunused-variable] int lr_tb_res = cv::createTrackbar(lr_trackbar_name, window_name, &lr_trackbar_value, 20); ^~~~~~~~~ ./src/image_opencv.cpp:1428:9: warning: unused variable ‘cl_tb_res’ [-Wunused-variable] int cl_tb_res = cv::createTrackbar(cl_trackbar_name, window_name, &cl_trackbar_value, classes-1); ^~~~~~~~~ ./src/image_opencv.cpp:1431:9: warning: unused variable ‘bo_tb_res’ [-Wunused-variable] int bo_tb_res = cv::createTrackbar(bo_trackbar_name, window_name, boxonly, 1); ^~~~~~~~~ g++ -std=c++11 -std=c++11 -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/http_stream.cpp -o obj/http_stream.o ./src/http_stream.cpp: In member function ‘bool JSON_sender::write(const char*)’: ./src/http_stream.cpp:253:21: warning: unused variable ‘n’ [-Wunused-variable] int n = _write(client, outputbuf, outlen); ^ ./src/http_stream.cpp: In member function ‘bool MJPG_sender::write(const cv::Mat&)’: ./src/http_stream.cpp:511:113: warning: format ‘%zu’ expects argument of type ‘size_t’, but argument 3 has type ‘int’ [-Wformat=] sprintf(head, "--mjpegstream\r\nContent-Type: image/jpeg\r\nContent-Length: %zu\r\n\r\n", outlen); ^ ./src/http_stream.cpp: In function ‘void set_track_id(detection*, int, float, float, float, int, int, int)’: ./src/http_stream.cpp:867:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i = 0; i < v.size(); ++i) { ~~^~~~~~~~~~ ./src/http_stream.cpp:875:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int old_id = 0; old_id < old_dets.size(); ++old_id) { ~~~~~~~^~~~~~~~~~~~~~~~~ ./src/http_stream.cpp:894:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int index = 0; index < new_dets_num*old_dets.size(); ++index) { ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./src/http_stream.cpp:930:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (old_dets_dq.size() > deque_size) old_dets_dq.pop_front(); ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ gcc -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/gemm.c -o obj/gemm.o ./src/gemm.c: In function ‘convolution_2d’: ./src/gemm.c:2044:15: warning: unused variable ‘out_w’ [-Wunused-variable] const int out_w = (w + 2 * pad - ksize) / stride + 1; // output_width=input_width for stride=1 and pad=1 ^~~~~ ./src/gemm.c:2043:15: warning: unused variable ‘out_h’ [-Wunused-variable] const int out_h = (h + 2 * pad - ksize) / stride + 1; // output_height=input_height for stride=1 and pad=1 ^~~~~ gcc -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/utils.c -o obj/utils.o ./src/utils.c: In function ‘custom_hash’: ./src/utils.c:1061:12: warning: suggest parentheses around assignment used as truth value [-Wparentheses] while (c = *str++) ^ gcc -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/dark_cuda.c -o obj/dark_cuda.o ./src/dark_cuda.c: In function ‘cudnn_check_error_extended’: ./src/dark_cuda.c:230:20: warning: comparison between ‘cudaError_t {aka enum cudaError}’ and ‘enum <anonymous>’ [-Wenum-compare] if (status != CUDNN_STATUS_SUCCESS) ^~ ./src/dark_cuda.c: In function ‘cublas_check_error_extended’: ./src/dark_cuda.c:264:18: warning: comparison between ‘cudaError_t {aka enum cudaError}’ and ‘enum cudaError_enum’ [-Wenum-compare] if (status != CUDA_SUCCESS) ^~ ./src/dark_cuda.c: In function ‘pre_allocate_pinned_memory’: ./src/dark_cuda.c:395:40: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘long unsigned int’ [-Wformat=] printf("pre_allocate: size = %Iu MB, num_of_blocks = %Iu, block_size = %Iu MB \n", ~~^ %Ilu size / (1024*1024), num_of_blocks, pinned_block_size / (1024 * 1024)); ~~~~~~~~~~~~~~~~~~ ./src/dark_cuda.c:395:64: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 3 has type ‘size_t {aka const long unsigned int}’ [-Wformat=] printf("pre_allocate: size = %Iu MB, num_of_blocks = %Iu, block_size = %Iu MB \n", ~~^ %Ilu ./src/dark_cuda.c:395:82: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 4 has type ‘long unsigned int’ [-Wformat=] printf("pre_allocate: size = %Iu MB, num_of_blocks = %Iu, block_size = %Iu MB \n", ~~^ %Ilu ./src/dark_cuda.c:405:37: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t {aka const long unsigned int}’ [-Wformat=] printf(" Allocated %d pinned block \n", pinned_block_size); ~^ %ld ./src/dark_cuda.c: In function ‘cuda_make_array_pinned_preallocated’: ./src/dark_cuda.c:426:43: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t {aka long unsigned int}’ [-Wformat=] printf("\n Pinned block_id = %d, filled = %f %% \n", pinned_block_id, filled); ~^ %ld ./src/dark_cuda.c:441:64: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=] printf("Try to allocate new pinned memory, size = %d MB \n", size / (1024 * 1024)); ~^ ~~~~~~~~~~~~~~~~~~~~ %ld ./src/dark_cuda.c:447:63: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=] printf("Try to allocate new pinned BLOCK, size = %d MB \n", size / (1024 * 1024)); ~^ ~~~~~~~~~~~~~~~~~~~~ %ld At top level: ./src/dark_cuda.c:287:23: warning: ‘switchBlasHandle’ defined but not used [-Wunused-variable] static cublasHandle_t switchBlasHandle[16]; ^~~~~~~~~~~~~~~~ ./src/dark_cuda.c:286:12: warning: ‘switchBlasInit’ defined but not used [-Wunused-variable] static int switchBlasInit[16] = { 0 }; ^~~~~~~~~~~~~~ gcc -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -c ./src/convolutional_lay
roritamago

2022/06/07 11:58

すみません.全文長すぎて載せきれません.

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Darknet

Darknetは、C言語で記述されたオープンソースのニューラルネットフレームワークで簡単にインストールすることが可能です。学習済みモデルとアルゴリズムも配布しており、ダウンロードすれば容易に動かすこともできます。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。