【論文閱讀筆記】NeRF+Mip-NeRF+Instant-NGP

目錄

  • 前言
  • NeRF
    • 神經輻射場
    • 體渲染
      • 連續體渲染
      • 體渲染離散化
    • 方法
      • 位置編碼
      • 分層采樣
      • 體渲染推導公式(1)到公式(2)
      • 部分代碼解讀
        • 相機變換(重要!)
  • Mip-Nerf
    • To do
  • Instant-NGP
    • To do

前言

NeRF是NeRF系列的開山之作,將三維場景隱式的表達為神經網絡的權重用于新視角合成
MipNeRF和Instant NGP分別代表了NeRF的兩個研究方向,前者是抗鋸齒,代表著渲染質量提升方向;后者是采用多分辨率哈希表用于加速NeRF的訓練與推理速度。

通過NeRF實現新視角合成

NeRF

Title:NeRF: Representing Scenes asNeural Radiance Fields for View Synthesis
Code:nerf-pytorch
From:ECCV 2020 Oral - Best Paper Honorable Mention

神經輻射場

在這里插入圖片描述
輻射場可以理解光線場,給定多張帶有相機內外參的二維圖片,從攝像機出發,引出到每一個像素的光線,通過對這條光線經歷過的空間點的顏色 c c c和體密度體密度 σ \sigma σ進行累積,以得到二維圖片上像素點的顏色,從而實現端到端訓練。在這個過程中,沒有顯式的三維結構,如點云、體素或者Mesh,而是通過神經網絡的權重 F θ F_{\theta} Fθ?將三維場景連續的存儲起來,通過空間位置(三維點 [ x , y , z ] [x,y,z] [x,y,z])和視角方向(球坐標系下的極角和方位角 [ θ , ? ] [\theta,\phi] [θ,?])作為查詢條件,查詢出給定攝像機下的光線所經過的空間點顏色 c c c和體密度 σ \sigma σ,通過**體渲染(Volume Rendering)**得到該條光線對應像素點的顏色。

體渲染

P為三維空間中的一個點;o是攝像機的光心在世界坐標系的坐標;d為視角方向,單位向量;t為實數,表示o沿視角方向到P點的距離r(t);t n ≤ t ≤ t f ; t f,t f 分別為三維場景的近和遠邊界

沿著視角方向的光線上的點P可以用上圖來表示,盡管論文中提到視角方向是使用 θ , ? \theta,\phi θ,?來表示的,但代碼中還是使用單位向量 d d d來表示的

連續體渲染

體渲染實際上就是將視線r上所有的點通過某種方式累計投射到圖像上形成像素顏色 C ( r ) C(r) C(r)的過程:
C ( r ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) d t where? T ( t ) = exp ? ( ? ∫ t n t σ ( r ( s ) ) d s ) (1) {C}(\boldsymbol{r})=\int_{t_n}^{t_f} T(t) \sigma(\boldsymbol{r}(t)) \boldsymbol{c}(\boldsymbol{r}(t), \boldsymbol{d}) dt \\ \text{where } T(t)=\exp \left(-\int_{t_n}^t \sigma(\boldsymbol{r}(s)) d s\right)\tag{1} C(r)=tn?tf??T(t)σ(r(t))c(r(t),d)dtwhere?T(t)=exp(?tn?t?σ(r(s))ds)(1)

其中, c ( r ( t ) , d ) \boldsymbol{c}(\boldsymbol{r}(t), \boldsymbol{d}) c(r(t),d)為三維點 r ( t ) r(t) r(t) d d d這個方向看到的顏色值; σ ( r ( t ) ) \sigma(\boldsymbol{r}(t)) σ(r(t))為體密度函數,反映的是該三維點的物理材質吸收光線的能力; T ( t ) T(t) T(t)反映的是射線上從 t n t_n tn? t t t的累積透射率。tn和tf首先確定了nerf的邊界,而不至于學習到無窮遠;其次避免了光心到近景范圍內無效采樣
直觀上理解σ,可以解釋為每個三維點吸收光線的能力,光經過該點,一部分被吸收,一部分透射,光的強度(可以理解為 T ( t ) T(t) T(t)) 在逐漸減小,當光強為0時,后面的三維點即便可以吸收顏色,也不會對像素顏色有貢獻。指數函數保證了隨著σ的累積,光的強度從1逐漸減為0。

體渲染離散化

其實就是函數離散化的形式,將tn到tf拆分成N個均勻的分布空間,從每個區間中隨機選取一個樣本ti:

t i ~ U [ t n + i ? 1 N ( t f ? t n ) , t n + i N ( t f ? t n ) ] i 從1到N t_i \sim \mathcal{U}\left[t_n+\frac{i-1}{N}\left(t_f-t_n\right), t_n+\frac{i}{N}\left(t_f-t_n\right)\right] \quad i \text{ 從1到N} ti?U[tn?+Ni?1?(tf??tn?),tn?+Ni?(tf??tn?)]i?1N

然后將連續體渲染公式離散化:

C ^ ( r ) = ∑ i = 1 N T i ( 1 ? exp ? ( ? σ i δ i ) ) c i where? T i = exp ? ( ? ∑ j = 1 i ? 1 σ j δ j ) (2) \hat{C}(\mathbf{r})=\sum_{i=1}^N T_i\left(1-\exp \left(-\sigma_i \delta_i\right)\right) \mathbf{c}_i \quad \tag 2 \\ \text{where } T_i=\exp \left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right) C^(r)=i=1N?Ti?(1?exp(?σi?δi?))ci?where?Ti?=exp(?j=1i?1?σj?δj?)(2)
where T i = exp ? ( ? ∑ j = 1 i ? 1 σ j δ j ) T_i=\exp \left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right) Ti?=exp(?j=1i?1?σj?δj?)
其中, δ i = t i + 1 ? t i \delta_i=t_{i+1}-t_i δi?=ti+1??ti? 表示相鄰采樣點之間的距離

在這里插入圖片描述
但均勻采樣有明顯的問題, 比如體密度較大的點如果在兩個采樣點之間,那么永遠不可能采樣到。從上圖中可看出,左半張代表均勻采樣,右半張代表真實分布,左邊由于表面兩側被采樣到,只能反應這個區間內可能存在表面,但估計的σ不一定準確。
作者提出了分層采樣來試圖解決這個問題。

方法

位置編碼

在這里插入圖片描述
網絡結構由如上圖所示全連接網絡組成,輸入x,d分別分三維點的空間位置和視線方向。該三維點的體密度只與空間位置相關,顏色還和視角相關

γ ( p ) = ( sin ? ( 2 0 π p ) , cos ? ( 2 0 π p ) , ? , sin ? ( 2 L ? 1 π p ) , cos ? ( 2 L ? 1 π p ) ) \gamma(p)=\left(\sin \left(2^0 \pi p\right), \cos \left(2^0 \pi p\right), \cdots, \sin \left(2^{L-1} \pi p\right), \cos \left(2^{L-1} \pi p\right)\right) γ(p)=(sin(20πp),cos(20πp),?,sin(2L?1πp),cos(2L?1πp))

還可以注意到γ(x)和γ(d)分別是對位置坐標和方向坐標的位置編碼(標準正余弦位置編碼),這是由于單純坐標只能體現低頻信息,位置編碼可以有效的區分開兩個距離很近的坐標(即低頻接近但高頻編碼分開【但或許也有問題,離得特別近的兩個點或許低頻信息也不相似,私以為mipnerf考慮三維點鄰域的區間,在一定程度上可以緩解】),從而幫助網絡學習到高頻幾何和紋理細節。如下圖所示,視角信息有效反應高光信息,位置編碼有助于恢復高頻細節。
在這里插入圖片描述

分層采樣

除了上述提到的均勻采樣可能導致i真實表面難以正好采樣到,還有均勻采樣帶來了很多無意義空間的無效采樣,簡單來說,只有空氣的地方沒必要進行采樣,或者被遮擋區域(可見性問題,不可見區域也沒必要采樣,需要提前判斷累積透射率是否為降為0)。
在這里插入圖片描述

首先均勻采樣可以得到crose color,wi可以理解為同條射線被采樣的 N c N_c Nc?個三維點顏色的權重:
C ^ c ( r ) = ∑ i = 1 N c w i c i , w i = T i ( 1 ? exp ? ( ? σ i δ i ) ) \widehat{C}_c(\mathbf{r})=\sum_{i=1}^{N_c} w_i c_i, \quad w_i=T_i\left(1-\exp \left(-\sigma_i \delta_i\right)\right) C c?(r)=i=1Nc??wi?ci?,wi?=Ti?(1?exp(?σi?δi?))

根據均勻采樣點的權重值歸一化后按重要性重新采樣得到新的 n f n_f nf?個位置

w ^ i = w i / ∑ j = 1 N c w j \widehat{w}_i=w_i / \sum_{j=1}^{N_c} w_j w i?=wi?/j=1Nc??wj?

最后損失函數可以表示為:

L = ∑ r ∈ R [ ∥ C ^ c ( r ) ? C ( r ) ∥ 2 2 + ∥ C ^ f ( r ) ? C ( r ) ∥ 2 2 ] \mathcal{L}=\sum_{\mathbf{r} \in \mathcal{R}}\left[\left\|\widehat{C}_c(\mathbf{r})-C(\mathbf{r})\right\|_2^2+\left\|\widehat{C}_f(\mathbf{r})-C(\mathbf{r})\right\|_2^2\right] L=rR?[ ?C c?(r)?C(r) ?22?+ ?C f?(r)?C(r) ?22?]

這里為什么選用兩個網絡來分別做粗糙采樣和精細采樣,參考大佬【
】。crose網絡是用于均勻采樣的,包含更多的是低頻信息的查詢,而fine網絡用于重要性采樣,適用于三維點高頻細節的查詢,兩個網絡起到了類似濾波器的作用。

「待做實驗驗證!!!Todo」

體渲染推導公式(1)到公式(2)

首先,光線通過區間 [ 0 , t + d t ) [0, t+d t) [0,t+dt) 的概率:
光線通過區間 [ 0 , t + d t ) [0, t+d t) [0,t+dt) 的概率:
T ( t + d t ) = T ( t ) ? ( 1 ? d t ? σ ( t ) ) \begin{aligned} \mathcal{T}(t+d t) & =\mathcal{T}(t) \cdot(1-d t \cdot \sigma(t)) \end{aligned} T(t+dt)?=T(t)?(1?dt?σ(t))?
可以得到
T ( t + d t ) ? T ( t ) d t ≡ T ′ ( t ) = ? T ( t ) ? σ ( t ) \begin{aligned} \frac{\mathcal{T}(t+d t)-\mathcal{T}(t)}{d t} & \equiv \mathcal{T}^{\prime}(t)=-\mathcal{T}(t) \cdot \sigma(t) \end{aligned} dtT(t+dt)?T(t)??T(t)=?T(t)?σ(t)?
1 ? T ( t ) 1-\mathcal{T}(t) 1?T(t) 為光線在區間 [ 0 , t ) [0, t) [0,t) 被終止的累積分布函數(CDF);
T ( t ) σ ( t ) \mathcal{T}(t) \sigma(t) T(t)σ(t) 為其對應的概率密度函數 (PDF)

其中, T ( t ) \mathcal{T}(t) T(t) 為光線通過區間 [ 0 , t ) [0, t) [0,t) 透射率,也就是沒被終止的概率,從1->0; σ ( t ) \sigma(t) σ(t) 為體密度函數; d t ? σ ( t ) d t \cdot \sigma(t) dt?σ(t) 為光線在 [ t , t + d t ) [t, t+d t) [t,t+dt) 區間被吸收的概率,也就是被終止概率。
T ′ ( t ) = ? T ( t ) ? σ ( t ) T ′ ( t ) T ( t ) = ? σ ( t ) ∫ a b T ′ ( t ) T ( t ) d t = ? ∫ a b σ ( t ) d t log ? T ( t ) ∣ a b = ? ∫ a b σ ( t ) d t T ( a → b ) ≡ T ( b ) T ( a ) = exp ? ( ? ∫ a b σ ( t ) d t ) \begin{aligned} \mathcal{T}^{\prime}(t) & =-\mathcal{T}(t) \cdot \sigma(t) \\ \frac{\mathcal{T}^{\prime}(t)}{\mathcal{T}(t)} & =-\sigma(t) \\ \int_a^b \frac{\mathcal{T}^{\prime}(t)}{\mathcal{T}(t)} d t & =-\int_a^b \sigma(t) d t \\ \left.\log \mathcal{T}(t)\right|_a ^b & =-\int_a^b \sigma(t) d t \\ \mathcal{T}(a \rightarrow b) \equiv \frac{\mathcal{T}(b)}{\mathcal{T}(a)} & =\exp \left(-\int_a^b \sigma(t) d t\right) \end{aligned} T(t)T(t)T(t)?ab?T(t)T(t)?dtlogT(t)ab?T(ab)T(a)T(b)??=?T(t)?σ(t)=?σ(t)=?ab?σ(t)dt=?ab?σ(t)dt=exp(?ab?σ(t)dt)?
T ( a → b ) \mathcal{T}(a \rightarrow b) T(ab) 表示光線通過 a a a b b b 區間沒被終止的概率,假設 [ a , b ) [a,b) [a,b) 共享 a a a點體密度和顏色

C = ∫ 0 D T ( t ) ? σ ( t ) ? c ( t ) d t + T ( D ) ? c b g C=\int_0^D \mathcal{T}(t) \cdot \sigma(t) \cdot \mathbf{c}(t) d t+\mathcal{T}(D) \cdot \mathbf{c}_{\mathrm{bg}} C=0D?T(t)?σ(t)?c(t)dt+T(D)?cbg?
c b g c_{b g} cbg? 表示背景色彩

C ( a → b ) = ∫ a b T ( a → t ) ? σ ( t ) ? c ( t ) d t = σ a ? c a ∫ a b T ( a → t ) d t = σ a ? c a ∫ a b exp ? ( ? ∫ a t σ ( u ) d u ) d t = σ a ? c a ∫ a b exp ? ( ? σ a u ∣ a t ) d t = σ a ? c a ∫ a b exp ? ( ? σ a ( t ? a ) ) d t = σ a ? c a ? exp ? ( ? σ a ( t ? a ) ) ? σ a ∣ a b = c a ? ( 1 ? exp ? ( ? σ a ( b ? a ) ) ) \begin{aligned} \boldsymbol{C}(a \rightarrow b) & =\int_a^b \mathcal{T}(a \rightarrow t) \cdot \sigma(t) \cdot \mathbf{c}(t) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \mathcal{T}(a \rightarrow t) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \exp \left(-\int_a^t \sigma(u) d u\right) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \exp \left(-\left.\sigma_a u\right|_a ^t\right) d t \\ & =\sigma_a \cdot \mathbf{c}_a \int_a^b \exp \left(-\sigma_a(t-a)\right) d t \\ & =\left.\sigma_a \cdot \mathbf{c}_a \cdot \frac{\exp \left(-\sigma_a(t-a)\right)}{-\sigma_a}\right|_a ^b \\ & =\mathbf{c}_a \cdot\left(1-\exp \left(-\sigma_a(b-a)\right)\right)\end{aligned} C(ab)?=ab?T(at)?σ(t)?c(t)dt=σa??ca?ab?T(at)dt=σa??ca?ab?exp(?at?σ(u)du)dt=σa??ca?ab?exp(?σa?uat?)dt=σa??ca?ab?exp(?σa?(t?a))dt=σa??ca???σa?exp(?σa?(t?a))? ?ab?=ca??(1?exp(?σa?(b?a)))?

T ( a → c ) = = exp ? ( ? [ ∫ a b σ ( t ) d t + ∫ b c σ ( t ) d t ] ) = exp ? ( ? ∫ a b σ ( t ) d t ) exp ? ( ? ∫ b c σ ( t ) d t ) = T ( a → b ) ? T ( b → c ) \begin{aligned} \mathcal{T}(a \rightarrow c)= & =\exp \left(-\left[\int_a^b \sigma(t) d t+\int_b^c \sigma(t) d t\right]\right) \\ & =\exp \left(-\int_a^b \sigma(t) d t\right) \exp \left(-\int_b^c \sigma(t) d t\right) \\ & =\mathcal{T}(a \rightarrow b) \cdot \mathcal{T}(b \rightarrow c)\end{aligned} T(ac)=?=exp(?[ab?σ(t)dt+bc?σ(t)dt])=exp(?ab?σ(t)dt)exp(?bc?σ(t)dt)=T(ab)?T(bc)?

T n = T ( t n ) = T ( 0 → t n ) = exp ? ( ? ∫ 0 t n σ ( t ) d t ) = exp ? ( ∑ k = 1 n ? 1 ? σ k δ k ) \mathcal{T}_n=\mathcal{T}\left(t_n\right)=\mathcal{T}\left(0 \rightarrow t_n\right)=\exp \left(-\int_0^{t_n} \sigma(t) d t\right)=\exp \left(\sum_{k=1}^{n-1}-\sigma_k \delta_k\right) Tn?=T(tn?)=T(0tn?)=exp(?0tn??σ(t)dt)=exp(k=1n?1??σk?δk?)

C ( t N + 1 ) = ∑ n = 1 N ∫ t n t n + 1 T ( t ) ? σ n ? c n d t = ∑ n = 1 N ∫ t n t n + 1 T ( 0 → t n ) ? T ( t n → t ) ? σ n ? c n d t = ∑ n = 1 N T ( 0 → t n ) ∫ t n t n + 1 T ( t n → t ) ? σ n ? c n d t = ∑ n = 1 N T ( 0 → t n ) ? ( 1 ? exp ? ( ? σ n ( t n + 1 ? t n ) ) ) ? c n \begin{aligned} \boldsymbol{C}\left(t_{N+1}\right) & =\sum_{n=1}^N \int_{t_n}^{t_{n+1}} \mathcal{T}(t) \cdot \sigma_n \cdot \mathbf{c}_n d t \\ & =\sum_{n=1}^N \int_{t_n}^{t_{n+1}} \mathcal{T}\left(0 \rightarrow t_n\right) \cdot \mathcal{T}\left(t_n \rightarrow t\right) \cdot \sigma_n \cdot \mathbf{c}_n d t \\ & =\sum_{n=1}^N \mathcal{T}\left(0 \rightarrow t_n\right) \int_{t_n}^{t_{n+1}} \mathcal{T}\left(t_n \rightarrow t\right) \cdot \sigma_n \cdot \mathbf{c}_n d t \\ & =\sum_{n=1}^N \mathcal{T}\left(0 \rightarrow t_n\right) \cdot\left(1-\exp \left(-\sigma_n\left(t_{n+1}-t_n\right)\right)\right) \cdot \mathbf{c}_n\end{aligned} C(tN+1?)?=n=1N?tn?tn+1??T(t)?σn??cn?dt=n=1N?tn?tn+1??T(0tn?)?T(tn?t)?σn??cn?dt=n=1N?T(0tn?)tn?tn+1??T(tn?t)?σn??cn?dt=n=1N?T(0tn?)?(1?exp(?σn?(tn+1??tn?)))?cn??

T ( 0 → t n ) ? ( 1 ? exp ? ( ? σ n ( t n + 1 ? t n ) ) ) \mathcal{T}\left(0 \rightarrow t_n\right) \cdot\left(1-\exp \left(-\sigma_n\left(t_{n+1}-t_n\right)\right)\right) T(0tn?)?(1?exp(?σn?(tn+1??tn?)))表示光線正好在 t N + 1 t_{N+1} tN+1?位置的顏色的權重(**透射率*該點的顏色吸收率=該點顏色的貢獻率,對應代碼中的weights,代碼中的 α \alpha α指代 1 ? e x p ( ? σ ? δ ) ? ? 1-exp(-\sigma*\delta)** 1?exp(?σ?δ)??

C ( t N + 1 ) = ∑ n = 1 N T n ? ( 1 ? exp ? ( ? σ n δ n ) ) ? c n , where T n = exp ? ( ∑ k = 1 n ? 1 ? σ k δ k ) \boldsymbol{C}\left(t_{N+1}\right)=\sum_{n=1}^N \mathcal{T}_n \cdot\left(1-\exp \left(-\sigma_n \delta_n\right)\right) \cdot \mathbf{c}_n, \quad \\ \text{where} \quad \mathcal{T}_n=\exp \left(\sum_{k=1}^{n-1}-\sigma_k \delta_k\right) C(tN+1?)=n=1N?Tn??(1?exp(?σn?δn?))?cn?,whereTn?=exp(k=1n?1??σk?δk?)

部分代碼解讀

相機變換(重要!)
  • 關于nerf相機方向的解讀

  • 關于llff格式數據使用的NDC空間解讀
    簡單來說就是針對不同種類的數據在不同的空間進行計算,如360度合成數據lego(直接從相機坐標系變換到世界坐標系下)或者無界數據llff(NDC空間能將近遠景范圍限制在0-1之間)

Mip-Nerf

To do

Instant-NGP

To do

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212823.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DIP——邊緣提取與分割

1.使用canny算法進行邊緣提取 本實驗比較簡單,基本思路是對原圖像進行一個高斯模糊處理,用于去噪,之后轉換為灰度圖,直接調用cv庫中的canny記性邊緣提取。若想直接得到彩色邊緣,則通過按位與操作,將原始彩色…

SQLMap進階使用

預計更新SQL注入概述 1.1 SQL注入攻擊概述 1.2 SQL注入漏洞分類 1.3 SQL注入攻擊的危害 SQLMap介紹 2.1 SQLMap簡介 2.2 SQLMap安裝與配置 2.3 SQLMap基本用法 SQLMap進階使用 3.1 SQLMap高級用法 3.2 SQLMap配置文件詳解 3.3 SQLMap插件的使用 SQL注入漏洞檢測 4.1 SQL注入…

ingress介紹和ingress通過LoadBalancer暴露服務配置

目錄 一.ingress基本原理介紹 1.將原有用于暴露服務和負載均衡的服務的三四層負載均衡變為一個七層負載均衡 2.controller和ingress 3.通過下面這個圖可能會有更直觀的理解 二.為什么會出現ingress 1.NodePort存在缺點 2.LoadBalancer存在缺點 三.ingress三種暴露服務的…

7-6 通訊錄排序

輸入n個朋友的信息&#xff0c;包括姓名、生日、電話號碼&#xff0c;本題要求編寫程序&#xff0c;按照年齡從大到小的順序依次輸出通訊錄。題目保證所有人的生日均不相同。 輸入格式: 輸入第一行給出正整數n&#xff08;<10&#xff09;。隨后n行&#xff0c;每行按照“…

基于JavaWeb+SSM+Vue微信小程序的科創微應用平臺系統的設計和實現

基于JavaWebSSMVue微信小程序的科創微應用平臺系統的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 Lun文目錄 1系統概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系統設計思想 1 2相關技術…

Linux Component概述和高通component的使用

1 Linux為什么要引入Component框架&#xff1f; 為了讓subsystem按照一定順序初始化設備才提出來的。 subsystem中由很多設備模塊&#xff0c;內核加載這些模塊的時間不確定。子系統內有些模塊是需要依賴其它模塊先初始化才能進行自己初始化工作(例如v4l2 subdev和v4l2 video …

kubebuilder開發operator

安裝kubebuilder前 需要有kubernetes環境和golang環境 官網&#xff1a;https://go.kubebuilder.io/ 安裝kubebuilder #下載 wget https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) #改名kubebuilder后加權限 chmod x kubebuilder #放到環境變量里 mv k…

【C語言程序設計】編寫簡單的C程序

目錄 前言 一、程序設計 二、程序改錯 三、程序完善 總結 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高興與大家相識&#xff0c;希望我的博客能對你有所幫助。 &#x1f4a1;本文由Filotimo__??原創&#xff0c;首發于CSDN&#x1f4da;。 &#x1f4e3;如…

unity 2d 入門 飛翔小鳥 死亡 顯示GameOver(十四)

1、添加Img create->ui->img 把圖片拖進去 2、和分數一樣、調整位置 3、修改角色腳本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//獲取小鳥&#xff08;剛體&#xff09;private Rigidbod…

【Apipost】批量刪除我的51CTO文章

文章目錄 一、序二、API分析三、Apipost測試四、腳本五、Apipost中完成 一、序 去年開始再51CTO同步更新文章&#xff0c;一年多過去了&#xff0c;只漲了3個粉絲。看了下這個平臺就是賣課、搞培訓的&#xff0c;退出了。決定把文章也刪除了&#xff08;有人私信我說專門注冊了…

ToolkenGPT:用大量工具增強LLM

深度學習自然語言處理 原創作者&#xff1a;cola 用外部工具增強大型語言模型(LLM)已經成為解決復雜問題的一種方法。然而&#xff0c;用樣例數據對LLM進行微調的傳統方法&#xff0c;可能既昂貴又局限于一組預定義的工具。最近的上下文學習范式緩解了這一問題&#xff0c;但有…

Shell 常用命令詳解-上

Shell 常用命令詳解-上 1.目錄查閱相關命令2.文件操作相關命令 1.目錄查閱相關命令 ll 命令 命令描述&#xff1a;ll命令用于顯示指定工作目錄下的內容。 命令格式&#xff1a;ll [參數] [目錄名]。 參數說明&#xff1a; 參數說明-a顯示所有文件及目錄&#xff08;包括隱藏文…

【機器學習】041_模型開發迭代過程

一、模型開發的一般步驟 1. 明確研究問題 確定問題的組成和結果&#xff0c;明晰問題是分類問題還是回歸問題 2. 決定系統總體架構 ①理解數據&#xff1a;采集&#xff08;爬取&#xff09;數據&#xff0c;生成&#xff08;導入&#xff09;數據&#xff0c;進行數據清洗…

代碼隨想錄二刷 |二叉樹 |101. 對稱二叉樹

代碼隨想錄二刷 &#xff5c;二叉樹 &#xff5c;101. 對稱二叉樹 題目描述解題思路 & 代碼實現遞歸法迭代法使用隊列使用棧 題目描述 101.對稱二叉樹 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,2,…

zcms企業官網建站系統源碼搭建-支持頁面自定義

1.支持mysql&#xff0c;sqlite&#xff0c;access三種數據庫。 2.模板和標簽與asp版的zzzcms通用。 3.asp版的zzzcms的access數據庫可直接使用。 4.支持手機站。 &#xff08;增刪改查不做描述&#xff09;&#xff1a; 網站信息 名稱&#xff0c;logo&#xff0c;微信&…

基于OpenCV的流水線包裝箱檢測計數應用(附源碼)

導 讀 本文主要介紹基于OpenCV的流水線包裝箱檢測計數應用,并給出源碼。 資源下載 完整代碼和視頻下載地址: https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter 核心代碼如下(cboxtest.py): import cv2import numpy as npfrom tracker import*cap=c…

【MYSQL】單表查詢

查詢語法&#xff1a; select 字段&#xff08;*表示全字段&#xff09; from 數據表 【where 條件表達式】 【group by 分組字段【having 分組條件表達式】】 【order by 排序字段【asc | desc】】 例子&#xff1a; 教職工表Teacher(Tno, TName, age, sal, mgr, DNo)&#…

C# 圖解教程 第5版 —— 第17章 轉換

文章目錄 17.1 什么是轉換17.2 隱式轉換17.3 顯示轉換和強制轉換17.4 轉換的類型17.5 數字的轉換17.5.1 隱式數字轉換17.5.2 溢出檢測上下文17.5.3 顯示數字轉換 17.6 引用轉換17.6.1 隱式引用轉換17.6.2 顯式引用轉換17.6.3 有效顯式引用轉換 17.7 裝箱轉換17.7.1 裝箱是創建副…

前端發起更改數據請求后再獲取后端數據發現數據并未更改的一個解決辦法

前端發起更改數據請求后再獲取后端數據發現數據并未更改的一個解決辦法 問題再現 async function refuseRefund(id,type){if(confirm(確定拒絕&#xff1f;)){await fetch(http://127.0.0.1:3000/api/refuseRefund, {method: POST,headers: {Content-type: application/json}…

vue項目搭建---1.搭建基礎的框架

目錄 1. pnpm下載1.1 安裝1.2 差異1.3 鏡像源設置 2. 項目2.1 vite創建項目2.2 項目配置2.3 piniavue-routermain.jsstore/index.jsrouter/index.jsvue文件里使用示例 2.4 eslint prettier.eslintrc.js.eslintignore.prettierrc 2.5 樣式2.6 commitizenpackage.json.cz-config…