TỔNG QUAN
ĐẶT VẤN ĐỀ
Đái tháo đường đang tăng một cách nhanh chóng trên toàn thế giới, có khoảng 1/3 bệnh nhân đái tháo đường có biến chứng bệnh võng mạc đái tháo đường (VMĐTĐ) Đây là một trong những nguyên nhân hàng đầu gây mất thị lực trên thế giới đặc biệt là trong độ tuổi lao động [1] Nếu không được phát hiện và điều trị kịp thời sẽ gây ra những tổn thương nặng nề ở đáy mắt như phù hoàng điểm, xuất huyết dịch kính, xuất huyết võng mạc…dẫn đến mù lòa [2] Theo số liệu thống kê cho thấy năm 2010 có 285 triệu người mắc bệnh đái tháo đường, ước tính 2030 có 439 triệu người hàng năm có 1.8 triệu người bị mù do bệnh VMĐTĐ, ở Việt Nam hằng năm có khoảng 4.5 triệu người mắc bệnh đái tháo đường và có đến 20% người có biến chứng bệnh về mắt [3] Tỷ lệ mắc bệnh VMĐTĐ gia tăng theo thời gian bị bệnh đái tháo đường Khoảng 60% bệnh nhân có thời gian mắc bệnh đái tháo đường từ 15 năm trở lên sẽ bị tổn thương mạch máu trong mắt và một phần trăm trong số này sẽ có nguy cơ mù lòa [4].
Bệnh lý VMĐTĐ thông thường sẽ được khám đáy mắt bằng cách tra thuốc giãn đồng tử để bác sĩ có thể quan sát đáy mắt bệnh nhân rõ hơn và loại thuốc này có thể gây mờ mắt trong vài giờ đồng hồ Ngoài ra thì bác sĩ có thể phân tích hình ảnh võng mạc có thể thực hiện bằng máy chụp ảnh đáy mắt nhưng đó là một quy trình thủ công, mất thời gian và độ tin cậy không được cao Do đó, cần tạo ra một quy trình tự động với độ chính xác cao Khi thời đại công nghệ kỹ thuật ngày càng phát triển AI được ứng dụng nhiều trong y tế, đặc biệt là trong việc chẩn đoán hình ảnh. Thay vì chỉ sử dụng những kinh nghiệm cá nhân và các triệu chứng lâm sàn bệnh nhân sẽ không thấy được sự chắc chắn, không có được độ tin cậy cao, bác sĩ có thể dùng hệ thống chẩn đoán hình ảnh được phân loại bằng AI để hỗ trợ Nhiều hình ảnh chụp đáy mắt sẽ không thể chẩn đoán được bằng mắt thường, có thể do chất lượng ảnh, cường độ ảnh Các thuật toán AI sẽ giúp trích xuất chẩn đoán những dữ liệu này Dựa vào đó, các kết quả chẩn đoán cũng sẽ được phân tích chính xác hơn và giúp người bệnh yên tâm hơn trong quá trình thăm khám.
Trước vấn đề được đặt ra, với mục tiêu giải quyết những khó khăn và hạn chế của phương pháp chẩn đoán bệnh võng mạc đái tháo đường thủ công, chúng tôi quyết định áp dụng khoa học công nghệ trong lĩnh vực y tế Mục tiêu chính là tạo ra một mô hình sử dụng trí tuệ nhân tạo để phân loại các cấp độ bệnh VMĐTĐ và hỗ trợ bác sĩ trong quá trình chẩn đoán Do đó, chúng tôi đã quyết định nghiên cứu mô hình “Phân loại bệnh võng mạc đái tháo đường sử dụng mô hình mạng resnet” để có thể giúp bác sĩ chẩn đoán các cấp độ của bệnh VMĐTĐ, giúp tối ưu hóa quy trình khám chữa bệnh để tiết kiệm thời gian và đảm bảo độ chính xác, đồng thời tạo niềm tin và sự an tâm cho bệnh nhân.
MỤC TIÊU
Phân loại ảnh về bệnh võng mạc do biến chứng của bệnh đái tháo đường gây ra bằng cách xây dựng mô hình mạng ResNet Thu thập tập dữ liệu APTOS 2019, gồm
3662 ảnh được gắn nhãn rõ ràng với 5 cấp độ không bệnh, nhẹ, trung bình, nghiêm trọng và rất nghiêm trọng Sau khi hoàn thành hệ thống phân loại thiết kế giao diện web để hiển thị kết quả.
NỘI DUNG NGHIÊN CỨU
Trong quá trình thực hiện Đồ án tốt nghiệp với đề tài “Phân loại bệnh võng mạc đái tháo đường sử dụng mô hình mạng Resnet”, chúng tôi đã tập trung giải quyết và hoàn thành được những nội dung sau:
Nội dung 1: Tìm kiếm tập dữ liệu hình ảnh và phân chia tập ảnh dữ liệu thành tập
Train, tập Validation và tập Test.
Nội dung 2: Xây dựng mô hình huấn luyện phân loại bệnh võng mạc đái tháo đường. Nội dung 3: Tiến hành cho máy học, điều chỉnh và đánh giá kết quả.
Nội dung 4: Nghiên cứu xây dựng Web để trình bày kết quả.
Nội dung 5: Viết báo cáo thực hiện.
Nội dung 6: Bảo vệ đồ án.
GIỚI HẠN
Trong quá trình thực hiện đề tài có những giới hạn sau:
- Tập dữ liệu được lấy từ nguồn internet Cần tăng cường tập dữ liệu huấn luyện để đảm bảo độ đa dạng và đại diện cho các trường hợp bệnh.
- Đề tài chỉ phân loại hình ảnh chưa khoanh được vùng tổn thương.
- Giao diện demo chỉ hiển thị được các chức năng: đăng nhập, đăng kí, chẩn đoán Đối với phần chẩn đoán từ xa chỉ mới thực hiện được phần tương tác với giao diện.
BỐ CỤC
Giới thiệu tổng quan về nội dung đề tài nghiên cứu, mục tiêu, phạm vi và bố cục của đồ án.
• Chương 2: Cơ Sở Lý Thuyết
Giới thiệu tổng quan về bệnh võng mạc đái tháo đường, ảnh chụp đáy mắt và các phương pháp phân loại ảnh đáy mắt.
• Chương 3: Xây Dựng Mô Hình Phân Loại Bệnh Võng Mạc Tiểu Đường
Trình bày sơ đồ khối của đề tài, cách xây dựng mô hình huấn luyện đã thu thập trước đó Sau khi huấn luyện mô hình xong tiến hành thử nghiệm mô hình để thực hiện việc đưa ảnh vào quá trình nhận diện, xây dựng một giao diện đơn giản, cho phép người dùng tải lên ảnh và tiến hành nhận diện.
• Chương 4: Kết Quả Và Thảo Luận
Tổng kết kết quả sau quá trình thực hiện và đánh giá mô hình huấn luyện, đồng thời thực hiện so sánh và phân tích kết quả đạt được, nghiên cứu viết hướng dẫn cách sử dụng giao diện, đưa ra dự toán chi phí thực hiện.
• Chương 5: Kết Luận và Hướng Phát Triển
Trình bày các kết quả đạt được sau quá trình thực hiện và đưa ra những kết luận.Đưa ra ưu nhược điểm Sau đó, đề xuất ý tưởng và hướng phát triển cho đề tài.
CƠ SỞ LÝ THUYẾT
BỆNH VÕNG MẠC ĐÁI THÁO ĐƯỜNG
Bệnh võng mạc đái tháo đường là nguyên nhân chính gây ra mù lòa ở các nước phát triển và dần trở nên phổ biến ở các nước đang phát triển [2].
Hình 2.1 Giới thiệu bệnh võng mạc đái tháo đường
Hình 1.1 là một số đặc điểm về mắt khi bệnh võng mạc đái tháo đường Đây là một biến chứng bệnh tiểu đường ảnh hưởng đến mắt nguyên nhân là do lượng đường trong máu cao kéo dài làm tổn thương các mạch máu nhỏ của võng mạc Nó xảy ra do tổn thương các mạch máu của mô nhạy cảm với ánh sáng ở phía sau mắt (võng mạc) Theo thời gian, quá nhiều đường trong máu có thể dẫn đến tắc nghẽn các mạch máu nhỏ nuôi dưỡng võng mạc, cắt nguồn cung cấp máu cho võng mạc. Kết quả là, mắt cố gắng phát triển các mạch máu mới Nhưng những mạch máu mới này không phát triển đúng cách và có thể dễ dàng bị rò rỉ.
Gần như tất cả những người mắc bệnh tiểu đường đều bị tổn thương võng mạc.Đối với nhiều người, tổn thương đó chỉ có thể được phát hiện khi đi khám võng mạc.Học viện Nhãn khoa Hoa Kỳ chia bệnh lý võng mạc tiểu đường thành 5 mức độ nghiêm trọng, Loại đầu tiên không có bệnh lý võng mạc rõ ràng (No ApparentRetinopathy), mô tả những người có kết quả kiểm tra khỏe mạnh Ba loại tiếp theo:bệnh võng mạc tiểu đường không tăng sinh nhẹ (Mild), trung bình (Moderate) và nặng(Severe) mô tả mức độ tổn thương võng mạc ngày càng tăng Những người bị NPDR nhẹ có vi phình mạch ở võng mạc, nhưng không có tổn thương nào khác.
Những người bị NPDR nặng có hơn 20 lần xuất huyết võng mạc ở mỗi góc phần tư của võng mạc, một kiểu tổn thương đặc biệt trên các tĩnh mạch của võng mạc được gọi là "kết hạt tĩnh mạch" ở ít nhất hai góc phần tư võng mạc và các bất thường vi mạch trong võng mạc rõ ràng ở bất kỳ đâu trên võng mạc NPDR vừa phải được định nghĩa là nghiêm trọng hơn NPDR nhẹ, nhưng chưa đáp ứng các tiêu chí cho NPDR nghiêm trọng Giai đoạn thứ năm là bệnh võng mạc tiểu đường tăng sinh (PDR) dành cho những người có mạch máu mới hình thành khắp võng mạc hoặc rò rỉ vào dịch kính (xuất huyết dịch kính) hoặc giữa màng dịch kính và võng mạc (xuất huyết trước võng mạc) [6].
ẢNH CHỤP ĐÁY MẮT
Hình 2.2 Ảnh chụp đáy mắt
Chụp ảnh đáy mắt bao gồm chụp ảnh phía sau mắt, còn được gọi là đáy mắt Máy ảnh đáy mắt chuyên dụng bao gồm một kính hiển vi phức tạp gắn với máy ảnh có đèn flash được sử dụng trong chụp ảnh đáy mắt Các cấu trúc chính có thể được hình dung trên ảnh chụp đáy mắt là võng mạc trung tâm và ngoại vi, dây thần kinh thị giác và điểm vàng.
Hình 2.3 Các giai đoạn của bệnh võng mạc tiểu đường
Hình ảnh đáy mắt là một phương thức được sử dụng để phát hiện DR Chụp ảnh đáy mắt là quá trình nhờ ánh sáng phản xạ được sử dụng để tạo thành hình ảnh hai chiều cũng võng mạc ba chiều, mô phân lớp bán trong suốt nằm bên trong mắt được chiếu lên một mặt phẳng tạo ảnh Hình 2.3 cho thấy các mức độ nghiêm trọng
DR khác nhau từ các hình ảnh đáy mắt màu võng mạc [7].
MỘT SỐ PHƯƠNG PHÁP PHÂN LOẠI BỆNH VÕNG MẠC
2.3.1 PHƯƠNG PHÁP MÁY VECTOR HỖ TRỢ Đề tài nghiên cứu “Automated detection of diabetic retinopathy using SVM” của nhóm tác giả Enrique V.carrera, Ricardo Carrera và Andrés González năm 2017 sử dụng phương pháp SVM để đánh giá việc phân loại bệnh võng mạc tiểu đường [8] Đề tài này sử dụng dữ liệu hình ảnh số màu đáy mắt của ba khoa mắt Sau quá trình huấn luyện độ chính xác của hệ thống là 85%.
SVM là một thuật toán giám sát, nó có thể sử dụng cho cả việc phân loại hoặc đệ quy Tuy nhiên nó được sử dụng chủ yếu cho việc phân loại [9] Mục tiêu của thuật toán SVM là tạo đường hoặc ranh giới quyết định tốt nhất có thể tách không gian n chiều thành các lớp để chúng ta có thể dễ dàng đặt điểm dữ liệu mới vào đúng danh mục trong tương lai Ranh giới quyết định tốt nhất này được gọi là siêu phẳng [10].
Hình 2.4 Điểm dữ liệu được phân tách bằng SVM
Trong không gian 2 chiều , khoảng cách từ một điểm có tọa độ (x 0, y 0 ) tới đường thẳng có phương trình ω 1 x + ω 2 y + b = 0 xác định bởi công thức (2.1).
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 6
Tổng quát không gian nhiều chiều, khoảng cách từ một điểm (vector) có tọa độ x 0 tới siêu mặt phẳng có phương trình ω T x + b = 0 được xác định bởi công thức
(2.3) với ||w|| 2 = √∑ d i=1 ω 2 i với d là số chiều củ a không gian.
2.3.2 PHƯƠNG PHÁP MẠNG NƠ-RON TÍCH CHẬP Đề tài phân loại bệnh võng mạc tiểu đường được nhóm tác giả Harry Pratt, Frans Coenen, Deborah M Broadbent, Simon P Harding, Yalin Zheng sử dụng mạng nơ-ron tích chập Tập dataset đầu vào có 80000 ảnh có sẵn tại thư viện trực tuyến Kaggle Mô hình sau khi huấn luyện có độ chính xác trung bình là 75% [11].
Convolutional Neural Network (CNN hoặc ConvNet) được xem là một trong những mô hình của Deep Learning – tập hợp các thuật toán để có mô hình dữ liệu trừu tượng hóa ở mức cao bằng cách sử dụng nhiều lớp xử lý cấu trúc phức tạp. Hiểu đơn giản, CNN là một lớp của mạng nơ-ron sâu , được áp dụng phổ biến nhất để phân tích hình ảnh trực quan [12].
Hình 2.5 Kiến trúc CNN điển hình
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 7
Convolution layer (lớp tích chập ): Lớp quan trọng nhất và đầu tiên trong mô hình CNN là lớp tích chập Lớp này có chức năng chính là phát hiện các đặc trưng không gian hiệu quả trong dữ liệu Trên tầng này, có tồn tại 4 đối tượng chính: bộ filter, ma trận đầu vào, receptive field và feature map Lớp tích chập nhận đầu vào là một ma trận 3 chiều và một bộ filter cần phải học Bộ filter này được trượt qua từng vị trí trên bức ảnh để thực hiện phép tích chập giữa bộ filter và phần tương ứng trên bức ảnh Phần tương ứng này trên bức ảnh được gọi là receptive field, tức là vùng mà một neuron có thể "nhìn thấy" để đưa ra quyết định Quá trình này tạo ra một ma trận kết quả gọi là feature map, chứa thông tin về sự xuất hiện của các đặc trưng quan trọng trong dữ liệu [13].
Qua lớp tích chập, mô hình có khả năng học được các đặc trưng cục bộ trong dữ liệu và tạo ra các feature map, đóng vai trò quan trọng trong việc trích xuất thông tin hữu ích từ đầu vào Các feature map này sau đó sẽ được đưa vào các lớp tiếp theo trong mô hình để tiếp tục xử lý và tạo ra đầu ra cuối cùng của mô hình.
Hình 2.6 Cách thực hiện tích chập trong lớp tích chập Tầng convolution: Tầng tích chập trong mô hình CNN có chức năng chính là phát hiện các đặc trưng đặc biệt của bức ảnh Các đặc trưng này bao gồm những đặc trưng cơ bản như góc, cạnh, màu sắc, cũng như những đặc trưng phức tạp hơn như texture của ảnh Với việc bộ filter trượt qua toàn bộ bức ảnh, tầng tích chập có khả năng phát hiện những đặc trưng này ở bất kỳ vị trí nào trong bức ảnh Điều này có nghĩa là dù bức ảnh bị xoay hoặc lật ngang/lật dọc, các đặc trưng vẫn có thể được phát hiện Kích thước bộ filter, cùng với stride và padding, được xem là những tham số quan trọng trong tầng tích chập.
Kích thước bộ filter là một trong những tham số quan trọng nhất, vì nó ảnh hưởng đến số lượng tham số cần học trong mỗi tầng tích chập và quyết định vùng receptive field của tầng đó Kích thước phổ biến nhất cho bộ filter là 3x3, tuy nhiên, có thể sử dụng các kích thước khác tùy thuộc vào bài toán và kiến trúc mô hình.
Tham số stride (bước trượt), thể hiện số pixel bạn cần phải dịch chuyển mỗi khi trượt bộ filter qua bức ảnh Giả sử chọn bộ lọc với giá trị bước trượt bằng 1, bộ lọc sẽ dịch chuyển toàn bộ cửa sổ tích chập từ trái sang phải và từ trên xuống 1 điểm ảnh Giá trị bước trượt càng lớn, tốc độ tính toán càng nhanh, tuy nhiên kích thước của thông tin đặc tính của hình ảnh càng nhỏ, lượng thông tin bị mất càng nhiều.
Tham số padding là các giá trị 0 được thêm vào cùng lớp input Khi áp dụng phép convolution thì ma trận đầu vào sẽ có nhỏ dần đi, do đó số layer của mô hình CNN sẽ bị giới hạn, và không thể xậy dựng deep nets mong muốn Để giải quyết tình trạng này, cần padding vào ma trận đầu vào để đảm bảo kích thước đầu ra sau mỗi tầng convolution là không đổi Do đó có thể xây dựng được mô hình với số tầng convolution lớn tùy ý [14].
Hàm kích hoạt (activation function) trong mạng nơ-ron nhân tạo có chức năng tương tự như tỷ lệ truyền xung qua axon của một neuron thần kinh Hàm kích hoạt là thành phần phi tuyến tại đầu ra của mỗi nơ-ron trong mạng, và nó đóng vai trò quan trọng trong việc xác định đầu ra của nơ-ron đó [13] Một số hàm kích hoạt thông dụng như Hình 2.7.
Hình 2.7 Một số hàm kích hoạt thông dụng
Hàm Sigmoid được sử dụng để chuyển đổi một số thực thành một giá trị nằm trong khoảng từ 0 đến 1 Khi đầu vào là một số thực âm rất nhỏ, đầu ra của hàm Sigmoid sẽ tiến gần đến giá trị 0 Ngược lại, nếu đầu vào là một số thực dương lớn, đầu ra của hàm Sigmoid sẽ tiến gần đến giá trị 1 [15].
Trong những năm gần đây, hàm ReLU đã trở thành lựa chọn phổ biến khi huấn luyện các mạng neuron Hàm ReLU đơn giản là loại bỏ các giá trị nhỏ hơn 0. Bằng cách xem xét công thức của nó, ta có thể dễ dàng hiểu cách hoạt động của hàm này Hàm ReLU có một số ưu điểm vượt trội so với hàm Sigmoid và Tanh:
• ReLU không gặp vấn đề của vanishing gradient (đạo hàm gần tiến tới 0) như hàm Sigmoid và Tanh, giúp tăng cường hiệu suất huấn luyện mạng neuron sâu.
• ReLU tính toán nhanh hơn so với hàm Sigmoid và Tanh, do không có các phép tính exponentiation phức tạp.
• Hàm ReLU không bị chặn trong khoảng giá trị nhất định như hàm Sigmoid và Tanh, giúp mạng neuron linh hoạt hơn trong việc xác định đầu ra.
Vì những ưu điểm này, hàm ReLU đã trở thành một lựa chọn phổ biến trong huấn luyện mạng neuron trong những năm gần đây.
Lớp tổng hợp (Pooling Layer): được sử dụng sau hàm kích hoạt, để đơn giản hóa thông tin đầu ra và giảm bớt số lượng neuron Một số loại pooling layer phổ biến như là max-pooling, average pooling, chức năng chính là giảm chiều của tầng trước đó Với một pooling có kích thước 2x2, các bạn cần phải trược filter 2x2 này trên những vùng ảnh có kích thước tương tự rồi sau đó tính max, hay average cho vùng ảnh đó Khi hoàn tất tính toán và quét qua các lớp , pooling layer được tạo ra với mục đích lược bớt các thông tin không cần thiết và tối ưu đầu ra[13].
Hình 2.8 Hình ảnh ví dụ đầu vào sau khi qua lớp pooling
Lớp kết nối đầy đủ (Fully Connected Layer): Tầng cuối cùng của mô hình
CNN trong bài toán phân loại ảnh là tầng fully connected layer Tầng này có chức năng chuyển ma trận đặc trưng ở tầng trước thành vector chứa xác suất của các đối tượng cần được dự đoán Ví dụ, trong bài toán phân loại số viết tay MNIST có 10 lớp tương ứng 10 số từ 0-1, tầng này sẽ chuyển ma trận đặc trưng của tầng trước thành vector có 10 chiều thể hiện xác suất của 10 lớp tương ứng.
KỸ THUẬT HỌC CHUYỂN GIAO
Kỹ thuật học chuyển giao (transfer learning) là đặc biệt hữu ích trong trường hợp dữ liệu huấn luyện có kích thước nhỏ, vì nó cho phép tận dụng được kiến thức được học từ các tác vụ hoặc tập dữ liệu lớn khác Thay vì huấn luyện mô hình từ đầu trên tập dữ liệu nhỏ, chúng ta có thể sử dụng mô hình đã được huấn luyện trước đó và chỉ điều chỉnh một số phần nhỏ để phù hợp với tác vụ mới, giúp tiết kiệm thời gian và công sức.
Hình 2.9 Bảng các loại kiến trúc Resnet
ResNet (Residual Network) là một kiến trúc mạng nơ-ron sử dụng rộng rãi và phổ biến nhất hiện nay Đây là kiến trúc đầu tiên áp dụng batch normalization và có khả năng xử lý các mạng sâu với số lượng layer lên đến 152 Mặc dù ResNet có số lượng layer lớn, nhưng nhờ vào việc áp dụng các kỹ thuật đặc biệt, kích thước củaResNet50 chỉ khoảng 26 triệu tham số Điều này đạt được nhờ việc sử dụng các khối residual (residual blocks) trong kiến trúc, cho phép mô hình tập trung vào việc học sự khác biệt (residual) giữa đầu vào và đầu ra của mỗi khối, giúp cải thiện khả năng học sâu của mạng Hiện nay, có nhiều biến thể của kiến trúc ResNet với số lượng layer khác nhau, như ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152 Các tên này chỉ đề cập đến số lượng layer cụ thể trong kiến trúc ResNet [16].
Hình 2.10 Kiến trúc mạng Resnet50
ResNet50 là một biến thể của mô hình ResNet có 48 lớp Convolution cùng với
1 lớp MaxPool và 1 lớp Pool trung bình Convolutional layer 1bước nhảy 2 đây là bước đầu tiên trong mạng áp dụng 64 kernel với kích thước 7x7 lên đầu vào Mỗi kernel tạo ra một feature map mới Max pooling layer, bước này sử dụng max pooling để giảm kích thước của feature map từ bước trước đó đi một nửa Convolutional layers 2-10:
• Stride: 2 Đây là bước đầu tiên trong mạng, và nó áp dụng 64 kernel với kích thước 7x7 lên đầu vào Mỗi kernel tạo ra một feature map mới.
• Bước này sử dụng max pooling để giảm kích thước của feature map từ bước trước đó đi một nửa.
• Các convolutional layers này được lặp lại 3 lần, tổng cộng 9 lớp.
• Các convolutional layers này được lặp lại 4 lần, tổng cộng 12 lớp.
• Các convolutional layers này được lặp lại 6 lần, tổng cộng 18 lớp.
• Các convolutional layers này được lặp lại 3 lần, tổng cộng có 9 lớp
Sau khi hoàn thành các lớp convolutional này, tiếp theo là một bước average pooling để giảm kích thước của feature map.
Cuối cùng, có một fully connected layer với 1000 nodes và sau đó áp dụng hàm softmax để đưa ra xác suất dự đoán cho các lớp.
XÂY DỰNG MÔ HÌNH PHÂN LOẠI BỆNH VÕNG MẠC ĐÁI THÁO ĐƯỜNG
GIỚI THIỆU
Trong chương này, tập trung vào việc xây dựng sơ đồ khối cho mô hình trong quá trình huấn luyện Tiến hành nghiên cứu để tìm ra một mô hình phân loại phù hợp với tập dữ liệu hiện cónhằm đạt được kết quả tối ưu nhất Cùng với đó, mô hình sẽ được hiệu chỉnh thông số cũng như cấu trúc để tăng hiệu suất và đáp ứng yêu cầu của tập dữ liệu Sau khi thực hiện huấn luyện hoàn tất, để đánh giá hiệu suất sử dụng các đánh giá AI phổ biến và đáng tin cậy, nhằm thu thập các dữ liệu đáng tin cậy và mang tính khách quan nhất để đảm bảo tính chính xác.
Mô hình được sử dụng để phân loại bệnh võng mạc đái tháo đường là một mạng nơ-ron tích chập, và kết quả thu được của nó là các số liệu dự đoán liên quan đến mức độ bệnh Hình 3.1 dưới đây là sơ đồ khối tổng quát của mô hình.
Hình 3.1 Sơ đồ khối mô hình phân loại bệnh
Khối đầu vào: Nhận các ảnh đầu vào là hình ảnh đáy mắt lấy từ bộ dữ liệu được công bố công khai của Hiệp hội Nhãn khoa Châu Á Thái Bình Dương
Khối tiền xử lý: Thực hiện xử lý dữ liệu đầu vào để đưa vào quá trình huấn luyện bao gồm: thay đổi kích thước ảnh, chuẩn hóa dữ liệu, áp dụng các phép biến đổi, trích xuất đặc trưng.
Khối huấn luyện: Huấn luyện mô hình dựa trên dữ liệu huấn luyện bằng cách sử dụng mạng nơ-ron tích chập, cụ thể là ResNet50 để tìm ra các tham số tốt nhất cho mô hình.
Khối đầu ra: Đưa ra kết quả cuối cùng của mô hình huấn luyện Giao diện mô hình phân loại các cấp độ bệnh, cụ thể kết quả chẩn đoán được trình bày trên giao diện của trang web với giao diện dễ dàng sử dụng.
TẬP DỮ LIỆU
Hình 3.2 Hình ảnh minh họa một mẫu cho từng lớp trong bộ dữ liệu
Hình 3.2 minh họa cho từng lớp ảnh đầu vào của 5 cấp độ ảnh trong tập APTOS 2019 mang đến cho chúng ta một cái nhìn đa dạng và phong phú về các bệnh lý liên quan đến mắt và thị lực Từ những bức ảnh này, chúng ta có thể thấy rõ sự khác biệt trong mức độ nghiêm trọng của các tình trạng mắt, từ nhẹ nhưng có thể tiềm ẩn nguy cơ đến những trường hợp nghiêm trọng đe dọa thị lực của người bệnh.Qua những bức ảnh với 5 cấp độ ảnh trong tập APTOS 2019, chúng ta có được cái nhìn tổng quan về sự biến đổi và sự nghiêm trọng của các vấn đề liên quan đến mắt
Bảng 3.1 Tập dữ liệu ảnh đầu vào sử dụng trong đề tài
Tập dữ liệu như bảng 3.1 được lấy từ bộ dữ liệu phát hiện điểm mù APTOS
2019 với tổng số 3662 ảnh từ các bệnh nhân trong đó: No DR 1805 ảnh, Mild DR
370 ảnh , Moderate DR 999 ảnh, Severe DR 193 ảnh và Proliferative DR là 295 ảnh Bộ dữ liệu này được phát hành vào quý 2 năm 2019 bởi Hiệp hội Nhãn khoa Châu Á Thái Bình Dương Trong đó 5 lớp của bộ ảnh như sau:
- No DR : không có bệnh võng mạc đái tháo đường.
- Milde DR : Các vùng nhỏ sưng giống như quả bóng trong các mạch máu nhỏ của võng mạc, được gọi là vi phình mạch, xảy ra ở giai đoạn sớm nhất của bệnh Những vi phình mạch này có thể rò rỉ chất lỏng vào võng mạc.
-Moderate DR: Khi bệnh tiến triển, các mạch máu nuôi dưỡng võng mạc có thể sưng lên, biến dạng và cũng có thể mất khả năng vận chuyển máu Cả hai tình trạng đều gây ra những thay đổi đặc trưng đối với hình dạng của võng mạc và có thể góp phần gây ra chứng phù hoàng điểm do tiểu đường (DME).
- Severe DR: Nhiều mạch máu hơn bị tắc nghẽn, làm mất nguồn cung cấp máu cho các vùng của võng mạc Những khu vực này tiết ra các yếu tố tăng trưởng báo hiệu cho võng mạc phát triển các mạch máu mới.
- Proliferative DR: Ở giai đoạn tiến triển này, các yếu tố tăng trưởng do võng mạc tiết ra sẽ kích hoạt sự tăng sinh của các mạch máu mới, phát triển dọc theo bề mặt bên trong của võng mạc và tạo thành gel thủy tinh thể, chất lỏng lấp đầy mắt Các mạch máu mới rất mỏng manh nên dễ bị rò rỉ và chảy máu Mô sẹo đi kèm có thể co lại và gây ra bong võng mạc – kéo võng mạc ra khỏi mô bên dưới Bong võng mạc có thể dẫn đến mất thị lực vĩnh viễn [26].
CHUẨN HÓA HÌNH ẢNH
Hình 3.3 Minh họa một số ảnh đầu vào
Khi huấn luyện mô hình bằng kích thước ban đầu ảnh sẽ rõ và chi tiết hơn nhưng sẽ làm cho tốc độ xử lý chậm vì tập ảnh đầu vào bao gồm nhiều kích thước do được thu thập từ nhiều nguồn khác nhau, vì vậy cần điều chỉnh kích thước cho các ảnh đầu vào có cùng kích thước để tăng tốc độ xử lý và để mô hình được hoạt động với hiệu suất tối đa Trong quá trình đào tạo đặt lại kích thước ảnh là 512x512 để các ảnh trong tập dữ liệu có kích thước giống nhau Bên cạnh đó, các pixel trong ảnh thường có giá trị từ 0 đến 255 sẽ được chuẩn hóa về các giá trị 0 đến 1 bằng cách chia pixel cho giá trị lớn nhất 255 nhằm mang lại sự tối ưu cho chương trình minh họa như Hình 3.4.
Hình 3.4 Ảnh trước và sau khi định cỡ
MẠNG CNN
Trong quá trình thiết kế kiến trúc mô hình, cần xem xét số lượng hình ảnh có sẵn, chất lượng của chúng và đối tượng cần được phân loại Dựa trên các yếu tố này, lựa chọn các tham số thích hợp như số lớp tích chập, kích thước bộ lọc và các tham số của mô hình để tìm ra sự tối ưu nhất cho quá trình huấn luyện Để thực hiện điều này cần tiến hành nhiều lần thí nghiệm và tốn thời gian để đánh giá hiệu suất của mô hình với các tham số khác nhau.
Trong quá trình thiết lập các thông số huấn luyện, xác định kích thước bộ lọc để áp dụng trong các lớp tích chập của mô hình Chọn số mẫu dữ liệu trong mỗi batch size, ngưỡng xác định điểm dừng của epoch, xác định hệ số để mô hình không bị overfiting.
❖ XÂY DỰNG CẤU TRÚC MẠNG CNN
Hình 3.5 Mô hình mạng CNN xây dựng
Mô hình mạng Nơ-ron tích chập được xây dựng như Hình 3.5 Kiến trúc mô hình sử dụng transfer learning được chia ra thành 2 phần:
• Phần 1: Base Network, sử dụng cấu trúc cơ bản của RESNET50 đã được huấn luyện trước tập dữ liệu ImageNet được loại bỏ các Fully Connected và Softmax. Ảnh đầu vào là một ảnh đã được định dạng và chuẩn hóa có kích thước đầu vào là 512x512x3, thêm ZeroPadding 2D vào trước lớp Conv2D để ảnh không bị mất thông tin trong quá trình trích xuất, đầu này được đưa qua một lớp tích chập (conv1) với 64 bộ lọc có kích thước 7x7, và sau đó được chuẩn hóa bằng BatchNormalization Kết quả được đưa qua hàm kích hoạt ReLU Tiếp theo, kết quả được đưa qua lớp Max Pooling để giảm kích thước ảnh còn xuống 128x128 nhằm thực hiện đơn giản hóa thông tin đầu ra, giảm bớt số lượng nơ ron nhưng vẫn giữ được các thuộc tính quan trọng Sau đó, mô hình sử dụng các khối Resnet (Residual blocks) để học các đặc trưng của ảnh Mạng có 5 khối Residual blocks (Conv2, Conv3, Conv4, Conv5 và output), mỗi khối chứa nhiều lớp tích chập (Conv2D), chuẩn hóa BatchNormalization, kích hoạt (Activation) và kết nối trượt (Add), sử dụng nối phần dư (Residual connection) để tránh tình trạng mất mát đạo hàm, chiều sâu của mỗi tầng sẽ tăng theo hướng gấp đôi các tầng trước, bắt đầu với 256, sau đó lần lượt là 512, 1024, 2048 và kích thước giảm đi 1 nửa, tầng cuối cùng kích thước là 16x16.
• Phần 2: Các Fully Connected Layers giúp giảm chiều dài dữ liệu và phân phối xác suất ngõ ra Đầu tiên, ta sử dụng lớp GlobalAveragePooling2D để giảm kích thước đầu ra Sau đó, ta thêm lớp Dropout tỉ lệ 0.5 với chức năng làm giảm số nút mạng ngẫu nhiên để hạn chế overfitting Tiếp theo, ta thêm một lớp Dense với 2048 nodes tạo ra một lớp fully connected neral network phức tạp để học một số tính năng khó của nảnh như cạnh, góc, đường cong, sử dụng hàm kích hoạt là ‘ReLU’ cho Dense sẽ giúp mô hình đạt được kết quả tốt và giải quyết vấn đề mất mát đạo hàm (vanshing gradient) trong quá trình huấn luyện Thêm lớp Dropout tỉ lệ 0.5 để hạn chế overfitting Lớp ngõ ra cuối cùng là 5 đối với mô hình phân loại không bệnh và 4 cấp độ bệnh võng mạc đái tháo đường với hàm kích hoạt Softmax để dự đoán xác suất cho từng lớp.
PHƯƠNG PHÁP ĐÁNH GIÁ HUẤN LUYỆN
❖ Ma trận nhầm lẫn (Confusion matrix)
Hình 3.6 Ma trận nhầm lẫn
Ma trận nhầm lẫn là một biểu đồ cho phép xem xét kết quả dự đoán của mô hình so với nhãn thực tế của dữ liệu kiểm tra Nó thể hiện số lượng dự đoán đúng và sai trong từng lớp phân loại Từ ma trận này, ta có thể xác định được lớp nào được phân loại đúng nhiều nhất và lớp nào thường bị phân loại nhầm vào các lớp khác. Điều này giúp ta hiểu rõ hơn về khả năng phân loại của mô hình và tìm hiểu các điểm yếu để cải thiện hiệu suất Hình 3.6 là ảnh minh họa cho một ma trận nhầm lẫn với các tham số như:
• TP (True Positive): Số lượng dự đoán chính xác Là khi mô hình dự đoán đúng một người bị bệnh
• TN (True Negative): Số lượng dự đoán một cách gián tiếp Là khi mô hình dự đoán đúng một người không bị bệnh.
• FP (False Positive): Số lượng các dự đoán sai lệch Là khi mô hình dự đoán một người bị bệnh và người đó hoàn toàn khỏe mạnh.
• FN (False Negative): Số lượng dự đoán sai lệch một cách gián tiếp Là khi mô hình dự đoán một người không bị bệnh nhưng người đó bị bệnh.
Ngoài ra, có 4 thông số cần quan tâm đến là các tỉ lệ TPR, TNR, FPR,
FNR được tính theo công thức như sau:
Trong lĩnh vực y tế, tỉ lệ báo động nhầm (FPR) và tỉ lệ bỏ sót (FNR) là hai chỉ số quan trọng trong quá trình chẩn đoán bệnh Người ta thường có xu hướng ưu tiên cho tỉ lệ báo động nhầm cao hơn so với tỉ lệ bỏ sót, và điều này có lý do rõ ràng Khi chẩn đoán nhầm một bệnh, điều đó có thể dẫn đến việc thực hiện các xét nghiệm hoặc quá trình điều trị không cần thiết Dù có gây ra một số phiền toái và chi phí không cần thiết, nhưng ít nhất bệnh nhân sẽ được đánh giá kỹ lưỡng và những trường hợp tiềm ẩn không được bỏ sót Trái lại, khi tỉ lệ bỏ sót cao, nguy cơ là những trường hợp bệnh không được phát hiện sẽ làm gia tăng nguy cơ cho sức khỏe của bệnh nhân Những bệnh tiềm ẩn có thể không được chẩn đoán kịp thời, gây ra mất cơ hội điều trị sớm và tăng khả năng phát triển của bệnh Điều này có thể dẫn đến hậu quả nghiêm trọng, bao gồm sự gia tăng tỷ lệ tử vong hoặc tình trạng bệnh trở nặng hơn.
Vì vậy, trong lĩnh vực y tế, mặc dù không thể loại bỏ hoàn toàn sai sót, nhưng người ta thường lựa chọn chấp nhận tỉ lệ báo động nhầm cao hơn để giảm thiểu nguy cơ bỏ sót bệnh Sự cân nhắc này nhằm đảm bảo rằng những trường hợp bệnh quan trọng không bị bỏ sót và nhận được sự quan tâm và điều trị kịp thời.
Precision đo lường độ chính xác của các điểm được dự đoán là Positive Khi Precision cao, tỷ lệ các điểm được dự đoán đúng là Positive là cao Ví dụ, nếu Precision là 1, có nghĩa là tất cả các điểm được dự đoán là Positive đều là chính xác, không có điểm Negative nào bị nhầm vào kết quả.
Recall, hay còn gọi là True Positive Rate, đo lường tỷ lệ các điểm Positive thực sự được tìm thấy trong tổng số các điểm Positive Khi Recall cao, tức là tỷ lệ bỏ sót các điểm Positive là thấp Nếu Recall là 1, tức là mọi điểm Positive đều được tìm thấy Tuy nhiên, Recall không đo lường số lượng điểm Negative bị nhầm vào kết quả.
Một mô hình phân loại tốt là mô hình có cả Precision và Recall đều cao, tức gần với giá trị 1 Điều này có nghĩa mô hình có tỷ lệ cao các điểm dự đoán là Positive thực sự là Positive (Precision cao) và đồng thời có tỷ lệ bỏ sót các điểm Positive là thấp (Recall cao).
F1-score là một độ đo tổng hợp, được tính toán bằng công thức (3.7), nhằm kết hợp Precision và Recall lại với nhau Điều này giúp đưa ra một đánh giá tổng quan về hiệu suất của mô hình phân loại Việc sử dụng F1-score cho phép đạt được sự cân bằng giữa việc dự đoán chính xác các trường hợp Positive và đảm bảo không bỏ sót quá nhiều trường hợp Positive khác.
Việc tính toán F1-score có ý nghĩa quan trọng trong việc đánh giá hiệu suất của mô hình phân loại, đặc biệt khi Precision và Recall có mức độ cân bằng không đồng đều Bằng cách kết hợp cả hai chỉ số này thành một đại lượng duy nhất, F1- score giúp cung cấp thông tin toàn diện hơn về khả năng phân loại của mô hình.
Accuracy đo lường tỷ lệ dự đoán chính xác trên tập dữ liệu kiểm tra Đây là phương pháp đánh giá đơn giản và thông dụng nhất, được tính bằng công thức:
+ + + Độ chính xác chỉ đánh giá tổng quan hiệu suất của mô hình và không phân biệt giữa các lớp phân loại Tuy nhiên, nó có thể bị ảnh hưởng bởi mất cân bằng dữ liệu, đặc biệt khi số lượng mẫu trong mỗi lớp không cân đối.
Mặc dù phương pháp đánh giá bằng cách sử dụng độ chính xác có ưu điểm là cho biết tỷ lệ phần trăm dữ liệu được phân loại đúng, nhưng nó cũng có nhược điểm là không cung cấp thông tin chi tiết về việc phân loại của từng lớp Điều này có nghĩa là chúng ta không biết được lớp nào được phân loại đúng nhiều nhất hay dữ liệu của lớp nào thường bị phân loại nhầm vào các lớp khác.
THIẾT KẾ GIAO DIỆN
Giao diện được thiết kế thân thiện với người dùng để có thể dễ dàng chẩn đoán hình ảnh Giao diện thiết kế gồm hai phần chính là FrontEnd và BackEnd. Phần BackEnd là một mô hình mạng CNN đã được huấn luyện, Django và Django REST Framework và FrontEnd là giao diện user REST API riêng biệt được thiết kế bằng React Chúng được kết nối với nhau thông qua API Giao diện này được xây dựng trên nền tảng Visual Studio Code, một công cụ biên tập mã nguồn miễn phí cho Windows, Linux và macOS, được phát triển bởi Microsoft.
BackEnd được thiết kế bằng Django Dùng Visual Studio Code để xem cấu trúc rõ ràng hơn Trong Project Python sẽ có 1 file manage.py và 1 folder cùng tên với Project File manage.py giúp ta tương tác Project qua các command (như là tạo tài khoản admin, tạo database, chạy server ảo, ).
Hình 3.7 Giao diện Folder Django sử dụng VS Code Để đưa REST API lên localhost , mở terminal trong project lên sau đó gõ cú pháp python manage.py runserver để khởi động sever ảo như Hình 3.8.
Hình 3.8 Giao diện terminal khởi động sever ảo
Hình 3.9 dưới đây là kết quả sau khi mở trình duyệt truy cập vào localhost:8000.
Hình 3.9 Giao diện hiển thị sau khi truy cập localhost thành công
Sau khi tạo ứng dụng Django, chúng ta tạo mô hình bác sĩ (Hình 3.11) và dữ liệu bệnh nhân (Hình 3.12) Mô hình bác sĩ cho phép đăng nhập và đăng kí vào trang web, mô hình bệnh nhân sẽ đại diện cho bảng database chứa thông tin bệnh nhân.
Hình 3.10 Giao diện xây dựng các API REST
Hình 3.11 Giao diện hiển thị API của mô hình bác sĩ
Hình 3.12 Giao diện hiển thị API của dữ liệu bệnh nhân 3.7.2 THIẾT KẾ FRONTEND
Giao diện sẽ được thiết kế bằng React React có một tiện ích chính thức cho phép bạn nhanh chóng tạo các dự án React mà không cần phải cấu hình trực tiếpWebpack Webpack là một trình gói module được sử dụng để gói các nội dung web như mã JavaScript, CSS và hình ảnh Thông thường, trước khi có thể sử dụngWebpack, bạn cần đặt các tùy chọn cấu hình khác nhau, nhưng nhờ tiện ích create- react-app bạn không phải xử lý trực tiếp với Webpack cho đến khi quyết định rằng mình cần kiểm soát nhiều hơn [23] Tạo một dự án React bằng cách sử dụng npx create-react-app frontend Tiếp theo, chuyển bên trong ứng dụng React và khởi động Sever, kết quả như Hình 3.13.
Hình 3.13 Giao diện hiển thị khởi động React
Thành phần React đại diện cho một phần của giao diện user chia giao diện user thành ba phần độc lập gồm: trang chủ , chẩn đoán và danh sách bệnh nhân.
3.7.3 KẾT NỐI FRONTEND VÀ BACKEND
Hình 3.14 Giao tiếp giữa người dùng và sever
Phía khách hàng (Client) chính là máy tính của người dùng, khi người dùng gửi 1 yêu cầu (request) bằng giao thức HTTP cho phía máy chủ (Server) Sau khi Server nhận được request, server sẽ phân tích người dùng yêu cầu: GET, POST, DELETE, PUT rồi sẽ phản hồi (response) về cho máy người dùng như Hình 3.14.
- GET: phương thức này sẽ phân trang dữ liệu bằng cách sử dụng Django Paginator và trả về trang dữ liệu đầu tiên sau khi tuần tự hóa, số lượng khách hàng có sẵn, số lượng trang có sẵn và các liên kết đến trang trước đó và trang tiếp theo Paginator là một lớp Django được tích hợp sẵn để phân trang danh sách dữ liệu thành các trang và cung cấp các phương thức để truy cập các mục cho mỗi trang.
- POST: phương thức này sẽ tuần tự hóa dữ liệu khách hàng đã nhận và sau đó gọi phương thức save() của đối tượng serializer Sau đó, nó trả về một đối tượng Response, một version của HttpResponse, với mã trạng thái 201 Mỗi dạng xem bạn tạo có trách nhiệm khôi phục một đối tượng HttpResponse Phương thức save() lưu dữ liệu được tuần tự hóa trong database.
-PUT: phương pháp này sẽ tạo một bộ tuần tự cho dữ liệu khách hàng mới Tiếp theo, nó gọi phương thức save() của đối tượng serializer đã tạo Cuối cùng, nó gửi một đối tượng Phản hồi với khách hàng được cập nhật.
- DELETE: phương thức này sẽ gọi phương thức delete() của đối tượng khách hàng để xóa nó, sau đó trả về một đối tượng Phản hồi không có dữ liệu.
Hình 3.15 Lưu đồ chương trình chính chẩn đoán hình ảnh
Lưu đồ chương trình chính được trình bày như hình 3.15, khi bác sĩ truy cập trang web nếu đã có tài khoản thì sẽ tiến hành đăng nhập ngược lại sẽ đăng ký tài khoản sau đó sẽ đăng nhập tài khoản để sử dụng trang web Sau khi truy cập vào trang chẩn đoán bác sĩ sẽ nhập thông tin bệnh sau đó chọn hình ảnh cần chẩn đoán, kiểm tra nếu chưa chọn ảnh thì cần chọn lại ảnh sau đó lưu lại thông tin và hình ảnh của bệnh nhân như lưu đồ con hình 3.16 (a) Tiếp theo truy cập vào trang danh sách bệnh nhân, đây là nơi lưu trữ thông tin khi bác sĩ mới thêm, trong trang này bao gồm ba tác vụ: chi tiết, cập nhật và xóa Khi nhấn “Chi tiết” sẽ hiển thị thông tin chẩn đoán bệnh và thông tin bệnh nhân đã được tạo Khi nhấn “Cập nhật” bác sĩ có thể cập nhật hình ảnh chẩn đoán, các thông tin của bệnh nhân Khi nhấn “Xóa” hệ thống sẽ xóa tất cả thông tin của bệnh nhân ra khỏi danh sách, lưu đồ chương trình con như Hình 3.16 (b).
Hình 3.16 Lưu đồ chương trình con chẩn đoán hình ảnh
FrontEnd và BackEnd được kết nối với nhau theo lưu đồ như Hình 3.15 Để thực hiện được việc này chúng ta sẽ sử dụng các API đã được tạo ra trong phần BackEnd.Vercel app là một nền tảng phát triển Web hiện đại, giúp cho người dùng dễ dàng triển khai trang web Để sử dụng người dùng cần truy cập vào trang chủ Vercel để tạo một tài khoản Sau khi đăng nhập tài khoản thì người dùng tạo một project mới đây sẽ là nơi triển khai trang web của mình trên Vercel Bước tiếp theo cần làm là đẩy toàn bộ source code lên Github Cuối cùng , kết nối Github với Vercel, kết quả thành công như Hình 3.17.
Hình 3.17 Kết quả sau khi tạo Vercel app