PointCNN代碼閱讀筆記

Readme閱讀

代碼文件內(nèi)容

  • X-conv及PointCNN架構(gòu):pointcnn.py
  • 分類任務(wù)超參數(shù):pointcnn_cls.py
  • 分割任務(wù)相關(guān):pointcnn_seg.py

關(guān)于 X-Conv 和 X-DeConv 的參數(shù)

  • 以shapenet_x8_2048_fps.py 文件的代碼為例
xconv_param_name = ('K', 'D', 'P', 'C', 'links')
xconv_params = [dict(zip(xconv_param_name, xconv_param)) for xconv_param in
                [(8, 1, -1, 32 * x, []),
                 (12, 2, 768, 32 * x, []),
                 (16, 2, 384, 64 * x, []),
                 (16, 6, 128, 128 * x, [])]]

xdconv_param_name = ('K', 'D', 'pts_layer_idx', 'qrs_layer_idx')
xdconv_params = [dict(zip(xdconv_param_name, xdconv_param)) for xdconv_param in
                 [(16, 6, 3, 2),
                  (12, 6, 2, 1),
                  (8, 6, 1, 0),
                  (8, 4, 0, 0)]]

xconv_params

  • K:近鄰數(shù)
  • D:膨脹率
  • P:輸出代表點的數(shù)量(-1表示輸出輸入中的所有點)
  • C:輸出通道數(shù)(深度)
  • links:DesNet風(fēng)格的連接(元組形式妆丘,表示該層輸入包含倒數(shù)X層的輸出)

xdconv_params

  • K锄俄,D:與上同
  • pts_layer_idx :指定某層X-conv的輸出作為X-dconv的輸入
  • qrs_layer_idx :指定某層X-conv的輸出與X-dconv輸出混合

PointCNN.py

X-conv結(jié)構(gòu)

def xconv(pts, fts, qrs, tag, N, K, D, P, C, C_pts_fts, is_training, with_X_transformation, depth_multiplier,sorting_method=None, with_global=False):

函數(shù)參數(shù)

  • pts:points
  • fts:features
  • qrs:queries
  • K:近鄰數(shù)
  • D:膨脹率
  • P:點數(shù)目
  • C:通道數(shù)(深度)
  • with_X_transformation:是否需要X變換
_, indices_dilated = pf.knn_indices_general(qrs, pts, K * D, True)
indices = indices_dilated[:, :, ::D, :]
def knn_indices_general(queries, points, k, sort=True, unique=True):
    queries_shape = tf.shape(queries)
    batch_size = queries_shape[0]
    point_num = queries_shape[1]

    D = batch_distance_matrix_general(queries, points)
    if unique:
        prepare_for_unique_top_k(D, points)
    distances, point_indices = tf.nn.top_k(-D, k=k, sorted=sort)  # (N, P, K)
    batch_indices = tf.tile(tf.reshape(tf.range(batch_size), (-1, 1, 1, 1)), (1, point_num, k, 1))
    indices = tf.concat([batch_indices, tf.expand_dims(point_indices, axis=3)], axis=3)
    return -distances, indices
def batch_distance_matrix_general(A, B):
    r_A = tf.reduce_sum(A * A, axis=2, keep_dims=True)
    r_B = tf.reduce_sum(B * B, axis=2, keep_dims=True)
    m = tf.matmul(A, tf.transpose(B, perm=(0, 2, 1)))
    D = r_A - 2 * m + tf.transpose(r_B, perm=(0, 2, 1))
    return D
def prepare_for_unique_top_k(D, A):
    indices_duplicated = tf.py_func(find_duplicate_columns, [A], tf.int32)
    D += tf.reduce_max(D)*tf.cast(indices_duplicated, tf.float32)
  • 涉及維度變化,不太理解
nn_pts = tf.gather_nd(pts, indices, name=tag + 'nn_pts')  # (N, P, K, 3)
nn_pts_center = tf.expand_dims(qrs, axis=2, name=tag + 'nn_pts_center')  # (N, P, 1, 3)
nn_pts_local = tf.subtract(nn_pts, nn_pts_center, name=tag + 'nn_pts_local')  # (N, P, K, 3)
  • 得到相對坐標(biāo)矩陣(第一步)
  • nn_pts_local應(yīng)對應(yīng)于公式中P'
nn_fts_from_pts_0 = pf.dense(nn_pts_local, C_pts_fts, tag + 'nn_fts_from_pts_0', is_training)
nn_fts_from_pts = pf.dense(nn_fts_from_pts_0, C_pts_fts, tag + 'nn_fts_from_pts', is_training)

if fts is None:
    nn_fts_input = nn_fts_from_pts
else:
    nn_fts_from_prev = tf.gather_nd(fts, indices, name=tag + 'nn_fts_from_prev')
    nn_fts_input = tf.concat([nn_fts_from_pts, nn_fts_from_prev], axis=-1, name=tag + 'nn_fts_input')

處理特征

  • 從點云坐標(biāo)中提取特征(第二步)
  • 將提取的特征和原有特征合并(第三步)
if with_X_transformation:
    ######################## X-transformation #########################
    X_0 = pf.conv2d(nn_pts_local, K * K, tag + 'X_0', is_training, (1, K))
    X_0_KK = tf.reshape(X_0, (N, P, K, K), name=tag + 'X_0_KK')
    X_1 = pf.depthwise_conv2d(X_0_KK, K, tag + 'X_1', is_training, (1, K))
    X_1_KK = tf.reshape(X_1, (N, P, K, K), name=tag + 'X_1_KK')
    X_2 = pf.depthwise_conv2d(X_1_KK, K, tag + 'X_2', is_training, (1, K), activation=None)
    X_2_KK = tf.reshape(X_2, (N, P, K, K), name=tag + 'X_2_KK')
    fts_X = tf.matmul(X_2_KK, nn_fts_input, name=tag + 'fts_X')
    ###################################################################
else:
    fts_X = nn_fts_input

X變換矩陣

  • 一層卷積+兩層深度可分卷積(不理解)
  • 卷積核為(1勺拣,k)奶赠,將(N,P,K,3)提升至(N,P,K,K)(第四步)
  • 將得到的X變換矩陣與特征矩陣相乘,得到可以直接與卷積核卷積的特征(第五步)

PointCNN架構(gòu)

train_val_cls.py

  • 數(shù)據(jù)預(yù)處理(切片药有,亂序)
  • 訓(xùn)練輪數(shù)毅戈,batch_size
  • 數(shù)據(jù)增強
  • tensorboard
  • 準(zhǔn)確率與loss
    • acc:總準(zhǔn)確率
    • macc:每類平均準(zhǔn)確率
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苹丸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苇经,更是在濱河造成了極大的恐慌赘理,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扇单,死亡現(xiàn)場離奇詭異商模,居然都是意外死亡,警方通過查閱死者的電腦和手機蜘澜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門阻桅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兼都,你說我怎么就攤上這事』” “怎么了扮碧?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杏糙。 經(jīng)常有香客問我慎王,道長,這世上最難降的妖魔是什么宏侍? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任赖淤,我火速辦了婚禮,結(jié)果婚禮上谅河,老公的妹妹穿的比我還像新娘咱旱。我一直安慰自己,他們只是感情好绷耍,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布吐限。 她就那樣靜靜地躺著,像睡著了一般褂始。 火紅的嫁衣襯著肌膚如雪诸典。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天崎苗,我揣著相機與錄音狐粱,去河邊找鬼。 笑死胆数,一個胖子當(dāng)著我的面吹牛肌蜻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幅慌,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼宋欺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起齿诞,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酸休,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祷杈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斑司,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年但汞,在試婚紗的時候發(fā)現(xiàn)自己被綠了宿刮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡私蕾,死狀恐怖僵缺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踩叭,我是刑警寧澤磕潮,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站容贝,受9級特大地震影響自脯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斤富,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一膏潮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧满力,春花似錦焕参、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悔耘,卻和暖如春讲岁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衬以。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工缓艳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人看峻。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓阶淘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親互妓。 傳聞我的和親對象是個殘疾皇子溪窒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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