Mesh-gpt(點處理、儲存指令碼,Transformer)

Sherioc發表於2024-09-01

小結:

1、配置了學長的環境,並編寫點處理(旋轉、映象)和儲存(由記憶體numpy陣列到shp檔案)指令碼。

2、初步閱讀mesh-gpt論文,思考Transformer網路架構(翻譯模型和補全模型的訓練區別)

環境配置

pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118
image-20240830135620846
pip install git+https://github.com/peng0817-3dv/floorplan-reconsturtion-based-plane-triangle.git
image-20240830140108251
pip list
image-20240830140537015

安裝缺少的庫

pip install pytest
pip install matplotlib

1、嘗試執行test/load_shp_test.py ,報錯

image-20240830141430457

多種辦法完美解決AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘_matplotlib.use('tkagg')-CSDN部落格

新增

image-20240830141845964

成功執行test/load_shp_test.py ,並生成load_shp_test目錄結果

image-20240830141932244

資料增強

faces和edges存的是vertices的索引(face是三個點+置信度資訊;edge是兩個點+置信度資訊),也就是說face和edge本身並不包含任何位置資訊,有位置的是vertices的座標。

資料結構

vertices = [(x1, y1), (x2, y2), ...]
vertices_confidence = [pv1, pv2, ...]

edges = [(1, 0), (15, 1), ...] #邊的兩端點序號
edges_confidence = [ev1, ev2, ...]
point_id_to_edges_id = { point1_id : [edge1_id,edge2_id,...], point2_id:[...] }

faces = [(15, 1, 0), (39, 60, 38), ...] # 邊的三端點序號
faces_confidences = [ef1, ef2, ...]
faces_label = [-1, -1, ...]

image-20240831114117795

所以生成旋轉/翻轉的資料(資料增強)實際上是對點集vertices的處理

原始點集

image-20240830193251325

在載入點的函式get_vertices_data中對點進行90度旋轉

在二維空間中,繞原點逆時針旋轉一個角度θ的變換可以用以下公式表示:

新的x' = x * cos(θ) - y * sin(θ)
新的y' = x * sin(θ) + y * cos(θ)

對於90度的旋轉(θ = 90° 或 π/2 弧度),cos(π/2) = 0 且 sin(π/2) = 1,所以變換公式簡化為:

新的x' = -y
新的y' = x

image-20240830202655128

結果(左側為原始的,右側為旋轉90度)

image-20240830203613806

image-20240830203349162

image-20240830203400637

image-20240830203414315

image-20240830203426694

封裝函式

定義rotate_vertices對點進行旋轉,旋轉角度(90 / 180 / 270)

定義mirror_vertices對點進行映象,映象軸(x / y)

def rotate_vertices(vertices, angle):
    """
    對點進行旋轉
    :param vertices:
    :param angle: 旋轉角度(90 / 180 / 270)
    :return:
    """
    if angle == 90:
        rotated_vertices = [(-y, x) for x, y in vertices]
    elif angle == 180:
        rotated_vertices = [(-x, -y) for x, y in vertices]
    elif angle == 270:
        rotated_vertices = [(y, -x) for x, y in vertices]

    return rotated_vertices

def mirror_vertices(vertices, axis):
    """
    對點進行映象
    :param vertices:
    :param axis: 映象軸(x / y)
    :return:
    """
    if axis == 'x':
        mirrored_vertices = [(x, -y) for x, y in vertices]
    elif axis == 'y':
        mirrored_vertices = [(-x, y) for x, y in vertices]
    return mirrored_vertices

只需要載入點後備份並進行vertices變換便可得到增強的資料

image-20240830210737717

疑問:點的置信度、邊的置信度和麵的置信度是什麼意思,後者是否可以由前者得到

比如一條邊有兩個點,一個面有三個邊(三個點),邊/面的置信度是怎麼算的?和點的置信度有什麼關聯?

image-20240830212023852

資料儲存

編寫儲存指令碼save_shp.py,實現從gpu中的資料obj_datas儲存回shp檔案

  • 執行save_shp.py/的test,實現載入資料到obj_datas並儲存成shp檔案

  • 執行load_shp.py, 將儲存後的shp再次視覺化

結果相同

image-20240831185212390

論文

mesh-gpt論文

Transformer的翻譯模型和補全模型

對於補全模型

微信(GPT和Bert的預訓練)

mesh—gpt、cad(generate)

編碼器:他是誰

Transformer:整個場景表達了怎樣的語義,(他是否滿足這個語義,他在這個語義場景中扮演什麼)

long long ago, .....

Next

Transformer-GPT原理

Mesh-GPT demo

相關文章