初心者にもオススメ!Pythonで物体検出を分かりやすく解説!(keras_yolo3)

スポンサーリンク
Python/DeepLearning

みなさんこんにちは!

サラリーマンブロガーのみやしんです!

今回はPythonを使った物体検出の方法をご紹介します。

Yoloという学習済みモデルを使いますので、初めての方でもこれから示すフローに従って進めて頂ければ、超簡単に実装できます!

まさにディープラーニングの王道!物体検出を実際にやってみましょう!

みやしん
みやしん

やっぱり物体検出って出来たら凄そうですよね!画像や動画で結果が見えるところも面白い要因の一つだと思います!

スポンサーリンク

まずはkeras_yolo3をインストール

まずはkeras_yolo3をインストールします。

デスクトップしたの検索バーに「cmd」と入力してコマンドプロントを起動しましょう!

 

コマンドプロントが起動しましたら、「cd desktop」と入力してエンターを押します。

続いてkeras_yolo3をデスクトップにクローンするため、下記のコマンドを実行します。

git clone https://github.com/qqwweee/keras-yolo3.git 

実行するとこんな感じに表示されます。

するとデスクトップに「keras-yolo3」という名前のフォルダーが作成されます。

 

keras-yolo3のフォルダーに移動するために、下記コマンドを入力します。

環境設定

続いて環境設定です。

Anacondaで仮想環境を作りました。

pythonは3.6.12にしています。3.5、3.7、3.8だと対応していないライブラリがありましたので、3.6.12がおススメです。

Name                    Version                   Build  Channel
 _tflow_select             2.2.0                     eigen
 absl-py                   0.7.1                    py36_0
 astor                     0.8.0                    py36_0
 blas                      1.0                         mkl
 ca-certificates           2021.1.19            haa95532_0
 certifi                   2020.12.5        py36haa95532_0
 coverage                  5.4              py36h2bbff1b_2
 cycler                    0.10.0           py36haa95532_0
 cython                    0.29.21          py36hd77b12b_0
 freetype                  2.10.4               hd328e21_0
 gast                      0.2.2                    py36_0
 grpcio                    1.35.0           py36hc60d5dd_1
 h5py                      2.9.0            py36h5e291fa_0
 hdf5                      1.10.4               h7ebc959_0
 icc_rt                    2019.0.0             h0cc432a_1
 icu                       58.2                 ha925a31_3
 importlib-metadata        2.0.0                      py_1
 intel-openmp              2020.2                      254
 jpeg                      9b                   hb83a4c4_2
 keras                     2.1.5                    py36_0
 kiwisolver                1.1.0            py36ha925a31_0
 libpng                    1.6.37               h2a8f88b_0
 libprotobuf               3.8.0                h7bd577a_0
 libtiff                   4.1.0                h56a325e_1
 lz4-c                     1.9.3                h2bbff1b_0
 markdown                  3.1.1                    py36_0
 matplotlib                3.0.3            py36hc8f65d3_0
 mkl                       2020.2                      256
 mkl-service               2.3.0            py36h196d8e1_0
 mkl_fft                   1.2.0            py36h45dec08_0
 mkl_random                1.1.1            py36h47e9c7a_0
 numpy                     1.16.4           py36h19fb1c0_0
 numpy-base                1.16.4           py36hc3f5095_0
 olefile                   0.46                     py36_0
 opencv                    3.3.1            py36h20b85fd_1
 openssl                   1.1.1j               h2bbff1b_0
 pillow                    6.0.0            py36hdc69c19_0
 pip                       21.0.1           py36haa95532_0
 protobuf                  3.8.0            py36h33f27b4_0
 pyparsing                 2.4.0                      py_0
 pyqt                      5.9.2            py36h6538335_2
 pyreadline                2.1                      py36_1
 python                    3.6.12               h5500b2f_2
 python-dateutil           2.8.0                    py36_0
 pytz                      2021.1             pyhd3eb1b0_0
 pyyaml                    5.1.1            py36he774522_0
 qt                        5.9.7            vc14h73c81de_0
 scipy                     1.3.0            py36h29ff71c_0
 setuptools                52.0.0           py36haa95532_0
 sip                       4.19.8           py36h6538335_0
 six                       1.12.0                   py36_0
 sqlite                    3.33.0               h2a8f88b_0
 tensorboard               1.10.0           py36he025d50_0
 tensorflow                1.10.0          eigen_py36h849fbd8_0
 tensorflow-base           1.10.0          eigen_py36h45df0d8_0
 termcolor                 1.1.0            py36haa95532_1
 tk                        8.6.10               he774522_0
 tornado                   6.1              py36h2bbff1b_0
 vc                        14.2                 h21ff451_1
 vs2015_runtime            14.27.29016          h5e58377_2
 werkzeug                  0.15.4                     py_0
 wheel                     0.36.2             pyhd3eb1b0_0
 wincertstore              0.2              py36h7fe50ca_0
 xz                        5.2.5                h62dcd97_0
 yaml                      0.1.7                hc54c509_2
 zipp                      3.4.0              pyhd3eb1b0_0
 zlib                      1.2.11               h62dcd97_4
 zstd                      1.4.5                h04227a9_0

Anacondaでインストールしていますので、pythonは下記でインストールします。

conda install python=3.6.12

ライブラリは、例えばTensorflowの場合はこのようにインストールしましょう。

conda install tensorflow==1.10.0

続いて学習済みモデルの重みをダウンロードします。

webブラウザのURLのところに下記を入れると重みのダウンロードが開始されます。

https://pjreddie.com/media/files/yolov3.weights

 

「yolo3.weights」をダウンロードしたら、先程のkeras-yolo3フォルダーに入れます。

ファイル名が「yolo3(1).weights」や「yolo3(2).weights」になってしまった場合は、「yolo3.weights」に直しましょう。

続いてkerasを使えるように変換の処理をします。

まずは、Anaconda Powershell Promptを起動します。

 

続いて、自分が作った仮想環境をactivateします。

conda activate <仮想環境名>

私の場合は「yolo」という名前で仮想環境をつくりましたので、

conda activate yolo

と入力しました。

続いてカレントディレクトリを「keras-yolo3」にします。

cd <keras-yolo3フォルダのアドレス>

ここで、「yolo3.weights」をKerasで使えるように下記のコマンドで変換します。

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

このように処理が進みます。たまにCPUのオーバーフロー?と思われるエラーが出ることもありますが、開いているファイルを閉じて再度実行すると上手く処理が進みました。

これで準備は完了です!!

画像の物体検出

まずは「keras-yolo3」のフォルダーに物体検出したい画像を格納します。

そして下記のコードを実行すると、”Input image filename:”と表示されるので、ファイル名を入力します。拡張子までしっかり入力しましょう。

python yolo_video.py --image 

実行すると下記のような感じで物体検出できます。

動画の物体検出

動画も同じように物体検出できます。

下記のコードを入力します。

python yolo_video.py --input ファイル名.mp4

すると1フレームずつ物体検出が始まり、物体検出できます。

今回の物体検出は以上になります!

その他にもpythonを使って色々やってみたい方はこちらも参考にどうぞ!

また、物体検出や画像認識、時系列データの扱いも含めて勉強したい方は個人的にはこちらの書籍がおススメです。コードもたくさん載っていて丁寧な解説もあるので一つ一つ理解していくことができます。

Python、AI、機械学習について、初心者の方、プログラミングスクールに興味のある方、E資格を取得したい方、更に実践的なスキルを磨きたい方は下記の記事もご参考ください。

合わせて読みたい

yoloをファインチューニングしてオリジナルの物体検出をやってみたい方はこちらをどうぞ!

物体検出のためのアノテーション方法が知りたい方はこちら!アノテーションツールのVoTTの使い方を分かりやすく説明します。

物体検出用の画像加工の仕方はこちらの記事を参考にしてください。

他の物体検出モデルもあります!

ありがとうございました!

Python/DeepLearning
スポンサーリンク
記事が良かったらSNSでシェアを宜しくお願いします!
みやしんをフォローすると役立つ情報がいっぱいにゃ!
スポンサーリンク

コメント

タイトルとURLをコピーしました