Tensorflow1.15 pointnet part_seg

Tensorflow1.15 で pointnet part_seg を試してみました。

ROS を使って、草刈りロボットの開発を目指していますが、畑の境界をどの様に認識させるかで、止まっています。
やはり、ここは、機械学習でどうにか出来ないか思案しています。
そんな折、Depthカメラでの、PointCloud データを入力にした、モデルがあったので、
今回試してみました。

charlesq34/pointnet
上記ページの part_seg の部分です。

開発環境
OS: Windows10
言語: Python3.7
Tensorflow 1.15 GPU
開発ツール: Eclipse

学習は、下記を実行するだけですが、
> cd part_seg
> python train.py

どうも、オリジナルのままの、 train.py では、
長い時間、学習が終わるまで待たなければいけないので、不便です。
epoch=10 とか、少しずつ出来るように、手を加えてみました。

但し、最初に断って置きますが、なかなか、 label_acc (test and trainning label accuracy) の値が上がってきません。
これで、良いのか? ちょっと疑問です。

それは、さて置き、早速修正した、コードを掲載します。
part_seg/train_py update 2020.1.15 by nishi

一度に、実行したいエポック数を、
parser.add_argument('--epoch', type=int, default=5, help='Epoch to run [default: 50]')
で指定して於けば、

後は、
python train.py
を実行するだけで、学習が継続できます。
後は、別ターミナルから、Tensorboard を起動すれば、経過観察できます。
> cd part_seg
> tensorboard --logdir=train_results\summaries

改めて言いますが、なかなか、 label_acc が上がってきません。
これで、本当によいのか?

batch の再設定が、間違っていたようなので、下記に改めてました。
それでも、 label_acc は、上がってこないみたいです。

余りに、label_acc が上がって来ないので、pointnet_part_seg.py の get_loss() をいじってみました。
part_seg\pointnet_part_seg.py

これで、 label_acc が、いきなり上がるようになりました。
これでは、いけないのだろうか?
seg_acc が、上がってこないのだろうか?
過学習になるのだろうか?

5 epoch で、 label_testing_acc が一番よくなるみたいだが、
これは、何かの誤りだろうか?

もしかしたら、先に、 seg_acc を改善させて、十分に、seg_acc が良くなった後で、
label_acc を上げてくる狙いあるのか?
ここは、我慢して、 epoch=250 まで一度試してみないといけないのかも?
気の短いおんちゃんには、大変ぞね。

test.py を見てみると、 epoch_190.ckpt をロードしているので、
190 epoch まで必要か?

オリジナルのままで、学習を続けてみます。
今日も、必死こ必死こ、学習させちょります。
只今、167 epoch ぞね。label_acc は上がる気配なし。 2021.1.15 by nishi

只今、195 epoch が終わった所ぞね。label_acc 上がる気配なし。
このプログラムは、いかさまか?
わざと、不具合を入れてあるのか?

model.get_los() のコメントに、記載がありました。
# model.py defines both classification net and segmentation net, which share the common global feature extractor network.
# In model.get_loss, we define the total loss to be weighted sum of the classification and segmentation losses.
# Here, we only train for segmentation network. Thus, we set weight to be 1.0. # loss function()

どうやら、ここでは、segmentation network の学習のみ行うので、weight=1.0 を、loss function() に渡す。との事でした。

オーマイガー! 何と言う事じゃ!! 全然コメントなんぞ、見てなかったぞね!!
と、言う訳で、weight < 1.0 を渡せば、label loss が計算されて、label acc が上がると言う事でした。

part_seg\train.py

結論。
最初は、wx= 1.0 で、 seg_acc が上がるまで、80 epochs 位学習させて、
その後、wx= 0.9 にして、 label_acc を上げれば良い。
でした。
でも、最初から、 wx=0.99 で、OK ぞね。

やっと、解決しました。
この後は、part_seg\test.py を試してみるぞね!!

このブログ記事について

このページは、おんちゃんが2021年1月11日 18:10に書いたブログ記事です。

ひとつ前のブログ記事は「Gazebo turtlebot3 Burger Depth Camera Navigation 草刈りロボット #3」です。

次のブログ記事は「Tensorflow1.15 pointnet part_seg #1」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ