ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

点群のボクセル化

仕事で点群を使っているのでまとまった時間があるときに読もうとしている。

www.kspub.co.jp

まずはボクセル化から。点群を減らすよりは、均一に並べるために使った事が多い。

PCLで同じように書いてみる。

#include <string>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>

int main()
{
    const std::string original_file = "/home/natu/gitproj/3dpcp_book_codes/3rdparty/Open3D/examples/test_data/fragment.ply";

    pcl::PointCloud<pcl::PointXYZRGB>::Ptr p_src(new pcl::PointCloud<pcl::PointXYZRGB>);
    pcl::io::loadPLYFile(original_file, *p_src);
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr p_dst(new pcl::PointCloud<pcl::PointXYZRGB>);

    pcl::VoxelGrid<pcl::PointXYZRGB> vg;
    vg.setInputCloud(p_src);
    vg.setLeafSize(0.03, 0.03, 0.03);
    vg.filter(*p_dst);

    pcl::io::savePLYFile("voxeled.ply", *p_dst);

    return 0;
}

結果はこんな感じでボクセル化できている。点群の表示はCloudCompareを使用した。

www.danielgm.net

元の点群

ボクセル化後の点群。点群の数が減って、間隔が均等になっている。

教科書ではOpen3DとPythonでやっているが、PCLとC++に比べると記述少なくて良い。

github.com

実質、この2行で終わってる。

pcd = o3d.io.read_point_cloud(filename)
downpcd = pcd.voxel_down_sample(voxel_size=s)

pcl::PointCloud<pcl::PointXYZRGB> みたいなのを書かなくて良い。本番機へのデプロイ(とその後のメンテ)が無ければPythonで点群アルゴリズム考えるのも良いなと思った。

リーダーの作法

リーダーの作法を読みました。

www.amazon.co.jp

Netscape、Apple、Slackで活躍した人が、リーダーとして記憶に残っているエピソードを30個まとめてあります。 帯に書いてある「リーダシップの極意」は言い過ぎだが、人によってはいくつか参考になる所があると思う。 僕が面白かった所を紹介します。

虫の知らせ、コバヤシマルのマネジメント

反射的に働く知恵のこと。プロジェクトを進めているとなんとなくやばそうって時がある。虫の知らせを感じたときに、具体的にどういうアクションを取るべきかが書いてあって面白かった。 基本は虫の知らせを無視しない。それを放っておくと、コバヤシマル状態になる。

参考: https://memory-alpha.fandom.com/ja/wiki/%E3%82%B3%E3%83%90%E3%83%A4%E3%82%B7%E3%83%9E%E3%83%AB%E3%83%BB%E3%82%B7%E3%83%8A%E3%83%AA%E3%82%AA

プロフェッショナルとしての成長をはかる質問表

1on1の質問例が載っています。これは参考になったので、早速業務で使ってみた。 良い回答を引き出せた質問があって、業務にもプラスになった。(これを本人が読んだら自分って分かるだろうから、具体的な所は書かない)

組織図テスト

とりあえず組織図を書いてみる。ルールは人の名前を出さない。 これは面白い。

ベンチャー初期とか新規事業だとメンバーが3人とかなので、人があって役割分担という組織図になりがち。僕もそういうチーム体制図しか書いたことが無い。 人抜きで組織図を書いてみると、あるべき姿が見えてきて組織に足りない物が見えてくる。

文化の流れ

企業文化は大事だ。 難しい判断をするときは、経営理念に戻ってその社員としてふさわしい行動を取る。 お客が無理難題言ってきたとき、チーム内にパワハラっぽい傾向が出てきたとき、「今回は我慢して」と言うのは簡単。 そこで経営理念に立ち返って、この対応が企業文化として根付いて良いのかを考える。 マネージャの判断一つ一つが、企業の文化を作っている意識をずっと持っていたい。

限りある時間の使い方

限りある時間の使い方読みました。

www.amazon.co.jp

帯のひろゆき絶賛が気に入らないですが、中身はちゃんとした本でした。 筆者が時間管理術マニアな事もあり、GTDとかポロドーモが好きな人にはぐっとくるネタが入っています。

本の内容は今までの時間管理術へのカウンターになっていて、それでいいの?と問いかけてくる本です。時間を最大限有効に使おうという考え方が本当に正しいの?という疑問から、こういう考え方もあるよと教えてくれます。こう書くとのんびりいこうぜみたいな本に見えますが、そういった部分も含めて濃く生きる方法が書いてあります。

読んでいて印象に残ったところを2つ紹介します。

デジタルノマドの憂鬱

世界中を忙しく旅して回っていた人が、他の家族が公園で一緒にいるのを見て泣いてしまうエピソードが詳解されてました。「一人でどこにでもいける自由を手に入れたのと引き換えに、家族と過ごす平凡な幸せを手放してしまったことの気がついたのだ。」と何事にもメリットデメリットがありデメリットも直視しないといけないと説明があり、自由気ままに生きるよりも強制されてでも人と同じ時間を共有する方が幸せなのでは続きます。本全体を通して選択肢が少ない方が幸せなんじゃというエピソードが多くこれもその一つです。何でも出来る自分を目指すよりは、今を受け入れて「今これをする自分」を大事にした方が良いという考え方には共感できます。

僕自身、コロナになってから家事負担がめちゃ増えていて辛かったのですが、このエピソードを見てから家族分の晩ご飯を作り、家族分の洗い物があるのは幸せなことだと気がついて、家事が前向きに楽しめるようになりました。

問題がある状態を楽しむ

Deep Learningが流行ってから、とにかく動かすことに気が向きすぎていてTensorFlowやらKerasやらPytorchやらGithubやQiitaで動く物を見つけて動かそうとする事が多い。最近の流行はこれ、Kaggleで見たのはこれ・・とか、自分で試行錯誤を全然していない。もっと上手く動かない状態をよく見て、自分で解決策を考え、それを楽しむのをずいぶん忘れているなと感じました。仕事なら締め切りあるからしょうがないけど、趣味でやる分には一気に解決策を見つけようとしないことも大事。

ちょっと人生疲れちゃったけど、前向きに生きたい人にお勧めです。

Pytorchによる物体検出

Pytorchによる物体検出を読みました。

www.amazon.co.jp

仕事でPytorchをコピペで動かすことが多く、ちゃんとPytorchの勉強をしようと思って昔買ってあった本を取り出して読みました。読むタイミングが良かったのか、結構知りたかったことが書いてありました。

最初の方はPytorchの基礎から入り、後半からSSD等の実装に入ります。後半は説明にムラがあって、所々説明不足を感じます。とはいえ、書籍にするには限界もあるだろうし、僕の知りたいところがカバー出来たので◎です。

役に立ったところは、3.2 SSDのDataLoaderの部分で、PytorchのDataLoaderを自分で作っています。画像じゃないデータ(点群とか)を入力にする場合、データローダどうして良いか分からなかったので、最初の一歩にはとても助かりました。

3.7 SSEの転移学習の所のソースコードも助かりました。

勾配を無くす=ネットワークの凍結なので、

for param in net.parameters():
  param.requires_grad = False
 
for pram in net.conf.parameters():
  param.requires_grad = True
  

と全体の勾配を無くしてから、学習して欲しいところだけ勾配戻せば期待通りに動くらしい。

なんとなくPytorch動かしているけど後一歩詳しく知りたい人、特に画像処理での使い方を知りたい人にお勧めです。

Rust+Clion+WSL2のメモ

Windows+WSL2環境で、Clionを使ってRustのデバッグをするときのメモ。

  • ClionはWindowsにインストーする。
  • cargo new はWindows上で行う。
  • Clionは、Windows上のディレクトリを開く
  • Run onはLocal machine, working directoryはWindowsのパスを選択(図1)
  • Setting -> Languages & Frameworks -> RustのToolchain locationをWSLに設定する(図2)。▼をクリックしたら出てくるはず。出ない場合は、Experimental featuresのorg.rust.wslにチェックが入っていることを確認する(図3)。

図1

図2

図3

これでデバッガと繋がり、ブレークをかけると変数の値が確認出来る。

Lisp interpreter in rust

最近、中国語の勉強ばかりしていたので、リハビリがてらRustでLisp処理系を作る本を買ってみました。

www.amazon.co.jp

多分、本の内容もここにある気がして、買わなくても良かったのではと思うが筆者にお金が入るならOK。

github.com

SICPにのっているような簡単なインタプリターを作ります。一回でもやったことがあれば、あーなるほどと思いながら最後までいけるはずです。本文の説明は簡潔すぎるので、あまり役に立たない。

ただ、Rustのコードは綺麗にまとまっていて、勉強なりました。Rustはこういうことしたいんだけど、みんなはどう書いているのかなってのが分からなくて困ることが多い。Testも簡潔にまとまっていて、処理系を作り込みながら自然にテストが通っていきます。ただ、Rustの場合ある程度プログラムの完成度が高くないと、テストコードのコンパイルが通らないので、そこだけはしょうがないかなって思いながら進めてました。このコードを写経するだけでも、あーなるほどと思う所が多かったです。

特に何も無くても基本Result型を返すようにして、その上では?;で処理しているのを見て、あーなるほどと思いました。

それっぽく動いたところ

Lispの勉強よりは、ちょっとしたRustの写経対象としてお勧めします。