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

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

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

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

YOLO

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

Google Colaboratory

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

Python

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

Q&A

解決済

1回答

1635閲覧

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

roritamago

総合スコア5

Darknet

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

YOLO

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

Google Colaboratory

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

Python

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

0グッド

0クリップ

投稿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

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

python

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

python

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

python

1!make

python

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

python

1学習の実行 2!./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

1/content/drive/MyDrive/signal_detection/darknet 2Traceback (most recent call last): 3 File "darknet_images.py", line 8, in <module> 4 import darknet 5 File "/content/drive/MyDrive/signal_detection/darknet/darknet.py", line 236, in <module> 6 lib = CDLL(cwd + "/libdarknet.so", RTLD_GLOBAL) 7 File "/usr/lib/python3.7/ctypes/__init__.py", line 364, in __init__ 8 self._handle = _dlopen(self._name, mode) 9OSError: /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行もあるのでどうにもならない気がしています.
似たようなことになったことがある方,有識者の方,お助けいただけないでしょうか.
よろしくお願いいします.

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

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

回答1

0

ベストアンサー

Python で libdarknet.so を用いた Darknet で YOLO v3 の画像検出
によると、Makefileで「LIBSO=1」に変更する必要が有るようです

投稿2022/06/07 23:42

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roritamago

2022/06/08 04:49 編集

ありがとうございます. このサイトにもその旨が書いてありました. https://www.hamlet-engineer.com/posts/object_detection04.html 試してみたところ,libdarknet.soが作成されました. 結局別のエラーが出て推論は出来ていませんがそちらは別の質問を立てたいと思います. 繰り返しになりますがありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問