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

2018/08/18

Raspberry Piに PyTorch Deep Learning Frameworkをソースコードからビルドする方法、DeepDreamでキモイ絵を作成 Raspberry Piに PyTorch Deep Learning Frameworkをソースコードからビルドする方法、DeepDreamでキモイ絵を作成

(ラズパイで PyTorch Torch Deep Learning Frameworkをビルドして Deep Dreamで悪夢を見る方法)

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





● Raspberry Piで PyTorch(Torch)を動かしてキモイ絵を量産する方法

 DeepDreamを作るのには PyTorchと言う Deep Learning Frameworkを使用します。

 Raspberry Piで Torch DeepDreamを動かして一時期流行したキモイ絵を量産します。

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を動かしてキモイ絵を生成する


●今回動かした 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


● Raspberry Piで PyTorch Torch Deep Learning Frameworkを Gitソースリストからビルドする。

PyTorch
 Tensors and Dynamic neural networks in Python with strong GPU acceleration.

pytorch/pytorch - Tensors and Dynamic neural networks in Python with strong GPU acceleration http://pytorch.org

 PyTorchは Caffe2と協力関係に有るとの事。
Caffe2 and PyTorch join forces to create a Research + Production

PyTorch - Installation - From Source

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

# PyTorchのビルドに必要な cmakeをインストールする
sudo apt-get -y install cmake
# Setting up cmake (3.7.2-1) ...

# PyTorchのビルドに必要なパッケージをインストールする
sudo apt-get -y install cython3 m4
# Setting up cython3 (0.25.2-1) ...
# Setting up m4 (1.4.18-1) ...

sudo apt-get -y install libblas-dev libopenblas-dev
# Setting up libblas-dev (3.7.0-2) ...
# Setting up libopenblas-dev (0.2.19-3+rpi1) ...

sudo apt-get -y install libatlas-dev libatlas-base-dev
# Setting up libatlas-dev (3.10.3-1+rpi1) ...
# Setting up libatlas-base-dev (3.10.3-1+rpi1) ...

sudo apt-get -y install python3-dev python3-yaml python3-cffi
# python3-dev is already the newest version (3.5.3-1).
# Setting up python3-yaml (3.12-1) ...
# Setting up python3-cffi (1.9.1-2) ...

# pytorch/pytorch
cd
git clone https://github.com/pytorch/pytorch --depth 1 --recursive

# ディレクトリを移動する
cd pytorch

# PyTorchをビルドする時の環境変数を設定します
export NO_CUDA=1
export NO_DISTRIBUTED=1
# MAX_JOBS=2で PyTorchを 2コアでビルドする
export MAX_JOBS=2

# ビルドする
time python3 setup.py build

--
-- ******** Summary ********
-- General:
--   CMake version         : 3.7.2
--   CMake command         : /usr/bin/cmake
--   Git version           :
--   System                : Linux
--   C++ compiler          : /usr/bin/c++
--   C++ compiler version  : 6.3.0
--   BLAS                  : MKL
--   CXX flags             : --std=c++11  -Wno-deprecated -fvisibility-inlines-hidden -rdynamic -DONNX_NAMESPACE=onnx_torch -D_FORCE_INLINES -D_MWAITXINTRIN_H_INCLUDED -D__STRICT_ANSI__ -fopenmp -O2 -fPIC -Wno-narrowing -Wall -Wextra -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow
--   Build type            : Release
--   Compile definitions   : USE_GCC_ATOMICS=1;HAVE_MMAP=1;_FILE_OFFSET_BITS=64;HAVE_SHM_OPEN=1;HAVE_SHM_UNLINK=1;HAVE_MALLOC_USABLE_SIZE=1
--   CMAKE_PREFIX_PATH     : /usr/lib/python3/dist-packages
--   CMAKE_INSTALL_PREFIX  : /home/pi/pytorch/torch/lib/tmp_install
--
--   BUILD_CAFFE2          : 0
--   BUILD_ATEN            : ON
--   BUILD_BINARY          : OFF
--   BUILD_CUSTOM_PROTOBUF : ON
--     Link local protobuf : ON
--   BUILD_PYTHON          : 0
--   BUILD_SHARED_LIBS     : ON
--   BUILD_TEST            : OFF
--   USE_ASAN              : OFF
--   USE_ATEN              : OFF
--   USE_CUDA              : 0
--   USE_ROCM              : OFF
--   USE_EIGEN_FOR_BLAS    : ON
--   USE_FFMPEG            : OFF
--   USE_GFLAGS            : OFF
--   USE_GLOG              : OFF
--   USE_GLOO              : OFF
--   USE_LEVELDB           : OFF
--   USE_LITE_PROTO        : OFF
--   USE_LMDB              : OFF
--   USE_METAL             : OFF
--   USE_MKL               :
--   USE_MOBILE_OPENGL     : OFF
--   USE_MPI               : OFF
--   USE_NCCL              : OFF
--   USE_NERVANA_GPU       : OFF
--   USE_NNPACK            : 1
--   USE_OBSERVERS         : OFF
--   USE_OPENCL            : OFF
--   USE_OPENCV            : OFF
--   USE_OPENMP            : OFF
--   USE_PROF              : OFF
--   USE_REDIS             : OFF
--   USE_ROCKSDB           : OFF
--   USE_ZMQ               : OFF
--   USE_DISTRIBUTED       : OFF
--   Public Dependencies  :
--   Private Dependencies : nnpack;cpuinfo;onnxifi_loader;rt;gcc_s;gcc;dl
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    CUDNN_INCLUDE_DIR
    CUDNN_LIBRARY
    CUDNN_LIB_DIR

-- Build files have been written to: /home/pi/pytorch/build
+ make install -j2
...
building 'torch._dl' extension
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fdebug-prefix-map=/build/python3.5-RUbMX3/python3.5-3.5.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.5m -c torch/csrc/dl.c -o build/temp.linux-armv7l-3.5/torch/csrc/dl.o
arm-linux-gnueabihf-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,relro -g -fdebug-prefix-map=/build/python3.5-RUbMX3/python3.5-3.5.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-armv7l-3.5/torch/csrc/dl.o -o build/lib.linux-armv7l-3.5/torch/_dl.cpython-35m-arm-linux-gnueabihf.so

real    134m1.056s
user    213m38.536s
sys     4m5.804s


● PyTorchのビルド時間

● MAX_JOBS=2で PyTorchを 2コアでビルドする

 134分(ザックリで 2時間とちょっと)
export MAX_JOBS=2
time python3 setup.py build

real    134m1.056s
user    213m38.536s
sys     4m5.804s

● MAX_JOBS=3で PyTorchを 3コアでビルドする

 112分(ザックリで 2時間以内)
export MAX_JOBS=3
time python3 setup.py build

real    112m39.096s
user    239m34.122s
sys     6m25.651s

※ 1コアでビルドした場合は 200分程度(3時間以上)と考えられます。


●ビルドした PyTorchをインストール

 sudo -Eで環境変数を保持したままインストールのスクリプトを動かす。
 (保持する環境変数は NO_CUDA=1と NO_DISTRIBUTED=1)
sudo -E python3 setup.py install

●動作確認(pytorchディレクトリに居ると import torchに失敗する)

 ImportError: No module named 'torch._C'
pi@raspberrypi:~/pytorch $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pi/pytorch/torch/__init__.py", line 84, in <module>
    from torch._C import *
ImportError: No module named 'torch._C'
>>> quit()

pi@raspberrypi:~/pytorch $ cd
pi@raspberrypi:~ $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.__version__)
0.5.0a0+6bdbad9
>>> quit()


● sudo -E bashで環境変数の引継ぎ具合を確認

● -E有りで sudoを実行した場合(環境変数を引継ぐ)
pi@raspberrypi:~/pytorch $ sudo -E bash
root@raspberrypi:~/pytorch # export
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x HOME="/home/pi"
declare -x INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH="10"
declare -x INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="true"
declare -x INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="100"
declare -x INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH="25"
declare -x INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE="0"
declare -x INFINALITY_FT_BOLD_EMBOLDEN_Y_VALUE="0"
declare -x INFINALITY_FT_BRIGHTNESS="0"
declare -x INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH="0"
declare -x INFINALITY_FT_CONTRAST="0"
declare -x INFINALITY_FT_FILTER_PARAMS="11 22 38 22 11"
declare -x INFINALITY_FT_FRINGE_FILTER_STRENGTH="0"
declare -x INFINALITY_FT_GAMMA_CORRECTION="0 100"
declare -x INFINALITY_FT_GLOBAL_EMBOLDEN_X_VALUE="0"
declare -x INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE="0"
declare -x INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH="0"
declare -x INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="25"
declare -x INFINALITY_FT_STEM_FITTING_STRENGTH="25"
declare -x INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="40"
declare -x INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="true"
declare -x INFINALITY_FT_USE_VARIOUS_TWEAKS="true"
declare -x INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="10"
declare -x LANG="en_GB.UTF-8"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
declare -x MAIL="/var/mail/pi"
declare -x MAX_JOBS="2"
declare -x NO_CUDA="1"
declare -x NO_DISTRIBUTED="1"
declare -x OLDPWD="/home/pi"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x PWD="/home/pi/pytorch"
declare -x SHELL="/bin/bash"
declare -x SHLVL="2"
declare -x SSH_CLIENT="192.168.1.203 4549 22"
declare -x SSH_CONNECTION="192.168.1.203 4549 192.168.1.184 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x SUDO_COMMAND="/bin/bash"
declare -x SUDO_GID="1000"
declare -x SUDO_UID="1000"
declare -x SUDO_USER="pi"
declare -x TERM="xterm"
declare -x TEXTDOMAIN="Linux-PAM"
declare -x USER="root"
declare -x USERNAME="root"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SESSION_ID="c2"
root@raspberrypi:~/pytorch # exit
exit

● -E無しで sudoを実行した場合(環境変数の引継ぎが無い)
pi@raspberrypi:~/pytorch $ sudo bash
root@raspberrypi:/home/pi/pytorch# export
declare -x HOME="/root"
declare -x LANG="en_GB.UTF-8"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
declare -x MAIL="/var/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x PWD="/home/pi/pytorch"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SUDO_COMMAND="/bin/bash"
declare -x SUDO_GID="1000"
declare -x SUDO_UID="1000"
declare -x SUDO_USER="pi"
declare -x TERM="xterm"
declare -x USER="root"
declare -x USERNAME="root"


● torchvisionを Gitのソースリストからビルドする方法

pytorch/vision
 The torchvision package consists of popular datasets, model architectures, and common image transformations for computer vision.

cd
git clone https://github.com/pytorch/vision.git
cd vision

# 不要 python3 setup.py build
sudo python3 setup.py install
# 数分で完了します


● L1aoXingyu/Deep-Dreamで Torchで DeepDreamを動かす

 L1aoXingyu/Deep-Dreamが Torch + Python3で DeepDreamのサンプルなのでこれを動かします。(IPython部分は Pythonの実行コード部分を抜き出して Python単体で動く様にします)

一文理解 Deep Dream 2017-07-09

L1aoXingyu/Deep-Dream
 PyTorch implement of Google Deep Dream

# L1aoXingyu/Deep-Dreamを git cloneでダウンロードする
cd
git clone https://github.com/L1aoXingyu/Deep-Dream.git
cd Deep-Dream

● L1aoXingyu/Deep-Dreamのサンプルに必要なパッケージをインストールする
# ImportError: No module named 'scipy'
sudo apt-get -y install python3-scipy
# Setting up python3-scipy (0.18.1-2) ...

# ImportError: libf77blas.so.3: cannot open shared object file: No such file or directory
sudo apt-get -y install libatlas-base-dev
# Setting up libatlas-base-dev (3.10.3-1+rpi1) ...

● L1aoXingyu/Deep-Dreamのサンプルを改造する
● IPythonを使わないので util.pyの下記の 3行を削除する
util.py
from IPython.display import clear_output, Image, display
display(Image(data=f.getvalue()))
clear_output(wait=True)

●画像の保存処理でファイル名の部分を修正する

 とりあえずで良いのでグローバル変数でファイル名に番号を振ります。(黄色行を変更追加)
util.py(全部)
import PIL.Image
import numpy as np

num = 1
def showarray(a, fmt='jpeg'):
    global num
    a = np.uint8(np.clip(a, 0, 255))
    f = "out_" + str(num) + ".jpg"
    num+=1
    print(f)
    PIL.Image.fromarray(a).save(f, fmt)

def showtensor(a):
    mean = np.array([0.485, 0.456, 0.406]).reshape([1, 1, 3])
    std = np.array([0.229, 0.224, 0.225]).reshape([1, 1, 3])
    inp = a[0, :, :, :]
    inp = inp.transpose(1, 2, 0)
    inp = std * inp + mean
    inp *= 255
    showarray(inp)


● deepdream.pyも変更する

 show_every = 10を 1に変更して 1変更単位で細かく画像を出力する様にします。
 (ラズパイは処理速度が遅いから「動いてる感」が欲しい)
deepdream.py(抜粋)
    show_every = 1

●例によって sedコマンドでサクッと変更する
# util.pyの IPython関係の行を削除
sed '22d' -i util.py
sed '11d' -i util.py
sed '3d' -i util.py

# util.pyの画像の保存処理でファイル名の部分を修正
sed '2d' -i util.py
sed -i '4s/.*/num = 1/' util.py
sed -i '7s/f = BytesIO()/f = "out_" \+ str\(num\+\+\) \+ ".jpg"/' util.py
sed -i -e "7a\    num+=1" util.py
sed -i -e "7a\    print(f)" util.py
sed -i -e "5a\    global num" util.py

# deepdream.pyの画像の保存処理を 1変更単位で細かく画像を出力
sed -i 's/show_every = 10/show_every = 1/' deepdream.py

● show_image.ipynbから DeepDreamの Pythonスクリプトを抜き出す。

 IPython部分は Pythonの実行コード部分を抜き出して Python単体で動く様にします。

show_image.pyの名前で保存する。
import torch
from torchvision import transforms
from PIL import Image
from resnet import resnet50
from deepdream import dream

img_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
input_img = Image.open('./sky.jpg')
input_tensor = img_transform(input_img).unsqueeze(0)
input_np = input_tensor.numpy()

input_img
# load model
# https://download.pytorch.org/models/resnet50-19c8e357.pth
model = resnet50(pretrained=True)
if torch.cuda.is_available():
    model = model.cuda()
for param in model.parameters():
    param.requires_grad = False
dream(model, input_np)

 下記で実行する。
python3 show_image.py

pi@raspberrypi:~/Deep-Dream $ python3 show_image.py
/usr/lib/python3/dist-packages/scipy/ndimage/interpolation.py:568: UserWarning: From scipy 0.13.0, the output shape of zoom() is calculated with round() instead of int() - for these inputs the size of the returned array has changed.
  "the returned array has changed.", UserWarning)
/usr/lib/python3/dist-packages/scipy/ndimage/interpolation.py:571: RuntimeWarning: invalid value encountered in true_divide
  zoom = (numpy.array(input.shape) - 1) / zoom_div
(1, 3, 197, 351)
out_1.jpg
out_2.jpg
out_3.jpg
out_4.jpg
out_5.jpg
out_6.jpg
out_7.jpg
out_8.jpg
out_9.jpg
out_10.jpg
out_11.jpg
out_12.jpg
out_13.jpg
out_14.jpg
out_15.jpg
out_16.jpg
out_17.jpg
Segmentation fault

pi@raspberrypi:~/Deep-Dream $ free -h
              total        used        free      shared  buff/cache   available
Mem:           976M         23M        592M        328K        361M        894M
Swap:          2.0G         24M        2.0G

 freeが 592MBで 800MBを切っています、こういう場合は良く分からないので sudo rebootで「再起動」 します。
sudo reboot

 再起動後、再度実行してみる。
●再起動直後

pi@raspberrypi:~ $ cd Deep-Dream/
pi@raspberrypi:~/Deep-Dream $ free -h
              total        used        free      shared  buff/cache   available
Mem:           976M         28M        878M         12M         69M        888M
Swap:          2.0G          0B        2.0G

pi@raspberrypi:~/Deep-Dream $ python3 hoge.py
/usr/lib/python3/dist-packages/scipy/ndimage/interpolation.py:568: UserWarning: From scipy 0.13.0, the output shape of zoom() is calculated with round() instead of int() - for these inputs the size of the returned array has changed.
  "the returned array has changed.", UserWarning)
/usr/lib/python3/dist-packages/scipy/ndimage/interpolation.py:571: RuntimeWarning: invalid value encountered in true_divide
  zoom = (numpy.array(input.shape) - 1) / zoom_div
(1, 3, 197, 351)
out_1.jpg
out_2.jpg
out_3.jpg
...
out_18.jpg
out_19.jpg
out_20.jpg
(1, 3, 276, 491)
out_21.jpg
out_22.jpg
out_23.jpg
...
out_38.jpg
out_39.jpg
out_40.jpg
(1, 3, 386, 688)
out_41.jpg
out_42.jpg
out_43.jpg
out_44.jpg
out_45.jpg
out_46.jpg
...
 Segmentation faultの発生が無く動き続けました。

 out_60.jpegの次の段階で「メモリ不足」で落ちました。
out_58.jpeg
out_59.jpeg
out_60.jpeg
(1, 3, 540, 963)
Traceback (most recent call last):
  File "hoge.py", line 23, in <module>
    dream(model, input_np)
  File "/home/pi/Deep-Dream/deepdream.py", line 72, in dream
    out = make_step(input_oct, model, control, distance=distance)
  File "/home/pi/Deep-Dream/deepdream.py", line 34, in make_step
    act_value = model.forward(img_variable, end_layer)
  File "/home/pi/Deep-Dream/resnet.py", line 69, in forward
    x = layers[i](x)
  File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py", line 477, in __call__
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/container.py", line 91, in forward
    input = module(input)
  File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py", line 477, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/pi/Deep-Dream/resnet.py", line 41, in forward
    out = self.conv2(out)
  File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py", line 477, in __call__
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/conv.py", line 308, in forward
    self.padding, self.dilation, self.groups)
RuntimeError: $ Torch: not enough memory: you tried to allocate 0GB. Buy new RAM! at /home/pi/pytorch/aten/src/TH/THGeneral.cpp:204

pi@raspberrypi:~/Deep-Dream $ free -h
              total        used        free      shared  buff/cache   available
Mem:           976M         20M        915M        344K         41M        911M
Swap:          2.0G         23M        2.0G

 sky.jpgの画像は 1887x1059で大きいので、サンプル画像の kitten.jpgで動かして落ちるかどうかで落ちる原因が画像サイズに依存するものなのかを確認します。
 生成した画像を確認したら世代毎に画像のサイズが徐々に大きくなっていきます。

 kitten.jpgは 400x266の画像サイズ。
pi@raspberrypi:~/Deep-Dream $ cp guide_image/kitten.jpg sky.jpg

● Deep-Dreamで夢を見た結果

● sky.jpg
・sky_1.jpg
sky_1.jpg


・sky_10.jpg
sky_10.jpg


・sky_20.jpg
sky_20.jpg


・sky_30.jpg
sky_30.jpg


・sky_40.jpg
sky_40.jpg


・sky_50.jpg
sky_50.jpg


・sky_60.jpg
sky_60.jpg



● kitten.jpg
・kitten_1.jpg
kitten_1.jpg


・kitten_10.jpg
kitten_10.jpg


・kitten_20.jpg
kitten_20.jpg


・kitten_30.jpg
kitten_30.jpg


・kitten_40.jpg
kitten_40.jpg


・kitten_50.jpg
kitten_50.jpg


・kitten_60.jpg
kitten_60.jpg


・kitten_70.jpg
kitten_70.jpg


・kitten_80.jpg
kitten_80.jpg


・kitten_90.jpg
kitten_90.jpg


・kitten_100.jpg
kitten_100.jpg


・kitten_110.jpg
kitten_110.jpg


・kitten_120.jpg
kitten_120.jpg





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で NNPACK対応版の Darknet Neural Network Frameworkをビルドする方法
【成功版】Raspberry Piで NNPACK対応版の Darknet Neural Network Frameworkをビルドする方法

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

【成功版】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_pytorch_deep_learning_framework/