自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(253)
  • 收藏
  • 关注

原创 一個Tensor的一生 - torch.rand篇

Life of a Tensor這篇文章中介紹了torch.rand函數從Python API一直到C++底層的調用過程,寫於2019年7月,當時的PyTorch版本為1.1.0。參考該篇文章,本篇的關注點同樣在整個調用流程,不過是基於較新的PyTorch 2.0版。

2023-12-05 22:43:48 612

原创 torch::和at:: factory function的差別

在這兩個例子中,torch.rand factory function會根據requires_grad參數生成一個可微或不可微的張量。深入其C++底層,會發現它們調用的其實是torch::和at::兩個不同命名空間裡的factory function,本篇將會通過查看源碼和範例程序來了解不同factory function生成的張量有何差別。

2023-11-28 21:50:02 1025

原创 P3P Kneip - A Novel Parametrization of the Perspective-Three-Point Problem for a Direct Computation

Perspective-Three-Point (P3P)問題的目標是在已知P1​,P2​,P3​三個三維點和對應的二維點的情況下,求解相機的外參R與t。本篇論文提出了一種直接計算P3P問題closed-form solution的算法。本文為Kneip論文裡第二章Theory的筆記,著重於補全論文裡省略的公式推導。

2021-02-24 21:48:35 481

原创 PyTorch中的STATIC_CONSTEXPR_STR_INL_EXCEPT_WIN_CUDA和STATIC_CONST_STR_OUT_OF_LINE_FOR_WIN_CUDA

在查看PyTorch算子源碼時會不時看到STATIC_CONSTEXPR_STR_INL_EXCEPT_WIN_CUDA和STATIC_CONST_STR_OUT_OF_LINE_FOR_WIN_CUDA這兩個macro,它們被定義於c10/macros/Macros.h,其作用簡單來說就是為class或struct定義static const字串並賦予初始值。

2023-11-30 15:35:46 469

原创 PyTorch中的intrusive_ptr

intrusive_ptr與unique_ptr,shared_ptr等一樣,都是smart pointer。但是intrusive_ptr比較特別,它所指向的物件類型必須繼承自intrusive_ptr_target,而intrusive_ptr_target必須實現引用計數相關的函數才行。在PyTorch中,StorageImpl繼承自c10::intrusive_ptr_target,所以c10::intrusive_ptr可以與StorageImpl搭配使用。

2023-10-24 22:23:22 754

原创 Python GIL及其釋放/獲取函數

Python默認使用CPython解釋器,當中會引入GIL,在CPython解釋器中,GIL(全局解釋器鎖)是一個互斥鎖,用於保護Python物件,避免它們在多線程執行被同時存取。多線程程式花了很多時間在GIL裡,解釋CPython bytecode,這時候GIL的存在便使得多線程程式無法充份利用多核系統。還好pybind11有提供釋放GIL的機制,pybind11提供了釋放和重新獲取GIL的API,即gil_scoped_release和gil_scoped_acquire這兩個類別,可以利用這兩個API

2023-10-12 10:27:12 398

原创 PyTorch中的pyi檔案生成機制

在PyTorch中如果查找python函數的定義,十有八九會跳轉到torch/_C/_VariableFunctions.pyi這個檔案。但是如果去PyTorch的github repo上尋找這個檔案,只能找到一個跟它名字類似的torch/_C/_VariableFunctions.pyi.in,卻找不到torch/_C/_VariableFunctions.pyi這個檔案本身。

2023-09-20 13:34:59 908

原创 PyTorch中的python_torch_functions_i.cpp檔案生成機制

編譯PyTorch後,torch/csrc/autograd/generated/目錄下會有python_torch_functions_0.cpp,python_torch_functions_1.cpp和python_torch_functions_2.cpp等檔案,本文便從setup.py依次來探討這些檔案是如何生成的。

2023-09-09 23:06:14 628

原创 撰寫自己的Python C擴展!

本篇為Extending and Embedding the Python Interpreter系列第一篇1. Extending Python with C or C++的學習筆記。Python平易近人但效率較差,所以有時候我們會希望能用C語言實作某些功能,再由Python端調用。舉個例子,假設我們想要寫一個名為spam的Python包,並透過以下方式調用

2023-09-07 10:51:54 210

原创 Python/C API - 模組,型別,Tuple,例外和引用計數

本文介紹在寫Python的C擴展時常用到的Python/C API中關於模組,型別,Tuple,例外和引用計數的函數。

2023-09-07 10:43:29 308

原创 cmake的add_custom_command及add_custom_target

在編譯的C++專案的過程中難免會需要對檔案或資料夾做複製,刪除,移動等操作。cmake這個編譯工具便提供了一種機制,讓使用者可以在編譯的過程插入欲執行的命令。具體方式是在中使用及。本文給出使用添加並執行命令的方式,以及使用的二種等價寫法。在正式進入之前,建議先了解一下cmake -E命令行工具。cmake -E除了可以在命令行中使用,在中,也可以通過及這兩個指令來呼叫執行。

2023-09-05 16:03:52 332

原创 PY_SSIZE_T_CLEAN macro的作用

Extending Python with C or C++中介紹了Python的C extension的寫法,它給出的範例前兩行如下:其中的作用為何?簡單來說是讓用於解析extensions functions/methods參數的函數把的長度參數當成而非型別。參考Parsing arguments and building values - Strings and buffers,的有兩個參數:分別代表字串本身及其長度,其中長度的型別必須是。根據以下說明:可以知道長度參數的型別預設是,如果定義了,

2023-09-04 17:37:03 597

原创 Python flags: --cflags, --includes, --ldflags, --libs

Python flags: --cflags, --includes, --ldflags, --libs。

2023-09-04 17:24:00 185

原创 cmake -E 命令行工具

cmake這個編譯工具提供了執行指令的功能,只要在cmake之後加上-E及欲執行的命令即可。注意cmake支援的命令與linux不完全相通,在使用之前建議先前往查詢用法。幾個常用指令的demo如下。

2023-09-03 20:59:10 292

原创 PyTorch檔案生成機制中的FileManager.write_with_template

PyTorch中有些檔案是在編譯過程中跑腳本生成的,如.pyi檔是由.pyi.in檔生成,torch/csrc/autograd/generated目錄下的.cpp檔則是由tools/autograd/templates下的template .cpp檔生成的。

2023-08-31 11:49:31 596

原创 Python typing函式庫和torch.types

在PyTorch中的Sequence, Iterable, Optional, Union都是什麼意思呢?他們是從一個叫做typing的庫中導入的。typing是Python的標準庫之一,作用是提供對類型提示的運行時支持。

2023-08-20 21:41:52 463

原创 Ubuntu下設定Redmine備份

Ubuntu下設定Redmine備份

2022-12-07 15:05:23 1264 1

原创 在Ubuntu中安裝Anaconda

在Ubuntu下安裝Anaconda很簡單,基本上只要照著Anaconda documentation - Installing on Linux裡的步驟做即可。

2022-11-06 20:17:40 1601

原创 redmine插件安裝及卸載

本文介紹redmine插件安裝及卸載的方式

2022-06-06 10:16:06 1488 1

原创 Generalized-ICP(GICP)論文研讀

ICP最基本的形式是point-to-point,即以點到點之間的距離作為損失函數;它的一個變種是point-to-plane,改用點到目標點局部擬合平面的距離作為損失函數。本篇介紹的GICP是上述兩者的generalization,它重新定義了自己的損失函數。point-to-point,point-to-plane,甚至plane-to-plane都可以用GICP這個統一的框架表達。

2022-02-09 10:19:32 3561 9

原创 兩獨立高斯隨機變數之和

兩獨立高斯隨機變數之和以下證明參考Sum of normally distributed random variables - Proof using characteristic functions。兩個隨機變數X,YX,YX,Y的特徵函數定義如下:φX(t)=E⁡(eitX),φY(t)=E⁡(eitY)\varphi_X (t) = \operatorname{E}\left(e^{itX}\right), \qquad \varphi_Y(t) = \operatorname{E}\left(

2022-02-08 15:20:08 1963

原创 兩獨立隨機變數之和的特徵函數

兩獨立隨機變數之和的特徵函數參考機率論 特性函數(1) - Properties,特徵函數(characteristic function)的定義為:φX(t)=E⁡(eit(X))\varphi_{X}(t)=\operatorname{E}\left(e^{it(X)}\right)φX​(t)=E(eit(X))。φX+Y(t)=E⁡(eit(X+Y))套用特徵函數的定義=E⁡(eit(X))E⁡(eit(Y))假設有兩獨立的隨機變數X,Y,則E⁡(XY)=E⁡(X)E⁡(Y)=φX(t)φY(t

2022-02-08 14:44:13 971

原创 兩隨機變數乘積的期望值

兩隨機變數乘積的期望值以下推導參考Distribution of the product of two random variables - Expectation of product of random variables。E⁡(XY)=E⁡(E⁡(XY∣Y))law of total expectation=E⁡(Y⋅E⁡[X∣Y])外層給定Y=y,所以Y對內層期望值來說為常數\begin{aligned} \operatorname{E}(XY) &= \o

2022-02-08 14:40:08 2408

原创 Law of total expectation證明

Law of total expectation證明Law of total expectation的公式為:E⁡(X)=E⁡(E⁡(X∣Y))\operatorname{E} (X) = \operatorname{E} \left( \operatorname{E} (X \mid Y) \right)E(X)=E(E(X∣Y))參考Law of total expectation - Proof in the finite and countable cases,證明如下:E⁡(E⁡(X∣Y)

2022-02-08 14:29:12 1223

原创 對隨機變數做線性變換後的期望值和協方差

對隨機變數做線性變換後的期望值和協方差假設X,b∈Rn,A∈Rm×n\textbf{X},b \in \R^n, A \in R^{m \times n}X,b∈Rn,A∈Rm×n,那麼使用A,bA,bA,b對X\textbf{X}X做線性變換後,其期望值如下:E⁡[AX]=AE⁡[X]\operatorname{E}[A\textbf{X}] =A \operatorname{E}[\textbf{X}]E[AX]=AE[X]E⁡[X+b]=E⁡[X]+bE⁡是線性算子\begin{aligned}

2022-02-08 14:27:49 1205

原创 PCL - ICP代碼研讀(二七) - TransformationEstimationPointToPlaneLLS實現

TransformationEstimationPointToPlaneLLS類別中有五個estimateRigidTransformation函數,其中四個是public的,另一個是protected的。前四個public的estimateRigidTransformation都是protected的estimateRigidTransformation的wrapper。

2021-10-24 10:01:36 1155

原创 PCL - ICP代碼研讀(二六) - TransformationEstimationPointToPlaneLLS架構

ICP的變種Point-To-Plane相較於經典款的ICP,損失函數由兩點間的距離變成source點到target點法向量所定義平面的距離,其推導詳見ICP變種Point-To-Plane算法推導。PCL中的TransformationEstimationPointToPlaneLLS便是Point-To-Plane ICP算法的具體實現。TransformationEstimationPointToPlaneLLS是TransformationEstimation的子類別,提供了estimateRi

2021-10-24 10:00:02 1247

原创 ICP變種Point-To-Plane算法推導

接續ICP(Iterative Closest Point)算法推導,本篇介紹ICP的變種Point-To-Plane損失函數及其求解方法。本文同樣整理自深藍學院三維點雲處理課程的Lecture 9 – Registration。

2021-10-21 10:06:59 2222

原创 Linux下編譯安裝PyTorch源碼

本篇記錄在Linux下編譯安裝PyTorch源碼的流程,以及編譯過程中電腦當機的解決方式。

2021-10-16 17:14:08 1566 3

原创 Linux(docker)下使用VSCode運行C++專案

在網上找過一些使用VSCode運行C++專案的文章,發現大多數文章起手就是launch.json,settings.json和tasks.json。但如果只想編譯現成的C++專案,可以不用這麼複雜,基本上按照官方教學來做即可。

2021-10-15 22:44:42 1142

原创 透過Certbot為Apache網站更新憑證 - HTTP-01 考驗

之前寫過一篇透過Certbot為Apache網站申請憑證,本篇記錄更新憑證時所踩過的坑及解決方式。

2021-10-13 14:34:30 4856 1

原创 PCL - ICP代碼研讀(二五 ) - DefaultConvergenceCriteria實現

接續PCL - ICP代碼研讀(二四 ) - DefaultConvergenceCriteria架構,本篇繼續介紹DefaultConvergenceCriteria中hasConverged函數的實現。本篇對應到default_convergence_criteria.hpp這個檔案。

2021-10-12 23:16:47 850

原创 PCL - ICP代碼研讀(二四 ) - DefaultConvergenceCriteria架構

DefaultConvergenceCriteria顧名思義,也就是預設的收斂判斷條件。本篇對應到default_convergence_criteria.h這個檔案。

2021-10-12 22:19:13 945

原创 PCL - ICP代碼研讀(二三 ) - ConvergenceCriteria架構

ConvergenceCriteria是一個抽象類別,提供了hasConverged介面,用於判斷當前點雲校正算法是否收斂。本篇對應到convergence_criteria.h這個檔案。

2021-10-12 21:45:55 945

原创 PCL - ICP代碼研讀(二二 ) - TransformationEstimationSVD實現

TransformationEstimationSVD類別中有五個estimateRigidTransformation函數,其中四個是public的,另一個是protected的。前四個public的estimateRigidTransformation都是protected的estimateRigidTransformation的wrapper。本篇對應到transformation_estimation_svd.hpp這個檔案。

2021-10-11 21:28:22 1181

原创 PCL - ICP代碼研讀(二一 ) - TransformationEstimationSVD架構

TransformationEstimationSVD是TransformationEstimation的子類別,提供了estimateRigidTransformation函數的具體實現。本篇對應到transformation_estimation_svd.h這個檔案。

2021-10-11 20:15:22 1167

原创 PCL - ICP代碼研讀(二十 ) - TransformationEstimation剛體變換估計

TransformationEstimation是一個抽象類別,提供了多個用於估計剛體變換的介面。本篇對應到transformation_estimation.h這個檔案。

2021-10-11 20:07:56 394

原创 PCL - ICP代碼研讀(十九 ) - CorrespondenceRejectorDistance實現

getRemainingCorrespondences函數是CorrespondenceRejector類別的核心,由CorrespondenceRejector的子類別各自實作。它接受original_correspondences作為輸入,使用一定的判斷條件拒絕掉部分點對,最後將結果保存到remaining_correspondences裡。注意到它是一個virtual函數,所以CorrespondenceRejector的各子類別會有不同的實現方式。

2021-10-11 13:20:13 281 3

原创 PCL - ICP代碼研讀(十八 ) - DataContainerInterface和DataContainer

在PCL - ICP代碼研讀(十七 ) - CorrespondenceRejectorDistance架構中,看到CorrespondenceRejectorDistance有個DataContainerPtr類型的成員變數data_container_,它的作用是將target_,tree_,target_cloud_updated_等變數封裝起來。DataContainerInterface提供了一個計算配對分數的介面;而DataContainer繼承自DataContainerInterface,是

2021-10-11 10:55:51 222

原创 PCL - ICP代碼研讀(十七 ) - CorrespondenceRejectorDistance架構

CorrespondenceRejectorDistance類別是CorrespondenceRejector的子類別,使用距離點對的距離作為拒絕點對的判斷條件:距離超過max_distance_的點對就會被拒絕。本篇對應到correspondence_rejection_distance.h這個檔案。

2021-10-11 10:34:41 242

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除