14
20

More than 3 years have passed since last update.

ラズパイ4を買ったのでからあげ本をやってみた その1

Last updated at Posted at 2021-08-01

重い腰をあげてようやくラズパイ4を購入したので、機械学習をやろうと思い、からあげ本をやってみたときの備忘録です。

環境は以下になります。

  • OS:ubuntu 20.04
  • docker:20.10.7
  • ラズパイ4 メモリ8GB
  • web camera: Logitech C270

OSは etcher で焼いて使用しています。
https://www.balena.io/etcher/

作成したものはコチラ にあります。
docker イメージもdocker hubにはpushしてあります。

docker をインストール

自分の場合は基本的にクリーンな環境でやりたいこともあるのですが、セットアップにあれこれ時間がかかるのはどうだろうなぁということと、インストール手順とか忘れてしまうのでコードで残せるように基本的にdockerを使って色々やっています。

ubuntuの場合、一番簡単なのは以下かなぁと思っていつも最初に実行してインストールします。

$ curl -L https://get.docker.com | sudo bash

dockerイメージの作成

現状tensorflowのバージョンとしては2.5.0が最新っぽいのでコレを使用します。
tensorflowのページを見ながらビルドもしてみたのですが、うまくいかなかったので
最終的には @PINTO さんの使用させていただきました。
感謝です!!
https://github.com/PINTO0309/Tensorflow-bin

2.5.0 のものは↓を使用しました。
https://github.com/PINTO0309/Tensorflow-bin/blob/main/tensorflow-2.5.0-cp38-none-linux_aarch64_download.sh

コチラを使用したDockerfileは以下になります。

FROM ubuntu:20.04

ENV WORKUSER jupyter
ARG LOCALUID=1000
ARG LOCALGID=1000
ARG DEBIAN_FRONTEND=noninteractive

RUN apt update \
    && apt upgrade -y \
    && groupadd --gid $LOCALGID $WORKUSER \
    && useradd --uid $LOCALUID --gid $WORKUSER --shell /bin/bash --create-home $WORKUSER \
    && gpasswd -a $WORKUSER video \
    && apt install -y \
    curl \
    cython3 \
    gcc \
    gfortran \
    git \
    libatlas-base-dev \
    libatlas-base-dev \
    libatlas3-base \
    libblas-dev \
    libc-ares-dev \
    libeigen3-dev \
    libgfortran5 \
    libhdf5-dev \
    liblapack-dev \
    libopenblas-base \
    libopenblas-dev \
    libopencv-dev \
    libopenmpi-dev \
    openmpi-bin \
    python3-dev \
    python3-pip \
    tmux \
    vim \
        v4l-utils\
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /home/$WORKUSER
USER $WORKUSER

RUN pip3 install pip --upgrade \
    && curl -LO "https://raw.githubusercontent.com/PINTO0309/Tensorflow-bin/main/tensorflow-2.5.0-cp38-none-linux_aarch64_download.sh" \
    && bash ./tensorflow-2.5.0-cp38-none-linux_aarch64_download.sh  \
    && pip3 install tensorflow-2.5.0-cp38-none-linux_aarch64.whl \
    && pip3 install -U --user six==1.15.0 wheel mock \
    && pip3 install pybind11  \
    && pip3 install keras_applications==1.0.8 --no-deps  \
    && pip3 install keras_preprocessing==1.1.0 --no-deps  \
    && pip3 install -U pandas \
    && pip3 install -U numpy==1.20.3 \
    && pip3 install -U opencv-python \
    && pip3 install -U jupyterlab \
    && pip3 install -U matplotlib \
    && pip3 install -U scipy \
    && pip3 install -U sklearn \
    && pip3 install -U seaborn \
    && rm tensorflow-2.5.0-cp38-none-linux_aarch64.whl \
    && rm tensorflow-2.5.0-cp38-none-linux_aarch64_download.sh \
    && rm -rf ~/.cache/pip

COPY ./jupyterlab/entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--no-browser"]

基本的には、Example of Python 3.x + Tensorflow v2 seriesをベースにDockerfileを作成していたのですが、作成するときにも色々手こずりました。
躓いたところを以下に書いていきたいと思います。

python公式の3.8系のdockerイメージだと何故かインストールに失敗する

最初はpython公式の3.8系のdockerイメージをベースにパッケージをインストールしていけばいいと思っていたのですが、どうもうまくいきません。

ちゃんと調べれてないですけど、@PINTO さんのところでも、tensorflow-2.5.0-cp38-none-linux_aarch64.whl はubuntu 20.04 と書いてあるので、python公式のdockerイメージはdebian busterなのでだめだったのかも。

tensorflow-2.5.0-cp38-none-linux_aarch64.whlを入れるとnumpyが1.19のバージョンになる

tensorflow-2.5.0-cp38-none-linux_aarch64.whlを入れるとnumpyのバージョンが1.19.5 が入ります。
ですが、動かすためには1.20系をインストールする必要があるようです。

そのため、最初にtensorflow-2.5.0-cp38-none-linux_aarch64.whl をインストールし、その後1.20.3のバージョンのnumpyをインストールするようにしています。

webカメラがOpenCV で開けない

これは、うーんと悩んでたんですけど、よくよく考えてみると、作成したjupyterユーザがvideoグループに属していないためでした。(たぶん)
なので、作成したjupyterユーザをvideoグループに追加しています。

まとめ

これでようやくラズパイ上で機械学習ができるようになりました。
docker化したので、とりあえずdockerだけ入れておけばサクッとお試しで動かせるようにできたかなと思います。

まだ、からあげ本のチャプター2の1しか試せていないので、ほかも試していきたいと思います。
jupyterlab 上でwebカメラをリアルタイムで表示するのってどうするんだろう。。。

ここまでお付き合いしていただきありがとうございます。

14
20
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
20