2019年11月26日火曜日

Raspberry PiへのNode-REDインストールとバージョンアップ

【インストール】
$ sudo apt-get install nodered
$ update-nodejs-and-nodered

参考:Raspberry PiにNode-REDをインストールする


【バージョンアップ】
1.バージョンの確認
$ node-red-pi --max-old-space-size=256
3 Feb 11:27:31 - [info]

Welcome to Node-RED
===================

3 Feb 11:27:31 - [info] Node-RED version: v0.17.4
3 Feb 11:27:31 - [info] Node.js  version: v4.8.2
3 Feb 11:27:31 - [info] Linux 4.9.79-v7+ arm LE

2.$ upgdate-nodejs-and-nodered
30分ほど待つ。

3.再度1.を入力してバージョンが上がっていることを確認する。

 参考:Node-REDアップデート


Raspberry Piの固定IPアドレス設定

/etc/dhcpcd.confを例えば、以下の様に編集する

interface eth0
static ip_address=IP Address/subnetMask
static routers=GateWay Address
static domain_name_servers=DNS address
例)
interface eth0
static ip_address=192.168.0.254/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

ここでsubnetmaskについては
/24:255.255.255.0
/16:255.255.0.0
 となるので、注意。

後は「shutdown -r now」でリブートしてやる。

参考:Raspberry Piの固定IPアドレスの設定

2019年11月25日月曜日

給油(アウトバック)

レギュラーガソリン54.45L給油。133円/L。ODO:64183km, Trip:470.3km。8.64km/L

Node-RED:パレットの追加

パレットの管理→ノードを追加→追加したいパレットを記入して「ノードを追加」を押す。



2019年10月3日木曜日

Node-REDのインストール方法

【Node-REDのインストール方法】

1.node.jsをダウンロードし、インストールする。

2.windows powershellを起動し、「node --version; npm --version」と入力して、「v10.16.3 6.11.3」とバージョンが返ってくるかどうか確認をする。

3.powershellから「npm install -g --unsafe-perm node-red」と記入し、インストールを行う。



【Node-REDの起動方法】
1. powershellから「node-red」と入力。
(node-redが立ち上がったら、そのshellは閉じない)

2.firefoxのアドレスに「 http://localhost:1880」と入力。

3.停止するときはpowershellで「Ctrl+C」を入力。





参考リンク
Windowsで実行する : Node-RED日本ユーザ会
Node-REDをインストールする

2019年9月19日木曜日

給油(アウトバック)

レギュラーガソリン51.01L給油。129円/L。ODO:63713km, Trip:462.4km。9.06km/L

2019年8月24日土曜日

Pycharmコマンドラインでの引数の設定

Pycharmでpyファイルを走らせるときに、引数を設定したいときは
メニューファイルのRunの下にある「Edit Configuration」をクリックし、Script Pathの下の「Parameters」に書き込む。

参考リンク

Pycharmへのopencvのインストール

Pycharmにopen cvをインストールするときにcv2はインストールできないので、opencv-pythonをインストールする。インストール後はcv2で読みだすことができる。

参考リンク

2019年8月8日木曜日

SONY NNC: ver1.50起動

SONY NNC ver1.50が起動しないトラブル(ただ、同じPCにインストールしているver 1.40は普通に起動する。)があったが、Python3.6から3.7にアップデートして、何度かver1.50を起動しているうちに、普通に計算できるようになっていた。

2019年8月4日日曜日

SONY NNC:cli.py(バージョン1.40)

import argparse
import sys
import warnings
warnings.filterwarnings("ignore", message="numpy.dtype size changed")


def _nnabla_version():
    import nnabla
    return 'Version {}'.format(nnabla.__version__) + \
           ', ' + \
           'Build {}'.format(nnabla.__build_number__)


def version_command(args):
    print(_nnabla_version())


return_value = None


def main():
    global return_value
    import six.moves._thread as thread
    import threading
    thread.stack_size(128 * 1024 * 1024)
    sys.setrecursionlimit(0x3fffffff)
    main_thread = threading.Thread(target=cli_main)
    main_thread.start()
    main_thread.join()
    if not return_value:
        sys.exit(-1)


def cli_main():
    global return_value
    return_value = False

    import nnabla
    parser = argparse.ArgumentParser(description='Command line interface ' +
                                     'for NNabla({})'.format(_nnabla_version()))
    parser.add_argument(
        '-m', '--mpi', help='exec with mpi.', action='store_true')

    subparsers = parser.add_subparsers()

    from nnabla.utils.cli.train import add_train_command
    add_train_command(subparsers)

    from nnabla.utils.cli.forward import add_infer_command, add_forward_command
    add_infer_command(subparsers)
    add_forward_command(subparsers)

    from nnabla.utils.cli.encode_decode_param import add_decode_param_command, add_encode_param_command
    add_encode_param_command(subparsers)
    add_decode_param_command(subparsers)

    from nnabla.utils.cli.profile import add_profile_command
    add_profile_command(subparsers)

    from nnabla.utils.cli.conv_dataset import add_conv_dataset_command
    add_conv_dataset_command(subparsers)

    from nnabla.utils.cli.compare_with_cpu import add_compare_with_cpu_command
    add_compare_with_cpu_command(subparsers)

    from nnabla.utils.cli.create_image_classification_dataset import add_create_image_classification_dataset_command
    add_create_image_classification_dataset_command(subparsers)

    from nnabla.utils.cli.uploader import add_upload_command
    add_upload_command(subparsers)

    from nnabla.utils.cli.uploader import add_create_tar_command
    add_create_tar_command(subparsers)

    from nnabla.utils.cli.convert import add_convert_command
    add_convert_command(subparsers)

    from nnabla.utils.cli.func_info import add_function_info_command
    add_function_info_command(subparsers)

    from nnabla.utils.cli.plot import (
        add_plot_series_command, add_plot_timer_command)
    add_plot_series_command(subparsers)
    add_plot_timer_command(subparsers)

    from nnabla.utils.cli.draw_graph import add_draw_graph_command
    add_draw_graph_command(subparsers)

    # Version
    subparser = subparsers.add_parser(
        'version', help='Print version and build number.')
    subparser.set_defaults(func=version_command)

    print('NNabla command line interface (Version {}, Build {})'.format(
        nnabla.__version__, nnabla.__build_number__))

    args = parser.parse_args()

    if 'func' not in args:
        parser.print_help(sys.stderr)
        return

    if args.mpi:
        from nnabla.utils.communicator_util import create_communicator
        comm = create_communicator()
        try:
            return_value = args.func(args)
        except:
            import traceback
            print(traceback.format_exc())
            comm.abort()
    else:
        try:
            return_value = args.func(args)
        except:
            import traceback
            print(traceback.format_exc())
            return_value = False


if __name__ == '__main__':
    main()

SONY NNC:cli.py(バージョン1.50)

【バージョン1.50】
import argpars
import sys
import warnings
warnings.filterwarnings("ignore", message="numpy.dtype size changed")


def _nnabla_version():
    import nnabla
    import nnabla.utils.callback as callback
    version_string = 'Version:{}, Build:{}'.format(nnabla.__version__,
                                                   nnabla.__build_number__)
    callback_version_string = callback.get_callback_version()
    if callback_version_string is not None:
        version_string += ', Callback:{}'.format(callback_version_string)
    return version_string


def version_command(args):
    print(_nnabla_version())


return_value = None


def main():
    global return_value
    import six.moves._thread as thread
    import threading
    thread.stack_size(128 * 1024 * 1024)
    sys.setrecursionlimit(0x3fffffff)
    main_thread = threading.Thread(target=cli_main)
    main_thread.start()
    main_thread.join()
    if not return_value:
        sys.exit(-1)


def cli_main():
    global return_value
    return_value = False

    parser = argparse.ArgumentParser(description='Command line interface ' +
                                     'for NNabla({})'.format(_nnabla_version()))
    parser.add_argument(
        '-m', '--mpi', help='exec with mpi.', action='store_true')

    subparsers = parser.add_subparsers()

    import nnabla
    from nnabla.utils.cli.train import add_train_command
    add_train_command(subparsers)

    from nnabla.utils.cli.forward import add_infer_command, add_forward_command
    add_infer_command(subparsers)
    add_forward_command(subparsers)

    from nnabla.utils.cli.encode_decode_param import add_decode_param_command, add_encode_param_command
    add_encode_param_command(subparsers)
    add_decode_param_command(subparsers)

    from nnabla.utils.cli.profile import add_profile_command
    add_profile_command(subparsers)

    from nnabla.utils.cli.conv_dataset import add_conv_dataset_command
    add_conv_dataset_command(subparsers)

    from nnabla.utils.cli.compare_with_cpu import add_compare_with_cpu_command
    add_compare_with_cpu_command(subparsers)

    from nnabla.utils.cli.create_image_classification_dataset import add_create_image_classification_dataset_command
    add_create_image_classification_dataset_command(subparsers)

    from nnabla.utils.cli.uploader import add_upload_command
    add_upload_command(subparsers)

    from nnabla.utils.cli.uploader import add_create_tar_command
    add_create_tar_command(subparsers)

    from nnabla.utils.cli.convert import add_convert_command
    add_convert_command(subparsers)

    from nnabla.utils.cli.func_info import add_function_info_command
    add_function_info_command(subparsers)

    from nnabla.utils.cli.plot import (
        add_plot_series_command, add_plot_timer_command)
    add_plot_series_command(subparsers)
    add_plot_timer_command(subparsers)

    from nnabla.utils.cli.draw_graph import add_draw_graph_command
    add_draw_graph_command(subparsers)

    # Version
    subparser = subparsers.add_parser(
        'version', help='Print version and build number.')
    subparser.set_defaults(func=version_command)

    print('NNabla command line interface ({})'.format(_nnabla_version()))

    args = parser.parse_args()

    if 'func' not in args:
        parser.print_help(sys.stderr)
        sys.exit(-1)

    if args.mpi:
        from nnabla.utils.communicator_util import create_communicator
        comm = create_communicator()
        try:
            return_value = args.func(args)
        except:
            import traceback
            print(traceback.format_exc())
            comm.abort()
    else:
        try:
            return_value = args.func(args)
        except:
            import traceback
            print(traceback.format_exc())
            return_value = False
            sys.exit(-1)


if __name__ == '__main__':
    main()


Birdyのスプリング交換

Birdyのフロントスプリングとリアエラストマーを両方ともデフォルトのミディアムからハードに交換した。沈み込みが減った。

2019年8月1日木曜日

sony nnc version 1.50をインストールできない

sony nncの新しいバージョン1.50が公開されたので、ダウンロードしてインストールしたところ、インストール自体はできるが、起動させると以下のようなエラーメッセージが表示された。
Traceback (most recent call last):
  File "C:\sony_nnc\neural_network_console_150\libs\scripts\plugin.py", line 5, in <module>
    from nnabla import logger
  File "C:\sony_nnc\neural_network_console_150\libs\nnabla\python\src\nnabla\__init__.py", line 31, in <module>
    from .variable import Variable, Context
  File "C:\sony_nnc\neural_network_console_150\libs\nnabla\python\src\nnabla\variable.py", line 17, in <module>
    from ._variable import Context
  File "_nd_array.pxd", line 64, in init nnabla._variable
  File "__init__.pxd", line 918, in init nnabla._nd_array
ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 from C header, got 192 from PyObject
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "_init.pyx", line 56, in nnabla._init.finalize
SystemError: Parent module 'nnabla' not loaded, cannot perform relative import

visual stodioのバージョンを2017から2015に移してもだめだった。

2019年7月28日日曜日

Open CVの例

import cv2

img_src = cv2.imread("./bicycle.jpg",1)
img_gray=cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)

thresh = 100max_pixel= 255ret, img_dst = cv2.threshold(img_gray, thresh, max_pixel,cv2.THRESH_BINARY)

cv2.imshow("Show BINARIZATION Image", img_dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

2019年7月21日日曜日

SONY NNC:DATA SETの作り方

左上のメニューから「TRAINING」をクリックし、次に右上側の「DATA SET」をクリックする。次に、画面上の方で、赤四角で囲った部分をクリック(OPEN DATASET)し(図1)、次に「Create Dataset」を選ぶ(図2)。
図1

図2

 次に図3のような画面がでるので、下記を参考にファイルの場所等を指定する。
図3


Source Dir
画像が置いてあるディレクトリ。そのなかに画像の種類ごとに分別してその種類ごとにフォルダに入れて置いておく。

Output Dir
ここに処理された画像とCSV形式の設定ファイルが置かれるので、空のディレクトリを作って指定してやる。

Shaping Mode(画像サイズを揃えるための処理)
Trimming:画像周辺の領域を削ってサイズを整える。
Padding:画像の空白部分にダミーの値(0)を入れてサイズを整える。
Resize: 画像を縦横に適当に引き延ばしてサイズを整える。

Output Color Ch
モノクロだったら1、カラー(RGB)だったら3。1 or 3はNNCのInputの設定をあわせる。

Output width Output height
適当な値を設定する。NNCのInputの設定をあわせる。

Shuffle the order of the data
画像の順番をランダムにするかどうか。通常はチェックを入れる。

Output file1 Output file2
Outputのファイル名(train fileとtest file)。デフォルトは両社の割合が100:0になっているが、通常は70:30 ~ 80:20 ぐらいにしておく。これはデータのうち、70%を使って学習し、残りの30%を使って検証するという意味。

2019年7月18日木曜日

SONY NNC:01_logistic_regression.sdcproj


01_logistic_regression.sdcproj: ロジスティック回帰を用いて、数字の49を判別させる。
datasetについて、Trainingは「small_mnist_4or9_training.csv」、Validationは「small_mnist_4or9_test.csv」を用いた。
 
  

Input (IO Layer)
 

Size: 画像入力の場合、「色数、高さ、幅」のフォーマットで表されるので、この場合モノクロで、28×28の画像サイズの入力を示す。

Dataset: データが入っている変数(x)。この場合、datasetで見るとx:imageのところに画像が入っていることが分かる。


Affine (Basic Layer)
 
Affine変換を用いた全結合層

人工ニューロンは
y=f(Σwx+b)と表現されるが、この()内がAffineであり、fの部分が活性化関数となる。

なので、おおまかな流れとしては判別対象が2つの場合は「Affine」「sigmoid」「binary cross entropy」となり、最終的な識別対象が2個以上の場合は「Affine」「softmax」「multicategory cross entropy」となる。


 

Sigmoid(Activation Layer)
 
 Sigmoid関数によるアウトプット。Affine変換を使って28×28の行列は内積計算しているので、Inputは1つ、Output1つの活性化関数となる。





 BinaryCrossEntropy (Loss layer)

 

 Input:1(値は0~1の間を取り、0に近いと数字4の確率が上がり、1に近いと数字9の確率が上がる。)

T.Dataset: データセットに含まれる変数のうち、このレイヤーの出力として期待する変数の変数名を指定します。

T.Generator:データセットの変わりに用いるGeneratorを指定。この場合、Noneなのでデータ生成を行わない。

T.GeneratorMultiplier:Generatorにより生成した値に対して掛ける係数を指定する。この場合、1となっている。(0に設定しても計算できていた。)