コンテンツへスキップ

PythonのMySQLdbモジュール導入

PythonよりSQLを利用する際に、mysqlclinet ( MySQLdb ) モジュールを利用しています。
インストールされていないと、import MySQLdb時に、以下のエラーメッセージが出力されます。

pipコマンドで導入出来れば何も問題ないのですが、pip3でインストールしようとしたら、インストールに失敗しました。失敗時の出力は以下です。

mysqlclinetの Pipインストール時エラーの対策

libmysqlclinet-devがインストールされていると、mysqlclinetのインストールが成功するようです。

aptコマンドを用いて、libmysqlclinet-devを導入し、mysqlclinetをpip3コマンドで導入します。

created by Rinker
NVIDIA
¥15,600 (2020/10/26 05:12:38時点 Amazon調べ-詳細)

OPENCV 4.2の DNN が NVIDIA Cuda に対応

OpenCV の4.2より、OpenCVのdnnが、NVIDIA のGPUに対応していたようです。
しかも、NVIDIAのJetson Nanoでも利用可能でした。

とても驚きのトピックでした。
早速、NVIDA Jetson Nanoに導入し、YOLO / Darknet の推論を動作させてみました。
少し、導入に癖があったので、導入時のメモを公開しておきます。

Led by dlib’s Davis King, and implemented by Yashas Samaga, OpenCV 4.2 now supports NVIDIA GPUs for inference using OpenCV’s dnn module, improving inference speed by up to 1549%!

Pythonから、NVIDIA GPUのCUDAを用いた、OpenCVのDNNを利用する際のコードはBackendとTargetを以下のようにCUDAに設定します。

導入した環境

2020/08/20追記:
JetPack4.4とOPENCV4.4.0でインストールできました。

  • JetPack 4.3 (4.4では、OPENCVコンパイル時に、CuDNNがうまくコンパイルできず)
    Jetpack 4.3 Archive
  • OPENCV 4.3.0 (4.2.0でもインストール出来ました)
created by Rinker
NVIDIA
¥15,600 (2020/10/26 05:12:38時点 Amazon調べ-詳細)

導入方法

NVIDIA Jetson NanoのOpencvコンパイル用のスクリプトは、公式が公開したこともあり、各種エンハンスされ公開されています。
今回は、結構最近に公開されたとみられる、4.3.0向けのスクリプトを利用します。

Build OpenCV on Nvidia Jetson Nano

ポイントは、コンパイルオプションに以下を追加します。

  • WITH_CUDA
  • WITH_CUDNN

インストールスクリプト

コンパイルオプションを追加した、スクリプトを公開しておきます。

./Build_OpenCV.sh でインストールは完了します。
./Build_OpenCV.sh <version> で、指定したバージョンのOPENCVがインストール出来るようです。

実際にコンパイルした際の構成も公開しておきます。

NVIDIA CUDA: YES (ver 10.0, CUFFT CUBLAS FAST_MATH)
NVIDIA GPU arch: 53 62 72 -- NVIDIA PTX archs:
cuDNN: YES (ver 7.6.3)

created by Rinker
NVIDIA
¥15,600 (2020/10/26 05:12:38時点 Amazon調べ-詳細)

参考サイト

めざましじゃんけん を題材とした時系列予測

めざましじゃんけん広場に、TVのじゃんけん結果が取得可能なAPIを公開しました。
当初より、このチュートリアルを公開したかったのですが、システム自体の安定稼働や、それなりに時系列データが蓄積されてからと、公開が本日となりました。

機械学習、AI、人工知能分野の専門家ではございませんが、じゃんけんのようなランダムな結果となりそうな分野において、プロフェッショナルや趣味で機械学習を実施している人が、簡単な同じ題材で、予測精度の差分が楽しめたらと考えております。

テレビ放送、デジタルデータ通信という性質もあり、リアルタイムで楽しめます。
実際、このシステムを運用し、難しさがある反面、嘘もつけず、面白い部分でもあります。
また、平日4回、土曜日2回と実施回数が多いコンテンツで有ることも魅力だと思います。

是非、一人でも多くの方が、めざましじゃんけんのじゃんけん予測を実施して頂ければと思います。

公開コンテンツ

めざましじゃんけん を題材とした時系列予測

cupyの利用に関して

Windowsでchainerを利用とした際に、cupy関係のエラーがでました。
自身のCuda利用環境に合わせたCupyを導入する必要があるようです。

cupyインストール

pip install cupyすると、CUDA-8.0をターゲットとしてしまうみたいです。
なので、下記コマンドでCUDA-9.0用のcupyをインストールしてください。
pip install cupy-cuda90
cupyに関してはこちらに書いてありました。
CUDA 10.1を利用する場合
$ pip install cupy-cuda101

利用環境に合わせたCupyを導入し、エラーがなくなりました。

Cupy、Chainerの動作環境

chainer.print_runtime_info()
print('GPU:', chainer.cuda.available)
print('cuDNN:', chainer.cuda.cudnn_enabled)

MacにPythonインストール

Mac BookでOpenCVを利用したくて、Python3とOpenCVをインストールしました。
普段は、Macでプログラム開発などをしていないので、Macの開発環境などは何も導入していない状態です。

テスト環境

macOS Mojave 10.14.6
導入されているPython 2.7.10 (python -V)

Python 3インストール

パッケージインストールかbrewインストールでPythonがインストール出来ます。
開発環境を入れていないので、パッケージインストールしました。
以下サイトより、MAC向けのインストトーラーをダウンロードし、Python3のインストールを実施しました。

Download the latest version for Mac OS X

OpenCVインストール

pip3コマンドで、「opencv-python」をインストールしました。

必要に応じてPipをアップグレードします。

Pipのアップグレードが必要な際は、以下のメッセージが表示されます。

You are using pip version 18.1, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

 

 

 

 

 

Windowsでは、pip でインストール出来ないmysqlclient

Linuxでは、問題なかった「mysqlclient」がWindowsではpipでインストールできませんでした。

mysqlclientをWindowsでインストール

インストールは、wheelパッケージをダウンロードし、ダウンロードしたファイルを用いて、pipコマンドでインストールします。

wheelパッケージは以下よりダウンロードします。
Unofficial Windows Binaries for Python Extension Packages

環境に合わせた、PythonのバージョンとOSのBit数別にファイルが準備されているので、環境に合ったファイルをダウンロードします。

Pipコマンドでinstall

pip install <ダウンロードファイル>

コマンド例: pip install mysqlclient1.3.13cp36cp36mwin_amd64.whl

2

機械学習のトレーニング時に悩まされるメモリー不足

2019年8月個人向け深層学習・機械学習向けGPUの購入を考えたり、AlexeyAB / Darknet で独自学習(YOLO3 ,Tiny – YOLO 3)でもトレーニングパラメーターを調整したりして、メモリ不足を回避し学習を実施する必要があります。
Chainer利用時に、メモリ不足に困ったのですが、Unified Memoryという、CPUとGPUで共通のメモリ空間(=GPUメモリ+CPUメモリ)を使う方法です。
以下のパラメーターでOut of MemoryでNGとなった場合を考えると。
INPUT_WIDTH = 128
INPUT_HEIGHT = 128
GPU_ID = 0
BATCH_SIZE = 64
MAX_EPOCH = 20
BATCHI_SIZEを小さくして、Out of Memoryを回避して学習をすすめることも出来ます。
INPUT_WIDTH = 128
INPUT_HEIGHT = 128
GPU_ID = 0
BATCH_SIZE = 32
MAX_EPOCH = 20
または、GPUを利用せずにCPUで学習を進めることも出来ます。GPUを導入しているパソコンだと、メインメモリはそれなりの容量搭載されていると思います。
INPUT_WIDTH = 128
INPUT_HEIGHT = 128
GPU_ID = -1
BATCH_SIZE = 64
MAX_EPOCH = 20
#model.to_gpu(GPU_ID)

CPUとGPUメモリを合わせて利用 Unified Memory for CUDA

参考URL:

Unified Memoryとは、CPUとGPUで共通のメモリ空間(=GPUメモリ+CPUメモリ)を使う方法となります。
以下、エラーメッセージの例となります。

サンプルスクリプトPythonからメール送付

以下が、サンプルスクリプトになります。

参考にさせて頂いたサイト

https://www.python-izm.com/advanced/mail_send/

Yolo3、Tiny-Yolo3での独自学習モデルをPythonに実装

画像検出に向けて、AlexeyAB Darknetを用いて、YOLO3、Tiny-YOLO3で作成した、独自学習モデルをPythonで実装します。

前提条件

YOLO2 Tiny-YOLO2 YOLO3 Tiny-YOLO3 をPythonで実装

学習済みモデル(weightsファイル)とコンフィグファイル(cfgファイル)

「darknet\build\darknet\x64\cfg\obj.data」ファイルのbackupに指定したフォルダに、学習モデル(weightsファイル)が出力されます。

独自学習に用いたコンフィグファイルは、「darknet\build\darknet\x64\cfg\」フォルダ内で作成していると思いますので、独自学習時に用いたcfgファイルとなります。

これらのファイルを、画像検出を実施するRaspberry PiやサーバーのPythonファイルが読み込み可能な場所にコピーします。

Python3での実装

  • net = cv.dnn.readNetFromDarknet(CFG, MODEL)
    • CFG:学習モデル(weightsファイル)
    • MODEL:独自学習時に用いたcfgファイル
  • net.setPreferableTarget
    • net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)
      Raspberry PiやWindowsなどで動作させる際のTarget指定。
      現時点では、OpenCVのYOLO向けDNNでは、GPUはサポートされておりません。
    • net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
      Intel Movidius Neural Compute Stick 2 (NCS2)を利用する際は、TargetにNCS2を指定することが出来ます。Raspberry Pi 3B +で動作確認済みとなります。

参考記事:Movidius Neural Compute Stick 2、OpenVINO™ toolkit for Raspbian* OS導入

Python3 ソースコード

サンプルスクリプトを掲載しておきます。

昨日投稿したGit Hubからソースコードをダウンロードして、OpenCV 3.4.4を導入と類似した内容なのですが、Raspberry PiへのOpenCVにぴったりの記事を見つけたので、紹介します。また、この記事を参考に最新のOpenCV4.1.Xを導入したので、記事にしておきます。

以下の記事を参考にインストールした内容となります。

Install OpenCV 4 on Raspberry Pi

Install OpenCV 4 on Raspberry Pi

他バージョンでもこの記事の手順でインストールして、問題なくOpen CVの導入が出来ております。

現時点の最新OpenCV(4.1.1)をGitHubよりソースコードをダウンロードしインストール

事前準備

システムのディスク容量の整理を行います。

インストール対象のOpen CVバージョンを変数に設定します。

インストールに利用するフォルダを作成します。

カレントディレクトリを変数に入れます。

導入パッケージのアップデートを行います。

swapfileサイズ変更

この手順前後で、「free -m」コマンドでスワップメモリサイズを確認してください。
以下の手順で、スワップサイズを1GBに拡張します。

必要パッケージのインストール

多くのパッケージを導入する必要があります。環境によっては、仮想Python環境に導入することをお勧めします。私は、Raspberry Piでは仮想環境を利用しておりません。
元の参考にしているサイトでは、一部のライブラリーを仮想環境に導入されております。

OpenCVのソースコード準備

Git HubよりOpenCVのソースコードをチェックアウト(ダウンロード)します。

OpenCVのビルドおよびコンパイル、インストール

この記事で示すコンパイルオプションは、オリジナルサイトのビルドオプションとは少し異なっております。各種ビルドオプションの説明や、失敗するビルドオプションなどは各種ブログに記載されております。個人的には、できる限りコンパイルが通りやすいビルドオプションとしております。

コンパイルです。

Raspberry Pi 3B +でコンパイル実施時は、4コアすべてを使ってコンパイルしても、6-8時間程度時間を要します。Raspberry Piの動作温度もコンパイル時間に大きく影響します。

コンパイルが無事に成功したら、インストールを実行してください。

swqpfileサイズ変更(変更したサイズを元に戻す)

この手順前後で、「free -m」コマンドでスワップメモリサイズを確認してください。
以下の手順で、スワップサイズを拡張した1GBから100MBに戻します。

インストール後の確認

「python3」コマンドを実行し、「import cv2」「print(cv2.__version__)」で導入されたOpenCVのバージョンを確認します。

最後に

当初は、結構苦労しましたが、慣れると簡単にコンパイル、インストール出来ます。OpenCVをガリガリ利用する人は、是非、自分でソースコードより導入することをお勧めします。新バージョン新バージョンでの進化が素晴らしいライブラリです。

現時点の私のRaspberry Piに導入しているOpenCVは、「4.1.1-openvino」となります。Movidius Neural Compute Stick 2、OpenVINO™ toolkit for Raspbian* OS導入