2021年12月19日日曜日

Raspberry iの環境構築

 raspberry Piの環境構築

先のブログに書きましたが、Freenove 4WD Smart Car Kitを買っちゃいました。以前のMindstormsの時にもRaspberry Piの設定について書きましたが、設定内容が少し変わったので、ここでおさらいの意味も含めてもう一度書いておきます。

1.raspberry Pi OSをインストール

Raspberry Pi OSのインストールですが、前回と同じくRaspberry Pi Imagerを使ってmicroSDに書き込みます。

PaspberryPiのホームページからRaspberry Pi Imagerをダウンロードします。


インストール後、Raspberry Pi Imagerを開きます。
インストールするPaspberry Pi OSですが、現行のBullseye版の前のBuster版にしました。理由はチュートリアルでもBullseye版ではパッチを当てる必要があったり、また記事でも不具合が生じる可能性も示唆されていたからです。

Buster版のRaspberry Piはここからダウンロードしました。
2021-05-07-raspios-buster-armhf-full.zipをダウンロードします。

Raspberry Pi ImagerのCHOSE OSで下のUse customを選び、先程ダウンロードしたファイルを選択します。



次にCHOOSE SD CARDでPCに接続したSDカードを選択し、WRITEで書込みを実施します。

SDカードにOSのインストールが完了したら次は、このSDカードに次の2つを付け加えます。
2.SSH有効化
3.WiFiの有効化

2.SSH有効化

RaspberryPiにアクセスするために、通信環境(SSH通信)を整備します。

sshという名前の空のフォルダーを作成します。

このフォルダーをSDカードのルートディレクトリーにコピーします。これでSSHの準備完了です。


3.WiFiの有効化

次にWiFiが使えるように設定します。
テキストエディタを使って下記を書き込み、wpa_supplicant.confという名前で保存してください。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
country=JP
update_config=1

network={
    ssid="ssd"
    psk="pwd"
    key_mgmt=WPA-PSK
}

ここで、

ssid="ssid"の""で囲まれた部分は、自宅で使っているWiFiのSSID
psk="pwd"のpwd部分は使っているWiFiのパスワード

に書き換えて、sshファイルと同じくOSを書き込んだSDカードにコピーしてください。

これでWIFIの準備も完了です。
作成したSDカードをPaspberry Piに挿入してください。


4.SSH接続

バッテリーを繋げるとRaspberry Pi OSが起動します。

a)LANケーブルでのSSH接続
テキストではPCとLANケーブルで接続とありますが、同一ネットワーク上であれば何処でもOKです。
ターミナルを開きssh pi@raspberrypi.localを入力します。
パスワードを要求されるのでraspberryと入力します。

下記のように表示されればssh接続でRaspberry Piにログインできました。

b)無線でのSSH接続
先程のLANケーブルを抜いておきます。
はじめにPアドレスを特定する必要があります。ターミナルを開きping raspberrypi.localを入力します。
画面にraspberrypiのIPアドレスが表示されます。今回は192.168.1.8でした。このIPアドレスは接続の度に変わりますので注意が必要です。なこのIPアドレスは、接続の度に変わると厄介なので固定することもできます。
先程のIPアドレスを使って、ターミナルからssh pi@192.168.1.8と入力します。

yes/noを聞いてくることがあるのでyes
下の画面が出てくればRaspberryPiとの接続完了です。

5.VNC接続
VNC接続はラズパイ(raspberry pi)の初期設定をするよに解りやすく載っていて簡単にできます。

1.PaspberryPiの設定
  • ターミナル(Macの場合)からping raspberrypi.localと入力しRaspberryPiのIPアドレスを確認します。


    この例では、192.168.1.9でした。

  • 同じくターミナルからssh pi@192.168.1.9と入力し、ssh接続をします。
    IPアドレスはそれぞれの環境で異なります。
    もし、WARNINGが出たら過去に接続した記録が残っているそうです。設定を一度削除します。


    ターミナルからssh-keygen -R 192.168.1.9と入力し、設定を一度消去後に再度ssh pi@192.168.1.9と入力してssh接続を確立します。

  • ターミナルからsudo raspi-configと入力し、RaspberryPiの設定画面を開きます。

  • 3のInternet Optionを選択し、P3のVNC選択、yesと進みます。
  • 1のSystem Optionを選択し、S5のBoot/Auto Login選択、B4のDesktop Autologin選択。この設定をしないとVNC接続ができないとの事。

  • 2のDisplay Optionを選択し、D1のResolution選択、リモート接続した際のRaspberryPiの画面設定を行います。

  • 8のUpdateを選択し、Finishで終了です。

  • ターミナルからsudo rebootと入力しRaspberryPiを再起動します。


2.PCにVNCアプリ「VNC Viewer」をインストール

VNC CONNECT画面で、RaspberryPiのIPアドレス192.168.1.9を入力すれば接続完了です。

Username:pi
Password:raspberry

です。


6.IPアドレスの固定

RaspberryPiを繋げるたびにIPアドレスが変わってしまうのでは、毎回IPアドレスを調べ直さないといけないので結構手間がかかります。

そこでIPアドレスを固定化しておくことにします。RaspberryPiに使うアドレスは、その他のデバイスとバッティングしない、バッティングする可能性の無いものを使う必要があります。

まず、自分のゲートウェイを確認します。macの場合ターミナルから
route -n get 0.0.0.0と入力します。

私の環境でゲートウェイは192.168.1.1であることがわかりました。

IPアドレス固定の方法もいくつかありますが、ここではラズパイ(Raspberry Pi)を固定IPアドレス化する方法を参考にしました。

RaspberryPiをVNC接続し画面右上のネットワークアイコンを右クリック、表示されたポップアップメニューから"Wireles & Wired Network Setting"をクリックします。

interface右の空のプルダウンメニューをクリックします。有線LANの場合はeth0、無線LANの場合はwlan0を選択します。

"automatically configure empty options"のチェックを外し、IPアドレスを下記のように入力します。

私の場合、Raspberry Piの固定IPアドレスを192.168.1.211としました。そしてRouter、DNS Serversに先ほど調べたゲートウェイのアドレスを入れます。

全てが終了したら再起動して設定を反映させます。


7.RDP接続

VNC接続の場合画面解像度の設定変更が出来なかったり、反応が悪かったり、不便を感じることが多いのですが、RDP接続の場合そういった問題を解決してくれます。
Raspberry Piにリモートデスクトップ接続する(xrdpのインストール)を参考にしました。

Raspberry PiをVNC接続しターミナルから下記を入力し、xrdpソフトをインストールします。

$ sudo apt-get update
$ sudo apt-get install xrdp

Macの場合、App Storeから"Microsoft Remote Desktop"を入手します。

このクライアントソフトを起動し、新しい接続(add PC)を開き、PC name欄にIPアドレスを入力して設定完了です。


8.Python3の設定

おそらくRaspberrypiの初期値ではPythonはPython2の設定になっていると思うので、これをPython3に設定変更する必要があります。

pi@raspberrypy:~$ python

でおそらくpython 2.7が表示されると思います。

cd /usr/bin

sudo rm python

sudo ln -s python3 python

pythonを終了するために Ctrl-Z

python

でpython 3.***が表示されれば設定終了


9.日本語で入力できる設定

日本語が入力できるように設定します。下記を参考にしました。

Raspberry Piに日本語で入力できる設定方法(fcitx-mozc)





2021年12月12日日曜日

Freenove 4WD Smart Car Kit買っちゃいました

 



demoのライントレースのどうがです。

コースは mindstormsでお馴染みのものです。


Myオリジナルコースです。


aspberry pi、リチウム電池はは別途要りますが、本体も7千円弱と安く、pythonで遊ぶのであればmindstormsより断然こちらかなと思います。
アフレルのchainerでAIの様な事が出来れば最高ですね。




2021年12月5日日曜日

Image Classificationにおける元画像の大きさと精度(accuracy)との関係について

今までもPyTorchやfast.aiを使ってImage Classificationを行ってきました。

1つ気になったのが、trainingに使う画像が大きいと、それだけデータ量も多いのだから精度も良くなるのではと言う単純な思いです。そこで確認してみました。

テストの条件は、

・データセットはcifar-10。cifar-10はライブラリーにもありますが、ここでは一度cifar-10をpng形式の画像データに変換したものを使いました。

・fast.aiを使ってresnet18でfine-tuningする。

・DataLoaderは簡単に下記のようにしました。この設定を取敢えずnormal設定とします。
画像サイズは、元の32,64,96,128,224の7種類で検証

 dls=ImageDataLoaders.from_folder(
     path, 
     train='train',
     valid='val',
     bs = 64,
     item_tfms=Resize(160), ⇒ここでサイズを32~224に変更する
     batch_tfms=aug_transforms(),
     seed=123
)

cifar10の32pixのデータ画像



【結果】

32pixの例
epochtrain_lossvalid_lossaccuracytime
01.1776621.0656850.62360001:40
10.9391810.8558660.70190001:42
20.8141380.7357280.74920001:42
30.7176460.6443040.78090001:41
40.6269320.6063300.79260001:42
50.6031020.5930750.80050001:42
60.5150810.5544300.81100001:42
70.4881680.5541700.81190001:43
80.4398750.5499190.81670001:43
90.4493610.5468510.81690001:44




























32~224pixでtrainingした結果は次の通りでした。

Image sizenormalp設定のaccuracy
320.8169
640.8983
960.9334
1280.9435
1600.9483
2240.9483








●当初予想したように画像サイズが大きくなればaccuracyも高まることが確認されました。
ただそれもサイズが128pix以上ではほぼフラットになっています。