みなさんこんにちは!
サラリーマンブロガーのみやしんです!
今回は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のところに下記を入れると重みのダウンロードが開始されます。
「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の使い方を分かりやすく説明します。
物体検出用の画像加工の仕方はこちらの記事を参考にしてください。
他の物体検出モデルもあります!
ありがとうございました!
コメント