国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【pytorch】如何用自有數(shù)據(jù)集訓(xùn)練3D gaussian

這篇具有很好參考價(jià)值的文章主要介紹了【pytorch】如何用自有數(shù)據(jù)集訓(xùn)練3D gaussian。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

條件

已有場(chǎng)景數(shù)據(jù):

3dgaussian 指定自己的數(shù)據(jù),3DGS,pytorch,3d,人工智能

videos中含34個(gè)不同視角拍攝的同一動(dòng)作視頻

cams中為34個(gè)不同視角對(duì)應(yīng)的相機(jī)參數(shù):內(nèi)外參+焦距

思考

如何利用動(dòng)態(tài)視頻 完成用于處理靜態(tài)場(chǎng)景的3D gaussian?

  1. 每個(gè)視角的對(duì)應(yīng)幀 -> 合成一個(gè)文件夾 即34張圖片 34個(gè)視角

  2. 暴力做法:?jiǎn)文恳曨l

看上去第一種比較靠譜一點(diǎn),試試就逝世(bu)

視頻轉(zhuǎn)幀

設(shè)定30fps

import cv2
import os

def extract_frames(video_path, output_folder):
    # 打開(kāi)視頻文件
    video = cv2.VideoCapture(video_path)

    # 獲取視頻的幀率
    fps = video.get(cv2.CAP_PROP_FPS)

    # 計(jì)算幀間隔
    frame_interval = round(fps / 30)  # 每秒 30 幀

    # 初始化幀計(jì)數(shù)器
    frame_count = 0

    # 逐幀讀取視頻并保存幀序列
    while True:
        ret, frame = video.read()

        # 如果無(wú)法讀取到幀,則退出循環(huán)
        if not ret:
            break

        # 按幀間隔保存幀
        if frame_count % frame_interval == 0:
            frame_filename = f"{output_folder}/{frame_count:05d}.jpg"
            cv2.imwrite(frame_filename, frame)

        frame_count += 1

    # 釋放資源
    video.release()


def process_videos(input_folder, output_folder):
    # 遍歷輸入文件夾中的所有文件
    for filename in os.listdir(input_folder):
        # 檢查文件是否為視頻文件
        if filename.endswith(".mp4"):
            video_path = os.path.join(input_folder, filename)
            video_name = os.path.splitext(filename)[0]
            video_output_folder = os.path.join(output_folder, video_name)

            # 創(chuàng)建視頻的輸出文件夾
            os.makedirs(video_output_folder, exist_ok=True)

            # 提取幀序列
            extract_frames(video_path, video_output_folder)

幀處理

將不同視頻文件夾下相同命名的圖像放到一個(gè)新文件夾下。

結(jié)果:每個(gè)文件夾34張不同視角的同一時(shí)刻圖像。

import os
import shutil

def move_files_to_unique_folders(source_folder, destination_folder):
    # 創(chuàng)建目標(biāo)文件夾
    os.makedirs(destination_folder, exist_ok=True)

    # 獲取源文件夾列表
    source_folders = [f for f in os.listdir(source_folder) if os.path.isdir(os.path.join(source_folder, f))]

    # 創(chuàng)建字典來(lái)存儲(chǔ)相同文件名(不帶后綴)和對(duì)應(yīng)的文件夾路徑
    file_to_folder = {}

    # 遍歷源文件夾列表
    for folder_name in source_folders:
        # 獲取源文件夾路徑
        folder_path = os.path.join(source_folder, folder_name)

        # 獲取源文件夾中的所有文件
        files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

        # 遍歷文件列表
        for filename in files:
            # 分割文件名和文件擴(kuò)展名
            file_name, file_ext = os.path.splitext(filename)

            # 檢查文件名(不帶后綴)是否已經(jīng)在字典中存在
            if file_name in file_to_folder:
                # 如果文件名已經(jīng)存在,將文件移動(dòng)到對(duì)應(yīng)的文件夾中
                destination_path = os.path.join(file_to_folder[file_name], f'{int(folder_name):05d}.jpg')
            else:
                # 如果文件名不存在,創(chuàng)建新的文件夾,并將文件移動(dòng)到該文件夾中
                new_folder = os.path.join(destination_folder, file_name)
                os.makedirs(new_folder, exist_ok=True)
                file_to_folder[file_name] = new_folder
                destination_path = os.path.join(new_folder, f'{int(folder_name):05d}.jpg')

            source_path = os.path.join(folder_path, filename)
            shutil.move(source_path, destination_path)

colmap生成位姿

點(diǎn)云生成過(guò)程參考:colmap簡(jiǎn)介及入門(mén)級(jí)使用

用meshlab打開(kāi)欣賞一下重建效果:

3dgaussian 指定自己的數(shù)據(jù),3DGS,pytorch,3d,人工智能

這不就有了嗎:
3dgaussian 指定自己的數(shù)據(jù),3DGS,pytorch,3d,人工智能

整理一下:

3dgaussian 指定自己的數(shù)據(jù),3DGS,pytorch,3d,人工智能

因?yàn)檫@里相機(jī)的格式不同于源碼,所以接下來(lái)去調(diào)整一下3D gaussian讀取數(shù)據(jù)的代碼

調(diào)整

因?yàn)橐呀?jīng)具備sparse和images,淺淺運(yùn)行看能不能直接跑,

然后,報(bào)錯(cuò):
3dgaussian 指定自己的數(shù)據(jù),3DGS,pytorch,3d,人工智能

        if intr.model=="SIMPLE_PINHOLE":
            focal_length_x = intr.params[0]
            FovY = focal2fov(focal_length_x, height)
            FovX = focal2fov(focal_length_x, width)
        elif intr.model=="PINHOLE":
            focal_length_x = intr.params[0]
            focal_length_y = intr.params[1]
            FovY = focal2fov(focal_length_y, height)
            FovX = focal2fov(focal_length_x, width)
        else:
            assert False, "Colmap camera model not handled: only undistorted datasets (PINHOLE or SIMPLE_PINHOLE cameras) supported!"

看看intr.model到底是何方神圣:
3dgaussian 指定自己的數(shù)據(jù),3DGS,pytorch,3d,人工智能

原因:

在相機(jī)模型中,“Pinhole”(針孔)指的是一種理想化的相機(jī)模型,它假設(shè)光線通過(guò)一個(gè)小孔進(jìn)入相機(jī)并形成圖像。這種模型沒(méi)有考慮相機(jī)鏡頭的畸變效應(yīng)。
然而,實(shí)際的相機(jī)鏡頭會(huì)引入畸變,因此在實(shí)際應(yīng)用中,常常會(huì)采用更復(fù)雜的相機(jī)模型來(lái)考慮畸變效應(yīng)。其中一種常見(jiàn)的相機(jī)模型是"SIMPLE_RADIAL"(簡(jiǎn)單徑向畸變模型),它是一種簡(jiǎn)化的徑向畸變模型。
COLMAP 是一個(gè)開(kāi)源的三維重建軟件,它使用相機(jī)內(nèi)參和畸變參數(shù)進(jìn)行相機(jī)建模和三維重建。在 COLMAP 中,“SIMPLE_RADIAL” 可能是對(duì)針孔相機(jī)模型加入畸變模型的一種表示方式。
因此,盡管您的相機(jī)模型是針孔模型,但在 COLMAP 中,它可能以 “SIMPLE_RADIAL” 的形式進(jìn)行表示,以考慮徑向畸變效應(yīng)。請(qǐng)注意,具體的相機(jī)模型表示方式可能因軟件和工具的不同而有所差異。在使用 COLMAP 進(jìn)行相機(jī)標(biāo)定和三維重建時(shí),建議參考相關(guān)文檔以了解具體的相機(jī)模型表示方式和參數(shù)含義。

不管怎么說(shuō),先忽略徑向畸變,看看訓(xùn)練結(jié)果吧。

(發(fā)現(xiàn)可以在colmap時(shí)指定相機(jī)模型為PINHOLE,下一節(jié)進(jìn)行介紹)

在某些情況下,可以忽略徑向畸變效應(yīng)。特別是對(duì)于小焦距和高質(zhì)量的相機(jī)鏡頭,徑向畸變可能非常小,對(duì)圖像質(zhì)量的影響可以忽略不計(jì)。在這種情況下,可以使用簡(jiǎn)化的針孔相機(jī)模型,忽略徑向畸變效應(yīng)。
然而,在其他情況下,特別是對(duì)于大焦距鏡頭或低質(zhì)量的相機(jī)鏡頭,徑向畸變可能會(huì)較大地影響圖像質(zhì)量。在這種情況下,為了獲得更準(zhǔn)確的結(jié)果,應(yīng)該考慮徑向畸變效應(yīng)并使用適當(dāng)?shù)幕兡P汀?br> 在進(jìn)行相機(jī)標(biāo)定和計(jì)算機(jī)視覺(jué)應(yīng)用時(shí),通常建議考慮相機(jī)的畸變效應(yīng),以提高精確度和準(zhǔn)確性。通過(guò)進(jìn)行相機(jī)標(biāo)定,可以獲取相機(jī)的內(nèi)參矩陣和畸變參數(shù),進(jìn)而考慮徑向畸變效應(yīng)。
總之,是否可以忽略徑向畸變效應(yīng)取決于相機(jī)鏡頭的質(zhì)量和所需的精度。對(duì)于一些特定的應(yīng)用場(chǎng)景,可以根據(jù)實(shí)際情況決定是否忽略徑向畸變,但一般建議在相機(jī)模型中考慮徑向畸變效應(yīng),以獲得更準(zhǔn)確的結(jié)果。

于是手動(dòng)指定一下:

def read_intrinsics_binary(path_to_model_file):
    """
    see: src/base/reconstruction.cc
        void Reconstruction::WriteCamerasBinary(const std::string& path)
        void Reconstruction::ReadCamerasBinary(const std::string& path)
    """
    cameras = {}
    with open(path_to_model_file, "rb") as fid:
        num_cameras = read_next_bytes(fid, 8, "Q")[0]
        for _ in range(num_cameras):
            camera_properties = read_next_bytes(
                fid, num_bytes=24, format_char_sequence="iiQQ")
            camera_id = camera_properties[0]
            model_id = camera_properties[1]
            model_name = CAMERA_MODEL_IDS[1].model_name # 指定PINHOLE
            # model_name = CAMERA_MODEL_IDS[camera_properties[1]].model_name

【colmap】已知相機(jī)位姿情況下進(jìn)行三維重建

PINHOLE

如上所述,在colmap生成相機(jī)位姿時(shí)輸入相機(jī)模型參數(shù)

COLMAP命令行

因?yàn)槭莣indows系統(tǒng),所以需要對(duì)其中的指令稍作調(diào)整:

 D:\COLMAP-3.9.1-windows-cuda\COLMAP.bat automatic_reconstructor --workspace_path . --image_path ./images --sparse 1 --dense 0 --camera_model SIMPLE_PINHOLE

開(kāi)始訓(xùn)練

python train.py -s <path to COLMAP or NeRF Synthetic dataset> --eval # Train with train/test split
python render.py -m <path to trained model> # Generate renderings
python metrics.py -m <path to trained model> # Compute error metrics on renderings

3dgaussian 指定自己的數(shù)據(jù),3DGS,pytorch,3d,人工智能文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-840739.html

到了這里,關(guān)于【pytorch】如何用自有數(shù)據(jù)集訓(xùn)練3D gaussian的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • YOLOv8 OBB實(shí)現(xiàn)自有數(shù)據(jù)集缺陷旋轉(zhuǎn)檢測(cè),從數(shù)據(jù)標(biāo)記格式轉(zhuǎn)換到訓(xùn)練的手把手教程

    YOLOv8 OBB實(shí)現(xiàn)自有數(shù)據(jù)集缺陷旋轉(zhuǎn)檢測(cè),從數(shù)據(jù)標(biāo)記格式轉(zhuǎn)換到訓(xùn)練的手把手教程

    ?????? 本文內(nèi)容:YOLOv8 OBB實(shí)現(xiàn)自有數(shù)據(jù)集缺陷旋轉(zhuǎn)檢測(cè),從數(shù)據(jù)標(biāo)記到訓(xùn)練的手把手教程 YOLO OBB格式通過(guò)四個(gè)角點(diǎn)指定邊界框,坐標(biāo)在0到1之間歸一化。它遵循以下格式: 在內(nèi)部,YOLO以xywhr格式處理?yè)p失和輸出,xywhr格式表示邊界框的中心點(diǎn)(xy)、寬度、高度和旋轉(zhuǎn)。 ? 直接

    2024年01月16日
    瀏覽(20)
  • 基于3D Gaussian Splatting與NeRF實(shí)現(xiàn)三維重建(使用IPhone創(chuàng)建數(shù)據(jù)集)

    基于3D Gaussian Splatting與NeRF實(shí)現(xiàn)三維重建(使用IPhone創(chuàng)建數(shù)據(jù)集)

    本項(xiàng)目參考YouTube中博主( Spectacular AI ) 詳細(xì)可了解:SpectacularAI官網(wǎng) 本文項(xiàng)目構(gòu)建在Windows與Ubuntu中,二者在項(xiàng)目構(gòu)建中并未有實(shí)質(zhì)性的差距,可相互參考環(huán)境與參數(shù)的配置,本文即在Windows11(已配置好CUDA)中進(jìn)行。 Windows下配置CUDA的方法可參考 :《TensorFlow-GPU-2.4.1與CUDA安

    2024年01月17日
    瀏覽(36)
  • Server - 高性能的 PyTorch 訓(xùn)練環(huán)境配置 (PyTorch3D 和 FairScale)

    Server - 高性能的 PyTorch 訓(xùn)練環(huán)境配置 (PyTorch3D 和 FairScale)

    歡迎關(guān)注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130863537 PyTorch3D 是基于 PyTorch 的 3D 數(shù)據(jù)深度學(xué)習(xí)庫(kù),提供了高效、模塊化和可微分的組件,以簡(jiǎn)化 3D 深度學(xué)習(xí)的難度。PyTorch3D 包含了常用的 3D 算子和損失函數(shù),以及一個(gè)靈活的渲染

    2024年02月06日
    瀏覽(23)
  • GPT實(shí)戰(zhàn)系列-如何用自己數(shù)據(jù)微調(diào)ChatGLM2模型訓(xùn)練

    廣告文案生成模型 輸入文字 :類(lèi)型#裙 顏色#藍(lán)色 風(fēng)格#清新*圖案#蝴蝶結(jié) 輸出文案 :裙身處采用立體蝴蝶結(jié)裝飾輔以藍(lán)色條帶點(diǎn)綴,令衣身造型飽滿(mǎn)富有層次的同時(shí)為其注入一絲甜美氣息。將女孩清新嬌俏的一面襯托而出。 訓(xùn)練和測(cè)試數(shù)據(jù)組織: 數(shù)據(jù)可以從 下載鏈接,t

    2024年02月06日
    瀏覽(18)
  • Gaussian-Splatting 訓(xùn)練并導(dǎo)入U(xiǎn)nity中

    Gaussian-Splatting 訓(xùn)練并導(dǎo)入U(xiǎn)nity中

    注意勾選自動(dòng)添加路徑到環(huán)境變量中,不然要手動(dòng)添加環(huán)境變量哦! cmd 檢查安裝是否正常: cmd 檢查安裝是否正常: 把ffmpeg文件夾路徑添加到環(huán)境變量Path中 進(jìn)入gaussian-splatting,cmd 執(zhí)行: 接著上面繼續(xù)執(zhí)行 進(jìn)入 gaussian-splattingsubmodulesdiff-gaussian-rasterization 文件夾 ,cmd執(zhí)行:

    2024年01月20日
    瀏覽(22)
  • 【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的全網(wǎng)最詳細(xì)的解析

    【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的全網(wǎng)最詳細(xì)的解析

    3D Gaussian Splatting for Real-Time Radiance Field Rendering 論文:link code:link video:link 1. 開(kāi)山之作 Nerf 一切的開(kāi)始都是起源于 NERF 開(kāi)山之作 這里由詳細(xì)的學(xué)習(xí)與拆解 【NERF】入門(mén)學(xué)習(xí)整理(一) 【NERF】入門(mén)學(xué)習(xí)整理(二) 【NERF】入門(mén)學(xué)習(xí)整理(三) 【NeRF數(shù)據(jù)集】LLFF格式數(shù)據(jù)集處理co

    2024年04月15日
    瀏覽(109)
  • 3D Gaussian Splatting

    3D Gaussian Splatting

    本文轉(zhuǎn)載于大佬~~ 這是3D Gaussian Splatting綜述, 先回顧3D?Gaussian的原理和應(yīng)用,借著全面比較了3D GS在靜態(tài)場(chǎng)景、動(dòng)態(tài)場(chǎng)景和駕駛場(chǎng)景中的性能,最后為未來(lái)指明了研究方向! 三維 Gaussian splatting(3DGS)是近年來(lái)在顯式輻射場(chǎng)和計(jì)算機(jī)圖形學(xué)領(lǐng)域出現(xiàn)的一種變革性技術(shù)。這種創(chuàng)新

    2024年04月08日
    瀏覽(25)
  • 3D Gaussian Splatting的使用

    3D Gaussian Splatting的使用

    今年SIGGRAPH最佳論文,學(xué)習(xí)了一下,果然厲害,具體論文原理就不說(shuō)了,一搜都有,主要是看看怎么用,自己能不能把身邊的場(chǎng)景快速建個(gè)模。 趕緊記錄下,好像這幾天在這個(gè)基礎(chǔ)上又有很多花樣出來(lái)了… 我的系統(tǒng)是Ubuntu22.04。 開(kāi)源作者已經(jīng)都弄的很詳細(xì)了,也有教程。 首

    2024年02月04日
    瀏覽(22)
  • 【輻射場(chǎng)】3D Gaussian Splatting

    【輻射場(chǎng)】3D Gaussian Splatting

    ? , 3D Gaussian Splatting,下文簡(jiǎn)稱(chēng)3DGS,是好一段時(shí)間以來(lái)在三維內(nèi)容創(chuàng)作和三維重建領(lǐng)域比較有熱度的一項(xiàng)技術(shù)。 它屬于 基于圖像的三維重建方法 ,意思就是你對(duì)現(xiàn)實(shí)物體或者場(chǎng)景拍照片,就能給你訓(xùn)練成一個(gè)場(chǎng)景模型,能夠被渲染出來(lái)給你看。 它產(chǎn)生的模型可以作為三維

    2024年02月03日
    瀏覽(21)
  • 3D Gaussian Splatting 渲染過(guò)程

    3D Gaussian Splatting 渲染過(guò)程

    給定一組三維高斯點(diǎn),渲染步驟大致為:1.camera?space轉(zhuǎn)成ray space 2.對(duì)像平面進(jìn)行分塊,然后對(duì)高斯排序 3.正投影發(fā)出射線進(jìn)行α-blending 這個(gè)步驟將NeRF中的投影過(guò)程變?yōu)榱苏队?,引入了ray space的概念,讓3D Gaussian 變?yōu)?D Gaussian. 透視投影和正投影? ? ? ? ? ? ? ? ? ? 一般的渲

    2024年01月20日
    瀏覽(40)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包