NHÃN ẢNH Y KHOA DAT
4.1 Mục tiêu của hệ thống DAT
Để đáp ứng nhu cầu làm nhãn ảnh y khoa phục vụ cho việc huấn luyện mạng học sâu, nhóm chúng tôi đã kế thừa và phát triển hệ thống DAT (Data Annotation Tool) của phòng lab Computer Vision and Graphics. DAT là một công cụ làm nhãn dữ liệu đặc thù cho ảnh DICOM.
Bài toán phân đoạn ảnh y khoa dùng mạng học sâu luôn cần một số lượng dữ liệu lớn. Nguồn dữ liệu dồi dào và chính xác là một trong những yếu tố giúp việc huấn luyện mạng hiệu quả hơn. Việc gán nhãn dữ liệu, đặc biệt là những tập dữ liệu đặc thù như ảnh y khoa cần có một công cụ hỗ trợ hợp lý. Nhận thức được nhu cầu này, nhóm đã cải thiện hệ thống DAT với nhiều chức năng phù hợp cho việc gán nhãn ảnh DICOM.
4.2 Phân tích yêu cầu
4.2.1 Quản trị hệ thống và dữ liệu
- Quản lý dữ liệu:
Chức năng tải lên dữ liệu làm nhãn: Dữ liệu ảnh DICOM cần lãm nhãn sẽ được tải lên ở dạng .dicom. Sau đó, dữ liệu sẽ được đẩy lên và lưu trữ tại Django server.
tập dữ liệu với những người dùng khác thông qua chức năng ’Invite’, người được mời sẽ có quyền truy cập vào tập dữ liệu được chia sẻ.
Chức năng xoá tập dữ liệu: Cho phép người dùng xoá tệp ảnh y khoa khỏi hệ thống.
4.2.2 Chức năng gán nhãn
Tải lên và lưu trữ ảnh y khoa
Trực quan khối 3 chiều của tập dữ liệu Sinh lát cắt ảo từ tập ảnh ba chiều
Vẽ nhãn bằng bút và vẽ nhãn theo hình tròn, hình chữ nhật. Chỉnh sửa nhãn bằng công cụ bút hoặc kéo
Xóa nhãn đang làm.
Phóng to, thu nhỏ và kéo thả vị trí của lát cắt ảo.
Đo độ dài giữa hai vị trí trên lát cắt ảo, góc, toạ độ của một vị trí cụ thể Sử dụng dự đoán AI để làm nhãn nhanh và chính xác hơn.
Tạo và lưu trữ nhãn. Thao tác undo.
Thao tác điều chỉnh khối và lát cắt ảo theo giá trị Hounsfield Unit để làm rõ từng đối tương cụ thể : gan, mạch máu, phổi ..
4.3. Công nghệ sử dụng4.3 Công nghệ sử dụng 4.3 Công nghệ sử dụng
4.3.1 Techstack
Hình 4.1: Các công nghệ sử dụng
4.3.2 Ngôn ngữ lập trình
Hệ thống được hiện thực dựa trên hai ngôn ngữ lập trình chính:
Server: Ngôn ngữ Python và framework Django. Mô hình học sâu được hiện thực, huấn luyện và triển khai bằng ngôn ngữ Python. Vì vậy, việc chọn Python và framework Django để hiện thực server là một lựa chọn hợp lý để tăng cường khả năng tích hợp dự báo AI vào hệ thống làm nhãn DAT. Client: Ngôn ngữ Javascript và thư viện ReactJS. React là một thư viện UI phát triển tại Facebook để hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể sử dụng lại được. Javascript có nhiều thư viện hỗ trợ việc thao tác trên ảnh y khoa như thư viện Cornerstone.js, Three.js...
Python
Python là một ngôn ngữ lập trình thông dịch, hướng đối tượng, cấp cao với ngữ nghĩa động do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991.
Lý do chọn ngôn ngữ lập trình Python: Thứ nhất, hệ thống DAT được xây dựng dựa trên framework Django - một web framework được viết bằng Python. Thứ hai, mô hình mạng học sâu do nhóm huấn luyện trên nền tảng Pytorch. Vì vậy, việc tích hợp dự báo AI từ mô hình mạng học sâu vào hệ thống làm nhãn DAT sẽ thuận tiện hơn rất nhiều.
Javascript
JavaScript là một ngôn ngữ lập trình dạng scripting cho phép người dùng triển khai các tính năng phức tạp trên các trang web.
Lý do chọn ngôn ngữ lập trình javascript: Với thư viện Reactjs hỗ trợ mạnh mẽ cho việc xây dựng front-end cho hệ thống, cùng một số thư viện khác phục vụ cho việc thao tác trên ảnh DICOM ở phía client(thư viện Cornerstone.js) và việc trực quan khối 3 chiều (thư viện Three.js) .
4.3.3 Thư viện và frameworksDjango Django
Django là một web framework bậc cao được viết bằng Python, cho phép phát triển ứng dụng nhanh chóng, gọn gàng. Django đã giải quyết rất nhiều rắc rối trong quá trình phát triển web, giúp người dùng tập trung vào việc phát triển ứng dụng.
Trong phạm vi luận văn này, nhóm tận dụng thế mạnh sẵn có của Django kết hợp với Django REST framework nhằm xây dựng hệ thống RESTful API một cách nhanh chóng.
Django REST framework
Django REST framework (DRF) làm một bộ công cụ mãnh mẽ và linh hoạt để xậy dựng Web APIs. DRF cung cấp khả năng xác thực, tương tác với cơ sở dữ liệu và các lớp dựng sẵn giúp việc xây dựng RESTful API trở nên dễ dàng và an toàn hơn.
4.3. Công nghệ sử dụng ReactJS
ReactJS là một thư viện Javascript được sử dụng trong quá trình phát triển web để xây dựng những phần tử tương tác trên website. React sử dụng khái niệm Virtual DOM, Virtual DOM tạo ra bản cache cấu trúc dữ liệu của ứng dụng trên bộ nhớ. Với mỗi lượt thay đổi, React chỉ render lại những component thực sự thay đổi, việc này giúp tăng tốc độ phản hồi của ứng dụng một cách hiệu quả.
Nhóm sử dụng thư viện ReactJS kết hợp với Material-UI để xây dựng phần front-end cho hệ thống DAT, chi tiết sẽ được trình bày ở phần kiến trúc hệ thống.
Material-UI
Material-UI là một ngôn ngữ thiết kế được Google phát triển vào năm 2014. Với lượng component được thiết kế sắn rất đẹp mắt, Material-UI là một lựa chọn hấp dẫn để phát triển front-end.
Cornerstone.js
Cornerstone-core là một thư viện JavaScript dùng để hiển thị hình ảnh y khoa trên các trình duyệt web hiện đại hỗ trợ phần tử ’canvas’ HTML5. Cornerstone-core không phải là một ứng dụng hoàn chỉnh mà là một thành phần có thể được sử dụng như một phần của các ứng dụng lớn hơn, phức tạp hơn. Cornerstone cung cấp một tập các API cho phép thao tác và lưu trữ các thuộc tính hình ảnh y khoa bằng Javascript. Bản thân Cornerstone-core không có khả năng đọc / phân tích cú pháp hoặc tải hình ảnh và thay vào đó phụ thuộc vào một hoặc nhiều ImageLoader như CornerstoneWADOImageLoader hoặc CornerstoneWebImageLoader để hoạt động.
CornerstoneWebImageLoader là một trình tải hình ảnh dạng PNG, JPEG cho các trình duyệt web. CornerstoneWebImageLoader cung cấp cầu nối giữa thư viện Cornerstone-core và tiêu chuẩn hình ảnh của các trang web.
Cornerstone-Tools là một giải pháp nhẹ để xây dựng các công cụ trên Cornerstone.js. Nó chỉ phụ thuộc vào các thư viện trong họ Cornerstone. Thay vì cố gắng ’làm mọi thứ’, nó nhằm mục đích có thể mở rộng và có thể bổ sung được để hỗ trợ sự phát triển nhanh chóng của các công cụ mới. Lý
tưởng nhất là các công cụ được tạo ra bằng cách sử dụng các công cụ nền tảng có thể dễ dàng chia sẻ, cho phép tạo ra một hệ sinh thái rộng lớn hơn.
CornerstoneMath là một giải pháp cung cấp các chức năng toán học và hình học cho các thư viện trong họ Cornerstone.
React-three/fiber
Tiền thân là React-three-fiber, là một trình kết xuất (renderer) của React dành cho three.js. Trình kết xuất này có nhiệm vụ chuyển đổi từ các thành phần React (React component) sang three.js nguyên thủy (thực thể 3D).
Three.js
Three.js là một thư viện 3D được dùng để hiển thị nội dung 3D trên trang web trở nên dễ dàng nhất có thể. Three.js sử dụng WebGL để vẽ 3D. WebGL là một hệ thống cấp thấp chỉ vẽ các điểm, đường thẳng và hình tam giác. Khi làm việc với WebGL thường đòi hỏi khá nhiều mã nguồn được viết, đó là lý Three.js xuất hiện. Nó xử lý những thành phần như cảnh, đèn, bóng, vật liệu, kết cấu, toán học 3d, tất cả những thứ mà người dùng phải tự viết nếu sử dụng WebGL trực tiếp.
4.3.4 Cơ sở dữ liệu
PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ miễn phí và nguồn mở (RDBMS) tập trung vào khả năng mở rộng và tuân thủ các tiêu chuẩn kỹ thuật. Nó được thiết kế để xử lý một loạt các khối lượng công việc lớn, từ các máy tính cá nhân đến kho dữ liệu hoặc dịch vụ Web có nhiều người dùng đồng thời.
PostgreSQL hỗ trợ đa nền tảng như Linux, macOS, FreeBSD, OpenBSD và Windows.
4.3. Công nghệ sử dụng 4.3.5 Công cụ, phần mềm hỗ trợ
Webpack
Về cốt lõi, webpack là một gói mô-đun tĩnh cho các ứng dụng JavaScript hiện đại. Khi webpack xử lý ứng dụng, nó xây dựng nội bộ một biểu đồ phụ thuộc ánh xạ mọi mô-đun mà dự án của bạn cần và tạo một hoặc nhiều gói.
Nginx
NGINX là một phần mềm web server mã nguồn mở dùng để phục vụ web HTTP. Tuy nhiên, ngày nay nó cũng được dùng làm reverse proxy, HTTP load balancer và email proxy như IMAP, POP3, và SMTP.
NGINX sử dụng kiến trúc hướng sự kiện (event-driven) không đồng bộ (asynchronous). Tính năng này khiến NGINX server trở nên đáng tin cậy, tốc độ
và khả năng mở rộng lớn nhất.
Ngày nay, có nhiều web server phải chịu nhiều hàng ngàn kết nối. Với khả năng có thể xử lý hàng ngàn kết nối cùng lúc, nhiều website có traffic lớn đã sử dụng dịch vụ NGINX. Một số những nền tảng công nghệ sử dụng nó là Google, Netflix, Adobe, Cloudflare, WordPress,...
Docker
Docker là nền tảng phần mềm cho phép xây dựng, kiểm thử và triển khai ứng dụng một cách nhanh chóng. Docker đóng gói phần mềm vào các đơn vị tiêu chuẩn hóa được gọi là container - nơi chứa đựng mọi thứ mà phần mềm cần để hoạt động, trong đó có thư viện, công cụ hệ thống, mã nguồn. Bằng cách sử dụng Docker, có thể nhanh chóng triển khai và thay đổi quy mô ứng dụng vào bất kỳ môi trường nào và đảm bảo rằng chương trình sẽ hoạt động.
4.4 Kiến trúc hệ thống
4.4.1 Tổng quan kiến trúc hệ thống
Hình 4.2: Tổng quan kiến trúc hệ thống
Hệ thống DAT được xây dựng dựa trên mô hình MVT (Model - View - Template) của framework Django kết hợp với mô hình dự báo nhãn (AI MODEL). Model: Đây là phần trung gian chịu trách nhiệm xử lý dữ liệu giữa phần view (hiển thị cho người dùng) và phần cơ sở dữ liệu PostgreSQL. Model định nghĩa cấu trúc dữ liệu được lưu trữ cho phần dữ liệu đến từ View và truy xuât thông tin từ cơ sử dữ liệu, trả về cho View ở dạng xem được. Mỗi Model trong Django tương ứng với một bảng trong cơ sử dữ liệu.
View: Chịu trách nhiệm cho những gì người dùng thấy ở phía client. Một hàm view trong mô hình Django là một hàm Python nhận yêu cầu (“POST”,”GET”) từ phía người dùng và trả về một web response, response này có thể là nội dung HTML của trang web, một chuyển trang, một hình ảnh hoặc một response ở dạng JSON.
Template: Là phần thứ ba trong mô hình MVT, Template được viết bằng HTML, CSS và Javascript trong một file .html. Template cung cấp bố cục
4.4. Kiến trúc hệ thống
AI Model: Để việc làm nhãn được thuận tiện, nhanh chóng và chính xác hơn, AI Model được tích hợp vào hệ thống DAT. AI Model được chạy trong Django server và chịu trách nhiệm nhận yêu cầu từ phía client và trả về kết quả dự đoán.
4.4.2 Chi tiết kiến trúc hệ thốngSơ đồ use case Sơ đồ use case
Sơ đồ sequence diagram
Hình 4.4: Sơ đồ sequence diagram hệ thống DAT
Thiết kế cơ sở dữ liệu với Django Models
Framework Django hỗ trợ lớp model để người dùng tương tác với cơ sở dữ liệu, mỗi model là một bảng gồm những trường được mô tả và quan hệ với các model khác (nếu có). Với hệ thống DAT này, ngoài những bảng dữ liệu được kế thừa, chúng tôi thiết kế thêm hai bảng dữ liệu chính:
Bảng dữ liệu để lưu nhãn đã làm: Sau khi bước làm nhãn kết thúc, dữ liệu nhãn sẽ được lưu trong bảng này.
4.4. Kiến trúc hệ thống
người dùng có thể chạy dự đoán AI để hỗ trợ việc làm nhãn. Khi chạy dự đoán AI, url dẫn tới mô hình AI sẽ được lưu vào bảng dữ liệu này để lấy được nhãn dự báo.
5.1 Chức năng đăng ký tài khoản và đăng nhập 5.1.1 Chức năng đăng ký tài khoản
Để đăng nhập vào hệ thống DAT, người dùng cần đăng ký một tài khoản cho riêng mình. Tài khoản được sử dụng nhằm mục đích định danh người dùng cho các tác vụ về sau.
Hình 5.1: Giao diện đăng ký tài khoản
5.1. Chức năng đăng ký tài khoản và đăng nhập
Tuy nhiên, chúng tôi sử dụng kết hợp với simple-jwt để hỗ trợ người dùng đăng nhập thông qua JSON Web Token (JWT) - sẽ được trình bày ở phần tiếp theo.
5.1.2 Chức năng đăng nhập
Sau khi đã có tài khoản, người dùng có thể đăng nhập vào hệ thống. Sau khi đăng nhập, người dùng được cấp một JWT, JWT này được đính vào header của yêu cầu (request) khi người dùng thực hiện các tác vụ đòi hỏi người dùng phải được xác thực. JWT được thiết lập có thời hạn sáu mươi phút. Trường hợp người dùng đăng xuất, JWT này sẽ được lưu vào bảng BlacklistToken để vô hiệu hóa hiệu lực của JWT trong trường hợp JWT chưa hết hạn.
Hình 5.2: Giao diện đăng nhập vào hệ thống DAT
5.1.3 Chức năng thay đổi mật khẩu
Khi nhấn vào nút chứa tên người dùng ở góc trên bên phải thanh menu, người dùng có thể thay đổi mật khẩu hiện tại.
Hình 5.3: Giao diện menu đổi mật khẩu
(a) Giao diện đổi mật khẩu (b) Giao diện đổi mật khẩu thành công
5.2. Chức năng tải lên tập dữ liệu làm nhãn, chia sẻ và xóa tập dữ liệu5.2 Chức năng tải lên tập dữ liệu làm nhãn, chia 5.2 Chức năng tải lên tập dữ liệu làm nhãn, chia
sẻ và xóa tập dữ liệu
5.2.1 Chức năng tải lên tập dữ liệu
Hình 5.5: Giao diện tải lên tập dữ liệu mới và hiển thị những tập dữ liệu hiện có
Tại trang chủ, những tập dữ liệu nào có sẵn sẽ hiện trên giao diện chính của người dùng. Người dùng có thể tải lên tập dữ liệu y khoa cần làm nhãn bằng cách thả tất cả các ảnh dữ liệu y khoa vào khu vực ’Drag files here’.
Khi tập ảnh ba chiều được tải lên, một bước tiền xử lý sẽ được thực hiện trên ảnh. Đầu tiên, khoảng cách các voxel trong ảnh được chuẩn hóa về 1mm×
1mm×1mmbằng phép nội suy spline bậc ba. Kế đến, giá trị của các voxel được chuẩn hóa về đoạn 0 - 1. Việc chuẩn hóa là cần thiết để các công đoạn phía sau như trực quan hóa, gán nhãn tự động,... được thực hiện một cách chính xác (Hình 5.8).
(a) Chưa được chuẩn hóa (b) Đã được chuẩn hóa
Hình 5.6: Trực quan khối ba chiều của cùng một tập ảnh khi chưa được chuẩn hóa (Hình 5.8a) và sau khi đã chuẩn hóa khoảng cách (Hình 5.8a). Không khó để thấy rằng trước khi được chuẩn hóa, hình ảnh ổ bụng được mô phỏng thiếu chính xác. Từ đây có thể thấy được tầm quan trọng của việc chuẩn hóa khoảng cách các voxel trước khi đưa tập dữ liệu vào gán nhãn. Điều này cũng đúng với việc chuẩn hóa giá trị các voxel.
5.2.2 Chức năng chia sẻ tập dữ liệu
Khi người dùng sở hữu và lưu trữ một tập dữ liệu trên hệ thống, họ có thể chia sẻ chia sẻ tập dữ liệu của mình với các người dùng khác bằng nhân vào nút ’Invite’. Một hộp thoại sẽ được hiển thị để người dùng nhập vào username của các
người dùng khác.
5.3. Chức năng gán nhãn5.2.3 Chức năng xóa tập dữ liệu 5.2.3 Chức năng xóa tập dữ liệu
Đối với người dùng sở hữu tập dữ liệu muốn xóa, sau khi người dùng thực hiện tác vụ xóa tập dữ liệu, tập dữ liệu sẽ được gỡ bỏ khỏi hệ thống và bất cứ thành viên nào từng được chia sẻ tập dữ liệu này cũng không thể tiếp tục sử dụng. Ngoài ra, người dùng được chia sẻ tập dữ liệu(được mời) cũng có thể gỡ bỏ tập dữ