Pointnet

安裝環(huán)境:


作者GitHub上的描述:Python 2.7, TensorFlow 1.0.1, CUDA 8.0 and cuDNN 5.1 on Ubuntu 14.04.此外還需要h5py模塊痴脾。

linux中配置環(huán)境為:Anaconda3.4.0钱雷,Python2.7抑堡,Tensorflow1.4.0以及h5py(安裝主要參考清華鏡像網(wǎng)站+TensorFlow官網(wǎng)安裝介紹)瀑构,CUDA8.0(官網(wǎng)下載普舆,需要事先查看自己的顯卡版本是否支持CUDA8.0)帐萎,cuDNN6.1(需要在nvidia官網(wǎng)上注冊賬號再下載,安裝的時候第一次裝成了5.1敞曹,與tensorflow版本不兼容掉丽,后面換成6.1。tensoflow和cuda异雁、cudnn的對應(yīng)關(guān)系可以在這里找到:https://www.tensorflow.org/install/source

清華鏡像站tensorflow:https://mirrors.tuna.tsinghua.edu.cn/tensorflow/windows/gpu/

cudnn下載地址:https://developer.nvidia.com/rdp/cudnn-archive

cuda下載地址:https://developer.nvidia.com/cuda-toolkit-archive

實驗室臺式機(jī)的配置是:tensorflow1.1.0(清華鏡像網(wǎng)站下載) + cuda8.0 + cudnn5.1 + python3.5.2(直接安裝在anaconda虛擬環(huán)境中)

代碼運行:


1.分類classification:

1.1 train

python train.py --batch_size=my_size --max_epoch=my_epoch

batch_size和max_epoch都可以自行設(shè)置,設(shè)置的batch_size越小僧须,最后訓(xùn)練的準(zhǔn)確率越低纲刀。如要更改provider.py文件中的DATA_DIR(存放數(shù)據(jù)的文件夾),也一定要同時更新train.py中的TRAIN.FILES以及TEST_FILES担平,因為它們斗魚DATA_DIR有關(guān)

還可以通過TensorBoard分析網(wǎng)絡(luò)結(jié)構(gòu)示绊,監(jiān)測訓(xùn)練的過程:

tensorboard --logdir log

1.2 evaluate

python evaluate.py --visu


2. 語義分割以及識別part segmentation:

首先下載數(shù)據(jù):

cd part_seg

sh download_data


之后運行train.py進(jìn)行訓(xùn)練,運行test.py進(jìn)行測試暂论,得到結(jié)果通危。

3. 代碼分析:

3.1 train.py

train.py主要定義了訓(xùn)練的過程攻柠。前面parser定義了一些默認(rèn)的參數(shù),之后導(dǎo)入model(神經(jīng)網(wǎng)絡(luò)模型)以及確定LOG、TRAIN以及TEST文件夾的位置。

之后定義了獲得學(xué)習(xí)率和衰減的函數(shù):get_learning_rate(batch)?????get_bn_decay(batch)

train函數(shù):設(shè)置loss誊册、model等節(jié)點,和超參數(shù)、place holder一起放在ops里您市。并不真正run,為訓(xùn)練做好準(zhǔn)備役衡,控制每個epoch的訓(xùn)練茵休。

train_one_epoch(sess, ops, train_writer):把下載好的訓(xùn)練文件(TRAIN_FILES文件夾下)先隨機(jī)打亂,之后按照batch的數(shù)目進(jìn)行訓(xùn)練手蝎,其中每一次都要通過旋轉(zhuǎn)和擾動兩個函數(shù)(定義在provider中)擴(kuò)大batched點云榕莺,其實就是對current_data進(jìn)行了處理,并且根據(jù)jittered_data生成feed_dict棵介,最后輸出平均損耗mean loss和準(zhǔn)確率accuracy

eval_one_epoch(sess, ops, test_writer):對于每個測試文件钉鸯,都要把每個batch數(shù)據(jù)喂進(jìn)去,通過sess.run函數(shù)得到每次的summary, step, loss_val, pred_val鞍时,最終輸出 mean loss亏拉,accuracy以及avg class acc(平均識別準(zhǔn)確率)

3.2 models:

models文件夾下,存放了訓(xùn)練所用的三種網(wǎng)絡(luò)結(jié)構(gòu)逆巍,cls(識別)及塘、seg(分割)、T-NET(一種微型網(wǎng)絡(luò)锐极,可以保證點云在經(jīng)過剛體變換之后笙僚,仍然保持語義標(biāo)簽不變。值得一提的是灵再,麻雀雖小五臟俱全肋层,它本身也于大網(wǎng)絡(luò)類似,實現(xiàn)所用到的基礎(chǔ)模塊包括特征抽取層翎迁、最大池化層以及全連接層等)栋猖。所用到的卷積等網(wǎng)絡(luò)結(jié)構(gòu),底層實現(xiàn)部分在utils/tf_uitl.py中汪榔。

網(wǎng)絡(luò)輸入為B*N*3蒲拉。B是batch_size,N是一個樣本中點的個數(shù)痴腌,3是點云維度(三維坐標(biāo))雌团。這里把一個樣本看做了N*3的矩陣,類似二維圖片士聪,之后在其上進(jìn)行卷積等操作锦援。

值得說明的是,網(wǎng)絡(luò)提取的特征不是3這個維度剥悟,這個維度在網(wǎng)絡(luò)開始就被卷成了1灵寺,特征維度是輸入expand出的新維度曼库。

論文中所提及的MLP,在這里也是用卷積實現(xiàn)的替久。

3.3 pointnet_cls.py:

將各種網(wǎng)絡(luò)組織在了一起凉泄,使得結(jié)構(gòu)更加清晰。

get_model定義了網(wǎng)絡(luò)結(jié)構(gòu)蚯根,get_loss定義了損耗后众。

網(wǎng)絡(luò)結(jié)構(gòu)

按照網(wǎng)絡(luò)流程,將整個網(wǎng)絡(luò)分為以下幾個階段颅拦。

網(wǎng)絡(luò)輸入:[B,N,3,1]蒂誉。

1. Input Transform Net與原始輸入相乘

2.特征提取

這部分使用的都是2d-conv。

首先用[1,3]的卷積核將點云的寬卷成1距帅,使用64個卷積核右锨,得到輸出維度[B,N,1,64]。再接一個[1,1]的卷積核碌秸,再次提取特征绍移。

3. Feature Transform-Net與抽取出的特征相乘

這個部分看做子網(wǎng)絡(luò),單獨使用model/transform_net.py實現(xiàn)讥电。

實現(xiàn)過程中蹂窖,先用幾次[1,1]的卷積將特征升維,得到[B,N,1,1024]恩敌。然后在N維度上使用max pooling瞬测,reshape得到[B,1024]。在經(jīng)過FC進(jìn)行特征降維纠炮,得到[B,256]月趟。再生成一個[256,64*64]的T-NET,相乘后得到[B,4096]恢口,reshape成[B,64,64]孝宗。

T-NET和原輸入tensor做張量乘法,expand第二維耕肩,得到STN的輸出[B,N,1,64]碳褒。

4.特征整合

又是一系列的[1,1]卷積,將特征升維到[B,N,1,1024]看疗。

5.對稱操作(Symmetry Function )

在N維度上使用max pooling,再reshape掉為1的維度睦授,得到[B,1024]两芳。

6.預(yù)測結(jié)果

接續(xù)幾個全連接和drop out,降維到40去枷,得到結(jié)果[B,40]怖辆。


loss設(shè)計

loss分為三部分:

classify_loss:分類的交叉熵?fù)p失是复。

mat_diff_loss:這個用于強(qiáng)迫T-NET把自己學(xué)的很正交。

reg_weight:正則項竖螃。

參考原文:https://blog.csdn.net/pikachu_777/article/details/83541115?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淑廊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子特咆,更是在濱河造成了極大的恐慌季惩,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腻格,死亡現(xiàn)場離奇詭異画拾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)菜职,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門青抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酬核,你說我怎么就攤上這事蜜另。” “怎么了嫡意?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵举瑰,是天一觀的道長。 經(jīng)常有香客問我鹅很,道長嘶居,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任促煮,我火速辦了婚禮邮屁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菠齿。我一直安慰自己佑吝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布绳匀。 她就那樣靜靜地躺著芋忿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疾棵。 梳的紋絲不亂的頭發(fā)上戈钢,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音是尔,去河邊找鬼殉了。 笑死,一個胖子當(dāng)著我的面吹牛拟枚,可吹牛的內(nèi)容都是我干的薪铜。 我是一名探鬼主播众弓,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼隔箍!你這毒婦竟也來了谓娃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蜒滩,失蹤者是張志新(化名)和其女友劉穎滨达,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帮掉,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡弦悉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蟆炊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稽莉。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涩搓,靈堂內(nèi)的尸體忽然破棺而出污秆,到底是詐尸還是另有隱情,我是刑警寧澤昧甘,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布良拼,位于F島的核電站,受9級特大地震影響充边,放射性物質(zhì)發(fā)生泄漏庸推。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一浇冰、第九天 我趴在偏房一處隱蔽的房頂上張望贬媒。 院中可真熱鬧,春花似錦肘习、人聲如沸际乘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脖含。三九已至,卻和暖如春投蝉,著一層夾襖步出監(jiān)牢的瞬間养葵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工瘩缆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留关拒,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像夏醉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涌韩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容