OSSライセンスについて

OSSライセンス概要

  • OSSライセンスについての、自分用のまとめです
  • 正確な情報は、各ライセンスの原文等を参照する必要あり

概要

カテゴリ ライセンス 複製/再頒布 改変 改変部分のソース公開 他部分のソース公開
CopyLeft GNU General Public License v3.0 OK OK 必要 必要
CopyLeft Mozilla Public License 2.0 OK OK 必要 不要
CopyLeft Apache License 2.0 OK OK 不要 不要
CopyLeft MIT License OK OK 不要 不要
CopyLeft BSD 2-Clause "Simplified" License OK OK 不要 不要
CopyLeft BSD 3-Clause "New" or "Revised" License OK OK 不要 不要

ライセンスの大まかな概要

  • コピーレフト
    • 著作権は保持したまま、誰でも複製/再配布/改変できる
    • 利用側のソフトも、同様のライセンスを適用する必要
    • 改変部分および、他の部分もソースコードの開示が必要
  • コピーレフト
    • コピーレフトに対し、以下が異なる
      • 派生ソフトは、同じライセンスが適用
      • 他のソフトと組み合わせた場合、ライセンスの適用は要求しない
  • コピーレフト
    • コピーレフトに対し、以下が異なる
      • 派生ソフトに、同じライセンスの適用は要求しない
      • 他のソフトと組み合わせた場合、ライセンスの適用は要求しない
  • 共通
    • 無保証(免責条項あり)
    • 派生ソフト頒布時、利用元のOSSライセンス表示を要掲載(著作権/ライセンス文/免責条項)
      • ソースとして頒布時:特にアクション不要(利用元ソースにこれらが含まれているため)
      • バイナリとして頒布時:ライセンス表示を含むファイル(COPYINGやLICENSE等のファイル)を要提供

リンク

NN学習の試行回数による変化

NN学習の試行回数による変化

概要

  • NNの学習について、試行回数を重ねていくと、結果がどの程度変動するかを調べる
    • 簡単なネットワーク、畳み込みネットワークでやってみる
    • 乱数シードを固定した場合もやってみる
    • 異常データを含む場合にどうなるかもやってみる(ラベルをランダム値に変更することで模擬)
  • 結果
    • 10回繰り返しの結果として、単純なMNISTではほとんど差異がなかった
    • また、CNNでも同様の結果となった
    • 乱数シードを固定することで、ばらつきはなくなる
    • また、3つに1つの割合で、ラベルをランダム値に変更した場合、試行ごとのばらつきが、正常データのみの場合に比べて大きい結果となった

環境

  • Python : ver3.8.5
  • TensorFlow : ver2.3.1

結果詳細

単純なニューラルネットワークの場合

[試行ごとの学習の精度変化] f:id:storikai:20201031215947p:plain [試行ごとの学習の損失関数変化] f:id:storikai:20201031220006p:plain

[試行ごとの評価の精度変化] f:id:storikai:20201031220023p:plain [試行ごとの評価の損失関数変化] f:id:storikai:20201031220037p:plain

CNNの場合

[試行ごとの学習の精度変化] f:id:storikai:20201031220054p:plain [試行ごとの学習の損失関数変化] f:id:storikai:20201031220108p:plain

[試行ごとの評価の精度変化] f:id:storikai:20201031220124p:plain [試行ごとの評価の損失関数変化] f:id:storikai:20201031220137p:plain

乱数シード値を固定した場合

[試行ごとの学習の精度変化] f:id:storikai:20201031220153p:plain [試行ごとの学習の損失関数変化] f:id:storikai:20201031220205p:plain

[試行ごとの評価の精度変化] f:id:storikai:20201031220221p:plain [試行ごとの評価の損失関数変化] f:id:storikai:20201031220233p:plain

1/3のラベルをランダム値にした場合

[試行ごとの学習の精度変化] f:id:storikai:20201031220249p:plain [試行ごとの学習の損失関数変化] f:id:storikai:20201031220305p:plain

[試行ごとの評価の精度変化] f:id:storikai:20201031220326p:plain [試行ごとの評価の損失関数変化] f:id:storikai:20201031220611p:plain

Jupyter Notebookのテーマ変更方法

Jupyter Notebookのテーマ変更方法

概要

Jupyter Notebookのテーマを変更する方法の自分用メモ。
(ダークテーマで使えるようにする)

方法

1.pipにて、jupyterthemesをインストール

$ pip install jupyterthemes

2.jupyter起動前に、以下コマンドで設定を行う(以下は例)

$ jt -t monokai -cellw 90% -T -N -kl

※詳細なコマンドは、 https://github.com/dunovank/jupyter-themes を参照

3.jupyter起動

$ jupyter notebook

Raspiで温度/湿度センサー値取得(DHT11)

Raspiで温度/湿度センサー値取得(DHT11)

2020/8/16

概要

  • Raspi4で、温度/湿度を計測する(とりあえず値の取得まで)
  • センサーは、DHT11を使用

環境

方法

1.RaspiにDHT11を接続

以下のように接続(ブレッドボード利用)

  • DHT11 GND → Raspi GPIO 9pin(GND)
  • DHT11 DATA → Raspi GPIO 7pin(GPIO ch4)
  • DHT11 Vcc → Raspi GPIO 2pin(Vcc)

f:id:storikai:20200816181607j:plain

2.プログラム実行

Raspi起動し、Pythonプログラムにて温度/湿度を取得する。 ソフトは色々あるが、以下が参考になる。

https://github.com/szazo/DHT11_Python

なお、pinの指定は、GPIOのch番号(=4)をかく。

instance = dht11.DHT11(pin = 4)

pandasでCOVID-19データファイルをプロット

pandasでCOVID-19データファイルをプロット

概要

  • pandasを使用し、COVID-19データをプロットする(主目的はpandasの練習)

環境

  • Python ver : 3.7.7
  • Numpy ver : 1.18.4
  • Scipy ver : 1.4.1
  • Pandas ver : 1.0.3
  • matplotlib ver : 3.2.1

データ

厚生労働省のwebページから、データ(csvファイル)を取得
オープンデータ|厚生労働省

データの読み込み

pandasのread_csv()で、簡単に読み込める。

data_pcr_positive_daily = './pcr_positive_daily.csv'
data_pcr_tested_daily = './pcr_tested_daily.csv'
df_pcr_positive = pd.read_csv(data_pcr_positive_daily)
df_pcr_tested = pd.read_csv(data_pcr_tested_daily)

複数のDataFrameの連結

merge()を使用し、共通の「日付」列を元にして連結する。

df = pd.merge(df_pcr_positive,df_pcr_tested,on='日付')

移動平均のように、窓を使用した計算処理にはrolling()を使用する。 mean()の他にもメソッドが用意されている。 例えば以下のようにすることで、移動平均した列を新たに追加できる。

df['移動平均'] = df.iloc[:,1].rolling(7).mean()

列同士を使用した演算で、新たに列を作ることも可能。

df['陽性率'] = df.iloc[:,1] / df.iloc[:,2] * 100

コード全体

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter,DayLocator
import pandas as pd

# CSVデータファイル
# https://www.mhlw.go.jp/stf/covid-19/open-data.html
data_pcr_positive_daily = './pcr_positive_daily.csv'
data_pcr_tested_daily = './pcr_tested_daily.csv'

# データファイルをpandasで読み込み
#  - 日々の陽性者数と、PCR検査実施数を連結
#  - また、陽性者数の移動平均、陽性率も計算
df_pcr_positive = pd.read_csv(data_pcr_positive_daily)
df_pcr_tested = pd.read_csv(data_pcr_tested_daily)
df = pd.merge(df_pcr_positive,df_pcr_tested,on='日付')
df['移動平均'] = df.iloc[:,1].rolling(7).mean()
df['陽性率'] = df.iloc[:,1] / df.iloc[:,2] * 100 # [%]

data_date = df.iloc[:,0].astype(np.datetime64)
data_pcr_positive = df.iloc[:,1]
data_pcr_positive_ave = df.iloc[:,3]

# 陽性者数および移動平均をプロット
plt.bar(data_date,data_pcr_positive,label='PCR Positive')
plt.plot(data_date,data_pcr_positive_ave,label='moving_ave',color='r')
plt.gca().xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(DayLocator(interval=14))
plt.gcf().autofmt_xdate()
plt.xlabel('Date')
plt.ylabel('PCR positive')
plt.grid(which='both')
plt.legend()
plt.show()

f:id:storikai:20200812162039p:plain

Raspberry Pi4でTFLite(環境構築)

Raspberry Pi4でTFLite(環境構築)

2020/8/9

概要

  • ラズパイ4でTFLiteによる推論処理を動作させる
    • 環境準備
    • TFLiteのExampleの動作

環境

環境構築

1.TFLiteの準備

TFLite用にvenvで環境を用意しておく。

$ python3 -m venv 環境名
$ source 環境名/bin/activate

TensorFlow Liteインタープリタのインストール

$ pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_armv7l.whl

参考:https://www.tensorflow.org/lite/guide/python

2.Exampleのダウンロード

以下のExampleを持ってくる。 https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/raspberry_pi

3.download.shの実行

download.shを実行する。 実行権限がない場合は、以下で付与する。 この時、必要なパッケージもpip3でインストールされる。

$ chmod 755 download.sh
4.実行
python3 detect_picamera.py \
  --model /tmp/detect.tflite \
  --labels /tmp/coco_labels.txt

Raspberry Pi4でOpenCV(環境構築)

Raspberry Pi4でOpenCV(環境構築)

2020/8/9

概要

  • ラズパイ4でOpenCVを動作させる
    • 環境準備
    • カメラ入力の画面表示

環境

環境構築

1.ライブラリ関連のインストール
$ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
$ sudo apt-get install python3-dev
2.OpenCVのインストール

OpenCV用にvenvで環境を用意し、インストールを行う。

$ python3 -m venv 環境名
$ source 環境名/bin/activate
$ pip3 install opencv-contrib-python

この状態ではImportError(undefined symbol: __atomic_fetch_add_8)が発生するため、以下を実行

$ vim.tiny ~/.bashrc

最後の行に

export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1

を追加した後、以下を実行

source ~/.bashrc

参考:https://qiita.com/XM03/items/48463fd910470b226f22

3.カメラ入力の画面表示

以下のようなコードでカメラ入力を画面に表示できる。 (qキー押下で終了)

import cv2

capture = cv2.VideoCapture(0)

while(True):
    ret, frame = capture.read()
    windowsize = (640, 480)
    frame = cv2.resize(frame, windowsize)

    cv2.imshow('camera',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

capture.release()
cv2.destroyAllWindows()