小結:
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
pip install git+https://github.com/peng0817-3dv/floorplan-reconsturtion-based-plane-triangle.git
pip list
安裝缺少的庫
pip install pytest
pip install matplotlib
1、嘗試執行test/load_shp_test.py
,報錯
多種辦法完美解決AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘_matplotlib.use('tkagg')-CSDN部落格
新增
成功執行test/load_shp_test.py
,並生成load_shp_test
目錄結果
資料增強
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, ...]
所以生成旋轉/翻轉的資料(資料增強)實際上是對點集vertices的處理
原始點集
在載入點的函式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
結果(左側為原始的,右側為旋轉90度)
封裝函式
定義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變換便可得到增強的資料
疑問:點的置信度、邊的置信度和麵的置信度是什麼意思,後者是否可以由前者得到
比如一條邊有兩個點,一個面有三個邊(三個點),邊/面的置信度是怎麼算的?和點的置信度有什麼關聯?
資料儲存
編寫儲存指令碼save_shp.py
,實現從gpu中的資料obj_datas儲存回shp檔案
-
執行
save_shp.py/
的test,實現載入資料到obj_datas並儲存成shp檔案 -
執行
load_shp.py
, 將儲存後的shp再次視覺化
結果相同
論文
mesh-gpt論文
Transformer的翻譯模型和補全模型
對於補全模型
微信(GPT和Bert的預訓練)
mesh—gpt、cad(generate)
編碼器:他是誰
Transformer:整個場景表達了怎樣的語義,(他是否滿足這個語義,他在這個語義場景中扮演什麼)
long long ago, .....
Next
Transformer-GPT原理
Mesh-GPT demo