- vừa được xem lúc

Tìm hiểu về giải pháp Digital Humans phần 1: NeRF mô hình tái tạo các cảnh 3D bằng trường bức xạ thần kinh

0 0 44

Người đăng: HOneOhOne

Theo Viblo Asia

1.Giới thiệu chung.

Nhiệm vụ tổng hợp hình ảnh người được điều khiển bởi âm thanh có rất nhiều ứng dụng, do đó, gần đây có nhiều nghiên cứu về chủ đề này. Nhiều phương pháp dựa trên việc sử dụng điểm đặc trưng (landmarks) và lưới (meshes) để làm thông tin cấu trúc khuôn mặt đã được phát triển, tức là sử dụng các đặc trưng trung gian làm cơ sở, và tất nhiên hiệu quả rất phụ thuộc vào các đặc trưng trung gian này.

Đặc biệt là khi NeRF (Neural Radiance Fields) xuất hiện lần đầu tại hội nghị ECCV năm 2020, chỉ sử dụng hình ảnh 2D làm tập huấn luyện và có thể tái tạo các cảnh 3D phức tạp của vật thể đó. NeRF có khả năng tái tạo các cảnh 3D vô cùng chân thực.

Từ đó nhiều phương pháp ra đời dựa trên NeRF để tổng hợp chân dung. NeRFace là phương pháp đầu tiên đưa 3DMM vào NeRF để kiểm soát phần đầu, còn một số phương pháp khác như sử dụng các đặc trưng âm thanh để điều khiển NeRF mà không sử dụng các đặc trưng trung gian. Tuy nhiên, nhược điểm của các phương pháp này là rất chậm, ví dụ như AD-NeRF cần 12 giây để tạo một khung hình 450x450 trên GPU 3090, rất xa so với yêu cầu 25FPS, và cần khoảng một ngày để huấn luyện một người, làm hạn chế việc sử dụng thực tế.

Hai nghiên cứu gần đây nhất là RAD-NeRFER-NeRF phát triển từ NeRF để tạo ra các biểu diễn con người nói chuyện được điều khiển bởi âm thanh với chất chất lượng cao và độ trễ thấp. Mục tiêu là cho phép người dùng trải nghiệm môi trường ảo chi tiết và sống động như thế giới thực, đồng thời cho phép người dùng khám phá và sửa đổi nó thông qua các tương tác đơn giản.

Demo những gì RAD-NeRF có thể làm được: https://me.kiui.moe/radnerf/

Demo ER-NeRF + text to speech:

2.Đầu tiên hãy tìm hiểu về NeRF

2.1 NeRF(Neural Radiance Fields)

NeRF, với danh nghĩa là một trong những ứng cử viên cho giải "Bài báo xuất sắc nhất" tại ECCV 2020, là một trong những bài báo kinh điển đáng để nghiên cứu kỹ lưỡng. Tuy nhiên, NeRF bao gồm nhiều kiến thức về đồ họa máy tính, khiến cho việc đọc và hiểu với những CVer thuần túy trở nên khá khó khăn 😂 . Bài viết này nhằm mục đích giải thích những nguyên lý cơ bản của NeRF bằng các khái niệm đơn giản, dễ hiểu. Nếu có điều gì không rõ, hãy để lại bình luận để thảo luận nhé.

NeRF, viết tắt của Neural Radiance Field, có nghĩa là Trường Bức xạ Thần kinh. Để hiểu NeRF, trước hết cần biết NeRF làm gì, câu trả lời là: tổng hợp góc nhìn mới cho các cảnh 3D. NeRF là một kỹ thuật sử dụng mạng Neural để biểu đạt ngầm cảnh 3D.

NeRF

NeRF thực hiện nhiệm vụ gì? NeRF nhận vào một loạt góc nhìn đã biết, tối ưu NeRF để biểu diễn cảnh liên tục, cuối cùng là tạo ra các góc nhìn mới của cảnh đó.

Giả sử chúng ta dùng NeRF để học một cảnh cụ thể, thì cảnh này được lưu trữ ngầm trong các tham số của mạng NeRF. Nếu cần có một góc nhìn mới, chúng ta cần dùng mạng NeRF đó để tính toán các giá trị ánh sáng và màu sắc tại mỗi vị trí của góc nhìn đó.

Để hiểu dễ dàng hơn, hãy xem xét ví dụ bằng hình ảnh 2D:

Chúng ta có một bức ảnh 2D, tọa độ của các điểm ảnh là (x, y), màu của các điểm ảnh là (r, g, b). Vì các tọa độ và màu sắc có sự liên hệ rõ ràng, liệu chúng ta có thể tạo ra một mối quan hệ ánh xạ không?

FΘ(x,y)=(r,g,b)(1)F_Θ(x, y) = (r, g, b) (1)

Quan hệ ánh xạ này có thể được biểu diễn bằng mạng neural:

(x,y)NN(r,g,b)(2)(x, y) → NN → (r, g, b) (2)

Chúng ta có thể lấy mẫu một số điểm ngẫu nhiên từ hình ảnh để làm dữ liệu huấn luyện cho mạng neural, sau đó dùng mạng neural được huấn luyện để suy ra các giá trị điểm ảnh ở các vị trí khác trên bức ảnh. Từ đây, ta có thể dễ dàng hiểu được ý tưởng cơ bản của NeRF bằng cách mở rộng từ 2D sang 3D. Công thức của NeRF là:

FΘ:(x,d)(c,σ)(3)F_Θ : (x, d) → (c, σ) (3)

Trong công thức (3),

  • 𝑥=(𝑥,𝑦,𝑧)𝑥=(𝑥,𝑦,𝑧) là tọa độ của điểm 3D,
  • d=(θ,ϕ)d=(θ,ϕ) là hướng quan sát,
  • c=(r,g,b)c=(r,g,b) là giá trị màu được dự đoán của điểm 3D,
  • σσ là mật độ vật thể (sẽ được giải thích sau).

Khi so sánh công thức (1) và (3), ta thấy có một số khác biệt, chẳng hạn như khi mở rộng từ mặt phẳng sang 3D, nhiều yếu tố cần được xem xét, trong đó góc quan sát sẽ ảnh hưởng đến cách điểm 3D thể hiện màu sắc. Do đó, thiết kế của NeRF dựa trên quan điểm phụ thuộc vào góc nhìn (view-dependent), nên đầu vào của NeRF ngoài vị trí 3D còn cần góc quan sát, tổng cộng là 5 chiều, tức là x,y,z,θ,ϕx,y,z,θ,ϕ. Kết quả đầu ra là giá trị màu của điểm 3D cc và mật độ vật thể σσ. Hai đầu ra này sẽ được sử dụng cho việc thể hiện đồ họa theo phương pháp "thể tích" (volume rendering).

2.2 Huấn luyện NeRF

Để hiểu NeRF, trước tiên cần nắm một vài khái niệm. Một, camera ray là gì? Câu trả lời là: tia từ máy ảnh.

NeRF Overview

Từ Hình trên, chúng ta thấy rằng NeRF có đầu vào 5 chiều (x,y,z,θ,ϕ)(x, y, z, θ, ϕ) và đầu ra 4 chiều (r,g,b,σ)(r, g, b, σ). Vậy hai tham số đầu vào biểu thị hướng quan sát, θθϕϕ, có ý nghĩa gì? Mọi người có thể theo dõi hình sau:

Cố định θθ, thay đổi ϕϕ:

Cố định ϕϕ, thay đổi θθ:

Qua hai ảnh động trên, chúng ta có thể hiểu rằng θ và ϕ kiểm soát các góc độ khác nhau - sơ lược có thể hiểu ϕ là góc độ "gật đầu", còn θ là góc độ "lắc đầu".

Như trong hình (a2) , với một góc nhìn đã biết, chúng ta có thể tạo ra một tia từ mỗi điểm 2D, sau đó thực hiện lấy mẫu nhiều điểm dọc theo hướng của tia (tức là theo chiều sâu). Nếu chưa rõ về nguyên lý của tia, hãy tìm hiểu về mối quan hệ giữa tọa độ 2D của máy ảnh và tọa độ 3D. Dưới đây là một ảnh động minh họa:

Với biểu diễn hình ảnh 2D được miêu tả trong công thức (1), chúng ta chỉ cần biết tọa độ của điểm ảnh để xác định giá trị màu tương ứng. Nhưng đối với biểu diễn cảnh 3D, hình ảnh 2D được quan sát từ một điểm nhìn nhất định là kết quả của sự tổng hợp có trọng số của nhiều ảnh, mà những ảnh này được lấy mẫu từ các điểm dọc theo hướng của tia quan sát. Chính xác hơn, mỗi giá trị màu của điểm ảnh 2D là sự kết hợp có trọng số của các điểm lấy mẫu dọc theo tia 3D.

Hiểu đến đây, ta có thể quay lại Hình (2), trước tiên là xem hình (a), các điểm tròn đen là các điểm lấy mẫu dọc theo tia, mỗi điểm nhỏ này tạo ra một mẫu huấn luyện 9 chiều (x,y,z,θ,ϕ;r,g,b,σ)(x, y, z, θ, ϕ; r, g, b, σ) và có thể sử dụng để huấn luyện MLP. Trong giai đoạn suy luận, chúng ta cũng cần lấy mẫu trên tia quan sát. Do đó, NeRF sử dụng MLP để biểu diễn ngầm một cảnh. Nếu muốn có một góc nhìn mới, chúng ta cần lấy các giá trị (r,g,b,σ)(r, g, b, σ) của tất cả các điểm lấy mẫu dọc theo tia quan sát trong góc nhìn đó. Nếu độ phân giải của ảnh là 224x224 và mỗi tia lấy mẫu 16 điểm, thì MLP trong NeRF cần thực hiện 224x224x16 lần suy luận. Kết quả này có thể sử dụng để thực hiện rendering theo phương pháp thể tích (volume rendering). Hiểu phần này đồng nghĩa với việc đã nắm được nguyên lý cơ bản của NeRF.

Phân tích tiếp hình (b) và hình (c), Kết quả là các màu RBG và mật độ tại các điểm lấy mẫu được tính toán từ hàm FΘF_Θ ta có được 2 đồ thị của 2 tia (Ray 1 và Ray 2) như hình (c) . Nhận xét chủ quan 1 chút, Ray 1 có giá trị mật độ σσ cao về gần cuối, có thể đó là do điểm lấy mẫu đang nằm trong mô hình cụ thể là ở phần chiếc gầu múc. Ray 2 có mật độ cao ở 2 bên trái và phải, nhưng lõm ở giữa khả năng là do điểm lấy mẫu ở giữa đang nằm ở khoảng không gian trống (khe nhỏ bên trong gầu múc của mô hình).

Tới Hình (d) các giá trị màu và mật độ sau khi được tổng hợp sẽ được tính ra màu cụ thể và so sánh với màu của pixel gốc để tính toán lỗi. Và với số lượng ảnh đủ lớn, kèm với nhiều góc độ. Việc một mạng neural có thể học được các giá trị màu của từng điểm lấy mẫu là hoàn toàn có thể từ đó tổng hợp lên được vật thể 3 chiều.

Quá trình lan truyền tiến:

Vị trí (x,y,z)(x,y,z) sau khi được mã hóa sẽ được đưa vào một mạng MLP để tính ra mật độ σσ, và lấy đầu ra đó kết hợp với hướng dd để tính toán ra màu theo hướng dd tại từng điểm, tổng hợp các điểm theo tia ta được màu C^\hat{C}. Sau đó so sánh màu C^\hat{C} với Cg.tC_{g.t} ta sẽ tính được loss của mô hình. Rồi cập nhật lại trọng số.

Ngoài ý tưởng này, trong paper có nhắc đến một số thủ thuật mà họ sử dụng để tăng độ chính xác và chân thật hơn cho mô hình 3D. Đầu tiên là mã hóa vị trí.

2.3 Mã hóa vị trí

Trong NeRF, mã hóa vị trí nhằm tránh vấn đề làm mịn quá mức các điểm lấy mẫu liền kề về mặt không gian trong biểu diễn MLP . Ví dụ: nếu hai điểm vị trí (237, 332, 198) và vị trí (237, 332, 199) được sử dụng làm đầu vào của MLP, MLP có thể không đủ nhạy với chữ số hàng đơn vị, dẫn đến vấn đề vượt quá làm mịn đầu ra. Ví dụ:

do thiếu mã hóa vị trí nên chi tiết ở những vùng có họa tiết tương tự nhau sẽ bị mất.

Công thức Mã Hóa Vị Trí trong paper:

γ(p)=(sin(20πp),cos(20πp),sin(21πp),cos(21πp),,sin(2L1πp),cos(2L1πp)).\gamma(p) = \left( \sin(2^0 \pi p), \cos(2^0 \pi p), \sin(2^1 \pi p), \cos(2^1 \pi p), \ldots, \sin(2^{L-1} \pi p), \cos(2^{L-1} \pi p) \right).

Trong paper: L=10L = 10 với γ(x)γ(x)L=4L = 4 với γ(d)γ(d)

2.4 Lấy mẫu phân cấp

Chiến lược lấy mẫu ban đầu không hiệu quả vì mỗi điểm lấy mẫu được xử lý như nhau. Nhưng các vùng trống và vùng bị che khuất không ảnh hưởng đến hình ảnh được hiển thị mà vẫn được lấy nhiều. Tác giả áp dụng cách biểu diễn phân cấp để cải thiện hiệu quả hiển thị. Phương pháp cụ thể là: sử dụng hai mạng để thể hiện một cảnh (một dày, một mỏng). Trước tiên, hãy sử dụng lấy mẫu thông thường để đánh giá mạng "thô", sau đó sử dụng mạng "thô" để đánh giá và chọn ra nhiều mẫu có nhiều thông tin hơn, chẳng hạn như điểm lấy mẫu nào hữu ích hơn cho việc hiển thị khối.

Bằng cách tạo ra hàm mật độ xác suất dọc theo hướng tia, như thể hiện trong hình bên trái. Thông qua hàm mật độ xác suất này, chúng ta có thể thu được một cách đại khái sự phân bố của các vật thể theo hướng tia. Từ đó có thể lấy được nhiều điểm lấy mẫu hơn từ những khu vực chứa nhiều nội dung hiển thị hơn.

Chính vì cách này, hàm tính toán lỗi cũng sẽ tính toán lỗi của cả 2 tập các điểm lấy mẫu thô và lấy mẫu mịn:

L=rR(C^c(r)C(r)22+C^f(r)C(r)22)L = \sum_{r \in R} \left( \| \hat{C}_c(r) - C(r) \|_2^2 + \| \hat{C}_f(r) - C(r) \|_2^2 \right)

  • RR là tập hợp các tia sáng (rays) trong mỗi lô dữ liệu (batch).
  • C(r)C(r) là màu thực tế (ground truth),
  • C^c(r)\hat{C}_c(r) là màu dự đoán từ mô hình thô (coarse),
  • C^f(r)\hat{C}_f(r) là màu dự đoán từ mô hình mịn (fine).

2.5 Volume Rendering

Khó khăn cuối cùng để hiểu NeRF là Volume Rendering. Trong quá trình đào tạo NeRF ở trên, chúng ta đã biết rằng NeRF sẽ dự đoán từng điểm lấy mẫu trong mỗi tia và để tính giá trị RGB của từng pixel trong ảnh mới, yêu cầu giá trị (r,g,b,σ)( r , g , b , σ ) của tất cả các điểm lấy mẫu trên tia này để quyết định. Tác giả thực hiện điều này bằng cách sử dụng mô hình vật lý về sự hấp thụ ánh sáng để thể hiện nó.

C(r)=tntfT(t)σ(r(t))c(r(t),d)dtC(\mathbf{r}) = \int_{t_n}^{t_f} T(t) \sigma(\mathbf{r}(t)) \mathbf{c}(\mathbf{r}(t), \mathbf{d}) dt

 trong đoˊ T(t)=exp(tntσ(r(s))ds)\text{ trong đó } T(t) = \exp\left(-\int_{t_n}^{t} \sigma(\mathbf{r}(s)) ds\right)

Công thức trên được sử dụng trong lý thuyết nhưng trong thực tế, các điểm lấy mẫu không liên tục nên để tính toán màu ta sử dụng tổng của các điểm lấy mẫu rời rạc để tính toán, các công thức sau để tính toán:

C^(r)=i=1NTi(1exp(σiδi))ci\hat{C}(\boldsymbol{r})=\sum_{i=1}^N T_i \cdot\left(1-\exp \left(-\sigma_i \cdot \delta_i\right)\right) \cdot \boldsymbol{c}_i

trong đó Ti=exp(j=1i1σjδj)T_i=\exp \left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right)

Khi xét một góc nhìn mới, giá trị màu của từng pixel được xác định bởi một tia. Điểm bắt đầu của tia này là tâm quang học. Khi tâm quang học trỏ đến một pixel cụ thể trong mặt phẳng hai chiều của ảnh, tia này có thể xác định giá trị màu của pixel này. r(t)=o+d(t)r(t)=o+d(t) xác định khoảng cách giữa điểm với tâm quang học. Thông thường, chúng ta chỉ lấy mẫu tia và đầu ra MLP của các điểm lấy mẫu thưa thớt sẽ xác định giá trị màu của pixel này. Sau khi hiểu đoạn này, chúng ta hãy xem các thành phần của công thức:

  • TiT_i định nghĩa xác suất mà tia không chạm vào bất cứ vật thể gì tính từ tâm quang học tới điểm lấy mẫu. ee mũ 0 sẽ là 1. Khi tia đi xuyên qua càng nhiều vật chất thì đại lượng này sẽ càng nhỏ.
  • (1exp(σiδi))\left(1-\exp \left(-\sigma_i \cdot \delta_i\right)\right): mật độ thể tích có thể xác định "tầm quan trọng" của điểm lấy mẫu. Điểm lấy mẫu gần tâm quang học hơn có trọng số cao hơn .
  • ci\boldsymbol{c}_i giá trị màu tại điểm lấy mẫu theo hướng d.

Do khả năng thể hiện ngầm thông tin ba chiều vượt trội nên sau đó NERF đã phát triển nhanh chóng theo hướng tái thiết ba chiều, và một trong những ứng dụng đó là để tái tạo và điều khiển phần đầu con người.

Các ứng dụng của NeRF:

Để nâng cao hiệu quả, một số giải pháp cải tiến hiệu quả NeRF đã được phát triển như đã được giới thiệu. Mục tiêu là giảm kích thước MLP trong khi vẫn bảo toàn các tính năng của cảnh 3D trong cấu trúc lưới có thể huấn luyện rõ ràng. MLP tiêu tốn nhiều tài nguyên trước đây đã được thay thế bằng phép nội suy tuyến tính, phương pháp này cũng có thể lấy thông tin của từng điểm vị trí 3D, nhưng phương pháp tổng hợp cảnh tĩnh này không được sử dụng để trực tiếp tổng hợp cho cảnh động.

Để tiếp tục hãy tìm hiểu về RAD-NeRF , hãy theo dõi phần 2 ở đây.

Nếu có thắc mắc gì xin vui lòng để lại bình luận nhé 😆

Nguồn tham khảo: https://arxiv.org/abs/2211.12368

Bình luận

Bài viết tương tự

- vừa được xem lúc

Text to speech with Tacotron 2

1. Sơ lược về Text-to-Speech.

0 0 115

- vừa được xem lúc

Bộ đôi anh em nhà Fast Speech: Ông vua mới kế vị Tacotron ? (Phần 2)

Ở phần 1 chuỗi series về Fast Speech, bài viết Bộ đôi anh em nhà Fast Speech: Ông vua mới kế vị Tacotron ? mình đã giới thiệu sơ lược một số kiến trúc Text to Speech để chúng ta có thể nhìn rõ được nh

0 0 35

- vừa được xem lúc

Tóm tắt vài mô hình Text-to-Speech (p3) - FastSpeech2

1. FastSpeech2 có gì mới. . Việc xây dựng teacher-student pipeline theo phương pháp Knowledge distillation rất phức tạp và tốn thời gian huấn luyện.

0 0 35

- vừa được xem lúc

Tìm hiểu 1 số mô hình về Text-To-Speech (P2)

3. FastSpeech 2. 3.1 Giới thiệu.

0 0 29

- vừa được xem lúc

Lợi ích templates .gitignore trong dự án

Mở đầu. Gitignore là một file trong các dự án Git, nó chứa danh sách các tệp và thư mục mà bạn muốn Git bỏ qua (không theo dõi) khi bạn thực hiện các thao tác như git add hoặc git commit.

0 0 16

- vừa được xem lúc

Deploy ELK Stack với Docker

Hello các bạn lại là mình đây Chúc các bạn có kì nghỉ 30/4-1/5 vui vẻ và an toàn . Tiếp tục series học Docker và CICD của mình, hôm nay ta sẽ cùng nhau làm một bài "tàu nhanh" setup ELK Stack bao gồm

0 0 13