Jetson Xavier + ZEDのセットアップ
概要と動機
1年近く前に購入したJetsonを長らく放置していたましたが、使用しなければならない都合が出来たのでセットアップしました。
nVIDIAのJetson Xavier にStereo STEREO LABS の ZEDをセットアップした時に、Web検索しても日本語での説明がほぼなかった事に加えて、自分自身がLinuxに慣れていないため、大変だったので同じように悩んでいる人向けの記事です。
慣れている人にとっては、なんということはない作業だと思いますが。。。
Jetson Xavierの準備
Jetson AGX Xavier Developer Kitを使用。
nVIDIAのJetPackダウンロードサイトからインストーラーを仕入れてJetson XavierにJetson Jetpack4.2.1をインストールした直後の状態。
Downloadをするためには、nVidiaのDeveloperに登録する必要があります。その後メールアドレス及びパスワードが必要です。
・・・今はJetsonはAmazonでも購入することが出来るんですね。
ZEDの準備
ZEDの注意点として、『ハブ経由することなく』他の機器と『USB3.0』で接続しなければならないという制約があります。
ここが結構重要です。
JetsonにはUSB3.1のtype-C×2とUSB3.0のtype-A×1があるので、Type-C⇔USBメスの変換アダプタでZEDのUSB差し込み口を作りましょう。
・・・ハブ経由するとZEDは動作しないので、必ず変換アダプタを利用して接続してください。
私は、エレコム USB-C変換ケーブル C-Aメス ブラック USB3-AFCM01BKで上手いこと認識できました。
マウス・キーボード・カードリーダ用のUSBハブをJetsonに接続する必要があるので、どのみち付属の変換アダプタだけでは足りないので購入する必要があります。。。
ZED SDKの準備
WindowsPCでもLinuxPCでも構いませんが、下記からZED SDKをDownloadしてください。
www.stereolabs.com
これも詰まるポイントですが、Ubuntu用のZED SDK (ZED SDK of Ubuntu)ではなく、必ずJetson用の(ZED SDK for Jetpack)を利用してください。
また、CUDAのバージョンによって導入するSDKが異なることもありますが、Jetson導入時のJetpackで最新版を導入していれば、失敗することはないと思います。
心配なようでしたら、CUDAのバージョンを確認してください。
chihay.hatenablog.com
Download出来たら、手近にあるメモリカード等に保存してください。
Jetson+ZEDのセットアップ
先ほど保存したZED SDK実行ファイル入りのメモリカード等をJetsonに接続して、Jetsonの分かりやすい場所に保存しましょう。
私の場合は、/home/jetson/Downloadsのディレクトリに保存しました。
・・・私のJetsonのユーザー名がjetsonなのでDownloadsの上位ディレクトリがjetsonになっています。お使いの環境により変わる可能性がありますので、ご自身の環境に読み変えてください。
このように、保存先へ
cd /home/jetson/Downloads
のように移動し、
./ZED_SDK_***.run
を実行してください。
この時、『sudo ./ZED_SDK_***.run』とroot権限で実行するとエラーになって、実行できません。これも詰まるポイントだと思います。
このようにセットアップが完了します。
このように完了すれば、ZEDで試せると思いきや色々と足りません。。。
まず、ZED Explorerを実行しようとするとエラーが発生。
Linuxの環境に慣れていない私は、原因がわかりませんでした。エラーメッセージにNo such file or directoryとなっているので、ファイル名が違うんだろうと四苦八苦。。。
そもそも、ZEDの実行ファイルにスペースが入っているのも、混乱を誘発する原因!!もう少し考えてネーミングしてほしいものです。
ですが、このメッセージはlibGLEWが入っていませんよ。と言う感じのエラーです。
・・・このへん、分かりにくいですよね。
なお、スペース入りのファイル(たとえ、ZED Explorer)を実行する場合は
./ZED\Explorer
もしくは、
./'ZED Explorer'
のように記述します。
私の環境で足りなかったものは、
sudo apt -y install libglew-dev
・・・スクショ撮り忘れました。
で、こんな感じでapt-getしてください。
libGLEWだけは『-y』を付けます。
すべて、apt-getした後、
このように、
./'ZED Explorer'
と入力すれば、ZED Explorerは起動すると思います。
こんな感じですね。
ZED Depth Viewerの場合は、
./'ZED Depth Viewer'
と入力すれば、
このように起動すると思います。
それでは、よいJetson+ZED Lifeを!
pycharmのインストール
概要と動機
windows7
python3.6
pycharm2018.1
の環境を使用していましたが、仕事で強化学習に取り組むことになり、会社での環境と自宅での環境が異なると面倒だという思いから、自宅の環境を更新しました。
更新後
windows7
python3.7
pycharm2019.1
・・・使用感に変化はないのですが。
アンインストール手順
※以前にpycharm、pythonを使用していた場合のみ
1.以前使用していたpycharmをプログラムファイルからアンインストールします。
2.pythonもアップデートする場合は、ここでアンインストールしておきます。
3.もし、python3.6等以前使用していたバージョンのフォルダが残っている場合は手動で削除する。
インストール手順
【pythonのインストール】
1.インストーラーを本家サイトから入手します。
www.python.org
windowsのインストーラはPython Release Python 3.7.3 | Python.orgここにあります。
2.上記Downloadしたexeファイルを管理者権限で実行してインストールになりますが、インストールフォルダは『C:\Python37』のようにCドライブ直下がいいと思います。
【pycharmのインストール】
3.pycharmのダウンロード
JetBrainのPycharmのサイトから入手します。
www.jetbrains.com
リンク先はWindows版になるので、使用環境のものを選択してください。
また、pycharmには無料のcommunity版と有料のProfessional版がありますが、自宅で使う分にはcommunity版で事足りると思います。
4.上記Downloadしたexeファイルを管理者権限でインストールします。
Pycharmの日本語化
まず、Pleiadisの日本語プラグインを入手します。
mergedoc.osdn.jp
その際、欲しいのは、日本語化のプラグインなので、
↑↑↑これではなく、
↑↑↑これを入手しましょう。
【方法1:ファイルコピーで手動設定】
Pycharmを起動し、
Configuration > Edit Custom VM Options...を開いて、
-Xverify:none -javaagent:(ディレクトリのフルパス)/jp.sourceforge.mergedoc.pleiades/pleiades.jar
を追記します。
このようになっていると思います。
※おそらく大丈夫だと思いますが、勘違いするとハマる注意点として、
ここで言うディレクトリのフルパスとは、使用ユーザーのパスであり、pycharmのインストールディレクトリのフルパスではありません。
次に、
先ほどダウンロードしてきたファイルを解凍します。
解凍時に名前が長すぎる場合は、エラーが発生するので注意しましょう。
解凍するとこのようなファイルが出来ているので、このPluginを
このように、
『C:\Users\(ユーザー名)\.PyCharmCE2019.1\config』にコピーします。
これで次にpycharmを起動すると、日本語化されています。
【方法2:Pleiadisインストーラで自動設定】
先ほどダウンロードしてきたファイルを解凍します。(方法1と同様)
次に、解凍フォルダ『pleiades-win』の中にある『setup.exe』を起動します。
この日本語化するアプリケーションに
『C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\bin\pycharm64.exe』
を指定します。※install時の設定によりpycharm64.exeの場所は変わります。
これで次にpycharmを起動すると、日本語化されています。
なお、日本語化に失敗すると起動すらしなくなります。
失敗した場合は、アンインストールしてから、再度日本語化手続きを行いましょう。
その際は、Cashやsettingも削除しましょう。
Pandas.DataFrameの備忘録
概要と動機
個別に書いていくと散らかっていくのでは?と思い、
Pandas.DataFrameについて、追記しながら備忘録を作っていきます。
DataFrameの呼出
import pandas as pd pd.DataFrame
or
import pandas.DataFrame as df
or
from pandas import DataFrame
DataFrameの作成
df = pd.DataFrame([[1,2,3,4,5,6,7,8,9], [11,22,33,44,55,66,77,88,99], [111,222,333,444,555,666,777,888,999], [1111,2222,3333,4444,5555,6666,7777,8888,9999]], index=['row_0', 'row_1', 'row_2', 'row_3'], columns=['column_0', 'column_1', 'column_2', 'column_3', 'column_4', 'column_5', 'column_6', 'column_7', 'column_8'])
indexは行のインデックス
columnsは列のインデックス
DataFrameのixによる参照
☆ある行を参照したい場合
df.ix["row_2",:]
結果
column_0 11 column_1 22 column_2 33 column_3 44 column_4 55 column_5 66 column_6 77 column_7 88 column_8 99 Name: row_2, dtype: int64
☆ある行を参照したい場合(複数行)
df.ix[["row_1","row_3"],:]
結果
column_0 column_1 column_2 ... column_6 column_7 column_8 row_1 11 22 33 ... 77 88 99 row_3 1111 2222 3333 ... 7777 8888 9999 [2 rows x 9 columns]
☆ある行~ある行を参照したい場合(複数行)
df.ix["row_1":"row_3", :]
結果
column_0 column_1 column_2 ... column_6 column_7 column_8 row_1 11 22 33 ... 77 88 99 row_2 111 222 333 ... 777 888 999 row_3 1111 2222 3333 ... 7777 8888 9999 [3 rows x 9 columns]
☆ある列~ある列を参照したい場合(複数行)
列に関しても、行と同様に記述できる。
df.ix[:,'column_2':'column_5']
結果
column_2 column_3 column_4 column_5 row_0 3 4 5 6 row_1 33 44 55 66 row_2 333 444 555 666 row_3 3333 4444 5555 6666 row_4 33333 44444 55555 66666
☆ある行とある列の組み合わせで参照したい場合(複数行)
行に関する記述と、列に関する記述を組み合わせて、必要な行と列を取り出すことが出来る。
df.ix[["row_1","row_3"],'column_2':'column_6']
結果
column_2 column_3 column_4 column_5 column_6 row_1 33 44 55 66 77 row_3 3333 4444 5555 6666 7777
Pandas.DataFrameのCSV出力
概要と動機
IPython.displayを使えば Jupyter notebookで表示されるのだが、IPythonを使用していない環境でもPandas.DataFrameを綺麗に表示させたい。
今回の方法は、pd.DataFrame.to_csv()を使用したCSVファイルに出力してから、Excel等で出力結果を確認する方法です。
出力する方法
以下、書籍『Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎』で用意されているデータセットを用いています。
import os import pandas as pd import mglearn adult_path = os.path.join(mglearn.datasets.DATA_PATH, "adult.data") data = pd.read_csv( adult_path, header=None, index_col=False, names=["age", "workclass", "fnlwgt", "education", "education-num", "marital_status", "occupation", "relationship", "race", "gender", "capital-gain", "capital-loss", "hours-per-week", "native-county", "income"]) data.to_csv('to_csv_out.csv') data.head(10).to_csv('to_csv_out_head.csv')
ここでcsv出力に関係しているのは、
data.to_csv('to_csv_out.csv') data.head(10).to_csv('to_csv_out_head.csv')
の部分。それ以外の個所はpandasでのデータの準備をしています。
pandasでのデータを出力するには、とあるpandas形式のdataに.to_csvとするだけです。
初めの10行だけ出力してあげたい場合は、上記のように.head(10)と付けてから、.to_csvと記述します。
matplotlib.pyplotのsubplotsの目盛について
概要と動機
Pythonではじめる機械学習の中でたびたび出てくるmatplotlib.pyplot.subplotsの使い方の中でも、なるほどと思ったので書き留めておくことにする。
サブプロットの使い方
まずsubplotsの使い方はよく知られているように、
import matplotlib.pyplot as plt from sklearn.datasets import fetch_lfw_people people = fetch_lfw_people(min_faces_per_person=20, resize=.7) image_shape = people.images[0].shape fix, axes = plt.subplots(3, 4, figsize=(9,9),subplot_kw=({"xticks":(), "yticks":()})) for target, image, axis in zip(people.target, people.images, axes.ravel()): axis.imshow(image) axis.set_title(people.target_names[target]) plt.show()
のように使用します。
ここでデータセットはLabeled Faced in the Wildの顔画像を使用しており、下記のようにモジュールを定義して読み込みます。
from sklearn.datasets import fetch_lfw_people people = fetch_lfw_people(min_faces_per_person=20, resize=.7)
本題の目盛
fix, axes = plt.subplots(3, 4, figsize=(9,9),subplot_kw=({"xticks":(), "yticks":()}))
subplotsの関数の中に、見慣れないsubplot_kw=({"xticks":(), "yticks":()})という引数が紛れています。
初めの引数3は3行、次の引数4は4列のサブプロット作成し、
次のfigsizeは(9,9)サイズのfigsizieでsubplotsを描画し、
subplot_kw??これはなんだ??
となりました。
そこで、このsubplot_kwのありなしを比較してみましょう。
まず、subplot_kw=({"xticks":(), "yticks":()})ありの場合、
では、subplot_kw=({"xticks":(), "yticks":()})なしの場合、
ぱっと見違いがわかりませんが、上記画像ではサブプロットの画像に目盛がありませんが、下記画像では目盛がありますね。
subplot_kwはこのように目盛を制御することが出来ます。
蛇足
import matplotlib.pyplot as plt from sklearn.datasets import fetch_lfw_people people = fetch_lfw_people(min_faces_per_person=20, resize=.7) image_shape = people.images[0].shape fix, axes = plt.subplots(3, 4, figsize=(9,9)) for target, image, axis in zip(people.target, people.images, axes.ravel()): axis.imshow(image) axis.set_title(people.target_names[target]) plt.xticks() plt.yticks() plt.show()
蛇足ですが、
上記のようにsubplot_kw=({'xticks':(), "yticks":()})ではなく、
plt.xticks() plt.yticks()
を用いると、
このようになり、subplotsのそれぞれの画像の目盛には影響を与えません。
当然ですよね、plt.xticks()やplt.yticks()はsubplotsの制御ではなく、pltの制御なのですから。
scikit-learnの決定木を表示させる方法
概要と動機
Pythonではじめる機械学習の中で出てくる決定木の解析(sklearn.datasetsのcancerデータ)でツリー表示の可視化をしたい。
だが、Ipythonを使用していないpython3.6の環境下で、scikit-learnを使って決定木を可視化しようとして、つまづいた。
使用した環境
もともとあった環境
- python3.6
- numpy
- scikit-learn
今回インストールした環境
Ipython・Jupyter環境下以外では
下記のコードを見てみるとgraphvizモジュールが必要で、graphvizはdot言語で書かれているようでpydotplusというモジュールも必要とのことなので、
pip install graphviz pip install pydotplus
と、graphvizとpydotplusをpipインストールをした後、実行したスクリプトは、
file_name = "./tree.dot" export_graphviz(tree, out_file=file_name, class_names=["malignant", "benign"], feature_names=cancer.feature_names, impurity=False, filled=True) with open(file_name) as f: dot_graph = f.read() graphviz.Source(dot_graph)
・・・チーン、何も表示されないし、と思っていると、Ipthon・Jupyterじゃないもんねと気がつく。
そこで、
file_name = "./tree.dot" export_graphviz(tree, out_file=file_name, class_names=["malignant", "benign"], feature_names=cancer.feature_names, impurity=False, filled=True) graph = pydotplus.graph_from_dot_file(file_name) graph.write_png("tree.png")
のように変えたところ、
Traceback (most recent call last):
(中略)
pydotplus.graphviz.InvocationException: GraphViz's executables not found
のように、GraphViz's executable not found(GraphVizの実行ファイルが見つからないですよ)
とエラーが出て動きません。
エラー対策
Python3でscikit-learnの決定木を日本語フォントで画像出力する方法のまとめ | 自調自考の旅
ここに対策が書いてあったので、これを参考に、graphviz.pyのfind_graphviz関数を下記のように書き換えます。
def find_graphviz(): """Locate Graphviz's executables in the system. Tries three methods: First: Windows Registry (Windows only) This requires Mark Hammond's pywin32 is installed. Secondly: Search the path It will look for 'dot', 'twopi' and 'neato' in all the directories specified in the PATH environment variable. Thirdly: Default install location (Windows only) It will look for 'dot', 'twopi' and 'neato' in the default install location under the "Program Files" directory. It will return a dictionary containing the program names as keys and their paths as values. If this fails, it returns None. """ #dot.exe等の実行ファイルがあるパスをハードコーディングする。 return __find_executables("C:\\Program Files (x86)\\Graphviz2.38\\bin")
これで、エラーがが出なくなりました。が・・・あれ、描画されない??
表示方法
明示的に表示していないので、表示されるわけがないですよね。
とにかく表示したい場合は、PILのImage関数を使って
img =Image.open("ファイル名")
img.show()
と書けばいい。
最終コードと結果
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.tree import export_graphviz import pydotplus from PIL import Image dot_file_name = "./tree.dot" png_file_name = "./tree.png" export_graphviz(tree, out_file=dot_file_name, class_names=["malignant", "benign"], feature_names=cancer.feature_names, impurity=False, filled=True) graph = pydotplus.graph_from_dot_file(dot_file_name) graph.write_png(png_file_name) img =Image.open(png_file_name) img.show()
PATHを通す
import graphviz glaph = graphviz .Digraph(format="png") (中略) G.render("graphs")
上記で解決したと思いきや、上記のコードを実行しようとすると、下記エラーが発生します。
ExecutableNotFound: failed to execute ['dot', '-Tpng'],make sure the Graphviz executables are on your systems ' PATH
どうしたものかと悩んでいると、
Graphviz をインストールする
には、とどのつまりPATHを通さないとダメですよと書いてありました。
環境変数の変数:PATH に 値:C:\Program Files (x86)\Graphviz2.38\bin と通してあげることでrenderの問題も解決しました。
値は環境によって変わりますので、適宜変更してください。Graphvizをインストールしたフォルダにある『bin』フォルダのPathとなります。