ローリングコンバットピッチなう!

AIとか仮想化とかペーパークラフトとか

AIロボットCOZMO自律走行用の畳み込みニューラルネットワークをちょっとチューニング

[technology][AI][COZMO][Deep Learning][Chainer]Donkey COZMOのCNNを少し小さくしてみる

rc30-popo.hatenablog.com
の続きです。

最初に作ったDONKEY COZMOの畳み込みニューラルネットワークの学習データをファイル保存すると180MBあったので、少しコンパクト化を試みました。
最初はチャンネル数16と32の畳み込みでしたが、これを8と16に変更。全結合層の中間層1024ノードを256ノードに減らしました。

class czCnn(Chain):
    def __init__(self):
        super(czCnn, self).__init__(
            conv1 = L.Convolution2D(in_channels=1, out_channels=8, ksize=4, stride=1, pad=1),
            conv2 = L.Convolution2D(in_channels=8, out_channels=16, ksize=4, stride=1, pad=1),
            l0 = L.Linear(None,256),
            l1 = L.Linear(None,3),
            bncv1 = L.BatchNormalization(8),
            bncv2 = L.BatchNormalization(16),
            bn0 = L.BatchNormalization(256),
        )
    def forward(self, x,ratio=0.5):
        h = F.reshape(x,(len(x),1,160,120))
        h = F.max_pooling_2d(F.relu(self.bncv1(self.conv1(h))),2)
        h = F.max_pooling_2d(F.relu(self.bncv2(self.conv2(h))),2)
        h = F.dropout(F.relu(self.bn0(self.l0(h))),ratio=ratio)
        h = self.l1(h)
        return h

これで前回の走行データを学習させましたが、20epochくらいで学習データに対するフィッティングは100%正解が出る様になりました。
10epochだとちょっとまだ足りない感じです。学習データのサイズは1/10くらいに。

実際に走らせてみると挙動不安定感が元のネットワークより増した様な気もします。

更に別のコースを作って、そちらもテスト。前回はコース10周分くらい学習させましたが、今回は6周くらい。
だいたい上手く行くのですが、うまく曲がらずに壁にぶつかるケースがありました。
このコースももう少し学習用データを増やして、更に最初のコース用データと合わせて学習してどちらのコースでも走行可能なネットワークを作ってみたいと思います。


youtu.be


7/6: 学習データのサイズに誤りがあったので訂正。