VITALIFY.ASIA logo

Tự động tạo mô hình 3D bằng cách suy luận từ bản vẽ mặt bằng đầy nhiễu! Thử thách phân tích bộ dữ liệu CubiCasa5K và kỹ thuật đảo ngược (Reverse Engineering)

VFA
Thinh Tran30/06/2026
Tự động tạo mô hình 3D bằng cách suy luận từ bản vẽ mặt bằng đầy nhiễu! Thử thách phân tích bộ dữ liệu CubiCasa5K và kỹ thuật đảo ngược (Reverse Engineering)

Lần này, tôi quyết định thực hiện một thử thách đặc biệt nhằm kiểm tra đến giới hạn cả nền tảng kỹ thuật lẫn trực giác của mình với tư cách là một kỹ sư Machine Learning.

Đối tượng của thử thách là CubiCasa5K, bộ dữ liệu nổi tiếng được xem là tiêu chuẩn thực tế (de facto standard) cho bài toán phân tích mặt bằng kiến trúc.

GitHub - CubiCasa/CubiCasa5k: CubiCasa5k floor plan dataset
CubiCasa5k floor plan dataset. Contribute to CubiCasa/CubiCasa5k development by creating an account on GitHub.

Không paper, không GitHub, chỉ có dữ liệu

Thông thường, khi bắt đầu với một bộ dữ liệu nổi tiếng, quy trình quen thuộc sẽ là đọc paper chính thức, clone repository trên GitHub và phát triển dựa trên mã nguồn có sẵn.

Lần này, tôi quyết định loại bỏ hoàn toàn cách tiếp cận đó.

Tôi chỉ đặt ra một quy tắc duy nhất:

Không đọc paper. Không xem mã nguồn. Chỉ sử dụng ảnh mặt bằng và dữ liệu SVG annotation để tự reverse engineer toàn bộ hệ thống phân tích mặt bằng từ con số 0.

Nhiều người có thể thắc mắc: "Tại sao lại chọn một cách làm khó như vậy đối với một công nghệ đã xuất hiện từ bảy năm trước?"

Thế nhưng khi thực sự bắt tay vào làm, đây lại trở thành một trong những trải nghiệm vừa thú vị vừa mang lại nhiều bài học nhất trong sự nghiệp của tôi. Không có tài liệu, không có đặc tả kỹ thuật và cũng không có mã nguồn tham khảo, tôi buộc phải "đối thoại" trực tiếp với dữ liệu. Những gì diễn ra sau đó là vô số lần thử và sai, nhưng cũng là quá trình học hỏi vô cùng giá trị.


CubiCasa5K là gì?

CubiCasa5K là một bộ dữ liệu quy mô lớn với annotation mật độ cao, được xây dựng cho bài toán tự động phân tích và số hóa bản vẽ mặt bằng (vectorization).

Điểm mạnh lớn nhất của bộ dữ liệu này là việc ghép cặp ảnh raster chất lượng thấp từ thực tế với dữ liệu ground truth dạng vector được cấu trúc hoàn chỉnh.

Khoảng 5.000 bản vẽ mặt bằng trong bộ dữ liệu được thu thập từ các tài liệu bất động sản thực tế. Vì được lấy từ các bản scan và bản photocopy nên chúng chứa rất nhiều nhiễu như nét mờ, méo hình, lệch góc và độ phân giải thấp.

Ngược lại, dữ liệu ground truth lại được gắn nhãn rất chính xác cho các thành phần kiến trúc như tường, cửa sổ, cửa đi và từng loại phòng bằng các polygon vector.

Nhờ yêu cầu khôi phục dữ liệu có cấu trúc từ những đầu vào đầy nhiễu, CubiCasa5K đã trở thành một trong những benchmark phổ biến nhất để phát triển và đánh giá các mô hình Machine Learning có tính tổng quát và độ bền cao.

Một phần nội dung của bộ dữ liệu CubiCasa5K. Hình bên trái là bản vẽ mặt bằng gốc, còn hình bên phải là dữ liệu bản vẽ SVG được tạo từ hình gốc. Bộ dữ liệu bao gồm khoảng 5.000 cặp hình gốc và bản vẽ SVG như vậy. Các hình gốc thường là những bản sao đã bị xuống cấp nghiêm trọng, đến mức con người cũng khó xác định được vị trí của các cánh cửa. Mô hình AI chỉ được cung cấp hình gốc ở bên trái và phải tự suy luận để tái tạo lại bản vẽ SVG ở bên phải.

Bản vẽ được chọn để thử nghiệm

Bản vẽ dưới đây được chọn làm benchmark cho toàn bộ quá trình thử nghiệm.

Ở phía trên có thể thấy hai căn hộ đối xứng nhau, mặc dù ảnh đã bị cắt khá sơ sài.

Điểm đáng chú ý nhất nằm ở góc trên bên phải: căn phòng nhỏ ký hiệu "S", nằm phía sau khu vực toilet và phòng tắm. Nhiều khả năng đây chính là phòng xông hơi (sauna).

Có thể đưa ra nhận định này bởi vì đây là bản vẽ nhà ở tại Phần Lan. Bộ dữ liệu CubiCasa5K được xây dựng từ dữ liệu bất động sản của Phần Lan, nơi việc bố trí phòng sauna riêng cạnh phòng tắm trong căn hộ là điều rất phổ biến.

Điều này tạo ra một thách thức thú vị cho AI.

Khác với các cửa thông thường, cửa phòng sauna không được vẽ bằng ký hiệu hình chữ nhật. Thay vào đó, mô hình phải suy luận sự tồn tại của cánh cửa thông qua cung tròn biểu diễn hướng đóng mở.

Hình ảnh được sử dụng để đánh giá mô hình sau khi huấn luyện. Ở phía trên ảnh có một phần của căn phòng bên cạnh bị cắt và xuất hiện trong khung hình. Ngoài ra, cánh cửa của phòng xông hơi ở góc trên bên trái chỉ được thể hiện bằng cung mở cửa, hoàn toàn không có đường viền khung cửa.

Chuẩn bị dữ liệu Ground Truth

Như đã đề cập, mỗi ảnh scan trong CubiCasa5K đều đi kèm với bản vẽ SVG được dựng lại rất chính xác.

Tuy nhiên, dữ liệu SVG không thể sử dụng trực tiếp làm nhãn huấn luyện cho mô hình CNN.

Vì vậy, tôi chuyển toàn bộ annotation thành ảnh phân đoạn ngữ nghĩa (semantic segmentation mask), trong đó mỗi loại thành phần kiến trúc được tô bằng một màu riêng.

Dữ liệu chuẩn (ground truth) của hình ảnh trên. Mô hình AI thực hiện suy luận với mục tiêu đạt độ khớp cao nhất với hình này. Màu đỏ biểu thị tường, màu xanh lá biểu thị cửa, và màu xanh dương biểu thị cửa sổ. Phần căn phòng bên cạnh ở phía trên hoàn toàn không xuất hiện trong dữ liệu chuẩn, vì vậy mô hình cần học cách bỏ qua chính xác phần này. Ngoài ra, mặc dù cửa phòng xông hơi ở góc trên bên phải không có khung cửa trong bản vẽ gốc, dữ liệu chuẩn vẫn biểu diễn nó dưới dạng một hình chữ nhật đứng màu xanh lá.
  • Đỏ: Tường
  • Xanh dương: Cửa sổ
  • Xanh lá: Cửa đi
  • Xám: Sàn
  • Trắng: Các đỉnh (vertex)

Bắt đầu huấn luyện

Quá trình huấn luyện được thiết lập tối đa 100 epoch và sẽ dừng sớm khi độ chính xác không còn cải thiện.

Đúng như dự đoán, mô hình chưa được huấn luyện đưa ra những kết quả hoàn toàn vô nghĩa.

Ở những lần dự đoán đầu tiên, mạng học được rằng tô nhiều vùng màu đỏ sẽ bị phạt ít hơn. Tuy nhiên, nó vẫn coi tường là những đường nét mảnh thay vì một vùng diện tích hoàn chỉnh nên chỉ vẽ theo đường viền.

Đối với lớp màu xanh, mô hình gần như chưa hiểu gì. Nó tô gần như toàn bộ khu vực không phải tường thành màu xanh, mặc dù màu này chỉ đại diện cho cửa sổ.

Trạng thái hỗn loạn ở giai đoạn đầu của quá trình huấn luyện.

Sau Epoch đầu tiên

Đến cuối Epoch đầu tiên, chất lượng dự đoán đã cải thiện đáng kể.

Mô hình đã trải qua một bước chuyển biến quan trọng khi bắt đầu coi tường là một vùng diện tích thay vì chỉ là những đường kẻ.

Điều thú vị hơn là nó cũng bắt đầu bỏ qua các phòng liền kề thay vì để kết quả dự đoán lan sang các khu vực khác.

Mặc dù việc nhận diện cửa sổ và cửa đi vẫn chưa thật sự chính xác, mô hình đã học được một quy luật quan trọng:

Cửa sổ và cửa đi hầu như luôn xuất hiện dọc theo các bức tường.

Sau Epoch 1. Mô hình đã bắt đầu nắm được hình dạng tổng thể của các bức tường, nhưng vẫn còn gặp khó khăn trong việc nhận diện cửa và cửa sổ.

Bí quyết giúp mô hình học nhanh

Một trong những lý do quan trọng giúp mô hình hội tụ nhanh là bước tăng cường dữ liệu.

Trong quá trình huấn luyện, mỗi bản vẽ được xoay ngẫu nhiên theo nhiều góc khác nhau.

Nếu chỉ sử dụng các bản vẽ được căn chỉnh ngay ngắn, mô hình sẽ chỉ học được thế giới trong một hệ trục ngang – dọc cố định.

Trong môi trường "quá dễ" như vậy, nơi mọi bức tường, cửa và cửa sổ đều song song hoặc vuông góc với nhau, mạng rất dễ tìm ra những quy luật đơn giản thay vì học được bản chất của bài toán.

Việc liên tục đưa vào các bản vẽ đã được xoay ngẫu nhiên buộc mô hình phải hiểu sâu hơn về từng thành phần kiến trúc thay vì chỉ ghi nhớ hình dạng cố định.

Ngoài ra, phép xoay còn giúp giảm overfitting.

Nói đơn giản, overfitting là hiện tượng mô hình ghi nhớ dữ liệu huấn luyện thay vì học được những quy luật có thể áp dụng cho dữ liệu mới.

Mặc dù CubiCasa5K có khoảng 5.000 bản vẽ, việc sử dụng đi sử dụng lại chúng nhiều lần vẫn có thể khiến mô hình ghi nhớ dữ liệu.

Random rotation tạo ra vô số biến thể mới từ cùng một bản vẽ, giúp mở rộng dữ liệu một cách hiệu quả và cải thiện khả năng tổng quát hóa của mô hình.

Kết quả suy luận với dữ liệu huấn luyện đã được xoay. Ở giai đoạn này, mô hình vẫn còn nhầm lẫn mũi tên được vẽ tay với tường.

AI bắt đầu nhận diện cửa

Khi quá trình huấn luyện tiếp tục, mô hình dần bắt đầu nhận diện được cửa sổcửa đi.

Điểm đáng chú ý nhất là cửa phòng sauna ở góc trên bên phải của bản vẽ. Khác với các cửa còn lại, cánh cửa này không được vẽ bằng khung hình chữ nhật, vì vậy việc nhận diện khó khăn hơn đáng kể. Tuy nhiên, ngay ở giai đoạn này, mô hình đã bắt đầu cho thấy dấu hiệu nhận ra sự tồn tại của nó.

Điều này chứng tỏ AI không chỉ đơn thuần học rằng "cửa luôn được vẽ dưới dạng hình chữ nhật". Thay vào đó, mô hình đã bắt đầu hiểu rằng cung mở cửa cũng là một đặc trưng quan trọng để suy luận sự tồn tại của cửa. Nếu không học được mối quan hệ này, nó sẽ không thể phát hiện được cửa phòng sauna.

Việc dấu hiệu này xuất hiện ngay từ Epoch 2 là một tín hiệu hết sức tích cực.

Một cải thiện đáng chú ý khác là ở thời điểm này, mô hình đã hoàn toàn bỏ qua các phòng lân cận, không còn bị ảnh hưởng bởi chúng khi đưa ra dự đoán.

Sau Epoch 2. Đến thời điểm này, mô hình gần như đã có thể bỏ qua hoàn toàn phần căn phòng bên cạnh. Độ chính xác trong việc nhận diện cửa và cửa sổ cũng được cải thiện rõ rệt. Điểm đáng chú ý là cánh cửa phòng xông hơi ở góc trên bên phải: mô hình đã bắt đầu suy luận được phần khung cửa vốn không hề được vẽ trong bản gốc.

Độ chính xác tiếp tục được cải thiện

Sau Epoch 2, quá trình huấn luyện tiếp tục theo hướng tinh chỉnh những quy luật mà mô hình đã học được.

Các đường dự đoán ngày càng rõ nét, thẳng hơn và sắc sảo hơn.

Cuối cùng, mô hình đã nhận diện cửa phòng sauna với độ chính xác tương đương tất cả các cửa còn lại trong bản vẽ.

Điểm chưa hoàn hảo duy nhất là phần sàn ở khu vực được cho là ban công phía trên bên trái. Khu vực này chứa nhiều ký hiệu phức tạp không thuộc bất kỳ lớp dữ liệu nào được định nghĩa trong thí nghiệm, vì vậy việc nhận diện chưa chính xác là điều hoàn toàn có thể chấp nhận.

Với chất lượng phân đoạn đã đủ tốt cho mục đích kiểm chứng, tôi quyết định dừng quá trình huấn luyện tại đây.

Sau Epoch 5. Đường viền của các bức tường đã trở nên thẳng và rõ ràng, trong khi cửa và cửa sổ được nhận diện gần như hoàn hảo. Một số khu vực được vẽ khá mơ hồ đến mức ngay cả con người khi nhìn qua cũng khó quyết định liệu chúng có nên được xem là một phần của bức tường hay không.
Sau Epoch 43. Các thành phần chính đã đạt chất lượng gần như không thể phân biệt với dữ liệu chuẩn. Tuy nhiên, do bản sao của bản vẽ gốc vốn đã bị méo, kết quả suy luận cũng xuất hiện một số biến dạng nhỏ tương ứng. Những sai lệch này gần như không thể cải thiện thêm bằng việc tiếp tục huấn luyện, vì vậy quá trình huấn luyện được kết thúc tại đây.

Chuyển đổi thành mô hình 3D

Dựa trên kết quả phân đoạn của epoch cuối cùng, tôi tiến hành tự động tạo mô hình 3D.

Sau khi hiệu chỉnh độ méo của bản vẽ gốc, mỗi thành phần được gán một chiều cao theo những quy tắc cố định.

Do đó, chiều cao của cửa và cửa sổ trong mô hình có thể không hoàn toàn giống với công trình thực tế.

Tuy vậy, so với bản vẽ tay ban đầu, mô hình 3D giúp con người hình dung trực quan bố cục tổng thể của công trình dễ dàng hơn rất nhiều.

Chuyển đổi kết quả suy luận ở Epoch 43 thành mô hình 3D.

Kết luận

Dự án phân tích CubiCasa5K lần này được thực hiện dưới một thử thách đặc biệt: reverse engineering mà không đọc paper, không xem code và không sử dụng repository chính thức.

Xuất phát từ con số 0, chỉ với dữ liệu gốc trong tay, cuối cùng tôi đã xây dựng được một mô hình có khả năng phân đoạn mặt bằng với độ chính xác cao, đồng thời tự động tạo ra mô hình 3D từ kết quả đó.

Nhìn lại, yếu tố quyết định thành công của thử nghiệm này không nằm ở việc sử dụng một kiến trúc mạng hiện đại, mà nằm ở quá trình đào sâu ngữ cảnh kiến trúc (domain knowledge) ẩn sau bộ dữ liệu và kiên trì đưa những hiểu biết đó vào toàn bộ quy trình xử lý.

Trong Machine Learning, việc clone một thư viện mạnh và chạy thử mô hình chỉ hiệu quả cho đến khi bạn phải đối mặt với dữ liệu thực tế đầy nhiễu và không hoàn hảo.

Để xây dựng những hệ thống AI có thể ứng dụng trong thực tế, điều quan trọng hơn là phải luôn tự hỏi:

  • Vì sao mô hình lại dự đoán sai?
  • Bộ dữ liệu được xây dựng dựa trên những giả định nào?
  • Kiến thức chuyên ngành nào vẫn chưa được mô hình học?

Chỉ khi liên tục đối thoại với dữ liệu và chuyển hóa kiến thức miền thành các bước tiền xử lý, tăng cường dữ liệu (data augmentation) hay thiết kế hàm mất mát, chúng ta mới có thể tạo ra những hệ thống AI thực sự mạnh mẽ và bền vững.

Qua thử nghiệm này, tôi càng tin rằng cách tiếp cận tưởng như "thủ công" ấy lại chính là con đường ngắn nhất để xây dựng những mô hình Machine Learning có giá trị trong thế giới thực.

Nếu bạn cũng có một bộ dữ liệu yêu thích, hãy thử tự đặt ra một thử thách tương tự:

Không đọc paper. Không clone GitHub. Chỉ có bạn và dữ liệu.

Có lẽ bạn sẽ bất ngờ trước tốc độ trưởng thành của chính mình khi buộc phải hiểu dữ liệu từ những nguyên lý nền tảng nhất.

Đừng để ý tưởng chỉ nằm trên giấy. Với tốc độ và sự linh hoạt đã được chứng minh qua 1.000+ dự án, chúng tôi sẽ giúp doanh nghiệp của bạn bứt phá.

Nhận tư vấn miễn phí ngay
#Generative AI & ML

Bài viết liên quan về "Generative AI & ML"

Thử biến Google Colab thành máy chủ API để chạy hội thoại giọng nói S2S

Thử biến Google Colab thành máy chủ API để chạy hội thoại giọng nói S2S

Nihei Tomotaka21/07/2026

PoC này biến Google Colab thành máy chủ WebSocket tạm thời cho AI hội thoại giọng nói. Hệ thống kết hợp faster-whisper large-v3, Gemini 2.5 Flash-Lite, VOICEVOX và Silero VAD, đồng thời giảm độ trễ bằng phản hồi streaming, chia câu và tổng hợp giọng nói song song.

Sản xuất nội dung giọng nói AI: 5 cách làm

Sản xuất nội dung giọng nói AI: 5 cách làm

Nihei Tomotaka21/07/2026

Nội dung giọng nói AI được tạo qua hai bước: AI viết kịch bản và TTS tổng hợp giọng nói. Bài viết giới thiệu 5 cách giúp ổn định chất lượng: bắt đầu với giọng có sẵn, cụ thể hóa phản hồi, quản lý yêu cầu và phiên bản, ưu tiên các đánh đổi, tổ chức buổi nghe chung và sử dụng hậu kỳ khi cần.

Sự khác biệt lớn giữa PoC và dịch vụ thương mại mà chúng tôi nhận ra khi phát triển AI hội thoại bằng Gemini

Sự khác biệt lớn giữa PoC và dịch vụ thương mại mà chúng tôi nhận ra khi phát triển AI hội thoại bằng Gemini

Nihei Tomotaka15/07/2026

PoC AI hội thoại bằng Gemini Live API có thể được xây dựng nhanh, nhưng thương mại hóa làm phát sinh vấn đề về kết nối đồng thời, quota, giám sát, vòng đời model và âm thanh trên từng thiết bị. Bài viết chia sẻ quá trình chuyển từ kết nối trực tiếp trên trình duyệt sang LiveKit và Vertex AI.

I'm Duper, ask me anything!