Đây là một dự án cá nhân, có khả năng phát hiện bệnh nhân nhiễm COVID-19 từ hình ảnh chụp X-ray phổi.

Bắt đầu bằng dữ liệu

Một trong những điểm yếu đầu tiên, có thể dự đoán trước là sự thiếu hụt về dữ liệu cũng như các hình ảnh chụp X-ray của bệnh nhân nhiễm COVID-19. Tuy nhiên, tác giả vẫn quyết định thực hiện dự án này, do nó có thể đem lại hiệu quả trong tương lai, khi ta có nhiều dữ liệu hơn.

Đây là một nguồn dữ liệu trực tuyến gồm 25 ảnh X-ray chụp phổi có nhiễm COVID-19 và 25 ảnh X-ray chụp phổi hoàn toàn khỏe mạnh, đã được sử dụng trong mạng nơ-ron thuộc dự án này. Bạn có thể đọc hướng dẫn chi tiết trong bài viết này trên pyimagesearch.com

File csv được lấy từ một bộ dữ liệu trên Kaggle, cũng chứa các file ảnh X-ray phổi nhiễm COVID-19 ở trên. Nguyên nhân là do tác giả dữ liệu đã sử dụng bài viết trên pyimagesearchc để tổng hợp.

Bộ dữ liệu có thể được lấy tại đây.

Chuẩn bị và chuẩn hóa dữ liệu

Sau khi nhập dữ liệu, tác giả đã đánh nhãn các hình ảnh khỏe mạnh/bị nhiễm covid như được nêu phía dưới trong bài viết, sử dụng gói phần mềm cv2.

Sau đó, xác định các thông số (được tinh giản trong suốt quá trình thực hiện dự án nhằm đạt kết quả tối ưu nhất). Các thông số này bao gồm một số thời điểm (số lần đi qua CNN – mạng nơ-ron tích chập), tỷ suất học (mức độ ảnh hưởng của thông số trên quá trình học), và kích cỡ mẫu (số lượng mẫu sử dụng khi huấn luyện trong một phép lặp).

Vector đặc trưng và vector nhãn

Tiếp theo, tác giả khởi chạy các vector đặc trưng và vector nhãn. Trong đó, các vector đặc trưng bao gồm các thuộc tính được sử dụng để xác định kết quả hoặc dự đoán của mô hình – tức vector nhãn.

Để tạo những vector khởi điểm này, hình ảnh x-ray đã được chuẩn hóa và đồng bộ về kích thước 224×224 pixels.

One-Hot encode dữ liệu vector nhãn

Để phân loại thành ảnh covid/khỏe mạnh theo định tính nhưng không mang thứ tự, phương thức được sử dụng là one-hot encode, giúp tạo ra thêm thuộc tính (tức thêm chiều). Ở đây, bộ dữ liệu gồm nhiều nhãn đặc trưng và sẽ được đặt giá trị 0 hoặc 1, tùy thuộc vào ảnh được đánh giá có liên hệ với nhãn tương ứng hay không. Do chỉ có 2 phân loại nên dự án này sẽ sử dụng LabelBinarizer.

Cuối cùng, cả hai dạng vector sẽ được xáo lại để đảm bảo tính ngẫu nhiên, cũng như sự đa dạng của dữ liệu huấn luyện, có thể đạt tới 50 điểm dữ liệu.

Phân tách Huấn luyện/Kiểm thử bằng Sci-Kit Learn

Để tránh xảy ra quá khớp – tức mô hình không mang tính phổ biến, thay vào đó chỉ ứng dụng được vào các dữ liệu được sử dụng, tác giả đã chia dữ liệu thành bộ huấn luyện và bộ kiểm thử. Thông thường, tỷ lệ hợp lý sẽ là khoảng 70%/30% hoặc 80%/20%. Ở đây, tác giả đã lựa chọn chế độ mặc định (khoảng 80/20).

Chọn đúng mạng nơ-ron tích chập (CNN)

Trong số các lựa chọn, nổi bật nhất là mạng VGG16 hoặc GoogLeNet Inception. Sau nghiên cứu, VGG16 có yêu cầu về máy tính khá cao với tốc độ chậm, vì vậy tác giả đã thử thách với mô hình “Inception” mới của GoogLeNet.

Mạng nơ-ron tích chập GoogLeNet Inception

GoogLeNet inception cung cấp một mạng nơ-ron, trong đó đầu vào là hình ảnh sẽ được lọc qua các chiều là 1×1, 3×3, 5×5 và một pooling layer. Điều này sẽ làm giảm chi phí hạ tầng cũng như tránh xảy ra quá khớp trong mô hình sâu, đồng thời mở rộng mạng nơ-ron tích chập, bởi các quy trình sẽ được thiện trên cùng lớp chứ không đi sâu hơn – tức các vector dữ liệu phải đi qua nhiều lớp hơn.

Để hiểu rõ hơn, hãy lấy minh họa là một hệ thống phân biệt ảnh là chó hay mèo. Ở đây, một mạng nơ-ron như trên sẽ “xem xét nhiều góc nhìn của cùng hình ảnh” để ra kết luận cuối cùng, giống như cách con người quan sát hình ảnh/tranh để xác định các thành phần của nó. Và nguyên lý phía sau là gì? Là không phải bất cứ bức ảnh chó hay mèo nào cũng có cấu trúc giống nhau.

Kết luận

Xét trên số dữ liệu được sử dụng, mạng nơ-ron trên cho hiệu quả là tương đối tốt. Thông qua vô số các phép lặp được thực hiện, ước tính độ chính xác của mạng là khoảng từ 75% tới 92%. Tất nhiên, con số này không hoàn toàn đáng tin do số lượng dữ liệu còn hạn chế, song nó vẫn rất tiềm năng trong tương lai.

Ma trận nhầm lẫn (confusion matrix) phía trên biểu thị số lượng dự đoán mang kết quả là dương tính giả, dương tính thật, âm tính giả, âm tính thật. Để phân tích thang đo hiệu quả này, hãy lưu ý như sau: đa số dự đoán nên cho kết quả theo đường chéo (có nghĩa là mô hình đã dự đoán chính xác), còn nếu mô hình dự đoán sai, thì tối ưu nhất sẽ là ít kết quả dương tính giả. Về cơ bản, điều này có nghĩa là, bạn sẽ không muốn nói với bác sĩ là mình không nhiễm bệnh, trong khi bản thân lại có nhiễm, bởi lẽ điều này nguy hiểm hơn là nhận lầm thành có nhiễm khi thực chất không nhiễm bệnh.

Theo Becominghuman.ai

Tin liên quan: