HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2018/08/14

【成功版】Raspberry Piで NNPACK対応版の Darknet Neural Network Frameworkをビルドする方法 【成功版】Raspberry Piで NNPACK対応版の Darknet Neural Network Frameworkをビルドする方法

(ラズパイに Darknet NNPACK darknet-nnpackをソースからビルドして物体検出を行なう方法)

Tags: [Raspberry Pi], [電子工作], [ディープラーニング]





● Raspberry Piで Darknet Neural Network Frameworkを動かしてグロ画像をモリモリ量産する方法

 物体検出 = 画像のどの位置に何の物体が存在するかを「検出」する(認識+位置情報)
 物体認識 = 画像に何の物体が存在するかを「認識」する(認識だけで位置情報は無し)

 Darknetと言う Neural Network Frameworkが有るので Raspberry Piで動かして Google DeepDreamの様なキモイ絵をモリモリ量産します。

Darknet - Open Source Neural Networks in C

Darknet - Nightmare
 Darknetによる悪夢(ナイトメア、Nightmare)のグロ画像の例。

DeepDream - Wikipedia

 DeepDreamで生成した画像の例(Wikipediaより引用)
・DeepDream
DeepDream




● Raspberry Piで Caffe Deep Learning Frameworkで DeepDreamする方法

2018/08/04
【ビルド版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning Framework
【ビルド版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning Framework

  ラズパイで Caffe Deep Learning Frameworkをビルドして Deep Dreamを動かしてキモイ絵を生成する

2018/08/04
【インストール版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning
【インストール版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning

  ラズパイで Caffe Deep Learning Frameworkをインストールして Deep Dreamを動かしてキモイ絵を生成する

2018/08/06
Orange Pi PC 2の 64bitのチカラで DeepDreamしてキモイ絵を高速でモリモリ量産してみるテスト
Orange Pi PC 2の 64bitのチカラで DeepDreamしてキモイ絵を高速でモリモリ量産してみるテスト

  OrangePi PC2に Caffe Deep Learning Frameworkをビルドして Deep Dreamを動かしてキモイ絵を生成する

● 下記は Darknetを最初に動かそうとして試行錯誤した【失敗版まとめ】です

2018/08/12
【失敗版】Raspberry Piで Darknet Neural Network Frameworkをビルドする方法
【失敗版】Raspberry Piで Darknet Neural Network Frameworkをビルドする方法

  ラズパイに Darknet Neural Network Frameworkを入れて物体検出や悪夢のグロ画像を生成する


●今回動かした Raspberry Pi Raspbian OSのバージョン

 RASPBIAN STRETCH WITH DESKTOP
 Version:June 2018
 Release date: 2018-06-27
 Kernel version: 4.14
pi@raspberrypi:~/pytorch $ uname -a
Linux raspberrypi 4.14.50-v7+ #1122 SMP Tue Jun 19 12:26:26 BST 2018 armv7l GNU/Linux


● Darknetの実行にはメモリを沢山使うので不要なサービス等を停止して使えるメインメモリを増やす


2018/08/14
Raspberry Piでメモリを馬鹿食いするアプリ用に不要なサービスを停止してフリーメモリを増やす方法
Raspberry Piでメモリを馬鹿食いするアプリ用に不要なサービスを停止してフリーメモリを増やす方法

  ラズパイでメモリを沢山使用するビルドやアプリ用に不要なサービス等を停止して使えるメインメモリを増やす


● ラズパイで通常版の Darknetをビルドする方法、とても遅いです


2018/08/14
【成功版】Raspberry Piで Darknet Neural Network Frameworkをビルドする方法
【成功版】Raspberry Piで Darknet Neural Network Frameworkをビルドする方法

  ラズパイに Darknet Neural Network Frameworkを入れて物体検出や悪夢のグロ画像を生成する


● ラズパイで NNPACK対応版の Darknetをビルドする方法 thomaspark-pkj版

※ thomaspark-pkj版、再度挑戦して YOLOv2で物体認識ができました。

digitalbrain79/darknet-nnpack - Darknet with NNPACK

※ thomaspark-pkj(旧名称)と digitalbrain79(新名称)は同じ(リダイレクトされる)

# Build Darknet with NNPACK from Raspberry Pi 3

# お決まりの sudo apt-get updateで最新状態に更新する
sudo apt-get update

# Ninjaのビルドに必要な re2cをインストールする
# Ninja ./configure.py --bootstrap
# warning: A compatible version of re2c (>= 0.11.3) was not found; changes to src/*.in.cc will not affect your build.
# */
sudo apt-get -y install re2c
# Setting up re2c (0.16-2) ...

# 作業ディレクトリを作る
cd
mkdir thomaspark-pkj

# Install PeachPy and confu
# PeachPy PEACH-Py is a Python framework high-performance assembly kernels
# https://pypi.org/project/PeachPy/
# https://github.com/Maratyszcza/PeachPy
# confu Configuration management without the "FUUU~"
# https://pypi.org/project/confu/
# https://github.com/neithere/confu/
cd
cd thomaspark-pkj
# Orange Pi PC2 ARMBIAN 5.40 stable Debian GNU/Linux 9 (stretch) 4.14.15-sunxi64
# sudo apt-get -y install python3-pip
# ImportError: No module named 'setuptools'
# sudo apt-get -y install python3-setuptools
sudo pip3 install --upgrade git+https://github.com/Maratyszcza/PeachPy
# error: invalid command 'bdist_wheel'
# sudo pip3 install wheel
sudo pip3 install --upgrade git+https://github.com/Maratyszcza/confu

# Install Ninja
# a small build system with a focus on speed
# https://github.com/ninja-build/ninja
cd
cd thomaspark-pkj
git clone https://github.com/ninja-build/ninja.git
cd ninja
git checkout release
./configure.py --bootstrap
# [28/28] LINK ninja
export NINJA_PATH=$PWD
# ---
# Install ninja build system
# sudo apt-get install ninja-build

# 不要 Install clang
# 不要 sudo apt-get -y install clang
# clangは必要無い?

# Install NNPACK-darknet
cd
cd thomaspark-pkj
git clone https://github.com/thomaspark-pkj/NNPACK-darknet.git
cd NNPACK-darknet
confu setup
python3 ./configure.py --backend auto
$NINJA_PATH/ninja
sudo cp -a lib/* /usr/lib/
# */
sudo cp include/nnpack.h /usr/include/
sudo cp deps/pthreadpool/include/pthreadpool.h /usr/include/

# Build darknet-nnpack
cd
cd thomaspark-pkj
git clone https://github.com/thomaspark-pkj/darknet-nnpack.git
cd darknet-nnpack
make

# ビルドした darknetバイナリを確認する
ls -l darknet
# pi@raspberrypi:~/thomaspark-pkj/darknet-nnpack $ ls -l darknet
# -rwxr-xr-x 1 pi pi 1693516 Aug 14 08:03 darknet

# clangの有無でバイナリサイズが異なる?
# pi@raspberrypi:~/thomaspark-pkj/darknet-nnpack $ ls -l darknet
# -rwxr-xr-x 1 pi pi 1845504 Aug 14 17:15 darknet

● DarkNetの動作確認 画像の物体認識 YOLOv2
# DarkNetの動作確認
cd
cd thomaspark-pkj
cd darknet-nnpack

# YOLOv2 608x608
# https://pjreddie.com/darknet/yolo/
wget https://pjreddie.com/media/files/yolov2.weights

# wget https://github.com/pjreddie/darknet/blob/master/cfg/yolov2.cfg
# mv yolov2.cfg ./cfg/
# yolov2.cfgファイルを読み込むと Segmentation faultになるので不要
# Segmentation faultになるのは Gitの HTMLで読み込んでいるからでした。
# 正しくは下記、
# wget https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolov2.cfg

# 認識結果を画面に表示して認識の画像 predictions.pngを生成する data/person.jpg
./darknet detector test cfg/coco.data cfg/yolo.cfg yolov2.weights data/person.jpg
# mask_scale: Using default '1.000000'
# Loading weights from yolov2.weights...Done!
# data/person.jpg: Predicted in 9263 ms.
# person: 86%
# horse: 82%
# dog: 86%

ls -l predictions.png
# -rw-r--r-- 1 pi pi 581706 Aug 14 10:31 predictions.png
cp predictions.png predictions_person_coco_v2.png
rm predictions.png

# 認識結果を画面に表示して認識の画像 predictions.pngを生成する data/person.jpg
./darknet detect cfg/yolo.cfg yolov2.weights data/person.jpg
# mask_scale: Using default '1.000000'
# Loading weights from yolov2.weights...Done!
# data/person.jpg: Predicted in 8340 ms.
# person: 86%
# horse: 82%
# dog: 86%
cp predictions.png predictions_person_v2.png
rm predictions.png

./darknet detect cfg/yolo.cfg yolov2.weights data/dog.jpg
# data/dog.jpg: Predicted in 8743 ms.
# dog: 82%
# car: 28%
# truck: 64%
# bicycle: 85%
cp predictions.png predictions_dog_v2.png

./darknet detect cfg/yolo.cfg yolov2.weights data/eagle.jpg
# data/eagle.jpg: Predicted in 8760 ms.
# bird: 93%
cp predictions.png predictions_eaglev2.png

./darknet detect cfg/yolo.cfg yolov2.weights data/horses.jpg
# data/horses.jpg: Predicted in 8766 ms.
# horse: 48%
# horse: 62%
# horse: 91%
cp predictions.png predictions_horses_v2.png
rm predictions.png

# ImageMagick
sudo apt-get -y install imagemagick

# Convert PNG to JPG
convert predictions_person_coco_v2.png -quality 98 predictions_person_coco_v2.jpg
convert predictions_person_v2.png -quality 98 predictions_person_v2.jpg
convert predictions_dog_v2.png -quality 98 predictions_dog_v2.jpg
convert predictions_eaglev2.png -quality 98 predictions_eaglev2.jpg
convert predictions_horses_v2.png -quality 98 predictions_horses_v2.jpg

● ラズパイで NNPACK対応版の Darknetでとりあえず物体認識を動かす事に成功

 ラズパイで NNPACK対応版の Darknet thomaspark-pkj版でとりあえず物体認識を動かす事に成功。

 必要十分な解像度の画像の大きさで 10秒以内で物体認識が完了するので十分に実用的と思います。(Tinyモデルがエラー無く使えれば数秒レベルで認識できるんだけど。。。)

・predictions_person_coco_v2.jpg
predictions_person_coco_v2.jpg


・predictions_person_v2.jpg
predictions_person_v2.jpg


・predictions_dog_v2.jpg
predictions_dog_v2.jpg


・predictions_eaglev2.jpg
predictions_eaglev2.jpg


・predictions_horses_v2.jpg
predictions_horses_v2.jpg



ロンドンの街並み - ぱくたそフリー素材
 S サムネサイズ ELL85_rondonnomachinami_TP_V4.jpg 800x535
pi@raspberrypi:~/digitalbrain79/darknet-nnpack $ ./darknet detector test cfg/coco.data cfg/yolo.cfg yolov2.weights ELL85_rondonnomachinami_TP_V4.jpg
...
ELL85_rondonnomachinami_TP_V4.jpg: Predicted in 8891 ms.
person: 46%
person: 27%
car: 35%
person: 32%
person: 64%
person: 56%
backpack: 70%
person: 71%
handbag: 42%
person: 82%
person: 66%
person: 84%
・ロンドンの街並みを DarkNetで物体認識
ロンドンの街並みを DarkNetで物体認識

インド・ニューデリーの大きな商店街 - ぱくたそフリー素材
 S サムネサイズ miyazaki049INDSCF4890_TP_V4.jpg 800x533
pi@raspberrypi:~/digitalbrain79/darknet-nnpack $ ./darknet detector test cfg/coco.data cfg/yolo.cfg yolov2.weights miyazaki049INDSCF4890_TP_V4.jpg
...
miyazaki049INDSCF4890_TP_V4.jpg: Predicted in 8955 ms.
person: 58%
car: 37%
person: 48%
handbag: 40%
person: 45%
person: 33%
person: 55%
person: 66%
person: 57%
person: 53%
motorbike: 56%
person: 70%
motorbike: 67%
motorbike: 45%
person: 68%
person: 67%
person: 74%
person: 68%
person: 83%
motorbike: 46%
person: 39%
・インド・ニューデリーの大きな商店街を DarkNetで物体認識
インド・ニューデリーの大きな商店街を DarkNetで物体認識

ベトナムホーチミンのマーケットの風景 - ぱくたそフリー素材
 S サムネサイズ HIROTA17621027_TP_V4.jpg 800x533
pi@raspberrypi:~/digitalbrain79/darknet-nnpack $ ./darknet detector test cfg/coco.data cfg/yolo.cfg yolov2.weights HIROTA17621027_TP_V4.jpg
...
HIROTA17621027_TP_V4.jpg: Predicted in 9084 ms.
person: 25%
person: 36%
umbrella: 40%
person: 32%
person: 39%
person: 73%
person: 41%
person: 25%
bicycle: 25%
umbrella: 38%
person: 63%
motorbike: 65%
person: 78%
bicycle: 40%
・ベトナムホーチミンのマーケットの風景を DarkNetで物体認識
ベトナムホーチミンのマーケットの風景を DarkNetで物体認識

●下記の場合は認識に失敗する?
./darknet classify cfg/yolo.cfg yolov2.weights data/person.jpg
mask_scale: Using default '1.000000'
Loading weights from yolov2.weights...Done!
data/person.jpg: Predicted in 2.861805 seconds.
51.51%: (null)
51.51%: (null)
51.51%: (null)
51.51%: (null)
51.51%: (null)

●下記の場合は Segmentation faultになる
./darknet detect cfg/coco.data cfg/yolo.cfg yolov2.weights data/person.jpg
Segmentation fault

./darknet classify cfg/coco.data cfg/yolo.cfg yolov2.weights data/person.jpg
Segmentation fault

● Tiny YOLO Version 2 YOLOv2 Darknet NNPACK対応 thomaspark-pkj版

 わーい! Tiny YOLOも動いたー!
# yolov2-tiny-voc.weights (61MB)
wget https://pjreddie.com/media/files/yolov2-tiny-voc.weights

wget https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolov2-tiny-voc.cfg
mv yolov2-tiny-voc.cfg ./cfg/

#---
./darknet detector test cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights data/dog.jpg

Loading weights from yolov2-tiny-voc.weights...Done!
data/dog.jpg: Predicted in 1219 ms.
car: 35%
car: 55%
dog: 78%
bicycle: 36%

#---
./darknet detector test cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights data/horses.jpg

Loading weights from yolov2-tiny-voc.weights...Done!
data/horses.jpg: Predicted in 1206 ms.
cow: 41%
sheep: 39%
cow: 75%

#---
./darknet detector test cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights data/person.jpg

Loading weights from yolov2-tiny-voc.weights...Done!
data/person.jpg: Predicted in 1223 ms.
dog: 53%
person: 73%
sheep: 60%
sheep: 39%

#---
./darknet detector test cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights data/eagle.jpg

Loading weights from yolov2-tiny-voc.weights...Done!
data/eagle.jpg: Predicted in 1199 ms.
bird: 99%

● DarkNetの動作確認 悪夢 Nightmare vgg-conv.weights

Have A Nightmare With Darknet

 画像を縮小しても動きませんでした。
wget http://pjreddie.com/media/files/vgg-conv.weights

./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/scream.jpg 10
Loading weights from vgg-conv.weights...Done!
Iteration: 0, 1, *** Error in `./darknet': double free or corruption (out): 0x015cb738 ***
Aborted

./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/dog.jpg 7
Iteration: 0, 1, Segmentation fault

./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/eagle.jpg 13
Iteration: 0, 1, Segmentation fault

※ 犬や鷲の Segmentation faultは画像が大きすぎの時に出るっぽい。

# 悪夢の実行途中で死なない様に画像を小さくリサイズします
# ImageMagick
sudo apt-get -y install imagemagick

# Resize JPEG 352x448=>320x407
convert -resize 320x -quality 100 -verbose data/scream.jpg data/scream_320.jpg

# 320にリサイズしても落ちます。
./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/scream_320.jpg 10
# Iteration: 0, 1, *** Error in `./darknet': double free or corruption (out): 0x018c3738 ***
# Aborted

# Resize JPEG 352x448=>189x240
convert -resize x240 -quality 100 -verbose data/scream.jpg data/scream_x240.jpg
./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/scream_x240.jpg 10
# Iteration: 0, 1, *** Error in `./darknet': munmap_chunk(): invalid pointer: 0x003d1738 ***
# Aborted

# Resize JPEG 768x576=>100x75
convert -resize 100x -quality 100 -verbose data/dog.jpg data/dog_100.jpg
./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/dog_100.jpg 7
# Iteration: 0, 1, *** Error in `./darknet': double free or corruption (!prev): 0x00fd5738 ***
# Aborted

※ 結局動かなかった

● A Smaller Model Nightmare With Darknet
 jnet-conv.weightsも動かなかった
wget http://pjreddie.com/media/files/jnet-conv.weights

#---
./darknet nightmare cfg/jnet-conv.cfg jnet-conv.weights data/horses.jpg 11 -rounds 4 -range 3

   12 Layer before convolutional layer must output image.: Success
darknet: ./src/utils.c:253: error: Assertion `0' failed.
Aborted

wget https://github.com/google/deepdream/raw/master/flowers.jpg
./darknet nightmare cfg/jnet-conv.cfg jnet-conv.weights flowers.jpg 11 -rounds 4 -range 3


● ラズパイで Darknetを動かしてカメラ映像をリアルタイムで物体認識する方法

 X Windowのコマンドラインで下記を実行する。(SSHターミナルでは実行できません)
./darknet detector demo cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights

 darknet detector demo ~を実行すると ラズパイに USB接続した WebCameraで画像を撮影し、Darknetがリアルタイムに物体認識をします。と言うかする筈ですが、私の環境では全く認識しませんでした。

 OpenCVが必要なので Darknet NNPACKを OpenCVを有効にして再ビルドする。
 Makefileの OPENCV=0を OPENCV=1に書き換える。
pi@raspberrypi:~/thomaspark-pkj/darknet-nnpack $ ./darknet detector demo cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights
Demo needs OpenCV for webcam images.

pi@raspberrypi:~/thomaspark-pkj/darknet-nnpack $ cat Makefile | grep OPENCV
OPENCV=0
ifeq ($(OPENCV), 1)
COMMON+= -DOPENCV
CFLAGS+= -DOPENCV

sed -i -e "s/OPENCV=0/OPENCV=1/g" Makefile

make clean
make

# libopencv-devが無いと下記のエラーが出てビルドができない
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
In file included from ./src/utils.h:5:0,
                 from ./src/gemm.c:2:
include/darknet.h:28:43: fatal error: opencv2/highgui/highgui_c.h: No such file or directory
     #include "opencv2/highgui/highgui_c.h"
                                           ^
compilation terminated.
Makefile:99: recipe for target 'obj/gemm.o' failed
make: *** [obj/gemm.o] Error 1

# libopencv-devをインストールする
sudo apt-get -y install libopencv-dev
# Setting up libopencv-dev (2.4.9.1+dfsg1-2) ...

make clean
make

pi@raspberrypi:~/thomaspark-pkj/darknet-nnpack $ ls -l darknet
-rwxr-xr-x 1 pi pi 1707804 Aug 17 12:55 darknet

gcc -Iinclude/ -Isrc/ -DOPENCV `pkg-config --cflags opencv`  -DNNPACK -DARM_NEON -Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -DOPENCV -DNNPACK -DARM_NEON -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize -c ./examples/darknet.c -o obj/darknet.o
gcc -Iinclude/ -Isrc/ -DOPENCV `pkg-config --cflags opencv`  -DNNPACK -DARM_NEON -Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -DOPENCV -DNNPACK -DARM_NEON -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize obj/captcha.o obj/lsd.o obj/super.o obj/art.o obj/tag.o obj/cifar.o obj/go.o obj/rnn.o obj/segmenter.o obj/regressor.o obj/classifier.o obj/coco.o obj/yolo.o obj/detector.o obj/nightmare.o obj/attention.o obj/darknet.o libdarknet.a -o darknet -lm -pthread  `pkg-config --libs opencv`  -lnnpack -lpthreadpool libdarknet.a

pi@raspberrypi:~/thomaspark-pkj/darknet-nnpack $ ./darknet detector demo cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights
Demo
layer     filters    size              input                output
    0 conv     16  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  16
    1 max          2 x 2 / 2   416 x 416 x  16   ->   208 x 208 x  16
    2 conv     32  3 x 3 / 1   208 x 208 x  16   ->   208 x 208 x  32
    3 max          2 x 2 / 2   208 x 208 x  32   ->   104 x 104 x  32
    4 conv     64  3 x 3 / 1   104 x 104 x  32   ->   104 x 104 x  64
    5 max          2 x 2 / 2   104 x 104 x  64   ->    52 x  52 x  64
    6 conv    128  3 x 3 / 1    52 x  52 x  64   ->    52 x  52 x 128
    7 max          2 x 2 / 2    52 x  52 x 128   ->    26 x  26 x 128
    8 conv    256  3 x 3 / 1    26 x  26 x 128   ->    26 x  26 x 256
    9 max          2 x 2 / 2    26 x  26 x 256   ->    13 x  13 x 256
   10 conv    512  3 x 3 / 1    13 x  13 x 256   ->    13 x  13 x 512
   11 max          2 x 2 / 1    13 x  13 x 512   ->    13 x  13 x 512
   12 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   13 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024
   14 conv    125  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 125
   15 detection
mask_scale: Using default '1.000000'
Loading weights from yolov2-tiny-voc.weights...Done!

(Demo:14323): Gtk-WARNING **: cannot open display:
# SSHのターミナルで実行すると上記のエラーが出る
# X Windowのターミナルで実行する必要がある

 認識速度が遅いのでカメラの取り込み画像のサイズを 640x480にする。
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolov2.weights -w640 -h480 -fps1
./darknet detector -w640 -h480 -fps1 demo cfg/coco.data cfg/yolo.cfg yolov2.weights
 上記のオプション指定でなぜか動かないのでソースを直接書き換える。
 ※ darknet-nnpack版も同様
https://github.com/pjreddie/darknet/blob/master/examples/detector.c
    int width = find_int_arg(argc, argv, "-w", 0);
    int height = find_int_arg(argc, argv, "-h", 0);
    int fps = find_int_arg(argc, argv, "-fps", 0);
        demo(cfg, weights, thresh, cam_index, filename, names, classes, frame_skip, prefix, avg, hier_thresh, width, height, fps, fullscreen);

https://github.com/pjreddie/darknet/blob/master/src/demo.c
        if(w){
            cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH, w);
        }
        if(h){
            cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT, h);
        }
        if(frames){
            cvSetCaptureProperty(cap, CV_CAP_PROP_FPS, frames);
        }

 上記のオプション指定でなぜか動かないのでソースを直接書き換える。
darknet/src/demo.c
void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, int classes, int delay, char *prefix, int avg_frames, float hier, int w, int h, int frames, int fullscreen)
{
...
    printf("Demo\n");
printf("Demo\n");の行の下に下記を追加
    w = 640;
    h = 480;
    frames = 1;
...
            cvResizeWindow("Demo", 1352, 1013);
を下記に変更
            cvResizeWindow("Demo", 640, 480);

# yolov2-tiny-voc.weights (61MB)
wget https://pjreddie.com/media/files/yolov2-tiny-voc.weights

wget https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolov2-tiny-voc.cfg
mv yolov2-tiny-voc.cfg ./cfg/

#--- とりあえず静止画で認識を確認する。
./darknet detector test cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights data/person.jpg

#--- カメラの映像をリアルタイムで認識する
./darknet detector demo cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights

#--- 動画ファイルの映像をリアルタイムで認識する
./darknet detector demo cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights video.mov

 OpenCVを有効にすると静止画像の認識でも X Windowの WARNINGが出る。
pi@raspberrypi:~/thomaspark-pkj/darknet-nnpack $ ./darknet detector test cfg/voc.data cfg/yolov2-tiny-voc.cfg yolov2-tiny-voc.weights data/person.jpg
layer     filters    size              input                output
    0 conv     16  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  16
    1 max          2 x 2 / 2   416 x 416 x  16   ->   208 x 208 x  16
    2 conv     32  3 x 3 / 1   208 x 208 x  16   ->   208 x 208 x  32
    3 max          2 x 2 / 2   208 x 208 x  32   ->   104 x 104 x  32
    4 conv     64  3 x 3 / 1   104 x 104 x  32   ->   104 x 104 x  64
    5 max          2 x 2 / 2   104 x 104 x  64   ->    52 x  52 x  64
    6 conv    128  3 x 3 / 1    52 x  52 x  64   ->    52 x  52 x 128
    7 max          2 x 2 / 2    52 x  52 x 128   ->    26 x  26 x 128
    8 conv    256  3 x 3 / 1    26 x  26 x 128   ->    26 x  26 x 256
    9 max          2 x 2 / 2    26 x  26 x 256   ->    13 x  13 x 256
   10 conv    512  3 x 3 / 1    13 x  13 x 256   ->    13 x  13 x 512
   11 max          2 x 2 / 1    13 x  13 x 512   ->    13 x  13 x 512
   12 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   13 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024
   14 conv    125  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 125
   15 detection
mask_scale: Using default '1.000000'
Loading weights from yolov2-tiny-voc.weights...Done!
data/person.jpg: Predicted in 1171 ms.
dog: 53%
person: 73%
sheep: 60%
sheep: 39%

(predictions:14296): Gtk-WARNING **: cannot open display:



Tags: [Raspberry Pi], [電子工作], [ディープラーニング]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

NVIDIA Jetson Nano 開発者キットを買ってみた。メモリ容量 4GB LPDDR4 RAM
NVIDIA Jetson Nano 開発者キットを買ってみた。メモリ容量 4GB LPDDR4 RAM

  Jetson Nanoで TensorFlow PyTorch Caffe/Caffe2 Keras MXNet等を GPUパワーで超高速で動かす!

Raspberry Piでメモリを馬鹿食いするアプリ用に不要なサービスを停止してフリーメモリを増やす方法
Raspberry Piでメモリを馬鹿食いするアプリ用に不要なサービスを停止してフリーメモリを増やす方法

  ラズパイでメモリを沢山使用するビルドやアプリ用に不要なサービス等を停止して使えるメインメモリを増やす

【成功版】最新版の Darknetに digitalbrain79版の Darknet with NNPACKの NNPACK処理を適用する
【成功版】最新版の Darknetに digitalbrain79版の Darknet with NNPACKの NNPACK処理を適用する

  ラズパイで NNPACK対応の最新版の Darknetを動かして超高速で物体検出や DeepDreamの悪夢を見る

【成功版】Raspberry Piで Darknet Neural Network Frameworkをビルドする方法
【成功版】Raspberry Piで Darknet Neural Network Frameworkをビルドする方法

  ラズパイに Darknet Neural Network Frameworkを入れて物体検出や悪夢のグロ画像を生成する

【成功版】Raspberry Piに TensorFlow Deep Learning Frameworkをインストールする方法
【成功版】Raspberry Piに TensorFlow Deep Learning Frameworkをインストールする方法

  ラズパイに TensorFlow Deep Learning Frameworkを入れて Google DeepDreamで悪夢を見る方法

Raspberry Piで TensorFlow Deep Learning Frameworkを自己ビルドする方法
Raspberry Piで TensorFlow Deep Learning Frameworkを自己ビルドする方法

  ラズパイで TensorFlow Deep Learning Frameworkを自己ビルドする方法

Raspberry Piで Caffe Deep Learning Frameworkで物体認識を行なってみるテスト
Raspberry Piで Caffe Deep Learning Frameworkで物体認識を行なってみるテスト

  ラズパイで Caffe Deep Learning Frameworkを動かして物体認識を行なってみる

【ビルド版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning Framework
【ビルド版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning Framework

  ラズパイで Caffe Deep Learning Frameworkをビルドして Deep Dreamを動かしてキモイ絵を生成する

【インストール版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning
【インストール版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning

  ラズパイで Caffe Deep Learning Frameworkをインストールして Deep Dreamを動かしてキモイ絵を生成する

Raspberry Piで Caffe2 Deep Learning Frameworkをソースコードからビルドする方法
Raspberry Piで Caffe2 Deep Learning Frameworkをソースコードからビルドする方法

  ラズパイで Caffe 2 Deep Learning Frameworkをソースコードから自己ビルドする方法

Orange Pi PC 2の 64bitのチカラで DeepDreamしてキモイ絵を高速でモリモリ量産してみるテスト
Orange Pi PC 2の 64bitのチカラで DeepDreamしてキモイ絵を高速でモリモリ量産してみるテスト

  OrangePi PC2に Caffe Deep Learning Frameworkをビルドして Deep Dreamを動かしてキモイ絵を生成する

Raspberry Piに Jupyter Notebookをインストールして拡張子 ipynb形式の IPythonを動かす
Raspberry Piに Jupyter Notebookをインストールして拡張子 ipynb形式の IPythonを動かす

  ラズパイに IPython Notebookをインストールして Google DeepDream dream.ipynbを動かす

Raspberry Piで Deep Learningフレームワーク Chainerをインストールしてみる
Raspberry Piで Deep Learningフレームワーク Chainerをインストールしてみる

  ラズパイに Deep Learningのフレームワーク Chainerを入れてみた

Raspberry Piで DeepBeliefSDKをビルドして画像認識フレームワークを動かす方法
Raspberry Piで DeepBeliefSDKをビルドして画像認識フレームワークを動かす方法

  ラズパイに DeepBeliefSDKを入れて画像の物体認識を行なう

Raspberry Piで Microsoftの ELLをビルドする方法
Raspberry Piで Microsoftの ELLをビルドする方法

  ラズパイで Microsoftの ELL Embedded Learning Libraryをビルドしてみるテスト、ビルドするだけ

Raspberry Piで MXNet port of SSD Single Shot MultiBoxを動かして画像の物体検出をする方法
Raspberry Piで MXNet port of SSD Single Shot MultiBoxを動かして画像の物体検出をする方法

  ラズパイで MXNet port of SSD Single Shot MultiBox Object Detectorで物体検出を行なってみる

Raspberry Piで Apache MXNet Incubatingをビルドする方法
Raspberry Piで Apache MXNet Incubatingをビルドする方法

  ラズパイで Apache MXNet Incubatingをビルドしてみるテスト、ビルドするだけ

Raspberry Piで OpenCVの Haar Cascade Object Detectionでリアルタイムにカメラ映像の顔検出を行なってみる
Raspberry Piで OpenCVの Haar Cascade Object Detectionでリアルタイムにカメラ映像の顔検出を行なってみる

  ラズパイで OpenCVの Haar Cascade Object Detection Face & Eyeでリアルタイムでカメラ映像の顔検出をする方法

Raspberry Piで NNPACKをビルドする方法
Raspberry Piで NNPACKをビルドする方法

  ラズパイで NNPACKをビルドしてみるテスト、ビルドするだけ

Raspberry Pi 3の Linuxコンソール上で使用する各種コマンドまとめ
Raspberry Pi 3の Linuxコンソール上で使用する各種コマンドまとめ

  ラズパイの Raspbian OSのコマンドラインで使用する便利コマンド、負荷試験や CPUシリアル番号の確認方法等も




[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2018 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_build_darknet_nnpack_neural_network_framework/