1. 程式人生 > >pointnet中stn和mlp的理解錯誤的方式。

pointnet中stn和mlp的理解錯誤的方式。

一開始以為文章中的程式碼是這樣的意思:

self.inputTransform=nn.Sequential(
    nn.Linear(point_num*3,64),
    nn.BatchNorm1d(64),
    nn.ReLU(inplace=True),

    nn.Linear(64, 128),
    nn.BatchNorm1d(128),
    nn.ReLU(inplace=True),

    nn.Linear(128, 1024),
    nn.BatchNorm1d(1024),
    nn.ReLU(inplace=True),
)
self.inputPool = nn.Sequential(
    nn.MaxPool1d(2, 2),
    nn.MaxPool1d(2, 2),
    nn.Linear(256, 9),
)
self.mlp2=nn.Sequential(
    nn.Linear(64,64),
    nn.ReLU(),
    nn.Linear(64, 128),
    nn.ReLU(),
    nn.Linear(128,1024),
)

 

在這裡記錄一下,其實原文中不是這個意思,我這個雖然可以跑的通,但是引數量少和其他原因,有可能沒有原始版本的效果好。尤其是下面的pool,完全就是冗餘的操作,這個時候才想到是理解錯了。而且我也沒有想到如何初始化輸出矩陣。

可以看看PointNet論文中怎麼講這一部分的: