BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ---------------------------------
KHÓA LUẬN TỐT NGHIỆP
NGÀNH KỸ THUẬT Y SINH
ĐỀ TÀI:
ỨNG DỤNG MÔ HÌNH VISION
TRANSFORMER TRONG PHÂN
LOẠI DỮ LIỆU BỆNH PHỔI
GVHD: TS. Nguyễn Mạnh Hùng
SVTH1: Ngô Quang Khải
MSSV1: 18129026
SVTH2: Huỳnh Văn Pháp
MSSV2: 18129041
TP. Hồ Chí Minh – 06/2022
BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ---------------------------------
KHÓA LUẬN TỐT NGHIỆP
NGÀNH KỸ THUẬT Y SINH
ĐỀ TÀI:
ỨNG DỤNG MÔ HÌNH VISION
TRANSFORMER TRONG PHÂN
LOẠI DỮ LIỆU BỆNH PHỔI
GVHD: TS. Nguyễn Mạnh Hùng
SVTH1: Ngô Quang Khải
MSSV1: 18129026
SVTH2: Huỳnh Văn Pháp
MSSV2: 18129041
TP. Hồ Chí Minh – 06/2022
TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc
Tp. HCM, ngày tháng 06 năm 2022
NHIỆM VỤ KHÓA LUẬN TỐT NGHIỆP
MSSV: 18129026 MSSV: 18129041 Mã ngành: 7520212D Mã hệ: Lớp: 1 181290C
Họ tên sinh viên: Ngô Quang Khải Huỳnh Văn Pháp Kỹ thuật Y Sinh Chuyên ngành: Đại học chính quy Hệ đào tạo: Khóa: 2018 I. TÊN ĐỀ TÀI: ỨNG DỤNG MÔ HÌNH VISION TRANSFORMER TRONG
PHÂN LOẠI DỮ LIỆU BỆNH PHỔI
II. NHIỆM VỤ 1. Các số liệu ban đầu:
- Tập dữ liệu X-quang ngực: ChestXpert, Chest14 và VinDr-CXR.
- Các mô hình Vision Transformer: ViT-B16, ViT-L16, ViT-S16, R50+ViT-B16.
- Các biến thể mô hình ResNet: ResNet18, ResNet34, ResNet50.
- Các cơ chế diễn giải mô hình: Grad-CAM, Attention Map.
- Ngôn ngữ lập trình: Python, HTML, CSS.
- Thư viện hỗ trợ xây dựng web API: Flask python.
- Cơ sở dữ liệu: SQLite, tương tác thông qua công cụ SQLAlchemy.
- Công nghệ đóng gói và triển khai ứng dụng: Docker.
2. Nội dung thực hiện:
- Tìm hiểu lý thuyết về các mô hình phân loại
- Nghiên cứu các tập dữ liệu Chest14, ChestExpert, VinDR-CXR và tạo tập dữ liệu
phù hợp với đề tài.
- Tiến hành các thí nghiệm huấn luyện mô hình ViT.
- Đánh giá kết quả các thí nghiệm bằng phương pháp định tính và định lượng.
- Xây dựng web API cho ứng dụng mô hình phân loại bênh phổi.
i
- Chạy thử nghiệm, kiểm tra và hiệu chỉnh hệ thống.
- Đóng gói và triển khai ứng dụng với Docker.
- Viết báo cáo thực hiện.
- Bảo vệ luận văn.
Ts. Nguyễn Mạnh Hùng
25/02/2022 III. NGÀY GIAO NHIỆM VỤ: IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 21/06/2022 V. HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: CÁN BỘ HƯỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
ii
TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc
Tp. HCM, ngày tháng 06 năm 2022
LỊCH TRÌNH THỰC HIỆN KHÓA LUẬN TỐT NGHIỆP
MSSV: 18129026
MSSV: 18129041
Họ tên sinh viên 1: Ngô Quang Khải Lớp: 181290C Họ tên sinh viên 2: Huỳnh Văn Pháp Lớp: 181290C Tên đề tài: Ứng dụng mô hình Vision Transformer trong phân loại dữ liệu bệnh phổi.
Xác nhận Tuần/ngày Nội dung GVHD
Gặp GVHD để nghe phổ biến yêu cầu làm đồ Tuần 1 án, tiến hành chọn đề tài và viết đề cương tóm (28/02 – 06/03) tắt yêu cầu đề tài đã chọn.
Tuần 2 Tổ chức dữ liệu thí nghiệm từ tập dữ liệu
(07/03 – 13/03) VinDr-XCR.
Tuần 3 Tiến hành các thí nghiệm để đánh giá hiệu suất
(14/03 – 20/03) mô hình.
Tuần 4 Hoàn thành các thí nghiệm huấn luyện mô
(21/03 – 27/03) hình.
Tuần 5 Chạy đánh giá kết quả định tính cho mô hình
(28/03 – 03/04) huấn luyện từ các thí nghiệm.
Tuần 6 Tiến hành đánh giá định lượng của mô hình. (04/04 – 10/04)
Tuần 6 Tìm hiểu cách triển khai ứng dụng model thông
(11/04 – 17/04) qua API, tìm hiểu về Docker.
Tuần 7 Xây dựng ứng dụng web cho mô hình phân loại
(18/04 – 24/04) bằng giao thức API với Flask python, html, css.
Tuần 8 Thêm các chức năng gửi thông báo kết quả
(25/04 – 01/05) chẩn đoán bệnh qua email và số điện thoại.
Tuần 9 Tìm hiểu và thêm cơ sở dữ liệu cho ứng dụng,
(01/05 – 08/05) thêm chức năng đăng ký và lưu trữ thông tin
iii
bệnh nhân.
Hoàn thiện các chức năng chính của ứng dụng:
Tuần 10 chức năng đăng ký bệnh nhân, chức năng dự
(09/05 – 15/05) đoán của mô hình, chức năng gửi email và tin
nhắn SMS.
Tuần 11 Thiết kế hoàn thiện giao diện người dùng của
(16/05 – 22/05) ứng dụng web, chạy thử nghiệm và hiệu chỉnh.
Tuần 12 Đóng gói và triển khai ứng dụng với Docker. (23/05 – 29/05)
Tuần 13 Viết báo cáo đề tài, thiết kế poster. (30/05 – 05/06)
Tuần 14 Chỉnh sửa báo cáo, làm Slide thuyết trình. (06/06 – 12/06)
Tuần 15 Hoàn thiện báo cáo, Slide thuyết trình, làm
(13/06 – 19/06) video giới thiệu ứng dụng.
Hoàn thiện báo cáo và gửi cho GVHD xem xét
Tuần 16 góp ý.
(20/06 – 26/06) Báo cáo trước GVHD và nộp quyển báo cáo Đồ
án tốt nghiệp.
GV HƯỚNG DẪN (Ký và ghi rõ họ và tên)
iv
LỜI CAM ĐOAN
Đề tài này do nhóm tìm hiểu, thực hiện dựa trên một số tài liệu và kết quả nghiên
cứu đã được công bố với sự hướng dẫn của thầy Nguyễn Mạnh Hùng và không sao chép
Người thực hiện đề tài
từ tài liệu hay công trình đã có trước đó.
Ngô Quang Khải – Huỳnh Văn Pháp
v
LỜI CẢM ƠN
Trải qua suốt quá trình nghiên cứu và thực hiện đề tài, từ những buổi đầu chủng
bị kiến thức nền tảng đến khi hoàn thành đề tài, nhóm đã nhận được rất nhiều sự hỗ trợ,
hướng dẫn tận tình từ Thầy Nguyễn Mạnh Hùng – Giảng viên bộ môn Điện tử công
nghiệp - Y sinh. Những góp ý, thảo luận, cùng những kinh nghiệm quý báu mà Thầy
chia sẽ đã giúp cho đề tài của nhóm ngày càng hoàn thiện hơn, chúng em cảm thấy rất
trân quý. Chúng em xin gửi lời cảm ơn sâu sắc đến Thầy.
Nhóm xin gửi lời cảm ơn đến các Thầy Cô khoa Điện - Điện tử vì những kiến
thức nền móng mà thầy cô đã truyền đạt để chúng em có thể đi đến chặn hành trình hiện
tại.
Chúng em cảm ơn Nhà trường, khoa và bộ môn đã có những kế hoạch tổ cho sinh
viên thực hiện đề tài tốt nghiệp đúng hạn mặc dù những trở ngại trong khoảng thời gian
dịch bệnh. Đặc biệt cảm ơn Thầy Nguyễn Thanh Hải, Trưởng bộ môn Điện tử công
nghiệp - Y sinh, đã luôn đồng hành và tận tâm dẫn dắt chúng em trong ngành học thú vị
này.
Xin gửi lời cảm đến gia đình, những người thân đã luôn quan tâm, động viên và
ủng hộ chúng em trong suốt con đường học tập.
Cuối cùng nhóm không quên gửi lời cảm ơn đến các bạn lớp 181290 đã đồng
hành, trao đổi kiến thức và giúp đỡ lẫn nhau trong quá trình học.
Mặc dù đề tài đã hoàn thành theo những nội dung đề ra, nhưng vì vốn kiến thức
còn hạn chế nên đề tài có thể khó tránh khỏi những thiếu sót. Nhóm mong nhận được
những góp ý từ quý Thầy Cô và người đọc để cải thiện đề tài tốt hơn.
Người thực hiện đề tài
Xin chân thành cảm ơn!
Ngô Quang Khải – Huỳnh Văn Pháp
vi
MỤC LỤC
NHIỆM VỤ KHÓA LUẬN TỐT NGHIỆP .................................................................i
iii LỊCH TRÌNH THỰC HIỆN KHÓA LUẬN TỐT NGHIỆP...................................
LỜI CAM ĐOAN ..........................................................................................................v
LỜI CẢM ƠN ...............................................................................................................vi
MỤC LỤC vii ...................................................................................................................
LIỆT KÊ HÌNH VẼ.......................................................................................................x
LIỆT KÊ BẢNG xiii ........................................................................................................
DANH MỤC TỪ VIẾT TẮT .....................................................................................xiv
TÓM TẮT ...................................................................................................................xvi
Chương 1. TỔNG QUAN..............................................................................................1
1.1 ĐẶT VẤN ĐỀ ...................................................................................................1
1.2 MỤC TIÊU ............................................................................................................3
1.3 NỘI DUNG NGHIÊN CỨU .................................................................................4
1.4 GIỚI HẠN .............................................................................................................4
1.5 BỐ CỤC ................................................................................................................5
Chương 2. CƠ SỞ LÝ THUYẾT .................................................................................6
2.1 GIỚI THIỆU ẢNH X-QUANG ............................................................................6
2.1.1 Ảnh số.............................................................................................................6
2.1.2 Ảnh X-quang ..................................................................................................7
2.2 GIỚI THIỆU PHẦN MỀM ...................................................................................8
2.2.1 Ngôn ngữ lập trình Python .............................................................................8
2.2.2 Thư viện Pytorch ............................................................................................9
2.3 GIỚI THIỆU MẠNG NƠ-RON NHÂN TẠO ....................................................11
2.3.1 Hàm kích hoạt ..............................................................................................12
vii
2.3.2 Gradient descent ........................................................................................... 13
2.3.3 Hàm tổn thất ................................................................................................. 14
2.4. CÁC MÔ HÌNH PHÂN LOẠI DỰA TRÊN CNN ............................................ 15
2.4.1 Mạng LeNet .................................................................................................. 15
2.4.2 Mạng AlexNet .............................................................................................. 17
2.4.3 Mạng VGG ................................................................................................... 19
2.4.4 Mạng GoogLeNet ......................................................................................... 20
2.4.5 Mạng ResNet ................................................................................................ 22
2.4.6 Giới thiệu kỹ thuật Grad-CAM .................................................................... 24
2.5 MÔ HÌNH PHÂN LOẠI DỰA TRÊN TRANSFORMER ................................. 26
2.5.1 Kiến trúc Transformer trong xử lý ngôn ngữ tự nhiên ................................. 26
2.5.2 Mô hình Vision Transformer ........................................................................ 29
2.5.3 Giới thiệu kỹ thuật Attention Map ............................................................... 34
2.6 GIỚI THIỆU VỀ API .......................................................................................... 35
2.6.1 Khái quát về API .......................................................................................... 35
2.6.2 Thư viện Flask .............................................................................................. 36
2.6.3 Cơ sở dữ liệu SQLite và công cụ tương tác SQLAlchemy .......................... 37
2.7 GIỚI THIỆU VỀ DOCKER ................................................................................ 38
Chương 3. THÍ NGHIỆM HUẤN LUYỆN VÀ DÁNH GIÁ MÔ HÌNH ............... 40
3.1 TỔNG QUAN VỀ PHƯƠNG PHÁP .................................................................. 40
3.2 TỔ CHỨC DỮ LIỆU .......................................................................................... 43
3.3 MÔ HÌNH SỬ DỤNG ......................................................................................... 45
3.4 PHƯƠNG PHÁP ĐÁNH GIÁ ............................................................................ 48
Chương 4. THI CÔNG HỆ THỐNG ......................................................................... 51
4.1 TỔNG QUAN VỀ HỆ THỐNG .......................................................................... 51
4.2 XÂY DỰNG WEB API ...................................................................................... 52
viii
4.3 TRIỂN KHAI ỨNG DỤNG VỚI DOCKER ...................................................... 57
Chương 5. KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ ................................................. 60
5.1 KẾT QUẢ ............................................................................................................ 60
5.1.1 Kết quả đánh giá định lượng của mô hình ................................................... 60
5.1.2 Khả năng diễn giải mô hình ......................................................................... 63
5.1.3 Kết quả triển khai ứng dụng ......................................................................... 64
5.2 NHẬN XÉT ĐÁNH GIÁ .................................................................................... 71
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .............................................. 73
6.1 KẾT LUẬN ......................................................................................................... 73
6.2 HƯỚNG PHÁT TRIỂN ...................................................................................... 73
TÀI LIỆU THAM KHẢO .......................................................................................... 75
PHỤ LỤC ..................................................................................................................... 78
ix
LIỆT KÊ HÌNH VẼ
Hình 1.1: Sự xuất hiện đồng thời nhiều loại bệnh trong tập dữ liệu VinDr-CXR [9]. ... 2
Hình 2.1: Ví dụ về ảnh màu RGB. ................................................................................. 6
Hình 2.2: Ví dụ về ảnh xám. ........................................................................................... 7
Hình 2.3: Ảnh chụp X-quang vùng ngực. ...................................................................... 8
Hình 2.4: Mô tả các bước của một quá trình huấn luyện mô hình trên Pytorch. ......... 10
Hình 2.5: Mạng nơ-ron nhân tạo. ................................................................................. 11
Hình 2.6: Đồ thị hàm Sigmoid. ..................................................................................... 12
Hình 2.7: Đồ thị hàm ReLU. ........................................................................................ 12
Hình 2.8: Vai trò của việc chọn learning rate. .............................................................. 13
Hình 2.9: Đồ thị Hàm log(x). ....................................................................................... 14
Hình 2.10: Mô tả kiến trúc mạng LeNet-5 được thiết kế để xác định các chữ số viết tay
trong tập dữ liệu MNIST. .............................................................................................. 15
Hình 2.11: Chi tiết các thành phần tham số của mô hình LeNet. ................................. 16
Hình 2.12: Mô tả kiến trúc mạng AlexNet. .................................................................. 17
Hình 2.13: Chi tiết các thành phần tham số của mô hình AlexNet. ............................. 18
Hình 2.14: Ý tưởng xây dựng mạng VGG sử dụng các khối VGG block gồm các tầng
tích chập được xếp chồng. ............................................................................................. 19
Hình 2.15: Mô tả kiến trúc mô hình VGG-16. ............................................................. 20
Hình 2.16: Cấu trúc khối Inception. ............................................................................. 21
Hình 2.17: Cấu trúc mạng GoogLeNet. ........................................................................ 22
Hình 2.18: Kết nối tắt được sử dụng trong ResNet. ..................................................... 23
Hình 2.19: Mô tả kiến trúc ResNet (ResNet-18). ......................................................... 24
Hình 2.20: Tổng quan về hoạt động của Grad-CAM. .................................................. 25
Hình 2.21: Kiến rúc Transformer [11].......................................................................... 27
Hình 2.22: Mô tả cách tính ma trận attention. .............................................................. 28
Hình 2.23: Mô tả Multi - Head Attention. .................................................................... 29
Hình 2.24: Mô tả kiến trúc của mô hình ViT [12]. ....................................................... 30
Hình 2.25: Hình ảnh được chia nhỏ thành các patch nhỏ có kích thước cố định. ........ 31
Hình 2.26: Làm phẳng các patch thành chuỗi các vectors (hình minh họa 9 patch). ... 31
Hình 2.27: Mô tả cơ chế Attention trong Vision Transformer. .................................... 32
x
Hình 2.28: Định nghĩa về khối Multi-self attention trong Vision Transformer. .......... 33
Hình 2.29: Attention map của [CLS] giữa các lớp khác nhau. .................................... 34
Hình 2.30: Mô tả về cách hoạt của giao thức API. ....................................................... 35
Hình 2.31: Hoạt động của API REST........................................................................... 36
Hình 2.32: Logo của framework Flask Python. ........................................................... 36
Hình 2.33: Phương thức thao tác với database bằng kỹ thuật ORM. ........................... 38
Hình 2.34: Các thành phần cơ bản của Docker. ........................................................... 39
Hình 3.1: Tổng quan về phương pháp. ......................................................................... 43
Hình 3.2: Biểu đồ phân phối dữ liệu lựa chọn từ tập dữ liệu VinDr-CXR. ................. 44
Hình 3.3: Cấu trúc tổ chức tập dữ liệu thí nghiệm. ...................................................... 45
Hình 3.4: Kiến trúc mạng của Resnet-18. .................................................................... 46
Hình 3.5: Kiến trúc mạng của Resnet-34. .................................................................... 47
Hình 3.6: Sự thay đổi của Resnet-50 (phải) so với các phiên bản trước đó (trái). ....... 48
Hình 3.7: Kiến trúc mạng của Resnet-50. .................................................................... 48
Hình 3.8: Grad-CAM và attention map trên tập dữ liệu ong và kiến. .......................... 49
Hình 4.1: Mô tả cách hoạt động của model API. ......................................................... 51
Hình 4.2: Tổng quan về hệ thống. ................................................................................ 52
Hình 4.3: Sơ đồ tổng quan về các chức năng của ứng dụng web. ................................ 53
Hình 4.4: Cấu trúc và các thành phần của dự án trên phần mềm Pycharm. ................. 54
Hình 4.5: Minh họa các hàm tiện ích được định nghĩa trong file utils. ........................ 54
Hình 4.6: Tạo Database. ............................................................................................... 55
Hình 4.7: Thiết lập gmail và SMS, trong đó account_sid và auth_token sẽ được cung
cấp bởi dịch vụ Twilio. .................................................................................................. 56
Hình 4.8: Tạo các giao diện trang web bằng HTML, CSS........................................... 56
Hình 4.9: Nội dung Dockerfile. .................................................................................... 58
Hình 4.10: Giao diện repositories của DockerHub. ..................................................... 58
Hình 5.1: Diễn giải mô hình với nhiều vùng tổn thương. ............................................ 63
Hình 5.2: Diễn giải mô hình với vùng tổn thương đơn lẻ. ........................................... 64
Hình 5.3: Giao diện trang chủ (Home) của ứng dụng web trên trình duyệt máy tính . 65
Hình 5.4: Giao diện đăng ký thông tin bệnh nhân ....................................................... 65
Hình 5.5: Giao diện dữ liệu bệnh nhân ........................................................................ 66
Hình 5.6: Giao diện chọn ảnh để thực hiện chức năng dự đoán của mô hình ............. 67
xi
Hình 5.7: Giao diện kết quả hiển thị Attention map .................................................... 67
Hình 5.8: Giao diện hiển thị dự đoán của mô hình và kết luận của bác sĩ .................. 68
Hình 5.9: Giao diện xem lại ảnh và thông tin bệnh nhân ............................................ 68
Hình 5.10: Giao diện gửi thông báo chẩn đoán cho bệnh nhân .................................. 69
Hình 5.11: Kết quả thông báo qua Email (trái) và tin nhắn SMS (phải) ..................... 69
Hình 5.12: Docker Images ứng dụng ........................................................................... 70
Hình 5.13: Image đã được đưa lên Dockerhub thành công ......................................... 70
Hình 5.14: Quá trình Pull Image về một máy tính khác cần triển khai ứng dụng ....... 70
Hình 5.15: Docker Image được Pull thành công về máy tính từ Docker Hub ............ 71
Hình 5.16: Kết quả khởi chạy thành công ứng dụng khi triển khai trên một máy tính
khác ............................................................................................................................... 71
xii
LIỆT KÊ BẢNG
Bảng 1.1: So sánh tập dữ liệu hình ảnh thông thường và tập dữ liệu hình ảnh y tế. ...... 2
Bảng 3.1: Tập dữ liệu CheXpert bao gồm 14 loại bệnh được gắn nhãn [7]. ................ 40
Bảng 3.2: Bảng thông kê tập dữ liệu VinDr-CXR [9]. ................................................. 42
Bảng 3.3: Class bệnh lựa chọn trong tập VinDr_CXR ................................................. 44
Bảng 3.4: Các cấu trúc backbone ViT. ......................................................................... 46
Bảng 5.1: Ảnh hưởng của kích thước hình ảnh. ........................................................... 60
Bảng 5.2: So sánh backbone. ........................................................................................ 61
Bảng 5.3: Kết quả có và không có tập dữ liệu pre-trained. .......................................... 62
Bảng 5.4: Kết quả trên tập dữ liệu backbone CNN. ..................................................... 63
xiii
DANH MỤC TỪ VIẾT TẮT
STT Từ viết tắt Giải thích
1 Dimension 1 1D
2 Dimension 2 2D
Artificial Intelligence 3 AI
Application Programming Interface 4 API
5 AtteMap Attention Map
BatchNorm 6 BN
Convolutional Neural Network 7 CNN
Cascading Style Sheets 8 CSS
Chest X-Ray 9 CXR
10 DICOM Digital Imaging and Communications in Medicine
Global Average Pooling 11 GAP
GroupNorm 12 GN
13 Grad-CAM Gradient-weighted Class Activation Mapping
Hypertext Markup Language 14 HTML
HyperText Transfer Protocol 15 HTTP
Identification 16 ID
Interstitial lung disease 17 ILD
K-Nearest Neighbors 18 KNN
LayerNorm 19 LN
Local Response Normalization 20 LRN
Multi-layer Perceptron 21 MLP
22 MNIST Modified National Institute of Standards and Technology
Multi-Head Self-attention 23 MSA
National Institutes of Health 24 NIH
Natural Language Processing 25 NLP
Object Relational Mapping 26 ORM
27 PACS Picture Archiving and Communication Systems
28 ReLU Rectified Linear Unit
xiv
29 ResNet Residual Network
30 REST Representational State Transfer
31 RPC Remote Procedure Call
32 SMS Short Message Service
33 SOAP Simple Object Access Protocol
34 SQL Structured Query Language
35 SVM Support Vector Machine
36 VGG Visual Geometry Group
37 ViT Vision Transformer
xv
TÓM TẮT
Trong lĩnh vực thị giác máy tính, các kiến trúc dựa trên Transformer gần đây đã
cạnh tranh với các truyền thống thành kiến trúc dựa trên CNN trong nhiều tác vụ. Sự
công của các kiến trúc dựa trên Transformer pre-trained model được huấn các vào là nhờ
luyện trên các dữ không được đáp ứng tập liệu khổng lồ. Tuy nhiên, yêu cầu này có thể
trong các ứng dụng hình ảnh y tế. so Bởi với tập dữ liệu ImageNet 21K, tập dữ liệu hình
ảnh y tế rất hạn chế. Do đó, trong đề tài này, nhóm ViT mô hình khám phá hiệu suất của
(Vision Transformer) trong việc phân loại hình ảnh y tế bằng cách sử dụng hai tập dữ
liệu lớn về ảnh y tế là ChestXpert và Chest14 để tinh chỉnh trên một mô hình pre-trained
tạo ra một mô hình pre-trained tinh chỉnh mô ImageNet nhằm ViT mới. Sau đó tiếp tục
hình trên tâp dữ liệu VinDR-XCR. Bên cạnh đó, nhóm cũng tiến hành các thí nghiệm
đánh giá như kích thước ảnh, loại backbone, nhằm chọn ra ảnh hưởng của các yếu tố
những tham số phù hợp cho quá trình huấn luyện mô hình phân loại. Các kỹ thuật diễn
giải mô hình cũng được sử dụng để đánh giá khả năng của ViT so với các mô hình dựa
trên CNN trong việc giải quyết sự cùng xuất hiện của nhiều bệnh trong một hình ảnh.
Kết quả từ các thí nghiệm toàn diện cho thấy rằng phương pháp đề xuất tốt hơn
một chút so với các phương pháp dựa trên tích chập thông thường về chính xác của độ
phân loại. Tuy nhiên, về khả năng diễn giải mô hình, các mô hình dựa trên ViT có thể
xử lý sự đồng xuất hiện của nhiều bệnh trong một hình ảnh y tế.
Nhóm cũng tiến hành xây dựng ứng dụng web đơn giản cho mô hình phân loại
bệnh phổi đã huấn luyện. Ứng dụng bao gồm các chức năng như đăng ký và lưu trữ
thông tin bệnh nhân, đưa ra các dự đoán bệnh cho ảnh đầu vào, gửi thông tin kết quả
điện thoại đã đăng ký. chẩn đoán của bác sĩ cho bệnh nhân qua email hoặc số Ứng dụng
có giao diện đơn giản và dễ sử dụng, ứng dụng chỉ có vai trò đưa ra dự đoán để hỗ trợ
bác sĩ và hoàn toàn không có khả năng thay thế bác sĩ để đưa ra kết luận.
xvi
CHƯƠNG 1. TỔNG QUAN
Chương 1. TỔNG QUAN
1.1 ĐẶT VẤN ĐỀ
Phân loại bệnh vùng phổi dựa trên ảnh chụp y tế để khám chữa bệnh là một công
việc đặc thù và thiết yếu của bác sĩ trong lĩnh vực phân tích và chẩn đoán hình ảnh y
khoa. Trong những năm gần đây, khi lĩnh vực trí tuệ nhân tạo đã có những bước tiến rất
mạnh mẽ và được ứng dụng có hiệu quả vào nhiều lĩnh vực trong đời sống thì việc ứng
dụng các mô hình học sâu vào giải quyết các bài toán phân loại ảnh y tế cũng trở thành
một hướng nghiên cứu quan trọng [1]. Nếu một mô hình AI có khả năng thực hiện tốt
công việc phân loại trên hình ảnh y tế thì kết quả mang lại sẽ rất có ý nghĩa, chẳng hạn
như hỗ trợ các bác sĩ trong việc chẩn đoán để tiết kiệm thời gian, tránh bỏ sót bệnh cũng
như hỗ trợ cho các nghiên cứu sâu hơn.
Theo như tìm hiểu của nhóm, hiện nay đã có nhiều đề tài nghiên cứu áp dụng học
sâu để phân loại bệnh trên hình ảnh y tế và đạt được một số kết quả nhất định, một trong
số đó là Đồ Án Tốt Nghiệp của nhóm Ngô Thị Anh Thư và Phạm Thiên Vương với đề
tài “Ứng dụng xử lý ảnh và AI để nhận biết bệnh viêm phổi ở trẻ em” [2]. Tiếp theo là
Đồ Án Tốt Nghiệp của nhóm Võ Kiều Phương và Nguyễn Nhật Uyên với đề tài “Ứng
dụng Deep Learning và Radiomics trong quá trình chẩn đoán ung thư phổi” [3]. Hai đề
tài trên đã xây dựng thành công mô hình chẩn đoán bệnh ở vùng phổi dựa trên mạng nơ-
ron tích chập kết hợp với kiến trúc U-Net cho việc phân đoạn.
Không giống với các ứng dụng trong những lĩnh vực thông thường, các mô hình
AI trong y tế đòi hỏi độ phức tạp tính toán cao hơn do các đặc trưng về độ phân giải của
hình ảnh y tế cũng như các hạn chế về kích thước tập dữ liệu. Để các mô hình học sâu
có thể phát huy thế mạnh, cần chuẩn bị dữ liệu cẩn thận và đủ nhiều. Theo các công bố
trong những năm gần đây, một số bộ dữ liệu về hình ảnh y tế đã được xuất bản nhằm
đáp ứng cho các mục đích nghiên cứu. Tuy nhiên, so với bộ dữ liệu ảnh thông thường,
bộ dữ liệu hình ảnh y tế khá nhỏ. Bảng 1.1 cho thấy sự so sánh giữa tập dữ liệu hình ảnh
thông thường và tập dữ liệu hình ảnh y tế. Có thể thấy rằng tập dữ liệu hình ảnh y tế nhỏ
hơn tập dữ liệu hình ảnh thông thường về số lượng mẫu và số nhãn.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 1
CHƯƠNG 1. TỔNG QUAN
Bảng 1.1: So sánh tập dữ liệu hình ảnh thông thường và tập dữ liệu hình ảnh y tế.
Tập dữ liệu hình ảnh thông thường Tập dữ liệu hình ảnh y tế
Tập dữ liệu Số nhãn/ Số ảnh Tập dữ liệu Số nhãn/ Số ảnh
ImageNet [4] 21K/14M Chest14 [5] 14/112.120
CoCo [6] 91/328K CheXpert [7] 14/224.316
JFT [8] 18K/300M VinDr-CXR [9] 15/15K
Ngoài ra, một thách thức lớn của ảnh y tế là trong một hình ảnh có thể có nhiều
loại bệnh cùng xuất hiện (hình 1.1), một căn bệnh có thể là nguyên nhân tìm ẩn gây ra
các tổn thương khác. Các phương pháp truyền thống dựa trên kiến trúc CNN [10] được
sử dụng cho bài toán phân loại ảnh y tế chủ yếu phân loại ảnh theo từng loại bệnh và
chưa hướng vào giải quyết sự cùng xuất hiện của nhiều loại bệnh. Để giải quyết thách
thức này mô hình AI cần khả năng quan tâm đến sự phụ thuộc phạm vi dài (long range
dependency) bằng cách phát hiện các mối quan hệ trên diện rộng giữa các vùng bệnh
nằm ở các trí vị cách xa nhau.
Hình 1.1: Sự xuất hiện đồng thời nhiều loại bệnh trong tập dữ liệu VinDr-CXR [9].
Gần đây, các cơ chế Attention được áp dụng rất thành công để nắm bắt các mối
quan hệ tầm xa trong lĩnh vực Xử lý ngôn ngữ tự nhiên. Cơ chế rộng này cũng được mở
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 2
CHƯƠNG 1. TỔNG QUAN
sang các lĩnh vực thị giác máy tính như phân loại hoặc phát hiện đối tượng và thu được
những kết quả đầy hứa hẹn. Với các đặc điểm mạnh mẽ dựa trên kiến trúc Transformer
[11], ViT (Vision Transformer) được giới thiệu trong bài báo “An image is worth 16x16
words: Transformers for image recognition at scale” [12] là một kỹ thuật mới có khả
năng giải quyết thách thức trên. Thêm vào đó, các nghiên cứu cũng đã chỉ ra rằng, một
kiến trúc ViT phải được huấn luyện trên một tập dữ liệu lớn, sau đó mô hình này sẽ được
tinh chỉnh trên một tập dữ liệu mục tiêu nhỏ hơn. Trong điều kiện này, phương pháp
Vision Transformer sẽ tốt hơn các phương pháp truyền thống dựa trên CNN.
Bên cạnh chức năng phân loại, một trong những yêu cầu quan trọng khi ứng dụng
mô hình AI vào thực tiễn, đặc biệt trong lĩnh vực y tế, là khả năng diễn giải cơ chế ra
quyết định của mô hình. Đây là một kỹ thuật quan trọng để đánh giá mức độ tin cậy đối
với kết quả mà mô hình đưa ra. Thông thường kỹ thuật Grad-CAM [13] sẽ được sử dụng
để diễn giải quy trình ra quyết định của các mô hình dựa trên CNN. ViT cũng có kỹ
thuật diễn giải cơ chế ra quyết định riêng, đó là kỹ thuật Attention Map.
Với những thông tin tìm hiểu trên cùng với kiến được trang bị, nhóm kiến nghị
thực hiện đề tài “Ứng dụng mô hình Vision Transformer trong phân loại dữ liệu bệnh
phổi”. Mô hình ViT sẽ được tinh chỉnh trên các bộ dữ liệu ảnh y tế nổi tiếng, sau đó,
mô hình đích được tinh chỉnh lại trên tập dữ liệu mục tiêu “VinDr-CXR” [9] có kích
thước nhỏ hơn để cải thiện hiệu suất của ViT trong việc phân loại ảnh y tế. Đồng thời
nhóm cũng kiểm tra khả năng xử lý sự đồng xuất hiện của nhiều bệnh trong một hình
ảnh y tế thông qua cơ chế diễn giải mô hình của ViT. Cuối cùng, nhóm xây dựng một
ứng dụng web thông qua giao thức API để ứng dụng mô hình phân loại bệnh phổi hỗ
trợ bác sĩ phân tích và chẩn đoán bệnh.
1.2 MỤC TIÊU
Mục tiêu nhóm đề ra trong đề tài này là cải thiện hiệu suất phân loại của mô hình
Vision Transformer trên tập dữ liệu ảnh X-quang ngực VinDr-CXR và diễn giải các cơ
chế ra quyết định của mô hình. Hơn nữa nhóm sẽ dùng công cụ Flask để xây dựng một
ứng dụng web sử dụng mô hình phân loại đã huấn luyện nhằm hỗ trợ bác sĩ trong việc
chẩn đoán. Ứng sẽ được đóng gói và triển khai dễ dàng trên các máy tính khác nhau
bằng công nghệ Docker.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 3
CHƯƠNG 1. TỔNG QUAN
1.3 NỘI DUNG NGHIÊN CỨU
Trong quá trình thực hiện đề tài, nhóm tập trung giải quyết và hoàn thành những
nội dung chính sau:
Nội dung 1: Tìm hiểu lý thuyết về các mô hình phân loại
Nội dung 2: Nghiên cứu các tập dữ liệu Chest14, ChestExpert, VinDR-CXR và
tạo tập dữ liệu phù hợp với đề tài.
Nội dung 3: Tiến hành các thí nghiệm huấn luyện mô hình ViT.
Nội dung 4: Đánh giá kết quả các thí nghiệm dựa trên các phương pháp đánh giá
định tính và định lượng.
Nội dung 5: Xây dựng web API cho ứng dụng mô hình phân loại bênh phổi.
Nội dung 6: Chạy thử nghiệm, kiểm tra và hiệu chỉnh hệ thống.
Nội dung 7: Đóng gói và triển khai ứng dụng với Docker.
Nội dung 8: Viết báo cáo thực hiện.
Nội dung 9: Bảo vệ luận văn.
1.4 GIỚI HẠN
Sử dụng tập dữ liệu hình ảnh phổi của viện nghiên cứu dữ liệu lớn VinDr-CXR
thuộc tập đoàn VinGroup và hai tập ChestXpert, Chest14.
Sử dụng các mô hình dựa trên backbone Transformer là ViT-B16, ViT-L16, ViT-
S16, R50+ViT-B16 và các biến thể Resnet là ResNet18, ResNet34, ResNet50.
Mô hình chỉ được huấn luyện để phân loại trên ảnh X-quang phổi, tư thế chụp
PA (ảnh chụp thẳng sau – trước) và chỉ phân loại tốt trên 10 nhãn tương ứng với
10 loại bệnh.
Ứng dụng web được xây dựng bằng thư viện Flask, giao diện được thiết kế bằng
ngôn ngữ HTML và CSS.
Ứng dụng mô hình đưa ra kết quả dự đoán trong khoảng từ 2 đến 10 giây, tùy
vào tốc độ xử lý của máy tính và tốc độ mạng internet.
Chức năng gửi kết quả chẩn đoán cho bệnh nhân qua Gmail và tin nhắn SMS ở
dạng ký tự, không gửi hình ảnh.
Ứng dụng web chưa thiết lập chức năng bảo mật đối với dữ liệu bệnh nhân.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 4
CHƯƠNG 1. TỔNG QUAN
1.5 BỐ CỤC
Bố cục của đề tài bao gồm 6 chương sau:
Chương 1: Tổng quan
Chương này tập trung giới thiệu khái quát về đề tài, mục tiêu, nội dung, giới hạn
và bố cục chung của đề tài.
Chương 2: Cơ sở lý thuyết
Chương này cung cấp những kiến thức về ảnh y tế, các nền tảng về phần mềm hỗ
trợ, mạng nơ-ron, quá trình phát triển của mạng nơ-ron tích chập qua các giai đoạn,
những nghiên cứu về kiến trúc Transformer, nguyên lý của kiến trúc Vision Transformer
trong phân loại ảnh, các kỹ thuật diễn giải mô hình, giới thiệu về API và Docker.
Chương 3: Thí nghiệm huấn luyện và đánh giá mô hình phân loại
Chương này đề xuất phương pháp tổ chức dữ liệu cho quá trình huấn luyện, xây
dựng các thí nghiệm để huấn luyện và đánh giá mô hình, cung cấp các mô hình sử dụng
và nêu ra các phương thức đánh giá thí nghiệm.
Chương 4: Triển khai ứng dụng
Chương này mô tả cách xây dựng ứng dụng web API dùng Flask, các bươc đóng
gói và triển khai ứng dụng bằng Docker.
Chương 5: Kết quả - nhận xét - đánh giá
Chương này trình bày các kết quả đạt được từ các thí nghiệm, khả năng diễn giải
của mô hình và kết quả của ứng dụng đã triển khai. Đồng thời đưa ra các nhận xét, đánh
giá đối với các kết quả này.
Chương 6: Kết luận và hướng phát triển
Chương này đưa ra kết luận tổng kết cho đề tài và đưa ra một số đề xuất mang
tính xây dựng.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 5
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Chương 2. CƠ SỞ LÝ THUYẾT
2.1 GIỚI THIỆU ẢNH X-QUANG
2.1.1 Ảnh số
Trong xử lý ảnh, mỗi ảnh được xem là một ma trận các điểm ảnh gọi là pixel.
Mỗi pixel diễn tả màu sắc nhất định tại một tọa độ duy nhất trong ảnh. Bằng các phương
pháp đo lường thống kê ta có thể biến đổi ảnh thành ảnh khác tương tự ảnh gốc. Có hai
dạng ảnh quan trọng trong các ứng dụng xử lý ảnh là ảnh màu và ảnh xám [14].
Một ảnh màu (ví dụ minh họa như hình 2.1) thường được tạo thành từ nhiều pixel
mà trong đó mỗi pixel được biểu diễn bởi ba giá trị tương ứng với các mức trong các
kênh màu đỏ (Red), xanh lá (Green) và xanh dương (Blue) tại một vị trí cụ thể. Các kênh
màu Red, Green và Blue là những màu cơ bản mà từ đó có thẻ tạo ra các màu khác nhau
bằng phương pháp pha trộn. Với việc chuẩn hóa 256 mức cho từng kênh màu chính, từ
đó có thể thấy một pixel màu có thể biểu điễn được một trong 256 * 256 * 256
=16777216 màu khác nhau.
Hình 2.1: Ví dụ về ảnh màu RGB.
Một ảnh xám (ví dụ minh họa như hình 2.2) được xây dựng từ nhiều pixel mà
tại đó biểu diễn một giá trị nhất định tương ứng với một mức xám. Những mức xám
này trải dài trong một khoảng từ đen sang trắng thông thường là 256 mức xám khác
nhau theo tiêu chuẩn. Ngoài ra còn có ảnh nhị phân sử dụng một bit để biểu diễn pixel
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 6
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
và một pixel chỉ có hai trạng thái 0 và 1 ứng với đen và trắng. Do đặc tính này nên
ảnh nhị được phân ít ứng dụng.
Hình 2.2: Ví dụ về ảnh xám.
2.1.2
Ảnh X-quang
Chụp
ảnh y tế là kỹ thuật và quy trình chụp ảnh bên trong cơ thể để phân tích
lâm sàng và can thiệp y tế, cũng như thể hiện trực quan chức năng của một số cơ quan
hoặc mô. Hình ảnh y tế tìm cách diễn giải các cấu trúc bên trong bị che giấu bởi da và
xương, cũng như để chẩn đoán và điều trị bệnh. Hình ảnh y tế cũng thiết lập một cơ sở
dữ liệu về giải phẫu và sinh lý học bình thường để có thể xác định các bất thường [15].
Ảnh chụp X-quang ra đời sớm nhất và đóng vai trò quang trọng trong chẩn đoán
hình ảnh y tế. Kỹ thuật này sử dụng khả năng xuyên thấu của tia X và mức độ hập thụ
của các mô để thu được hình chiếu của các cơ quan trong cơ thể. Ảnh X-quang được sử
dụng để xác định loại và mức độ gãy xương cũng như để phát hiện những thay đổi bệnh
lý ở phổi.
Ảnh X-quang (như hình 2.3) thường được lưu trữ dưới định dạng DICOM [16].
DICOM (Digital Imaging and Communications in Medicine) là tiêu chuẩn để truyền
thông và quản lý thông tin hình ảnh y tế và dữ liệu liên quan. DICOM được sử dụng phổ
biến nhất để lưu trữ và truyền hình ảnh y tế cho phép tích hợp các thiết bị hình ảnh y tế
như máy quét, máy chủ, máy trạm, máy in, phần cứng mạng, hệ thống lưu trữ và truyền
hình ảnh (PACS) từ nhiều nhà sản xuất. DICOM nhóm thông tin thành các tập dữ liệu.
Ví dụ: một tệp ảnh X-quang phổi có thể chứa ID bệnh nhân trong tệp, do đó, hình ảnh
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 7
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
không bao giờ có thể bị tách rời khỏi thông tin này do nhầm lẫn. Đối tượng dữ liệu
DICOM bao gồm một số thuộc tính, bao gồm các mục như tên, ID, ... và cũng có một
thuộc tính đặc biệt chứa dữ liệu pixel hình ảnh. Để thuận tiện cho quá trình huấn luyện
mô hình ta thường chuyển định dạng ảnh y tế về các định dạng ảnh thông thường, quá
trình này được thực hiện trong bước chuẩn bị bộ dữ liệu.
Hình 2.3: Ảnh chụp X-quang vùng ngực.
2.2
GIỚI THIỆU PHẦN MỀM
lập trình Python 2.2.1 Ngôn ngữ
Python là một ngôn ngữ khá cũ được tạo ra bởi Guido Van Rossum. Thiết kế bắt
đầu vào cuối những năm 1980 và được phát hành lần đầu tiên vào tháng 2 năm 1991.
Python 2.0 được phát hành vào tháng 10 năm 2000, với nhiều tính năng mới. Python
3.0, được phát hành vào tháng 12 năm 2008, với nhiều tính năng chính của nó được hỗ
cho Python 2.6.x và 2.7.x. Các bản phát hành của Python 3 bao gồm tiện ích, tự trợ động
hóa việc dịch mã Python 2 sang Python 3. Python là một ngôn ngữ lập trình đa mô hình.
Lập trình hướng đối tượng và lập trình có cấu trúc được hỗ trợ đầy đủ [17].
Python là ngôn ngữ có nhiều tính năng được sử dụng phổ biến rộng rãi trong
nhiều lĩnh vực đặc biệt là trong AI và học máy. Những Lý do giúp Python được sử dụng
phổ biến nhất trong các dự án Học máy và dự án AI bao gồm:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 8
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Tính đơn giản và nhất quán.
Cho phép truy cập vào các thư viện và framework tuyệt vời cho AI và học
máy.
Tính linh hoạt.
Độc lập nền tảng.
Và cộng đồng rộng lớn.
Python có một kho công nghệ phong phú bao gồm rất nhiều thư viện cho trí tuệ
nhân tạo và học máy. Dưới đây là một số thư viện, framework phổ biến: Keras,
TensorFlow, Scikit-learn cho học máy, NumPy cho phân tích dữ liệu và tính toán khoa
học hiệu năng cao, SciPy cho advanced computing, Pandas để phân tích dữ liệu mục
đích chung, Seaborn cho trực quan hóa dữ liệu, … Python có một cộng đồng vô cung
lớn có thể hỗ trợ và truy cập kho tài liệu vô cùng dễ dàng.
2.2.2 Thư viện Pytorch
PyTorch là một framework học máy mã nguồn mở dựa trên thư viện Torch được
sử dụng cho các ứng dụng như thị giác máy tính và xử lý ngôn ngữ tự nhiên, chủ yếu
được phát triển bởi Meta AI. Mặc dù giao diện Python được trau chuốt hơn và là trọng
tâm phát triển chính, PyTorch cũng có giao diện C ++ [18]. Pytorch tập trung vào 2 khả
năng chính:
Một sự thay thế cho bộ thư viện numpy để tận dụng sức mạnh tính toán của
GPU.
Một platform Deep learning phục vụ trong nghiên cứu, mang lại sự linh hoạt
và tốc độ.
Một trong những cốt lõi của Pytorch là tensor. Tensor là một mảng đa chiều tương
tự như mảng numpy nhưng có thể hoạt động trên GPU, điều này giúp tăng đáng kể hiệu
suất hệ thống. Pytorch cung cấp nhiều mô-đun hỗ trợ cho mô hình học sâu. Các mô-đun
này được tổ chức theo một workflow giúp cho việc triển khai sử dụng thuận tiện. Theo
hình 2.4, Pytorch có thể cung cấp các hỗ trợ cho một quá trình huấn luyện mô hình với
các bước:
Bước 1: Tổ chức dữ liệu và tải dữ liệu vào mô hình huấn luyện. Pytorch cung cấp
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 9
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
mô-đun “torch.utils.data” để hỗ trợ việc này. Hai thư viện chính trong mô-đun này là
Dataset và Dataloader. Dataset sử dụng kiểu dữ liệu Tensor để tổ chức tùy chỉnh bộ dữ
liệu, Dataloader sử dụng để tải bộ dữ liệu cho quá trình huấn luyện và kiểm tra.
Bước 2: Khởi tạo mô hình. Ta có thể sử dụng mô hình có sẵn hoặc có thể tự tạo
một mô hình cho ứng dụng của mình. Pytorch cung cấp mô-đun “torch.nn” có đầy đủ
các lớp để tạo nên mạng nơ-ron như lớp “fully connected”, “convolution”, các hàm kích
hoạt và các hàm tổn thất.
Bước 3: Tiến hành huấn luyện mô hình. Sau khi đã có tập dữ liệu và mô hình cần
có kỹ thuật cập nhật trọng số và bias để tiến hành tiến hành huấn luyện, kỹ thuật này có
trong mô-đun “torch.optim”. Đặc biệt Pytorch còn hỗ trợ tính gradient tự động trong
quá trình huấn luyện bằng mô-đun “torch.autograd”.
Bước 4: Chạy đánh giá mô hình.
Bước 5, 6: Sau khi kết quả mô hình đạt như mong muốn có thể lưu trữ để triển
khai. Pytorch cung cấp mô-đun “torch.hub” hỗ trợ lưu trữ công khai mô hình trên github
để phục vụ nghiên cứu. Mô-đun “torch.onnx” hoặc “torch.jit” cung cấp khả năng chuyển
đổi mô hình sang các định dạng khác để dàng triển khai ứng dụng.
Hình 2.4: Mô tả các bước của một quá trình huấn luyện mô hình trên Pytorch.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 10
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.3 GIỚI THIỆU MẠNG NƠ-RON NHÂN TẠO
Mạng nơ-ron nhân tạo [19] dựa trên một tập hợp các đơn vị hoặc nút được kết
nối được gọi là tế bào thần kinh nhân tạo, mô hình hóa tương tự các tế bào thần kinh
trong não sinh học (hình 2.5). Mỗi kết nối giống như khớp thần kinh trong não sinh học
có thể truyền tín hiệu đến các tế bào thần kinh khác. Một tế bào nơ-ron nhân tạo nhận
tín hiệu sau đó xử lý chúng và có thể phát tín hiệu cho các nơ-ron thần kinh kết nối với
nó. "Tín hiệu" tại một kết nối là một số thực và đầu ra của mỗi nơ-ron được tính bằng
một số hàm phi tuyến tính của tổng các đầu vào của nó. Các kết nối được gọi là các
cạnh. Các tế bào thần kinh và các cạnh thường có trọng số điều chỉnh khi quá trình học
tập diễn ra. Trọng số làm tăng hoặc giảm cường độ của tín hiệu tại một kết nối. Nơ-ron
thần kinh có thể có ngưỡng sao cho tín hiệu chỉ được gửi đi khi tín hiệu tổng hợp vượt
qua ngưỡng đó. Thông thường, các tế bào thần kinh được tập hợp thành các lớp. Các
lớp khác nhau có thể thực hiện các phép biến đổi khác nhau trên các đầu vào của chúng.
Tín hiệu đi từ lớp đầu tiên (lớp input), đến lớp cuối cùng (lớp output), có thể sau khi đi
qua các lớp nhiều lần gọi là lan truyền thuận. Mỗi nơ-ron sẽ nhận tất cả đầu vào từ nơ-
ron ở lớp trước đó và sử dụng một hàm kích hoạt để tính toán đầu ra. Mỗi mạng nơ-ron
sẽ có hàm mất mát để so sánh với kỳ vọng của mạng, để tối ưu hàm giải thuật lan truyền
ngược để tính đạo hàm của hàm này.
Hình 2.5: Mạng nơ-ron nhân tạo.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 11
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.3.1 Hàm kích hoạt
Hàm kích hoạt có chức năng đưa ra quyết định cuối cùng của mạng tức output.
Có hai loại hàm kích hoạt là hàm phi tuyến tính và hàm phi tuyến. Hàm tuyến tính biểu
diễn toán học là một đường thẳng tức là output sẽ không được giới hạn trong một phạm
vi cụ thể. Hàm phi tuyến có phạm vi giới hạn xác định nên được áp dụng nhiều vào
quyết định của mạng nơ-ron. Một số hàm phi tuyến phổ biến:
Hàm Sigmoid là một hàm phi tuyến với đầu vào là các số thực và cho kết quả
bài toán. Trong nằm trong khoảng [0,1] và được xem là xác xuất trong một số
hàm Sigmoid, một sự thay đổi nhỏ trong input dẫn đến một kết quả output ko
mấy thay đổi. Vì vậy, nó đem lại một đầu ra "mượt" hơn và liên tục hơn so
với input. Công thức và đạo hàm 𝑦 = 1/(1 + 𝑒−𝑥) 𝑦′ = 𝑦 ∗ (1 − 𝑦).
Hình 2.6: Đồ thị hàm Sigmoid.
Hàm ReLU tuyến tính chỉnh lưu có công thức còn gọi là đơn vị 𝑦 = max(0, 𝑦)
và công thức đạo hàm là 𝑦′ = 1 (𝑦 > 0), 0 (𝑦 < 0).
Hình 2.7: Đồ thị hàm ReLU.
Ngoài ra còn có các hàm kích hoạt phi tuyến khác như Tanh, Elu, Softmax.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 12
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.3.2 Gradient descent
Thuật toán Gradient descent [20] là thuật toán tìm giá trị nhỏ nhất của hàm thông
qua tính đạo hàm. Gradient descent và các biến thể của nó là một kỹ thuật dược sử dụng
rộng rãi để tối ưa hóa hàm tổn thất của mạng rơ-ron nhân tạo. Giả sử ta có hàm tổn thất
của mạng nơ-ron là L(W). Ý tưởng chính của phương pháp này là khởi tạo một giá trị
trọng số 𝑊𝑖𝑛𝑡 ngẫu nhiên, sau đó một quá trình lặp sẽ được tiến hành để tìm các trọng
số W mới sao cho giá trị của hàm tổn thất sẽ ngày càng nhỏ hơn. Phương trình thể hiện
quá trình học để giảm giá trị hàm mục tiêu được thể hiện trong phương trình 2.1. Quá
trình lặp sẽ được tiến hành cho tới khi hàm mục tiêu hội tụ. So với việc giải đạo hàm
truyền thống, phương pháp Gradient Descent được sử dụng rộng rãi hơn vì việc tính đạo
𝜕𝐿
hàm cho hàm mục tiêu sẽ phức tạp trong một số tình huống cụ thể.
𝜕𝑊
(2.1) 𝑊 = 𝑊 − 𝑎𝑙𝑝ℎ𝑎
Hình 2.8: Vai trò của việc chọn learning rate.
Trong công thức 2.1 hệ số alpha là tốc độ học (learning rate), thường được chọn
này phải được lựa chọn cẩn thận trong mỗi bộ số là 0,1. Tuy nhiên hệ liệu khác nhau dữ
chứ không cứng nhắc. Việc chọn hệ số learning rate sẽ dẫn tới một trong số các trường
hợp sau đây. Nếu learning rate nhỏ, mỗi lần hàm số giảm rất ít nên cần rất nhiều lần cập
hàm mục tiêu đạt giá trị để nhập trọng số nhỏ nhất. Nếu learning rate hợp lý, sau một số
lần lặp vừa phải thì hàm sẽ đạt giá trị đủ nhỏ. Nếu learning rate quá lớn, sẽ gây hiện
như được minh họa nhất của hàm nhỏ đạt được giá trị tượng overshoot và không bao giờ
trong hình 2.8.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 13
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.3.3 Hàm tổn thất
Trong các hàm tổn thất (loss function), Cross-entropy loss [21] là một trong
những hàm tổn thất quan trọng nhất được sử dụng trong quá trình huấn luyện mạng nơ-
ron từ các mạng máy học truyền thống đến các mạng học sâu. Trong quá trình huấn
luyện các bài toán học có giám sát, mô hình học cách ánh xạ đầu vào với đầu ra xác suất
thực tế và điều chỉnh dần các trọng số của mô hình trong suốt giai đoạn huấn luyện để
các dự đoán tiến gần hơn đến giá trị mong đợi (ground truth).
Entropy của một biến ngẫu nhiên X là mức độ không chắc chắn vốn có trong kết
quả có thể có của các biến. Entropy có thể được xác định bằng toán học sử dụng phân
phối xác suất được ký hiệu là H với công thức 2.2, trong đó là phân phối xác xuất,
X là biến ngẫu nhiên:
(2.2)
Vì < 0 với mọi thuộc (0, 1) nên cần đặt dấu “trừ” trong công thức (2.2).
Hình 2.9: Đồ thị Hàm log(x).
Cross-entropy loss được sử dụng tính toán mức sai khác giữa các phân phối xác
xuất giúp tối hóa quá trình huấn luyện mô hình phân loại, đặc biệt là trong các tác vụ
phân loại nhiều lớp (multi-classification). Mục đích là giảm thiểu mức tổn thất, tức là
giá trị của loss càng nhỏ càng tốt. Một mô hình hoàn hảo có cross-entropy loss bằng 0.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 14
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hàm Cross-entropy loss được định nghĩa một cách tổng quát theo công thức toán
học 2.3:
(2.3)
Trong đó:
n là số classes phân loại
ti là nhãn thực tế của class thứ i
pi là phân phối xác xuất của class thứ i
Cross-entropy loss cũng là một phép đo được dùng để đánh giá hiệu suất của một
mô hình phân loại, được tính toán theo sau hàm kích hoạt Softmax ở lớp đầu ra. nhận
dầu vào là các giá trị đầu ra của hàm Softmax và các nhãn thực tế. Mức tổn thất loss có
giá trị nằm trong khoảng (0, 1), giá trị này càng tiệm cận 0 thì độ chính xác của mô hình
càng cao.
2.4. CÁC MÔ HÌNH PHÂN LOẠI DỰA TRÊN CNN
2.4.1 Mạng LeNet
Hình 2.10: Mô tả kiến trúc mạng LeNet-5 được thiết kế để xác định các chữ số viết tay
trong tập dữ liệu MNIST.
LeNet được xem là mạng nơ-ron cổ điển được giới thiệu bởi Yann LeCun và
cộng sự các chữ được công bố năm 1998 và được trong nhận dạng ứng dụng số viết tay
gọi là LeNet-5 Đây cũng là kiến trúc áp dụng mạng nơ-ron tích chập 2 chiều được [22].
công bố lần đầu tiên. Cấu trúc của mạng LetNet khá đơn giản, gồm hai phần chủ yếu là
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 15
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
khối các tầng tích chập (Convolutional layers) và khối các tầng kết nối đầy đủ (Fully
connected layers). Tuy nhiên mô hình đã có hiệu suất tốt hơn so với các thuật toán
machine learning truyền thống khác dùng trong phân loại chữ số viết tay như SVM,
KNN.
Các hình ảnh đầu vào có kích thước 32 x 32 x 1 và số layers tương đối ít, vậy nên
mô hình chỉ có khoảng 60 nghìn tham số. Thành phần của khối tích chập được tạo nên
từ việc xếp chồng các khối nhỏ gồm lớp tích chập và lớp gộp trung bình (Average-
Pooling Layer) theo sau. Lớp tích chập giúp phát hiện các đặc trưng không gian trong
ảnh như các đường cạnh và các bộ phận của đối tượng. Lớp gộp trung bình nhằm mục
đích giảm chiều dữ liệu mà không làm thay đổi các đặc trưng quan trọng, còn được gọi
là Sub-Sampling Layer. Tuy nhiên mô hình rất khó hội tụ nên Average-Pooling Layer
thường được thay thế bằng Max-Pooling. Các mẫu ở đầu ra của khối tích chập sẽ được
làm phẳng (flatten) trước khi chuyển sang khối kết nối đầy đủ, để biến đổi đầu vào 4D
thành đầu vào 2D tương thích với các tầng kết nối đầy đủ. Cuối cùng là các lớp kết nối
đầy đủ.
Hình 2.11: Chi tiết các thành phần tham số của mô hình LeNet.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 16
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
LeNet có nhược điểm là mạng còn khá đơn giản và việc sử dụng hàm sigmoid
(hay tanh) ở mỗi convolution layer không thuận lợi cho việc tính toán, mô hình hội tụ
chậm.
2.4.2 Mạng AlexNet
Được phát triển dựa trên ý tưởng của LeNet, AlexNet là mạng CNN được đặt
theo tên của Alex Krizhevsky, tác giả của bài báo đột phá dành chiến thắng cách biệt
trong cuộc thi phân loại ImageNet ILSVRC được giới thiệu vào năm 2012 [23].
Cấu trúc của AlexNet tương tự như LeNet, nhưng sử dụng nhiều tầng tích chập
hơn với số lượng các tham số lớn hơn (lên tới 60 triệu tham số) để phù hợp với tập dữ
liệu ImageNet có kích thước lớn. AlexNet đã phá vỡ những hoài nghi rằng các đặc trưng
được học từ mô hình sẽ không tốt bằng các đặc trưng được tạo thủ công.
Hình 2.12: Mô tả kiến trúc mạng AlexNet.
Các điểm cải tiến trong kiến trúc AlexNet đã tạo nên những khác biệt đáng kể về
hiệu suất so với LeNet:
AlexNet nhận đầu vào có kích thước lớn hơn, mạng sâu hơn nhiều so với LeNet
với tám tầng gồm: năm tầng tích chập, hai tầng ẩn kết nối đầy đủ, và một tầng
đầu ra kết nối đầy đủ.
Sử dụng hàm kích hoạt ReLU (Rectified Linear Unit) thay cho sigmoid giúp cho
tính toán tốc độ nhanh hơn, dễ dàng và vẫn đảm bảo được tính phi tuyến (non-
linear).
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 17
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Sử dụng các cửa sổ kernel với kích thước giảm dần qua các layers để phù hợp
với kích thước của đặc trưng.
Áp dụng local normalization để chuẩn hóa các layer giúp mô hình hội tụ nhanh
hơn.
Kiểm soát năng lực của tầng kết nối đầy đủ bằng cách áp dụng dropout layer giúp
giảm số lượng liên kết neural và kiểm soát overfitting.
Kích thước đầu ra giảm dần qua các layers nhưng độ sâu tăng dần qua từng kernel.
Hình 2.13: Chi tiết các thành phần tham số của mô hình AlexNet.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 18
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.4.3 Mạng VGG
VGG (Visual Geometry Group) là mô hình học sâu được đề xuất bởi K.
Simonyan and A. Zisserman năm 2014 trong bài báo “Very Deep Convolutional
Networks for Large-Scale Image Recognition” [24]. Mô hình có hiệu suất vượt trội mô
hình trước đó là AlexNet trên tập dữ liệu ImageNet. VGG được phát triển theo hướng
tăng độ sâu của mạng CNN nhằm tăng hiệu suất của mô hình. Ý tưởng sử dụng các khối
(block) lần đầu được sử dụng trong mạng VGG để làm tăng độ sâu của mạng.
Hình 2.14: Ý tưởng xây dựng mạng VGG sử dụng các khối VGG block gồm các tầng
tích chập được xếp chồng.
Kiến trúc VGG có nhiều biến thể khác nhau về độ sâu (số layers). VGG-16 sâu
hơn so với AlexNet và số lượng tham lên tới 138 triệu tham số, ngoài ra còn một số
phiên bản của VGG là VGG-19 tăng cường thêm 3 layers về độ sâu.
VGG vẫn được xây dựng dựa trên các tính năng thiết yếu của CNN nhưng có
những điểm cải tiến trong cấu trúc:
Đầu vào (input): kích thước hình ảnh đầu vào là 224 × 224.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 19
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Convolutional Layers: Các lớp tích chập của VGG sử dụng kernel có kích
thước nhỏ 3 × 3. Các bộ lọc tích chập (filters) kích thước 1 × 1 hoạt động như
một phép biến đổi tuyến tính của đầu vào. Hàm kích hoạt ReLU được kế thừa
như ở AlexNet giúp giảm thời gian huấn luyện. Bước sải tích chập (stride)
được đặt là 1 pixel nhằm giữ nguyên độ phân giải không gian sau khi tính tích
chập.
Hidden Layers: Tất cả các lớp ẩn trong mạng đều sử dụng ReLU. VGG
thường không sử dụng Chuẩn hóa phản hồi cục bộ (LRN) vì nó làm tăng mức
tiêu thụ bộ nhớ và thời gian huấn luyện, ngoài ra nó cũng không cải thiện độ
chính xác tổng thể.
Fully-Connected Layers: có 3 lớp kết nối đầy đủ. Trong đó, hai lớp đầu tiên
mỗi lớp có 4096 kênh và lớp thứ ba có 1000 kênh, 1 kênh tương ứng với 1
class.
Hình 2.15: Mô tả kiến trúc mô hình VGG-16.
2.4.4 Mạng GoogLeNet
Mạng GoogLeNet [25] ra đời năm 2014 là sự kết hợp những ưu điểm của mô
hình Network-in-Network và mô hình chứa các khối lặp lại để giải quyết vấn đề kích
thước mô hình. Mạng này cho thấy đôi khi kết hợp các bộ lọc có kích thước khác nhau
có thể mang lại hiệu quả.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 20
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Khối tích chập cơ bản của GoogleNet được gọi là Inception. Ý tưởng chính của
kiến trúc Inception dựa trên việc tìm ra cách một cấu trúc thưa cục bộ tối ưu trong mạng
thị giác tích chập có thể được xấp xỉ và được bao phủ bởi các thành phần dày đặc sẵn
có. Cấu trúc khối inception bao gồm bốn nhánh song song với nhau. Ba nhánh đầu sử
dụng các tầng tích chập với kích thước cửa sổ trượt lần lượt là 1×1, 3×3, và 5×5 để trích
xuất thông tin từ các vùng không gian có kích thước khác nhau. Hai nhánh giữa thực
hiện phép tích chập 1×1 trên dữ liệu đầu vào để giảm số kênh đầu vào, từ đó giảm độ
phức tạp của mô hình. Nhánh thứ tư sử dụng một tầng gộp cực đại kích thước 3×3, theo
sau là một tầng tích chập 1×1 để thay đổi số lượng kênh. Cả bốn nhánh sử dụng phần
đệm phù hợp để đầu vào và đầu ra của khối có cùng chiều cao và chiều rộng. Cuối cùng,
các đầu ra của mỗi nhánh sẽ được nối lại theo chiều kênh để tạo thành đầu ra của cả
khối. Các tham số thường được tinh chỉnh của khối Inception là số lượng kênh đầu ra
mỗi tầng.
Hình 2.16: Cấu trúc khối Inception.
Ưu điểm của cấu trúc này là những chi tiết ở các mức độ khác nhau sẽ được nhận
diện hiệu quả bằng các bộ lọc khác nhau. Đồng thời, ta có thể phân bổ số lượng tham số
khác nhau cho những vùng có phạm vi khác nhau.
Mô hình GoogLeNet sử dụng tổng cộng 9 khối inception và tầng gộp trung bình
toàn cục xếp chồng lên nhau. Phép gộp cực đại giữa các khối inception có tác dụng làm
giảm kích thước chiều. Phần đầu tiên của GoogleNet giống AlexNet và LeNet, có các
thừa từ của VGG và phép gộp trung bình toàn cục khối xếp chồng lên nhau kế thiết kế
giúp tránh phải sử dụng nhiều tầng kết nối đầy đủ liên tiếp ở cuối.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 21
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2.17: Cấu trúc mạng GoogLeNet.
2.4.5 Mạng ResNet
Từ các giai đoạn phát triển của các kiến trúc như AlexNet, VGG và GoogleNet,
ta thấy các kiến trúc CNN ngày càng được phát triển sâu hơn. Tuy nhiên, việc tăng độ
sâu của mạng không phải lúc nào cũng cải thiện được độ chính xác của mô hình vì thực
tế người ta quan sát thấy rằng việc huấn luyện mạng nơ-ron trở nên khó khăn hơn khi
tăng số lượng lớp thêm vào, trong một số trường hợp độ chính xác cũng giảm theo.
Một trong những nguyên nhân cho hiện tượng trên là vấn đề “Vanishing
gradient” (triệt tiêu gradient). Gradient được lan truyền ngược trở lại các lớp trước để
tính toán cho việc cập nhật tham số, các phép tính lặp đi lặp lại có thể làm cho giá trị
gradient trở nên vô cùng nhỏ. Điều này làm cho hiệu suất của mạng bị bão hòa hoặc
giảm hiệu suất nhanh chóng. Kiến trúc Resnet ra đời là một giải pháp cho vấn đề này.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 22
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
ResNet (Residual Network) là một mạng nơ-ron được giới thiệu lần đầu tiên bởi
Kaiming He, Xiangyu Zhang, Shaoqing Ren và Jian Sun trong bài báo nghiên cứu thị
giác máy tính năm 2015 với tiêu đề “Deep Residual Learning for Image Recognition”
[10]. Giải pháp được sử dụng ở ResNet dùng các kết nối tắt (skip connection) đồng nhất
để truyền qua một hay nhiều layers. Các kết nối tắt giúp giữ thông tin không bị mất bằng
cách kết nối từ layer sớm trước đó tới layer phía sau và bỏ qua một vài layers trung gian.
Hình 2.18: Kết nối tắt được sử dụng trong ResNet.
ResNet cũng kế thừa và tương tự với các mạng CNN trước đó, gồm các thành
phần convolution, pooling, activation và fully-connected layer. Mạng ban đầu đơn giản
được lấy cảm hứng từ mạng nơ-ron VGG, với bộ lọc tích chập kích thước 3 × 3. Tuy
nhiên, so với VGG, ResNet có ít bộ lọc hơn và độ phức tạp thấp hơn. Đường kết nối tắt
được thêm vào giúp bổ sung Input x vào đầu ra của layer, điều này được thực hiện bằng
phép “cộng” như hình minh họa ở trên, việc này tránh cho đạo hàm bằng 0. Giả sử ta
có x là đầu vào của khối identity cần ánh xạ đầu thành hàm F(x). Với H(x) là giá trị dự
đoán, là giá trị F(x) thật (nhãn), ta cần làm cho H(x) bằng hoặc xấp xỉ F(x), khi đó: H(x)
= ReLU(F(x) + x).
Các đường kết nối tắt chính là điểm mạnh cốt lõi mang lại sự thành công của
Resnet, Thứ nhất, chúng làm giảm bớt vấn đề triệt tiêu gradient. Thứ hai, chúng cho
phép mô hình học một chức năng nhận dạng (identity). Điều này đảm bảo rằng các lớp
cao hơn của mô hình không hoạt động kém hơn các lớp thấp hơn. Ngoài ra ResNet cũng
sử dụng Batch Normalization giúp chuẩn hóa lớp đầu vào để tăng hiệu suất của mạng.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 23
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2.19: Mô tả kiến trúc ResNet (ResNet-18).
ResNet có rất nhiều biến thể với số lớp khác nhau như ResNet-18, ResNet-34,
ResNet-50, ResNet-101, ResNet-152. Thực tế, những kiến trúc sau này có thể được huấn
luyện mạng nơ-ron với độ sâu hàng nghìn lớp. ResNet nhanh chóng trở thành kiến trúc
phổ biến nhất với nhiều thành công trong các tác vụ thị giác máy tính.
kỹ 2.4.6 Giới thiệu
thuật
Grad-CAM
Các mô hình học sâu dựa trên CNN đã có những bước đột phá mạnh mẽ trong
nhiều tác vụ giác máy tính chẳng hạn như phân loại hình ảnh, phát hiện đối tượng, thị
phân đoạn hình ảnh. Tuy nhiên, thông thường rất khó để có thể nhận biết trực quan về
những gì mà mô hình đã học được cũng như những đặc trưng nào được mô hình sử dụng
để đưa ra dự đoán, bởi CNN dường như là hộp đen tiếp nhận đầu vào và cho kết quả đầu
ra với chính xác cao mà không đưa ra giải thích trực quan về hoạt động của độ
Trong khi đó, việc có một cái nhìn sâu sắc về quá trình ra quyết định của mạng chúng.
nơ-ron là điều rất quan trọng bởi điều này không chỉ giúp ích cho việc khắc phục các sai
sót để tạo tin cậy và trách nhiệm ra các mô hình hoạt động tốt hơn mà còn đảm bảo độ
giải trình cho các mô hình khi triển khai chúng vào các ứng dụng trong đời sống.
Grad-CAM hay Gradient-weighted Class Activation Mapping được giới thiệu
trong bài báo “Grad-CAM: Visual Explanations from Deep Networks via Gradient-
là một kỹ [13] based Localization” thuật được đề xuất để giải thích trực quan quyết định
của các mô hình dựa trên CNN và làm cho chúng minh bạch hơn.
Phương pháp này sử dụng thông tin gradient được truyền vào lớp tích chập cuối
cùng của CNN để quan trọng với mỗi nơ-ron nhằm tạo ra một bản đồ gán các giá trị
nhiệt (heatmap) cho các vùng cụ thể của nhãn class cần quan tâm. Grad-CAM kết hợp
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 24
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
với hình ảnh pixel đầu vào để mô tả trực quan các vùng mà mô hình nhìn vào đó. Grad-
CAM không yêu cầu huấn luyện lại và có thể được áp dụng rộng rãi cho mọi kiến trúc
dựa trên CNN.
Grad-CAM được xem là một sự tổng quát hóa của CAM (Class Activation Map),
cũng là một trong những kỹ thuật được sử dụng để giải thích cơ chế ra quyết định của
mạng nơ-ron. CAM giúp trực quan hóa các vùng của hình ảnh đã góp phần vào dự đoán
cuối cùng của CNN bằng việc tạo ra một bản đồ nhiệt làm nổi bật các pixel trong hình
ảnh đầu vào ảnh hưởng đến việc gán hình ảnh này cho một class cụ thể. Tuy nhiên,
CAM lại có những hạn chế nhất định đó là: chỉ có thể áp dụng được CAM khi mạng
CNN được huấn luyện có chứa lớp GAP (Global Average Pooling) được chèn vào giữa
lớp tích chập cuối cùng và lớp Fully Connected; CAM chỉ tạo được bản đồ nhiệt cho
lớp tích chập cuối cùng. Do đó Grad-CAM được đề xuất để giải quyết vấn đề này.
Grad-CAM có thể được áp dụng cho bất kỳ loại CNN nào, và có thể tạo bản đồ
nhiệt cho mọi lớp trong mạng học sâu. Đầu ra của Grad-CAM là một “bản đồ địa phương
hóa phân biệt class” (class - discriminative localization map), (chiều
rộng u, chiều cao v, class c), tức là một bản đồ nhiệt trong đó phần màu nóng tương ứng
với một class cụ thể.
Hình 2.20: Tổng quan về hoạt động của Grad-CAM.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 25
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Việc tính toán Grad-CAM gồm 3 bước chính:
- Đầu tiên tính gradient của theo Ak:
(2.4)
( là đầu ra thô của mạng nơ-ron cho class c, trước khi áp dụng softmax để biến đổi
thành xác suất; Ak là kích hoạt feature map của một lớp tích chập, có k feature map).
- Tiếp theo, các gradient này được tổng hợp và tính trung bình để có được trọng
số . Các trọng số này mã hóa tầm quan trọng của feature map cho class mục tiêu c.
(2.5)
- Sau đó là tính toán các bản đồ nhiệt Grad-CAM bằng cách nhân các feature map
Ak với trọng số tương ứng và tổng hợp chúng. Sau cùng, áp dụng hàm ReLU để cho
kết quả, ReLU giúp nhấn mạnh các giá trị dương và đưa tất cả các giá trị âm về 0, lý do
là vì ta chỉ cần quan tâm đến những đặc trưng có ảnh hưởng tích cực đến class cần quan
tâm.
𝑐 𝐿𝐺𝑟𝑎𝑑−𝐶𝐴𝑀
𝑐 𝑐𝐴𝑘 (∑ 𝛼𝑘 ) ⏟ 𝑘 𝑙𝑖𝑛𝑒𝑎𝑟−𝑐𝑜𝑚𝑏𝑖𝑛𝑎𝑡𝑖𝑜𝑛
(2.6) = 𝑅𝑒 𝐿 𝑈
Bản đồ nhiệt Grad-CAM tạ(cid:111)(cid:32)(cid:114)(cid:97)(cid:32)(cid:99)(cid:243)(cid:32)(cid:107)(cid:237)(cid:99)(cid:104)(cid:32)thước (cid:110)(cid:104) hơn so với ảnh đầu vào vì nó ỏ
x v) với ở lớp tích chập cuối cùng. Vậy nên để kết có cùng kích thước (u feature map
hợp hiển thị Grad-CAM trên ảnh ban đầu ta cần phải biến đổi (up – sample) kích thước
của chúng về cùng kích thước với ảnh đầu vào.
2.5
MÔ HÌNH PHÂN LOẠI DỰA TRÊN TRANSFORMER
2.5.1 Kiến trúc Transformer
nhiên tự lý ngôn ngữ trong xử
Transformer là mô hình thành công trong lĩnh vực xử lý ngôn ngữ tự nhiên. Mô
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 26
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
hình này giải quyết vấn đề quá trình xử lý diễn ra tuần tự làm tiêu tốn nhiều tài nguyên
tính toán từ các mô hình trước. Nó cung cấp khả năng duy trì cơ chế attention trong khi
xử lý các chuỗi song song tức là xử lý các từ cùng nhau thay vì trên cơ sở từng từ.
Transformer có cấu trúc gồm hai phần là Encoder và Decoder như hình 2.21.
Encoder lấy đầu vào từ ngôn ngữ gốc, tạo một embedding cho chúng, mã hóa vị trí, tính
toán vị trí mà mỗi từ phải tham gia trong thiết lặp đa ngữ cảnh và sau đó xuất ra một số
biểu diễn trung gian. Decoder lấy đầu vào từ ngôn ngữ mục tiêu, tạo ra một embedding
cho chúng với các vị trí được mã hóa, tính toán nơi mỗi từ phải tham gia và sau đó kết
hợp đầu ra của encoder với những gì nó đã tạo ra. Kết quả là một dự đoán cho “token”
tiếp theo, bằng softmax và cũng như dự đoán lớp argmax (trong đó mỗi “token” hoặc từ
là một lớp). Bên trong cả encoder và decoder đều sử dụng các lớp multi-head attention
và feed forward xếp chồng lên nhau. Chính multi-head attention tạo nên sự khác biệt
giữa Transformer với các mô hình trước đó. Multi-head attention thực chất là nhiều self-
attention tập hợp lại để mô hình chú ý nhiều từ khác nhau [11].
Hình 2.21: Kiến rúc Transformer [11].
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 27
Self-attention:
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Self-attention cho phép mô hình khi mã hóa một từ có thể sử dụng thông tin của
những từ liên quan tới nó. Self-attention cũng tương tự như hàm attention. Một attention
có thể được mô tả là ánh xạ một query và một tập hợp các key-value tới một kết quả đầu
ra. Ở Self-attention các key, query và value được tạo ra từ cùng một mục của chuỗi đầu
vào. Trong đó, query là vector dùng để chứa thông tin của từ được tìm kiếm, so sánh.
Key là vector dùng để biểu diễn thông tin các từ được so sánh với từ cần tìm kiếm ở
trên. Value vector biểu diễn nội dung, ý nghĩa của các từ. Kết quả đầu ra được tính dưới
dạng tổng trọng số của các value, trong đó trọng số được gán cho mỗi value được tính
bằng hàm tương thích của query với key tương ứng. Công thức tính Self-attention như
sau:
(2.7) ) 𝑉 𝐴𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛(𝑄, 𝐾, 𝑉) = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥 (𝑄𝐾𝑇 √𝑑𝑘
Đầu tiên, tính ma trận query, key, value bằng cách khởi tạo 3 ma trận trọng số
Query, Key, Value. Sau đó nhân input với các ma trận trọng số này để tạo thành 3 ma
trận tương ứng. Tính attention weights bằng cách nhân 2 ma trận key, query vừa được
tính ở trên với nhau để so sánh giữa câu query và key nhằm học mối tương quan. Sau
đó thì chuẩn hóa về đoạn [0-1] bằng hàm softmax, nếu là 1 có nghĩa là câu query giống
với key, 0 có nghĩa là không giống. Cuối cùng tính output bằng cách nhân attention
weights với ma trận value. Điều này có nghĩa là một từ được biểu diễn bằng trung bình
có trọng số (attention weights) của ma trận value.
Hình 2.22: Mô tả cách tính ma trận attention.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 28
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Multi-head attention:
Multi-head attention gồm nhiều Self-attention kết hợp lại với nhau. Mỗi head có
một ma trận attention riêng cho một từ ta phải kết hợp các head này thành một ma trận
attention duy nhất cho cả đầu vào. Multi-head attention cho phép mô hình chú ý vào từ
trước sau và từ liên quan của một từ.
Trong khối Decoder có một lớp Masket Multi-head attention có tác dụng như
Multi - head attention nhưng có thêm một masket để che đi những từ mô hình chưa dịch
đến bằng cách nhân thêm với vector chứa giá trị 0 và 1.
Hình 2.23: Mô tả Multi - Head Attention.
2.5.2 Mô hình Vision Transformer
Gần đây, Transformer network làm mới và chiếm ưu thế trong Xử lý ngôn ngữ
tự nắm bắt các mối quan hệ nâng cao kết nhiên. Bởi vì Transformer có thể tầm xa để
quả dự gắng áp dụng khái niệm Transformer network vào lĩnh đoán, nhiều công trình cố
vực giác máy tính. Vision Transformer (ViT) là Transformer cơ đầu tiên cạnh thị sở
tranh cho backbone dựa trên CNN các nhiệm phân loại hình ảnh. Tuy nhiên, về vụ
Vision Transformer chỉ có thể tốt hơn backbone dựa trên CNN nếu tập dữ liệu trước khi
huấn luyện là rất lớn. Trong các báo cáo nghiên cứu gần đây, tập dữ liệu Image21K
được sử dụng để huấn luyện pre-trained model; và cài đặt này cho phép mô hình ViT
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 29
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
cạnh tranh với mô hình ResNet. Ngoài ra, ViT rất tốn kém. Nó đòi hỏi nguồn lực máy
tính mạnh cũng như thời gian huấn luyện rất dài. Đây là lý do mà ViT không phổ biến
trong các nhiệm vụ phân loại ảnh khác như phân loại ảnh y tế. Chưa rõ đóng góp của
mô hình ViT được huấn luyện trước vào các nhiệm vụ y tế.
Lấy cảm hứng từ những thành công vượt trội của Transformer trong lĩnh vực xử
lý ngôn ngữ tự nhiên (NLP) và áp dụng cho các ứng dụng trên ảnh, Vision Transformer
hay ViT là một hướng tiếp cận mới cho các bài toán thị giác máy tính. [12] Vision
Transformer được xây dựng chủ yếu dựa trên kiến trúc của Transformer và kết hợp với
các khối MLP (Multilayer Perceptron) nhằm giải quyết bài toán phân loại ảnh, chính vì
vậy ViT xử lý ảnh đầu vào thành dạng chuỗi. Kiến trúc tổng quan của mô hình được mô
tả như ở hình 2.24, gồm 3 thành phần chính: Linear Projection, Transformer encoder,
Classification head.
Hình 2.24: Mô tả kiến trúc của mô hình ViT [12].
Đối với đầu vào ảnh X-quang ngực, hình ảnh sẽ được chuẩn hóa thành phạm vi
[0-255] từ định dạng DICOM (Digital Imaging and Communications in Medicine). Sau
đó, hình ảnh được định hình lại thành một dãy các patch 2D phẳng 𝑥 ∈ 𝑅𝐻𝑥𝑊 ∈ 𝑥𝑝
Ở đây, (H, W) là độ phân giải của hình ảnh gốc, P 𝑅𝑁𝑥(𝑃𝑥𝑃). P là kích thước mỗi patch ∗
hình ảnh và là số lượng patch kết quả cũng đóng vai trò là độ dài chuỗi 𝑁 = 𝐻𝑊/(𝑃2)
đầu vào cho Transformer.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 30
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2.25: Hình ảnh được chia nhỏ thành các patch nhỏ có kích thước cố định.
Transformer truyền thống biến đổi các patch thành một vec-tơ 1D; sau đó vec-tơ
được chiếu tới một vec-tơ tiềm ẩn kích thước D bằng phép chiếu tuyến tính có thể huấn
luyện được. Đầu ra của phép chiếu này đóng vai trò là patch embedding. Ngoài ra, một
số biến thể sử dụng backbone CNN có trọng số chung để nhúng.
Hình 2.26: Làm phẳng các patch thành chuỗi các vectors (hình minh họa 9 patch).
Tương tự như Transformer, các position embedding được thêm vào các patch
giữ lại thông tin vị hoặc embedding để trí. Position embedding có thể là nhúng 1D [11]
nhúng 2D Trong hình 2.24, thuật ngữ "*" là một cách nhúng đầy hoài nghi. Nó [12].
không được trích xuất từ hình ảnh nhưng nó là một nhúng có thể học được. Nhúng này
được sử dụng để lưu trữ thông tin hình ảnh. Sau đó, các bản nhúng mới này được đưa
đến bộ mã hóa transformer. Trong [11], mỗi đầu vào của mô-đun mã hóa sẽ có một đầu
ra tương phân loại hình ứng. Tuy nhiên, đối với nhiệm vụ đầu ra của phép nhúng ảnh, chỉ
có thể học được mới được sử dụng để phân loại. Trong hình 2.27, cấu trúc và khái niệm
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 31
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
của bộ mã hóa Transformer được giới thiệu. Mô-đun cốt lõi của bộ mã hóa là Multi-
Head attention. Với một đầu vào 𝑥𝑖, mô-đun này học một tính năng liên quan đến hai
thành phần. Thành phần đầu tiên ℎ𝑖 chỉ được trích xuất từ 𝑥𝑖 đầu vào tương ứng. Thành
phần thứ hai ℎ𝑗 là từ các đầu vào khác 𝑥𝑗. Hệ số Attention 𝑎𝑖,𝑗 biểu thị cách đầu vào thứ
j đóng góp vào đầu ra thứ i. Phương trình 2.8 giải thích khái niệm attention. Trong khi
mô-đun attention có thể cung cấp nhiều đầu ra 𝐶𝑖, chỉ 𝐶0 được cấp cho mô-đun phân
loại như trong phương trình 2.9.
𝑘 𝑗=0
(2.8) 𝐶𝑖 = ∑ 𝑎𝑖,𝑗 ∗ ℎ𝑗
(2.9) 𝑦̂ = 𝐶𝐿𝑆(𝐶0)
Dựa trên khái niệm attention, mạng của mô-đun attention được thiết kế như trong
hình 2.27. Ở đây, nhiều lớp được xếp chồng lên nhau để tạo thành một mạng sâu. Mỗi
lớp bao gồm một khối Multi-Head Self-attention (MSA) và một khối Multi- Layer
Perceptron (MLP) [26]. Layernorm (LN) [27] được áp dụng trước mỗi khối và các kết
nối residual [10] được áp dụng sau mỗi khối.
Hình 2.27: Mô tả cơ chế Attention trong Vision Transformer.
Kí hiệu là đầu vào của lớp thứ l; là đầu ra của mô-đun ∈ 𝑅𝑘∗𝑑 ∈ 𝑅𝑘∗𝑑 𝑧𝑙 𝑧′𝑙
MSA ở lớp thứ l. Ở đây k là số patch và d là chiều của patch. Quá trình feed-forward
theo phương trình 2.10 và 2.11.
)) (2.10) = + 𝑧′𝑙 𝑀𝑆𝐴(𝐿𝑁(𝑧𝑙 𝑧𝑙
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 32
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
𝑙) + 𝑧′
𝑙
(2.11) 𝑧𝑙+1 = 𝑀𝐿𝑃(𝐿𝑁(𝑧′
Hình 2.28: Định nghĩa về khối Multi-self attention trong Vision Transformer.
Multi-Head Attention:
Thành phần chính của bộ Encoder transformer là các mô-đun Multi-Head Self-
Attention. Mô-đun này là một tập hợp các Self-Attention. Trong hình 2.28, lớp thứ l có
𝑗=1:𝐻𝑙
. Bởi vì các đầu này được các đầu 𝐻𝑙; và đầu ra của một đầu được ký hiệu là {𝑆𝐴𝑗}
nối với nhau, nó tạo ra một vec-tơ 𝑅𝑘∗(𝑑𝐻𝐿) là [𝑆𝐴1; 𝑆𝐴2;..; 𝑆𝐴𝐻𝑙]. Sau đó, một lớp 𝑊𝑆 ∈ 𝑅(𝑑𝐻𝑙)∗𝑑 được sử dụng để chiếu vec-tơ nối vào một không gian 𝑅𝑘∗𝑑 như trong phương
trình 2.12.
(2.12) 𝑀𝑆𝐴(𝐿𝑁(𝑧𝑙)) = [𝑆𝐴1; 𝑆𝐴2; . . ; 𝑆𝐴𝐻𝑙] ∗ 𝑊𝑠
Tiếp theo, chúng ta thảo luận chi tiết về Self-attention của single head. Cho một
𝑧𝑙 đầu vào, dữ liệu được chuẩn hóa đầu tiên theo Layernorm. Phương trình 2.13, 2.14
và 2.15 ước tính key, query và value của 𝑧𝑙. Ở đây, 𝑊𝐾, 𝑊𝑄, 𝑊𝑉 là các tham số cho phép
chiếu tuyến tính.
(2.13) 𝐾 = 𝑊𝐾 ∗ 𝐿𝑁(𝑧𝑙)
(2.14) 𝑄 = 𝑊𝑄 ∗ 𝐿𝑁(𝑧𝑙)
(2.15) 𝑉 = 𝑊𝑉 ∗ 𝐿𝑁(𝑧𝑙)
Vì 𝐾𝑄𝑇 là một ma trận k∗k đại diện cho sự đóng góp giữa các mảng 𝑥𝑗, đặc trưng
được trích xuất bởi một attention duy nhất được ước tính như phương trình 2.16.
√𝑑
(2.16) 𝑆𝐴 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥 (𝑄𝐾𝑇 ) 𝑉
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 33
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.5.3 Giới thiệu kỹ thuật Attention Map
Attention Map là kỹ thuật được sử dụng để diễn giải cơ chế ra quyết định của mô
hình ViT dựa trên các trọng số Attention. Để tính toán các bản đồ của Attention, ta sử
dụng cơ chế Attention Rollout. Về cơ bản là tính trung bình trọng số Attention trên tất
cả Head và sau đó nhân đệ quy ma trận trọng số tất cả các lớp. Điều này giúp kết hợp
các Attention token giữa tất cả các lớp. Hình 2.29 mô tả Attention map giữa các lớp
khác nhau theo cls token.
Hình 2.29: Attention map của [CLS] giữa các lớp khác nhau.
Về Attention Rollout, đây là một cách trực quan để theo dõi thông tin được truyền
từ lớp đầu vào đến các phần nhúng các lớp cao hơn. một có L ở Ví dụ có Transformer
lớp, ta muốn tính toán Attention trí trong từ tất cả trí trong lớp các vị các vị đến tất cả 𝑙𝑖
lớp nút v trí k
vị
ở trong lớp Attention, một đường đi từ
thị
𝑙𝑗, trong đó j đến nút u ở vị trí m trong lớp 𝑙𝑗, là một chuỗi các cạnh nối hai nút này. Nếu chúng ta xem trọng số của mỗi cạnh là tỷ lệ thông tin được truyền giữa hai nút, chúng ta có thể tính lượng thông tin tại v được truyền tới u thông qua một đường dẫn cụ thể bằng cách nhân trọng số của tất cả có nhiều hơn một đường
các cạnh trong đường dẫn đó. Vì có thể v đến u,
tính tổng lượng thông tin được truyền từ
chú ý, để
đi giữa hai nút trong biểu đồ chúng tôi tính tổng trên tất cả các đường đi có thể có giữa hai nút này. Ở cấp độ thực thi, tính Attention từ đến chúng ta nhân một cách quy ma trận trọng số để đệ 𝑙𝑖 𝑙𝑗, Attention trong tất cả các lớp bên dưới [28]. (2.17) 𝐴̃(𝑙𝑖) = { 𝐴(𝑙𝑖)𝐴̃(𝑙𝑖−1)𝑛ế𝑢𝑖 > 𝑗
𝐴(𝑙𝑖)𝑛ế𝑢𝑖 = 𝑗 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 34 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Trong phương trình 2.17, 𝐴̃ là Attention Rollout, A là Attention thô và phép toán ở đây là một phép nhân ma trận. Với công thức này, đặt j = 0 để tính toán Attention đầu vào. API (Application Programming Interface) nghĩa là một giao diện lập trình ứng dụng và được định nghĩa là một giao diện mà một hệ thống máy tính hay ứng dụng cung cấp để cho phép các yêu cầu dịch vụ được tạo ra từ các chương trình máy tính khác và cho phép dữ liệu có thể được trao đổi qua lại giữa chúng. Hiểu một cách khác, API là phương thức trung gian gồm một tập hợp các lệnh, các hàm, các giao thức, các đối tượng, giúp các phần ứng dụng tương tác và trao đổi dữ liệu qua lại với nhau kể cả khi chúng không cùng môi trường thực thi. Có nhiều loại hệ thống và ứng dụng thực hiện API như các hệ thống đồ họa, cơ sở dữ liệu, mạng, dịch vụ web [29]. Kiến trúc API thường được giải thích dưới dạng máy chủ và máy khách. Ứng dụng gửi yêu cầu được gọi là máy khách, còn ứng dụng gửi phản hồi được gọi là máy chủ (mô tả như hình 2.30). Hình 2.30: Mô tả về cách hoạt của giao thức API. Có nhiều loại API được phân loại dựa trên hoạt động của API SOAP,
chúng như API RPC, API Websocket và API REST. Trong đó API REST (Representational State Transfer) được sử API REST dụng biến nhất.
linh hoạt và phổ là một loại API Web
[30] đặc biệt dùng kiến trúc tiêu chuẩn là một giao diện xử lý ứng dụng giữa máy chủ web và trình duyệt web. dụng các
là quy định cách sử
REST
Chức năng quan trọng nhất của phương thức HTTP như GET, POST, PUT, DELETE và cách định dạng các URL cho ứng dụng web để quản các tài nguyên. Hình 2.31 mô tả hoạt động của REST dựa trên giao thức HTTP. Cụ thể: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 35 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT GET (SELECT): Trả về một Resource hoặc một danh sách Resource. POST (CREATE): Tạo mới một Resource. PUT (UPDATE): Cập nhật thông tin cho Resource. DELETE (DELETE): Xoá một Resource. Hình 2.31: Hoạt động của API REST. Việc xây dựng một ứng dụng Web thông qua giao thức API có những ưu điểm như sau: Có thể kết nối bất cứ lúc nào khi có internet. Mã nguồn mở, được hỗ chức năng
trợ của REST đầy đủ. Có cấu hình đơn giản, dễ xây dựng. Các trao đổi được thực hiện dựa trên giao tiếp hai chiều, đảm bảo độ tin cậy cao. Cung cấp giải pháp phát triển với nhiều dịch vụ tiện ích. Flask là một trong những web frameworks hỗ trợ cho việc xây dựng web API trên ngôn ngữ lập trình Python. Do đó Flask được xem là một môi trường độc lập, ít sử giúp
dụng các thư viện khác bên ngoài, điều này tối giản
nên
của Flask trở
lõi chức năng mà vẫn có thể rộng cho các
mở ứng dụng web. Hình 2.32: Logo của framework Flask Python. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 36 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Điểm mạnh của flask là sự nhỏ gọn, cấu trúc khá rõ ràng, dễ thiết lập. Ngoài ra Flask còn chứa nhiều thành phần tiện ích như cơ sở dữ liệu, email, xác thực biểu mẫu có thể đưa vào ứng dụng web bất cứ lúc nào. Một đặc điểm nữa của Flask đó là tính bảo mật cao, vì lập trình web với Flask ít phụ thuộc vào bên thứ ba nên giúp ngăn chặn những rủi ro về bảo mật. Minh chứng là Flask Python được sử dụng trong phát triển khá nhiều ứng dụng nổi tiếng như Pinterest, LinkedIn, Reddit, Twilio, Netflix [31]. Trong một ứng dụng về y tế thì yêu cầu làm việc liên quan đến thông tin cá nhân của bệnh nhân là rất nhiều nên vấn đề bảo mật là vô cùng cần thiết. Hơn nữa, sử dụng Flask để tạo ứng dụng web API là một cách tiếp cận dễ dàng vì cấu trúc Flask dễ hiểu, dễ ứng dụng và thao tác không quá phức tạp. Flask sử dụng ngôn ngữ python, vậy nên việc sử dụng Flask để triển khai ứng dụng cho mô hình học sâu cũng là một thuận lợi. Do đó đây là một lựa chọn phù hợp cho phát triển ứng dụng đề tài của nhóm. Trong một hệ thống ứng dụng, cơ sở dữ liệu (Database) là một thành phần cần thiết cho việc đọc và lưu trữ dữ liệu một cách hiệu quả. Ở phần triển khai ứng dụng của đề tài này, nhóm sẽ tạo một cơ sở dữ liệu SQLite để lưu dữ liệu bệnh nhân gồm thông tin cá nhân, và kết quả chẩn đoán bệnh. SQLite là một hệ cơ sở dữ liệu được sử dụng rất phổ biến trên thế giới, được sử dụng rộng rãi trong các ứng dụng nhỏ và một vài ứng dụng lớn. Trong SQLite cơ sở dữ liệu được lưu trữ trên một file duy nhất và không cần phải cài thêm các phần mềm khác trên máy chủ như trong trường hợp MySQL và PostgreSQL. SQLite cũng hoạt động tốt trên Python vì thư viện Python cung cấp mô-đun “sqlite3”, công cụ SQLAlchemy sẽ được dùng để tác với mô-đun. SQLAlchemy là bộ công cụ của Python SQL và ORM được dùng để quản lý và thao tác với cơ sở dữ liệu. SQLAlchemy cung cấp các phương thức để tương tác với một số công cụ cơ sở dữ liệu như SQLite, MySQL và PostgreSQL. ORM (Object Relational Mapping) là một kỹ thuật lập trình để biểu diễn các bản ghi cơ sở dữ liệu dưới dạng các đối tượng tương ứng trong ngôn ngữ lập trình. Vì thế, ta có thể tương tác và thực hiện các thao tác trên cơ sở dữ liệu đó như đang xử lý các đối tượng thay vì dùng các bảng và ngôn ngữ SQL phức tạp. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 37 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình 2.33: Phương thức thao tác với database bằng kỹ thuật ORM. Thư viện Flask cũng cung cấp một gói tiện ích mở rộng SQLAlchemy, điều này giúp cho việc tương tác với cơ sở dữ liệu trong các ứng dụng Flask trở nên dễ dàng hơn thông qua SQLAlchemy. Các chức năng của SQLAlchemy bao gồm: kết nối với cơ sở dữ liệu; mô tả cơ sở dữ liệu và khai báo các lớp tương ứng trong bảng; truy vấn và sửa đổi cơ sở dữ liệu; chèn và cập nhật cơ sở dữ liệu; khôi phục dữ liệu của thao tác trước đó. Docker là một công cụ mã nguồn mở sử dụng công nghệ containerization cho ra các môi trường đóng gói (các container) trên máy tính mà không làm ảnh phép tạo hưởng đến môi trường hiện tại của máy. Công nghệ Containerization sẽ tạo ra trên máy vật lý các máy con gọi là chứa ứng dụng hoặc và các thư viện cần chủ Container dự án thiết để chạy ứng dụng hoặc dự án đó [32]. Docker ra đời giúp khắc phục những lỗi do sự không tương thích giữa các phiên bản hoặc giữa các hệ điều hành, thiết bị khác nhau khi triển khai hệ thống ứng dụng. Kiến trúc của Docker được mô tả như hình 2.34. Trong hình 2.34, Docker Client cho phép người dùng tương tác với Docker. Lõi của Docker là Docker Daemon dùng để quản lý các đối tượng của Docker và giao tiếp với các host khác. Các đối tượng của Docker gồm có: - Image là đối tượng chỉ đọc dùng để tạo Container. Môi trường lập trình gồm các ứng dụng, thư viện, hệ điều hành sẽ được đóng gói vào trong một Image. - Container được tạo ra từ Image. Một Image có thể tạo ra nhiều Container khác nhau. Container chứa môi trường lập trình từ Image. - Network giúp cho các Container trên một Host có thể giao tiếp được với nhau, hoặc các Container trên nhiều Hosts có thể liên lạc được với nhau. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 38 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT - Volume dùng để lưu trữ các dữ liệu độc lập với Container và giúp cho các Containers có thể chia sẻ dữ liệu với nhau và với Host. Phần cuối cùng của kiến trúc Docker là Docker Registry, là một nơi dùng để lưu trữ các Image phục vụ cho việc chia sẽ các ứng dụng. Hình 2.34: Các thành phần cơ bản của Docker. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 39 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH Như đã đề cập, ViT chỉ có thể làm tốt hơn các phương pháp dựa trên CNN nếu liệu khổng lồ. Tuy nhiên, mô các pre-trained model được huấn luyện trên một tập dữ liệu hình ảnh có thể hình được huấn luyện trên tập dữ thông thường không phù hợp để liệu ảnh nhỏ. Do đó, trong tinh chỉnh trên một tập dữ y tế đề tài này, nhóm sử dụng các dữ liệu lớn về hình ảnh y tế (ảnh X-quang ngực) là CheXpert và Chest14 để tinh bộ chỉnh mô hình ViT được huấn luyện trước. Sau cùng, mô hình mới được tinh chỉnh lại trên tập dữ Tổng VinDr-CXR như trong hình 3.1.
hơn là
mục tiêu có kích thước nhỏ
liệu quan về đặc điểm của ba tập dữ liệu ảnh y tế này được trình bày như sau: ChestXpert (Chest Expert) [7] là một tập dữ liệu công khai lớn để giải thích X- quang phổi, bao gồm 224.316 ảnh X quang phổi của 65.240 bệnh nhân được dán nhãn cho sự hiện diện của 14 loại bệnh quan sát là dương tính, âm tính hoặc không chắc chắn. Tập dữ liệu này được sử dụng để tạo mô hình pre-trained cho thí nghiệm. Bảng 3.1: Tập dữ liệu CheXpert bao gồm 14 loại bệnh được gắn nhãn [7]. Bệnh lý Dương tính (%) Không chắc (%) Âm tính(%) No Finding 16627 (8.86) 0 (0.0) 171014 (91.14) Enlarged Cardiom 9020 (4.81) 10148 (5.41) 168473 (89.78) Cardiomegaly 23002 (12.26) 6597 (3.52) 158042 (84.23) Lung Lesion 6856 (3.65) 1071 (0.57) 179714 (95.78) Lung Opacity 92669 (49.39) 4341 (2.31) 90631 (48.3) Edema 48905 (26.06) 11571 (6.17) 127165 (67.77) Consolidation 12730 (6.78) 23976 (12.78) 150935 (80.44) Pneumonia 4576 (2.44) 15658 (8.34) 167407 (89.22) Atelectasis 29333 (15.63) 29377 (15.66) 128931 (68.71) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 40 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH Pneumothorax 17313 (9.23) 2663 (1.42) 167665 (89.35) Pleural Effusion 75696 (40.34) 9419 (5.02) 102526 (54.64) Pleural Other 2441 (1.3) 1771 (0.94) 183429 (97.76) Fracture 7270 (3.87) 484 (0.26) 179887 (95.87) Support Devices 105831 (56.4) 898 (0.48) 80912 (43.12) ChestX-ray 14 [5] là bộ dữ liệu được trích xuất từ cơ sở dữ liệu PACS lâm sàng tại Trung tâm Lâm sàng Viện Y tế Quốc gia và bao gồm khoảng 60% tất cả các lần chụp X-quang ngực trước trong bệnh viện. Các nhãn hình ảnh được gán thông qua xử lý ngôn ngữ tự nhiên (NLP). Bộ dữ liệu X quang bao gồm 112.120 hình ảnh X-quang nhìn trực diện của 30.805 bệnh nhân duy nhất với mười bốn nhãn hình ảnh bệnh bao gồm Atelectasis, Consolidation, Infiltration, Pneumothorax, Edema, Emphysema, Fibrosis, Effusion, Pneumonia, Pleural_thickening, Cardiomegaly, Nodule, Mass and Hernia. Đây là một phần mở rộng của tập ChestX-ray8. Tập dữ liệu này được sử dụng để tạo mô hình pre-trained cho các thí nghiệm. VinDr-CXR [9] là tập dữ liệu quy mô lớn về hình ảnh X-quang phổi với hơn 100.000 hình ảnh thô ở định dạng DICOM được thu thập từ Bệnh viện 108 và Bệnh viện Đại học Y Hà Nội, hai trong số các bệnh viện lớn nhất Việt Nam. Bộ dữ liệu được công bố bao gồm 18.000 bản chụp X-quang phổi ngực thẳng (PA CXR), đã được loại bỏ nhận dạng để bảo vệ quyền riêng tư của bệnh nhân. Những hình ảnh này được chú thích bởi một nhóm gồm 17 bác sĩ X quang có ít nhất 8 năm kinh nghiệm với sự hiện diện của 22 phát hiện quan trọng (local labels) và 6 chẩn đoán (global labels). Mỗi phát hiện được định vị bằng một bounding box. Các local labels và global labels tương ứng với các phần “Findings” và “Impressions” của một báo cáo X quang tiêu chuẩn. Bộ dữ liệu được chia thành hai phần: Tập huấn luyện (training set) gồm 15.000 bản chụp và tập kiểm tra (test set) gồm 3000 bản chụp. Mỗi hình ảnh trong tập huấn luyện được dán nhãn độc lập bởi 3 bác sĩ X quang, trong khi chú thích của từng hình ảnh trong tập kiểm tra thậm chí còn được xử lý cẩn thận hơn và thu được từ sự đồng thuận của 5 bác sĩ X quang. Quá trình ghi nhãn được thực hiện thông qua khuôn khổ dựa trên web BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 41 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH riêng của VinDr Lab, được xây dựng trên hệ thống lưu trữ và truyền thông hình ảnh (PACS). Bảng 3.2: Bả(cid:110)(cid:103)(cid:32)(cid:116)(cid:104)ố(cid:110)(cid:103)(cid:32)(cid:107)(cid:234)(cid:32)(cid:116) liệu VinDr-CXR ập dữ [9]. Years
Number of scans
Number of human annotators per scan
Image size (pixel×pixel, median)
Age (years, median)*
Male (%)*
Female (%)*
Data size (GB)
1. Aortic enlargement (%)
2. Atelectasis (%)
3. Cardiomegaly (%)
4. Calcification (%)
5. Clavicle fracture (%)
6. Consolidation (%)
7. Edema (%)
8. Emphysema (%)
9. Enlarged PA (%)
10. Interstitial lung disease (ILD) (%)
11. Infiltration (%)
12. Lung cavity (%)
13. Lung cyst (%)
14. Lung opacity (%)
15. Mediastinal shift (%)
16. Nodule/Mass (%)
17. Pulmonary fibrosis (%)
18. Pneumothorax (%)
19. Pleural thickening (%)
20. Pleural effusion (%)
21. Rib fracture (%)
22. Other lesion (%)
23. Lung tumor (%)
24. Pneumonia (%)
25. Tuberculosis (%)
26. Other diseases (%)
27. COPD (%)
28. No finding (%) 2018 to 2020
15,000
3
2788 × 2446
43.77
52.21
47.79
161
2348 (15.65%)
62 (0.41%)
1817 (12.11%)
177 (1.18%)
1 (0.01%)
121 (0.81%)
1 (0.01%)
14 (0.09%)
21 (0.14%)
152 (1.01%)
245 (1.63%)
21 (0.14%)
4 (0.03%)
547 (3.65%)
85 (0.57%)
410 (2.73%)
1017 (6.78%)
58 (0.39%)
882 (5.88%)
634 (4.23%)
41 (0.27%)
363 (2.42%)
132 (0.88%)
469 (3.13%)
479 (3.19%)
4002 (26.68%)
7 (0.05%)
10606 (70.71%) 2018 to 2020
3,000
5
2748 × 2394
31.80
55.90
44.10
31.3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 42 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH Với kích thước tập dữ liệu như vậy, việc tinh chỉnh trực tiếp ViT trên tập dữ liệu VinDr-CXR có thể không phải là một giải pháp phù hợp. Do đó nếu bộ dữ liệu CheXpert hoặc Chest14 có thể giúp cải thiện mô hình pre-trained ViT cho các nhiệm vụ ảnh y tế, thì việc tinh chỉnh mô hình pre-trained ViT bởi CheXpert hoặc Chest14 có thể cung cấp backbone tốt hơn cho các nhiệm vụ ảnh y tế. Hơn nữa, đề tài cũng sử dụng backbone dựa trên CNN như ResNet, để huấn luyện một bộ phân loại bệnh trên bộ dữ liệu VinDr- CXR nhầm mục đích so sánh, đưa ra cái nhìn khách quan về mô hình ViT trong nhiệm vụ phân loại ảnh y tế. Tóm lại, để đánh giá mô hình ViT, nhóm đề xuất các phương pháp thí nghiệm như sau: - Thí nghiệm đánh giá những đóng góp của pre-trained model dựa trên Transformer vào nhiệm vụ phân loại hình ảnh X-quang ngực bằng cách kiểm tra ảnh hưởng của kích thước ảnh và đóng góp của các backbone ViT. - Thí nghiệm so sánh mô hình dựa trên Transformer và mô hình dựa trên CNN trên nhiệm vụ phân loại hình ảnh X-quang ngực. - Thí nghiệm tinh chỉnh các mô hình mô hình ViT được huấn luyện trước trên các tập dữ liệu hình ảnh y tế nổi tiếng như CheXpert và tập dữ liệu Chest14. Mô hình mới sẽ được sử dụng để huấn luyện trên tập dữ liệu nhỏ hơn là VinDr-CXR. Hình 3.1: Tổng quan về phương pháp. Bộ dữ liệu VinDr-CXR có sự phân bổ không đồng đều giữa các nhãn, một số nhãn có số lượng rất lớn chiếm trong khi một số nhãn có số lượng hầu như không đáng kể. Hơn nữa, việc một ảnh có thể có nhiều bệnh cũng gây ra một số sự trùng lập mẫu giữa các nhãn. Việc này gây một số khó khăn cho mô hình phân loại. Do đó tập dữ liệu được dùng cho các thí nghiệm đã được tinh chỉnh cho phù hợp. Các nhãn được sử dụng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 43 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH gồm có: Aortic enlargement, Cardiomegaly, Interstitial lung disease (ILD), Infiltration, Lung opacity, No finding, Nodule/Mass, Pleural effusion, Pleural thickening, Pulmonary fibrosis. Số lượng các mẫu trong nhãn được mô tả trong bảng bên dưới. Bảng 3.3: Class bệnh lựa chọn trong tập VinDr_CXR. Loại bệnh Số lượng mẫu
cho huấn luyện Số lượng mẫu
cho kiểm tra Aortic enlargement (Giãn động mạch chủ) 1345 213 Cardiomegaly (Tim to) 499 73 Interstitial lung disease – ILD (Phổi kẽ) 101 16 Infiltration (Thâm nhiễm phổi) 67 13 Lung Opacity (Mờ phổi) 177 25 No finding (Không phát hiện) 800 200 Nodule/Mass (Khối u) 179 29 Pleural effusion (Tràn dịch màng phổi) 186 32 Pleural thickening (Dày màng phổi) 503 73 Pulmonary fibrosis (Xơ hóa phổi) 483 86 Tổng 4340 760 Hình 3.2: phân phối dữ
Biểu đồ liệu lựa chọn từ tập dữ liệu VinDr-CXR. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 44 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH Việc huấn luyện và đánh giá mô hình dựa trên framework pytorch nên việc tổ chức tập dự liệu phải tuân theo chuẩn. Trong các thí nghiệm tập dữ liệu chia thành hai tập Train và Val được tổ chức theo cấu trúc như hình bên dưới. Hình 3.3: Cấu trúc tổ chức tập dữ liệu thí nghiệm. Mô hình ViT ViT có các mô hình với kích thước khác nhau: Base, Large, Small lần lượt đại diện cho mô hình cơ bản, mô hình lớn và mô hình nhỏ và mô hình kết hợp với ResNet. Các chi tiết thông số các mô hình này được đề cập trong bảng 3.4. Trong đó: ViT L/16: có nghĩa là mô hình ViT Large với kích thước patch là 16. ViT B/16: có nghĩa là mô hình ViT Base với kích thước patch là 16. ViT S/16: có nghĩa là mô hình ViT Small với kích thước patch là 16. R50+B/16: mô hình kết hợp giữa trích xuất đặc trưng CNN truyền thống và Vision Transformer (R50+Vit-B/16). Ở mô hình R50+B/16, dụng StdConv2d thay vì Conv2d
lớp tích chập của R50 sử truyền thống. Thay thế tất cả các lớp BatchNorm (lớp BN) bằng các lớp GroupNorm (GN). Di chuyển 3 khối từ Giai đoạn-4 sang Giai đoạn-3. Trong mạng ResNet-50 ban đầu giai đoạn 1 được xếp chồng 3 lần, giai đoạn 2 được xếp chồng 4 lần, giai đoạn 3 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 45 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH được xếp chồng 6 lần và giai đoạn 4 được xếp chồng 3 lần, nhưng ở đây trong R50+Vit- B/16, giai đoạn 4 ba khối trong đó được chuyển đến giai đoạn 3, vì vậy giai đoạn 3 được lấy mẫu giảm xuống sẽ
lệ
xếp chồng tổng cộng 6 + 3 = 9 lần. Nếu giai đoạn 4 tồn tại, tỷ là 32, lúc này lệ
chuyển khối của giai đoạn 4 sang giai đoạn 3, thì tỷ lấy mẫu giảm xuống là 16. Bảng 3.4: Các cấu trúc backbone ViT. Backbone CNN module Layer Hidden size MLP size Heads - 24 1024 4096 16 L/16 - 12 768 3072 12 B/16 - 12 384 1536 6 S/16 Resnet50 9 768 3072 12 R50-B16 Mô hình Resnet Resnet-18: là một mạng nơ-ron tích chập có độ sâu 18 lớp với 2 lớp downsampling và một lớp fully connected (fc). Kích thước hình ảnh đầu vào của số ResNet là 224 × 224, ngoài lớp chập đầu tiên có kích thước kernel tích chập là 7 × 7 và các lớp khác là 3 × 3. Lớp tích chập xuất ra feature map có cùng kích thước có cùng số lượng bộ lọc, như trong hình 3.4, hai lớp chập có cùng màu tạo thành một residual block. Hiệu suất của ResNet-18 tương tự như các ResNets khác nhưng có thể giữ lại nhiều đặc trưng ở quy mô thấp hơn vì lý do là nó nông. Hình 3.4: Kiến trúc mạng của Resnet-18. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 46 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH Resnet-34: là một mạng nơ-ron tích chập có độ sâu 34 lớp với lớp tích chập đầu tiên có kích thước kernel tích chập là 7 × 7 và 64 bộ lọc. Nó cũng tuân theo hai quy tắc thiết kế đơn giản – các lớp có cùng số lượng bộ lọc cho cùng kích thước feature map đầu ra và số bộ lọc tăng gấp đôi trong trường hợp kích thước feature map giảm đi một nửa để duy trì độ phức tạp về thời gian cho mỗi lớp. Hình 3.5: Kiến trúc mạng của Resnet-34. Resnet-50: 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 Average Pool. Có một thay đổi nhỏ đã được thực hiện cho ResNet-50 trở lên so với trước đó là các kết nối phím tắt đã bỏ qua hai lớp nhưng bây giờ chúng bỏ qua ba lớp và cũng có các lớp tích chập 1 * 1 được thêm vào. Điều này BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 47 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH giúp Resnet-50 có độ chính xác cao hơn nhiều so với mô hình Resnet-34 với 3,8 tỷ FLOPS. Hình 3.6: Sự thay đổi của Resnet-50 (phải) so với các phiên bản trước đó (trái). Hình 3.7: Kiến trúc mạng của Resnet-50. Khả (Đánh giá định tính):
năng diễn giải mô hình Không giống như nhiệm vụ phân loại hình ảnh thông thường trong đó độ chính xác là thước đo quan trọng duy nhất đánh giá trình phân loại, các ứng dụng y tế không chỉ yêu cầu danh mục hình ảnh mà còn phải giải thích cho kết luận. Ví dụ: nếu một công cụ trí tuệ nhân tạo (AI) dự đoán một người mắc bệnh, nó sẽ Để cung cấp các bằng chứng dẫn đến kết luận. giải quyết thách thức, phương pháp dựa trên CNN dụng Grad-CAM. Phương pháp này cung sử cấp một heat map tương ứng với hình ảnh đầu vào. Nếu một pixel là lý do cho một kết heat map cao hơn. Trong ViT, heat map được thay thế
có giá trị
luận, thì nó có thể bằng attention map. Attention map thể hiện mức độ có thể
mà một patch cục bộ đóng góp vào BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH kết luận. Do đó, nếu một patch có đóng góp cao hơn, nó trực tiếp chỉ ra rằng đây là một lời giải thích để diễn giải mô hình. Trong hình 3.8, sử dụng code trong “Grad-CAM Map for pytorch kernel description” [33] và “Attention Map for pytorch kernel description” [34] để giải thích cách Grad-CAM và attention map hoạt động trên tập dữ liệu về kiến và ong [35]. Ở đây, Grad-CAM map là từ một bộ phân loại được huấn luyện trên đầu Resnet50; attention map là từ một bộ phân loại được huấn luyện trên đầu ViT_S. Hình 3.8: Grad-CAM và attention map trên tập dữ liệu ong và kiến. Đánh giá định lượng: precision và recall là các chỉ số đã biết để đánh giá một nhiệm vụ phân loại. Tuy nhiên, nếu một mẫu có nhiều nhãn như trong ảnh ngực, thì các liệu thông thường có thể
số không phù hợp. Do đó, số
áp dụng các chỉ
án
đồ để phù hợp với phương pháp thí nghiệm. Cho hình ảnh thứ i, nhãn của nó là một có c chiều 𝑦𝑖
vec-tơ 𝑖 thỏa mãn ∑ 𝑖) là ngưỡng động dự mà nhiều phần tử có thể là ′ 1 ′ và các phần tử khác là ′ 0 ′. Đầu ra của bộ phân loại là 𝑖
𝑗=1 𝑖 = 1
𝑝̂𝑗 𝑖 > vec-tơ c chiều 𝑝̂𝑗 . Ký hiệu 𝑡ℎ𝑖 = 0.7max(𝑝̂𝑗 𝑖 = 1 nếu 𝑝̂𝑗 𝑖 = 1 có nghĩa là mẫu thứ i có bệnh thứ j và các bệnh báo hình ảnh phổi có bệnh. Dự đoán là một vec-tơ c-chiều 𝑦̂𝑖. Ở đây 𝑦̂𝑗 𝑖 = 0 nếu 𝑝̂𝑗 𝑖 ≤ 𝑡ℎ𝑖. 𝑦̂𝑗 𝑡ℎ𝑖 và 𝑦̂𝑗 khác. Precision 𝑃𝑖 và recall 𝑅𝑖 đối với mẫu thứ i được ước tính theo phương trình (3.1), 1 1 (3.2) tương ứng. Sau đó, precision trung bình 𝑃𝐴 và 𝑅𝐴 recall trung bình trên tập dữ liệu 𝑛
∑ 𝑃𝑖
𝑖=1 𝑛
∑ 𝑅𝑖
𝑖=1 𝑁 𝑁 . được ước tính là 𝑃𝐴 = và 𝑅𝐴 = (3.1) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49 CHƯƠNG 3. THÍ NGHIỆM HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH (3.2) Nhóm cũng sử dụng top-k độ chính xác để đánh giá hiệu suất hệ thống. Ký hiệu 𝑖 . Độ chính xác top k của mẫu thứ i và độ chính xác top k của tập dữ liệu 𝑆𝑖 là tập bệnh của mẫu thứ i và 𝑆̂
𝑖 là tập bệnh bao gồm các giá trị cao nhất trên cùng k
𝑘 từ vec-tơ 𝑝̂𝑗 được ước tính bằng phương trình (3.3) và (3.4). 𝑖 = {1𝑖𝑓𝑆𝑖 ∪ 𝑆̂ 𝑖 ≠ ∅
𝑘
0𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒
1 (3.3) 𝐴𝐶𝐶𝑘 𝑖
∑ 𝐴𝐶𝐶𝑘 𝑁
𝑖=1 𝑁 (3.4) 𝐴𝐶𝐶𝑘 = BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50 CHƯƠNG 4. THI CÔNG HỆ THỐNG Với những ý nghĩa mà trí tuệ nhân tạo mang lại trong lĩnh vực phân loại ảnh y tế thì việc triển khai ứng dụng trên các hệ thống bệnh viện, phòng khám là một nhu cầu cần thiết. Tuy nhiên việc triển khai ứng dụng thực tế diện rộng lại vô cùng khó khăn. Nguyên nhân là do sự phát triển vượt bật của trí tuệ nhân tạo, các kiến trúc mới liên tục ra đời và phát triển đem lại độ tin cậy cao hơn. Việc triển khai cập nhật nhanh chóng gặp trở ngại bởi ứng dụng framework, các thư viện theo thời gian có thể không tương thích. Các tiện ích như gửi thông báo, Database, mã hóa giao diện cũng gặp vấn đề xung đột phiên bản này. Một vấn đề khác là phần cứng và hệ điều hành khác nhau cũng có thể không đáp ứng triển khai ứng dụng diện rộng. Do đó, trong đề tài này nhóm xây dựng ứng dụng mô hình phân loại bệnh phổi với giao diện web và sử dụng công nghệ Docker cho việc đóng gói và triển khai ứng dụng. Phần chính của hệ thống chính là mô hình ViT phân loại bệnh phổi đã huấn luyện của thí nghiệm ở chương 3. Trong hệ thống này, mô hình sẽ được triển khai dưới dạng một model API, ứng dụng sẽ gọi API này để xử lý và kết hợp với giao diện hệ thống để hiển thị kết quả trả về. Nhóm sử dụng bộ thư viện Flask của python để xây dựng một ứng dụng web thông qua giao thức API. Sử dụng ngôn ngữ HTML và CSS để thiết kế giao diện người dùng. Hình 4.1: Mô tả cách hoạt động của model API. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51 CHƯƠNG 4. THI CÔNG HỆ THỐNG Vì một mô hình trí tuệ nhân tạo không thể đưa ra quyết định hoàn toàn mà chỉ đóng vai trò gợi ý, đưa ra kết quả tham khảo để hỗ trợ bác sĩ đưa ra kết luận, nên giao diện chẩn đoán sẽ hiển thị các gợi ý chẩn đoán kèm với hình ảnh diễn giải cơ chế ra quyết định của mô hình. Bác sĩ sẽ là người đưa ra kết luận chẩn đoán cuối cùng và nhập kết quả chẩn đoán vào ô được thiết kế đi kèm trong giao diện. Những hình ảnh và thông tin chẩn đoán cho bệnh nhân sẽ được lưu trữ vào cơ sở dữ liệu. Để tăng tính ứng dụng và tiện lợi nhóm đã thêm các chức năng gửi thông báo kết quả cho bệnh nhân qua gmail và qua tin nhắn điện thoại. Các tiện ích gửi thông báo đều được Flask hỗ trợ triển khai một cách thuận tiện thông qua thư viện Flask_mail và dịch vụ Twilio. Việc tương tác với cơ sở dữ liệu được hỗ trợ bởi thư viện SQLAlchemy. Hình 4.2: Tổng quan về hệ thống. Trong hình 4.2, Model, Database, dịch vị SMS, Mail sẽ được Flask kết nối dựng thành một giao diện thân thiện với người dùng bằng công cụ HTML, CSS. Sau đó việc đóng gói và triển khai ứng dụng sẽ được thực hiện bằng Docker. Ứng dụng sẽ được Docker dựng thành Images. Từ các Images này sẽ tạo nên các Container để đưa vào sử dụng. Ta có thể Images này lên Docker Hub để thuận tiện cho việc lưu trữ và chia đẩy sẽ ứng dụng với mọi người. Ứng dụng web được xây dựng với các chức năng chính như mô tả ở sơ đồ hình 4.3. Khi khởi chạy ứng dụng các trọng số ở của mô hình pre-trained thí nghiệm chương 3 sẽ được tải lên theo kiến trúc mô hình đã được định nghĩa trong chương trình Flask. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52 CHƯƠNG 4. THI CÔNG HỆ THỐNG Kế tiếp hệ thống sẽ xử lý yêu cầu của người dùng như chạy chẩn đoán và gửi thông báo. Để chạy chẩn đoán, đầu tiên người dùng sẽ nhập thông tin bệnh nhân và hình ảnh x quang phổi của bệnh nhân. Những thông tin này sẽ được lưu lại trong Database kèm với ID. Tiếp đến sẽ tải ảnh bệnh nhân cần chẩn đoán theo ID vào mô hình phân loại. Kết quả sẽ được trả về giao diện chẩn đoán với kết quả phân loại và hình ảnh diễn giải. Bác sĩ sẽ dựa vào đó để đưa ra kết luận và thông tin chẩn đoán sẽ được lưu trữ ở Database. Cuối cùng sẽ gửi kết quả chẩn đoán về cho bệnh nhân, ứng dụng cho phép gửi linh hoạt giữa gmail, số điện thoại hoặc cả hai cùng lúc. Hình 4.3: Sơ đồ tổng quan về các chức năng của ứng dụng web. Cấu trúc xây dựng ứng dụng Flask sẽ được tổ chức như hình 4.4. Trong đó các thành phần chính bao gồm: - Thư mục Static: chứa các ba thư mục con, images là thư mục con để chứa các hình ảnh tải lên để mô hình dự đoán. Thư mục con chứa các tệp chương css trình css để thiết lập giao diện và các hình ảnh như logo, hình nền ứng dụng. Att_images nơi để chứa các ảnh Attention map của hình ảnh chẩn đoán. - Thư mục templates: chứa các tệp html là chương trình thiết kế cho giao diện web như home.html, db_patient.html, predict.html, send_message.html, … - Tệp app.py: đây là chương file thực thi chính của dự án, tại đây ta sẽ khởi tạo các API và chạy ứng dụng. - Tệp database.db: được tạo ra khi khởi tạo cơ sử dữ liệu. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53 CHƯƠNG 4. THI CÔNG HỆ THỐNG - Tệp Finetune_Xpert02.bin: là model ViT được lưu từ thí nghiệm chương 3. - Tệp Dockerfile: chứa các thiết lập dùng cho việc triển khai Docker. - Tệp requirements.txt: file này liệt kê các gói thư viện cần thiết để thiết lập môi trường cho ứng dụng. - Tệp utils.py: chứa các hàm tiện ích sử dụng cho nhiều module trong chương trình chính. Hình 4.4: Cấu trúc và các thành phần của dự án trên phần mềm Pycharm. Trong thiết lập trên, nhóm định nghĩa cấu trúc của mô hình bằng các lớp và hàm kèm theo hàm load_model() và đặt vào file utils (hình 4.5). Sau đó ta sẽ import chương trình utils vào chương trình Flask (app.py) để gọi mô hình ra. Hình 4.5: Minh họa các hàm tiện ích được định nghĩa trong file utils. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 CHƯƠNG 4. THI CÔNG HỆ THỐNG Tạo Database bằng thư viện SQLAlchemy (hình 4.6). Đầu tiên phải khai báo thư viện và thiết lập các cài đặt cần thiết nơi lưu trữ. Trong hình 4.6 dòng db=SQLAlcemy(app) có tác dụng kích hoạt Database. Tiếp theo ta tạo các trường cơ sở dữ liệu cần thiết cho ứng dụng, ở đây là định nghĩa một class Patient chứa thông tin bệnh nhân bằng cú pháp “class Patient(db.Model):”. Hình 4.6: Tạo Database. Trong Database ta tạo các trường để chứa thông tin theo cú pháp của thư viện SQLAlchemy, bao gồm ID bệnh nhân, tên, giới tính, số điện thoại, email, độ tuổi, tên file ảnh, thời gian tạo, thời gian cập nhật cho chẩn đoán (như hình 4.6). Thêm chức năng gửi thông báo kết quả chẩn đoán cho bệnh nhân với Flask_mail và Twilio (hình 4.7). Đối với Flask_mail ta cần thiết lập server smtp, cổng, giao thức truyền nhận, thêm địa chỉ gmail để gửi. Đối với SMS ta cần đăng ký tài khoản để sử dụng dịch vụ của bên cung cấp Twilio. Trong ứng dụng này nhóm sử dụng tài khoản miễn phí từ dịch vụ gửi tin nhắn SMS của Twilio. Các thao tác đăng ký và sử dụng được có thể tham khảo tại trang web “https://www.twilio.com/”. Với tài khoản miễn phí sẽ trợ
hỗ
chỉ gửi tin nhắn đến 1 số điện thoại của người đăng ký, gói cước trả phí sẽ không giới hạn nên có thể gửi tin nhắn đến bất kỳ số điện thoại nào. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 CHƯƠNG 4. THI CÔNG HỆ THỐNG Hình 4.7: Thiết lập gmail và SMS, trong đó account_sid và auth_token sẽ được cung cấp bởi dịch vụ Twilio. Hình 4.8: Tạo các giao diện trang web bằng HTML, CSS. Thiết lập giao diện với HTML, CSS (hình 4.8). HTML (Hypertext Markup Language) dùng xây dựng thành phần cấu trúc trang web, (Cascading Style để CSS Sheets) dùng định dạng phần tử tạo bởi HTML. Flask kết hợp các chức năng và kết xuất BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56 CHƯƠNG 4. THI CÔNG HỆ THỐNG thành một giao diện sử dụng bằng HTML. Đầu tiên cú pháp @app.route(‘đường dẫn’, method=[‘GET’, ‘POST’]) để tạo một trang ứng dụng. Tiếp theo xây dựng một hàm để sử dụng chức năng cần thiết. Cuối cùng là tổng hợp lại thành giao diện bằng các kết xuất từ file HTML. Các lợi ích của việc triển khai ứng dụng mô hình dùng Docker đã được trình bày ở trên, phần này nhóm trình bày các bước triển khai ứng dụng với Docker như sau: Bước 1: Cài đặt Docker. Ở đây nhóm sử dụng hệ điều hành Ubuntu 20.04, việc cài đặt Docker sẽ được thực hiện thông qua các lệnh trên Terminal. Đầu tiên chúng ta cần chạy lệnh update và cài đặt các gói cần thiết để có thể thêm sudo apt install apt-transport-https ca-certificates curl gnupg-agent software- properties-common được repo HTTPS. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - Thêm GPG key bằng lệnh curl sau: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" Thêm Docker APT vào kho hệ thống của thiết bị: Bước 2: Build ứng dụng thành Docker Image. Để build được một Docker Image, đầu tiên ta cần tạo một Dockerfile. Cấu trúc Dockerfile gồm có: - FROM: sử dụng image cơ sở cho ứng dụng. Dòng 1 trên hình 4.9, ở đây sử dụng image python3.8 làm cơ sở. - WORKDIR: trỏ đến thư mục làm việc, các file cần thiết cho ứng dụng đều nằm ở đây bao gồm dockerfile. - COPY: Tạo bản sao các file trong thư mục làm việc vào image. Ở đây sử BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 CHƯƠNG 4. THI CÔNG HỆ THỐNG dụng cú pháp “.” chỉ thư mục hiện tai chứa Dockerfile tức WORKDIR. - RUN: chạy các lệnh. Ở đây hình, các dòng 7,8,10 là các lệnh cần thiết để chuẩn bị cài đặt các thư viện cho ứng dụng. Dòng 11 chạy file setup.txt, file này chứa các phiên bản thư viện cần cài đặt để tạo image ứng dụng. - CMD: định nghĩa các lệnh khi image được chạy thành container. Ở đây sẽ chạy chương trình tạo API web là app.py. Hình 4.9: Nội dung Dockerfile. Sau khi đã định nghĩa Dockerfile ta dùng cú pháp “docker build -t để tạo image. Kiểm tra image vừa tạo bằng cú pháp “docker image” trong terminal. Bước 3: Đưa image lên dockerbub để cung cấp cho các bên ứng dụng. Đầu tiên vào web side “https://hub.docker.com/” để tạo một “repositories” Hình 4.10: Giao diện repositories của DockerHub. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58 CHƯƠNG 4. THI CÔNG HỆ THỐNG Tiếp theo tại Terminal nhập cú pháp “docker push new-repo:tagname” để public image lên hub. Để tải image từ hub về sử dụng cú pháp “docker push name- repo:tagname:tagname” Bước 4: Run container từ image. Sử dụng cú pháp “docker run --name nametag nameimage” để chạy container. Để xem trạng thái của tất cả container dùng cú pháp “docker ps -a”. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Tỷ lệ giữa kích thước ảnh và kích thước patch Trong bài báo “An image is worth 16x16 words: Transformers for image không hoạt động tốt với các recognition at scale” [12] chỉ ra rằng mô hình ViT có thể đối tượng nhỏ. Lý do chính là kích thước patch của mô hình ViT có thể không phù hợp với các đối tượng nhỏ. Do đó, trong thí nghiệm này sẽ đánh giá ảnh hưởng của tỷ lệ giữa kích thước patch và kích thước hình ảnh. Theo thiết lập ban đầu trong bài báo, kích thước patch được đặt là 16 trong khi kích thước hình ảnh được thay đổi. Kích thước hình ảnh nhỏ một vùng rộng hơn. Trong hình ảnh hơn có nghĩa là mỗi patch có thể bao phủ bệnh có vùng tổn thương ngực, một số bệnh có vùng tổn thương nhỏ hơn nhưng một số huấn luyện một mô hình lớn hơn. Do đó, thí nghiệm cố gắng tìm một cài đặt phù hợp để ViT trên bộ dữ liệu X-quang ngực. Trong bảng 5.1, kích thước hình ảnh là 192 * 192, 224 * 224, 512 * 512. Trong bài nghiên cứu [12], kích thước hình ảnh được xác định bởi mô hình pre-trained là 224 * 224. Thí nghiệm giảm kích thước hình ảnh xuống còn 192 * 192 để kiểm tra xem vùng ngực có kích thước quá nhỏ thì mô hình ViT nhận ra hay không. Ngoài ra, kích thước hình ảnh được tăng lên 512 * 512 để phân giải cao hơn có thể giúp ích kiểm tra xem độ được gì không. Trong những trường hợp này, ViT có thể cần một vị trí nhúng mới. Thí nghiệm làm theo gợi ý trong nghiên cứu [12] để thực hiện nội suy 2D của các vị trí nhúng được pre-trained, theo vị trí của chúng trong hình ảnh gốc. Bảng 5.1: Ảnh hưởng của kích thước hình ảnh. Isize Psize Precision Recall ACC1 ACC2 ACC3 16 82.43 51.50 82.76 97.50 99.34 192 16 83.16 50.50 83.15 97.50 99.21 224 16 77.53 51.36 77.50 96.05 98.55 512 Kết quả ở bảng 5.1 cho thấy kích thước ảnh nhỏ hơn có thể không làm giảm hiệu BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ suất quá nhiều. Tuy nhiên, tăng kích thước ảnh có thể làm giảm hiệu suất một cách rõ ràng. Kết quả này có thể là vị trí nhúng nội suy mới không phù hợp với ứng dụng này. So sánh backbone ViT Trong ViT, chúng ta có thể kiểm soát không chỉ kích thước hình ảnh mà còn cả sâu hơn và có nhiều attention hơn. Ngoài ra, một mô-
backbone. Ví dụ, backbone có thể giúp
được đi kèm với mạng ViT. Mô-đun dựa trên CNN có thể
có thể
đun dựa trên CNN trích xuất nhiều đặc trưng hơn trước khi áp dụng mạng ViT. Do đó, trong thí nghiệm này, nhóm so sánh backbone ViT thuần túy và backbone CNN-VIT. Các backbone của ViT bao gồm L/16, B/16, S/16. Và backbone CNN-VIT là R50+B//16. Chi tiết về các mạng này được giới thiệu trong bảng 3.4. Trong số các backbone của ViT, L/16 là mạng lớn nhất có nhiều lớp và nhiều đầu trong khi S/16 là mạng nhỏ nhất. Như trong bảng 5.2, kết quả ra rằng backbone S/16
chỉ liệu nhỏ,
liệu VinDr-CXR là một tập dữ
tốt hơn. Điều này có nghĩa là Tập dữ
có kết quả có hiệu suất tốt hơn. Ngoài ra, khi một mô-đun CNN như Resnet50
hơn có thể
mạng nhỏ được áp dụng cho tính năng trích xuất, hiệu suất sẽ tăng lên đáng kể. So sánh với mạng B/16 thuần túy, mạng R50-B/16 có precision hơn 2% và recall cũng tương tự. Do đó độ chính xác top 1 của mạng R50-B/16 là 86% trong khi độ chính xác top 1 của mạng B16 chỉ là 83,15%. Bảng 5.2: So sánh backbone. Backbone Precision Recall ACC1 ACC2 ACC3 83.13 48.95 83.42 97.10 98.94 L/16 83.16 50.49 83.15 97.50 99.21 B/16 84.27 50.09 84.34 98.02 99.21 S/16 86.16 50.52 86.18 97.10 99.47 R50-B/16 Tác dụng của tập dữ liệu pre-trained Trong ViT, kết quả phân loại chỉ tốt hơn so với phân loại dựa trên CNN nếu mô hình được huấn luyện trước trên một tập dữ liệu rất lớn như ImageNet21K. Quá trình pre-training rất tốn kém tài nguyên để mô hình hiểu các đặc trưng ngữ nghĩa. Vì lý do BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ này, nhóm sẽ khảo sát về đóng góp của tập dữ liệu pre-trained đối với nhiệm vụ phân loại ảnh vùng ngực. Một thí nghiệm đã được dụng trong nghiệm này. Thí số sử thử đầu. Thí nghiệm đầu tiên huấn luyện một bộ phân loại trên tập dữ liệu VinDr-CXR từ nghiệm thứ hai sử dữ
dụng bộ tạo các pre-trained model;
liệu Chest14 và ChestExpert để sau đó các mô hình được tinh chỉnh trên bộ liệu VinDrCXR. Trong thí nghiệm cuối dữ phân loại
huấn luyện bộ
dụng để
được sử
[12]
cùng, pre-trained model trong nghiên cứu dữ
dựa trên bộ phân loại mới được tinh chỉnh
liệu Chest14 hoặc ChestExpert. Sau đó, bộ trên bộ dữ liệu VinDrCXR. Hơn nữa, trong bảng 5.2, R50-B/16 có hiệu suất tốt nhất. Do đó, bên cạnh backbone tiêu chuẩn B/16, nhóm cũng sử dụng backbone R50-B/16 trong thử nghiệm này. Kết quả trong bảng 5.3 cho thấy rằng pre-trained model [12] là một yếu tố quan trọng tạo nên sự dụng mô
liệu nhỏ. Ngoài ra, việc sử
thành công của ViT trên các tập dữ hình R50-B/16 đã được huấn luyện trước với tập dữ liệu ChestExpert và Chest14 trước khi tinh chỉnh trên tập dữ liệu VinDr-CXR có thể mang lại hiệu suất tốt hơn. Bảng 5.3: Kết quả có và không có tập dữ liệu pre-trained. Setting Precision Recall ACC1 ACC2 ACC3 50.25 38.07 52.63 8855 97.10 B/16 (from scratch) 50.53 38.40 50.52 90.39 97.23 B/16 + C14* 58.57 39.73 62.10 88.02 97.23 B/16 + CExpert * 86.60 52.29 86.84 98.28 99.34 B/16 + pre-train + C14* 85.89 52.98 86.57 98.42 99.60 B/16 + pre-train + CExpert* 86.20 53.22 86.84 97.76 99.60 R50-B/16 + pretrain + C14* 97.36 99.47 87.57 54.19 88.02 R50-B/16 + pretrain + CExpert* *C14 và CExpert tương ứng là tập dữ liệu Chest-14 [5] và Chest-Expert [7]. So sánh với backbone dựa trên CNN Trong phần này, nhóm so sánh backbone dựa trên Transformer và backbone dựa trên CNN trên tập dữ liệu VinDr-CXR. Sử dụng thiết lập tiêu chuẩn trong đó Resnet- 18; Resnet-34; và Restnet-50 được sử dụng như một pre-trained model để tinh chỉnh bộ dữ liệu VinDr-CXR. Hiệu suất của backbone dựa trên CNN đều được thể hiện trong bảng 5.4. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Bảng 5.4: Kết quả trên tập dữ liệu backbone CNN. Backbone Precision Recall ACC1 ACC2 ACC3 84.39 51.94 85.13 97.36 99.34 ResNet18 84.81 52.50 85.78 96.57 99.47 ResNet34 ResNet50 86.57 52.97 86.71 98.15 99.34 Bên cạnh các thí nghiệm định lượng, Grad-CAM [13] và AtteMap [11] có thể cung cấp thông tin hữu ích để giải thích cách hoạt động của mô hình. Hình 5.1, một ví dụ trong đó nhiều khu vực tổn thương trong cùng một hình ảnh. Grad-CAM có thể phát hiện khu vực tổn thương của class "Cardiomegaly". Tuy nhiên, nó không thể phát hiện vùng tổn thương do lớp "Aortic enlargement" gây ra. Ngược lại, Atte-Map có thể phát hiện cả hai khu vực bị thương. Hình 5.1: Diễn giải mô hình với nhiều vùng tổn thương. Nếu chúng ta kiểm tra trên hình ảnh chỉ có một vùng tổn thương như trong hình 5.2, thì cả hai phương pháp đều có thể phát hiện vùng tổn thương một cách chính xác. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Tuy nhiên, Atte-Map có thể đánh dấu chính xác khu vực "Nodule Mass" nhưng Grad- CAM chỉ có thể phát hiện một khu vực rộng. Hình 5.2: Diễn giải mô hình với vùng tổn thương đơn lẻ. Kết quả xây dựng ứng dụng Web cho mô hình phân loại bệnh phổi: Ứng dụng web được xây dựng và chạy thành công với giao diện người dùng đơn giản, rõ ràng và dễ sử dụng (hình 5.3). Trên thanh menu có các trường chính sau: - Home: giao diện trang chủ. - Patients: bao gồm 2 trường nhỏ là Add Patient cho chức năng đăng ký bệnh nhân và Patient Data cho chức năng truy cập vào xem các thông tin về bệnh nhân - Predict: giao diện cho chức năng dự đoán bệnh của mô hình và trả về kết quả dự đoán. - Message: giao diện bác sĩ gửi tin nhắn kết quả chẩn đoán bệnh cho bệnh nhân thông qua Gmail và tin nhắn SMS. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 64 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Hình 5.3: Giao diện trang chủ (Home) của ứng dụng web trên trình duyệt máy tính. Quy trình sử dụng các chức năng trên ứng dụng theo từng bước như sau: Bước 1: Đăng ký thông tin bệnh nhân Hình 5.4: Giao diện đăng ký thông tin bệnh nhân. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 65 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Trên thanh công cụ của ứng dụng trỏ chuột đến trường Patients và nhấn chọn Add Patient, giao diện đăng ký bệnh nhân hiện ra, tại đây ta sẽ nhập thông tin bệnh nhân vào mẫu đăng ký và chọn Submit để lưu thông tin vào Database. Để xem lại và chỉnh sửa thông tin của bệnh nhân đã nhập, tại trường Patients nhấp chọn vào Pattient Data, lúc này giao diện chứa dữ liệu bệnh nhân sẽ xuất hiện, hiển thị thông tin của tất cả các bệnh nhân đã đăng ký như hình 5.5. Người dùng có thể chỉnh sửa thông tin của mỗi bệnh nhân bằng chức năng Edit Patient, hoặc xóa bệnh nhân khỏi cơ sở dữ liệu bằng nút Delete Patient. Hình 5.5: Giao diện dữ liệu bệnh nhân. Bước 2: Sử dụng mô hình dự đoán: Tại trang hiển thị dữ liệu bệnh nhân ở hình 5.5, người dùng có thể nhấn vào liên kết Go to Predict để đi đến chức năng dự đoán của mô hình, hoặc cũng có thể nhấn trực tiếp vào trường Predict ở thanh công cụ và sau đó nhập đúng ID của bệnh nhân cần chẩn đoán để sử dụng chức năng này. Sau khi giao diện của trang dự đoán hiện ra, ta cần nhấn vào ô Choose File và tiến hành chọn file ảnh X-quang phổi của bệnh nhân từ máy tính để tải lên mô hình dự đoán như hình 5.6. Có thể tải lên ảnh DICOM vì trong chương trình, nhóm đã xây dựng chương trình chuyển đổi ảnh DICOM sang các định dạng ảnh thông thường trước khi tải ảnh vào mô hình phân loại. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 66 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Hình 5.6: Giao diện chọn ảnh để thực hiện chức năng dự đoán của mô hình. Tiếp theo là nhấn vào nút Get Predictions để tiến hành chạy chức năng dự đoán của mô hình phân loại. Kết quả dự đoán của mô hình sẽ hiển thị trên màn hình kèm hình ảnh diễn giải Attention map để chỉ ra những vùng mà mô hình dựa vào đó để dự đoán. Hình 5.7: Giao diện kết quả hiển thị Attention map. Sau khi nhận định kết quả từ mô hình và xem xét lại hình ảnh, bác sĩ sẽ cân nhắc để đưa ra kết luận cuối cùng cho kết quả chẩn đoán của hình ảnh và nhập kết luận vào ô Diagnostic Conclusion như hình 5.8. Nhấn Submit, kết quả chẩn đoán sẽ được lưu vào BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 67 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ cơ sở dữ liệu của bệnh nhân. Hình 5.8: Giao diện hiển thị dự đoán của mô hình và kết luận của bác sĩ. Bước 3: Xem lại kết quả và gửi thông báo kết quả cho bệnh nhân: Đi đến trang dữ liệu bệnh nhân như ở bước 1, tìm đến bệnh nhân cần gửi thông báo và nhấn trực tiếp vào tên của bệnh nhân để xem lại thông tin chi tiết trước khi gửi tin nhắn thông báo kết quả. Để xem lại hình ảnh đã chẩn đoán, ta sẽ nhấn vào nút Review image như hình 5.9. Hình 5.9: Giao diện xem lại ảnh và thông tin bệnh nhân. Cuối cùng nhấn nút Send message, ứng dụng sẽ điều hướng đến giao diện gửi tin nhắn, người dùng sẽ lựa chọn gửi thông báo qua Email, qua tin nhắn SMS hoặc cả hai rồi nhấn Send để gửi. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Hình 5.10: Giao diện gửi thông báo chẩn đoán cho bệnh nhân. Hình 5.11: Kết quả thông báo qua Email (trái) và tin nhắn SMS (phải). Kết quả triển khai ứng dụng với Docker: Kết quả đóng gói ứng dụng thành Docker Images được thể hiện ở hình 5.12, để kiểm tra các Images hiện có ta dùng lệnh lệnh “docker images”. Docker sẽ hiện ra thông tin các images gồm có REPOSITORY, TAG, IMAGE ID, CREATED, SIZE. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 69 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Hình 5.12: Docker Images ứng dụng. Kết quả sau khi Push Docker Image lên Docker Hub, Images sẽ được lưu trữ và chia sẽ web
công khai tại địa chỉ “https://hub.docker.com/r/kaiziz/datnk18” (hình 5.13). Hình 5.13: Image đã được đưa lên Dockerhub thành công. Pull Docker Image từ Docker Hub về máy tính cần triển khai ứng dụng bằng lệnh: “docker pull kaiziz/datnk18” (hình 5.13). Hình 5.14: Quá trình Pull Image về một máy tính khác cần triển khai ứng dụng. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 70 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ Dùng lênh “docker images” ta sẽ thấy image đã được Pull thành công về máy tính như hình 5.15. Hình 5.15: Docker Image được Pull thành công về máy tính từ Docker Hub. Dùng lệnh “docker run và chạy ứng dụng như hình 5.16. Địa chỉ url hiện ra chính là địa chỉ của ứng dụng web chạy trên máy. Hình 5.16: Kết quả khởi chạy thành công ứng dụng khi triển khai trên một máy tính khác. phân loại, mô hình ViT có thể
Đối vơi thí nghiệm đánh giá bộ phân loại tốt được hình ảnh trong y tế. Khi được pre-trained trên tập dữ ảnh y tế liệu lớn rồi tinh chỉnh trên tập nhỏ phân loại được cải thiện rõ rệt (bảng 5.3). Đặt biệt
hơn hiệu suất bộ cho
kết quả thấy ViT-B/16 có hiệu suất tương đương với ResNet50 về chính precision, recall và độ xác Top-1. Tuy nhiên, nếu ResNet50 được sử dụng để trích xuất các đặc trưng cho mạng ViT, hiệu suất có thể có precision và độ được cải thiện. Về chi tiết, R50+ViTB/16 chính xác Top-1 lần lượt là 87,57% và 88,02%. Ngược lại, Resnet50 có 86,57% và 86,51% về precision và độ chính xác Top-1. Về khả năng diễn giải mô hình của ViT, kỹ thuật Attention Map cũng đáp ứng được sự kỳ vọng về khả năng diễn giải nhiều vùng tổn thương. Đối với triển khai ứng dụng mô hình phân loại, Docker giúp đóng gói thành công BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71 CHƯƠNG 5. KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ và chia sẻ ứng dụng lên kho lưu trữ với kích thước dung lượng 2.83 GB. Image tải từ Dockerhub về một máy tính khác có cài đặt Docker, ứng dụng chạy ổn định tốc độ khởi động của ứng dụng tùy thuộc vào cấu hình của máy tính. Về chức năng của ứng dụng, mô hình chạy dự đoán phụ thuộc vào tốc độ xử lý của máy tính, thời gian trả về kết quả dự đoán khoảng từ 2 đến 10 giây. Giao diện web hiển thị và chức năng gửi thông báo cũng ảnh hưởng bởi tốc độ mạng internet, tin nhắn qua Email và SMS được gửi đến người nhận trong vòng 1 phút. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Trong đề tài này nhóm đã đề xuất một phương pháp để tinh chỉnh một mô hình ViT trên một tập dữ liệu X-quang ngực nhỏ. Thay vì tinh chỉnh trực tiếp mô hình pre- trained ViT, trước tiên nhóm tinh chỉnh mô hình pre-trained ViT trên các bộ dữ liệu X- quang ngực nổi tiếng. Sau đó, mô hình đã huấn luyện được sử dụng để huấn luyện lại trên tập dữ liệu mục tiêu nhỏ hơn. Các kết quả thí nghiệm định lượng đã cho chứng minh được phương pháp này tốt hơn một chút so với phương pháp dựa trên CNN truyền thống. Ngoài ra, các thí nghiệm định tính chứng minh rằng phương pháp này giúp xác định vùng tổn thương tốt hơn về sai số định vị, Attention map có thể chỉ ra các khu vực tổn thương do nhiều bệnh cùng xuất hiện. Ngoài ra nhóm đã xây dựng thành công ứng dụng web cho mô hình phân loại bệnh phổi đã huấn luyện được và triển khai ứng dụng nhanh chóng bằng Docker. Ứng dụng bao gồm cơ sở dữ liệu, chức năng dự đoán của mô hình, chức năng gửi tin nhắn kết quả cho bệnh nhân. Các chức năng hoạt động mượt mà trên máy tính, giao diện ứng dụng web được thiết kế rõ ràng, dễ tương tác cho người dùng. Tổng kết, tuy độ chính xác của mô hình còn chưa cao, Các chức năng của ứng dụng web còn đơn điệu nhưng nhìn chung, nhóm đã thực hiện được những kỳ vọng và mục tiêu đặt ra ban đầu của đề tài “Ứng dụng mô hình Vision Transformer trong phân loại dữ liệu bệnh phổi”. Quá trình thực hiện đề tài này đã giúp cho nhóm học hỏi và tích lũy được một số kiến thức, kinh nghiệm nhất định cho bản thân. Để ứng dụng một mô hình phân loại bệnh vào thực tế thì độ chính xác là một điều vô cùng quan trọng. Khi thực hiện đề tài, nhóm nhận thấy rằng, trong ảnh chụp X-quang y tế, đặc tính hấp thụ năng lượng tia X của các mô cơ càng làm khó nhận diện các vùng bệnh, đặc biệt là các vùng tổn thương nhỏ hoặc các vùng bị ẩn trong mô. Do đó nhóm đề xuất thiết kế một mô-đun tăng cường ảnh để làm nổi bật các chi tiết nhỏ trước khi đi qua bộ phân loại. Phương pháp này có thể đem lại một số hiệu quả về độ chính xác cho BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 73 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN bộ phân loại. Về ứng dụng web, có thể thiết thêm các phân quyền người dùng cho ứng dụng để chỉ có bác sĩ và một số người dùng nhất định mới có khả năng truy cập vào xem thông tin của bệnh nhân, đảm bảo về tính bảo mật. BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 74 [1] Dakai Jin, Adam P. Harrison, Ling Zhang, Ke Yan, Yirui Wang, Jinzheng Cai, Shun Miao and Le Lu, “Chapter 14 – artificial intelligence in radiology”, In Artificial Intelligence in Medicine, 2020. [2] Ngô Thị Anh Thư, Phạm Thiên Vương, “Ứng dụng xử lý ảnh và AI để nhận biết bệnh viêm phổi ở trẻ em”, Đồ Án Tốt Nghiệp, trường ĐHSPKT, Tp.HCM, 2020. [3] Võ Kiều Phương, Nguyễn Nhật Uyên, “Ứng dụng Deep Learning và Radiomics trong quá trình chẩn đoán ung thư phổi”, Đồ Án Tốt Nghiệp, trường ĐHSPKT, Tp.HCM, 2021. [4] O. Russakovsky, J. Deng, H. Su, J. Krause, S. Satheesh, S. Ma, Z. Huang, A. Karpathy, A. Khosla, M. Bernstein, A. C. Berg, and L. Fei-Fei, “ImageNet Large Scale Visual Recognition Challenge”, International Journal of Computer Vision (IJCV), vol. 115, 2015. [5] X. e. a. Wang, ChestX-ray8: Hospital-scale chest X-ray database and benchmarks on weakly-supervised classification, In Proceedings of the IEEE Conference on Computer Vision and Pattern, 2017. [6] T.-Y. Lin, M. Maire, S. Belongie, L. Bourdev, R. Girshick, J. Hays, P. Perona, D. Ramanan, C. L. Zitnick, and P. Dollar, “Microsoft coco: Common objects in context", 2014. [7] J. e. a. Irvin, CheXpert: A large chest radiograph dataset with uncertainty labels and expert comparison, In Proceedings of the AAAI Conference on Artificial Intelligence, 2019. [8] C. Sun, A. Shrivastava, S. Singh, and A. Gupta, “Revisiting unreasonable effectiveness of data in deep learning era”, in ICCV. IEEE Computer Society, 2017. [9] e. a. Ha Q. Nguyen, VinDr-CXR: An open dataset of chest X-rays with radiologist’s annotations, Arxiv, 2021. [10] K. He, X. Zhang, S. Ren, and J. Sun, “Deep residual learning for image recognition,”, CoRR, vol. abs/1512.03385, 2015. 75 [11] A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A. N. Gomez, L. u. Kaiser, and I. Polosukhin, Attention is all you need, in Advances in Neural Information Processing Systems, vol. 30. Curran Associates, Inc., 2017. [12] A. Dosovitskiy, L. Beyer, A. Kolesnikov, D. Weissenborn, X. Zhai, T. Unterthiner, M. Dehghani, M. Minderer, G. Heigold, S. Gelly, J. Uszkoreit, and N. Houlsby, An image is worth 16x16 words: Transformers for image recognition at scale, ICLR, 2021. [13] R. R. Selvaraju, M. Cogswell, A. Das, R. Vedantam, D. Parikh, and D. Batra, Grad-cam: Visual explanations from deep networks via gradient-based localization, ICCV. IEEE Computer Society, 2017. [14] Rafael C. Gonzalez, "Digital Image Processing", Prentice Hall, 2008. [15] Cho Z, Jones JP, Singh M, "Foundations of medical imaging", New York: Wiley, 1993. [16] Shiroma, Jonathan T, "An introduction to DICOM". Veterinary Medicine: 19–20, 2006. [17] Lutz, Mark, "Learning Python (5th ed.)". O'Reilly Media. 2013. [18] "An Introduction to PyTorch – A Simple yet Powerful Deep Learning Library". analyticsvidhya.com. 2018-02-22. [19] Wilson, Halsey. "Artificial intelligence", Grey House Publishing, 2018. [20] Chong, Edwin K. P.; Żak, Stanislaw H, "Gradient Methods", An Introduction to Optimization (Fourth ed.), 2013. [21] V. Andreieva, N. Shvai, "Generalization of cross-entropy lossfunction for image classification", doi.org, 2021. [22] Yann LeCun, Leon Bottou, Yosuha Bengio and Patrick Haffner, “Gradient-based learning applied to document recognition”, IEEE, 1998. [23] Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton, “ImageNet Classification with Deep Convolutional Neural Networks”, NIPS, 2012. [24] K. Simonyan and A. Zisserman., “Very Deep Convolutional Networks For Large- Scale Image Recognition,”, Proc. IEEE Conf. Learn. Repr, 2015. [25] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir 76 Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich, “Going Deeper with Convolutions”, , arXiv, 2014. [26] M. G. a. S. Dorling, “Artificial neural networks (the multilayer perceptron)—A review of applications in the atmospheric sciences”, Atmospheric Environment, vol. 32, no. 14-15, pp. 2627–2636, , 1998. [27] B. Zhang and R. Sennrich, “Root mean square layer normalization”, in Advances in Neural Information Processing Systems, vol. 32. Curran Associates, Inc, 2019. [28] Samira Abnar and Willem Zuidema, "Quantifying attention flow in transformers", In ACL, 2020. [29] "API là gì", aws.amazon.com, link: https://aws.amazon.com/vi/what-is/api/. [30] "RESTful API là gì, cách thiết kế Resfull API", topdev.vn, link: https://topdev.vn/blog/restful-api-la-gi/. [31] "Flask python là gì?", ingoa.info, link: https://ingoa.info/flask-python-la-gi-1642399319/. [32] Le Quang Hung, "Docker là gi?", tutorials.aiclub.cs.uit.edu.vn, 2020, link: http://tutorials.aiclub.cs.uit.edu.vn/index.php/2020/05/30/docker-co-ban-bai-1- docker-la-gi-tai-sao-lai-su-dung-docker/. [33] Jacobgil, "GradCam Map for pytorch kernel description", github.com, link: https://github.com/jacobgil/pytorch-grad-cam, [34] Jeonsworld, "Attention Map for pytorch kernel description", github.com, link: https://github.com/jeonsworld/ViT-pytorch. [35] "Transfer learning tutorial pytorch", pytorch.org, link: https://pytorch.org/tutorials/beginner/transfer-learning-tutorial.html. 77 Mã nguồn chương trình import numpy as np import pandas as pd def check_FileName(GTData,PDData): GTNAME = GTData['ImageName'].to_list() PDNAME = PDData['ImageName'].to_list() count = 0 for i in range(len(PDNAME)): if PDNAME[i] in GTNAME: count = count + 1 return len(PDNAME)== count def check_Col(GTData,PDData): GT_Col = GTData.columns PD_Col = PDData.columns count = 0 for i in range(len(GT_Col)): if GT_Col[i] == PD_Col[i]: count = count + 1 return len(GT_Col)== count class Evaluator: def __init__(self, GTfile, PDFile): self.GTname = GTfile self.GTData= pd.read_csv(self.GTname) self.PDname = PDFile self.PDData = pd.read_csv(self.PDname) if not(check_FileName(self.GTData, self.PDData)): Chương trình Đánh giá định lượng kết quả phân loại của mô hình: 78 raise ValueError("File Name not pass") if not(check_Col(self.GTData, self.PDData)): raise ValueError("Collume not pass") def get_result(self, thre=0.7, k=[1,3,5]): FileName=self.PDData['ImageName'].to_list() col=self.PDData.columns[2:] PreCision=[] ReCall=[] ACC_k=[] for filename in FileName: # print(filename) gt=self.GTData[self.GTData['ImageName']==filename][col].to_numpy() pred=self.PDData[self.PDData['ImageName']==filename][col].to_numpy() The=pred.max()*thre pred_thd=pred>=The pred_thd=pred_thd.astype('float') precision=np.sum(gt*pred_thd)/np.sum(pred_thd) recall = np.sum(gt * pred_thd) / np.sum(gt) PreCision.append(precision) ReCall.append(recall) A_temp=[] y_sort=np.argsort(pred) for i in range (len(k)): y_temp=np.zeros_like(gt) K=k[i] for j in range(K): y_temp[0][int(y_sort[0][-(j+1)])]=1.0 r=np.sum(y_temp*gt)>0 if r: 79 A_temp.append(1.0) else: A_temp.append(0.0) ACC_k.append(A_temp) self.Pre_R=np.mean(np.array(PreCision)) self.ReC_R = np.mean(np.array(ReCall)) self.ACC_R =np.mean(np.array(ACC_k),axis=0) if __name__ == "__main__": from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM, LayerCAM, FullGrad from pytorch_grad_cam.utils.image import show_cam_on_image, preprocess_image, deprocess_image from pytorch_grad_cam import GuidedBackpropReLUModel import torch import torch.nn as nn from torchvision import models import cv2 import numpy as np import matplotlib.pyplot as plt from PIL import Image #Load model model=torch.load('model/ resnet50_ft_VinXray10class.pth') model.eval() Chương trình hiển thị Grad-CAM 80 #Select the target layer target_layer = [model.layer4[-1]] image_path='Images/1b2a7adb5705d9e3f5b63939046d93c7.jpg' img = cv2.imread(image_path, 1)[:, :, ::-1] # 1 Is read rgb img = cv2.resize(img, (224, 224)) img = np.float32(img) / 255 input_tensor = preprocess_image(img, mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) #Construct the CAM object once, and then re-use it on many images: cam = GradCAM(model=model, target_layers=target_layer, use_cuda=True) def show_cam(mask: np.ndarray,use_rgb: bool = False, colormap: int = cv2.COLORMAP_JET) -> np.ndarray: """ This function overlays the cam mask on the image as an heatmap. By default the heatmap is in BGR format. :param img: The base image in RGB or BGR format. :param mask: The cam mask. :param use_rgb: Whether to use an RGB or BGR heatmap, this should be set to True if 'img' is in RGB format. :param colormap: The OpenCV colormap to be used. :returns: The default image with the cam overlay. """ heatmap = cv2.applyColorMap(np.uint8(255 * mask), colormap) if use_rgb: 81 heatmap = cv2.cvtColor(heatmap, cv2.COLOR_BGR2RGB) heatmap = np.float32(heatmap) / 255 if np.max(img) > 1: raise Exception( "The input image should np.float32 in the range [0, 1]") cam = heatmap cam = cam / np.max(cam) return np.uint8(255 * cam) #Show cam target_category = None cam.batch_size = 32 #Calculation cam grayscale_cam = cam(input_tensor=input_tensor, target_category=target_category, aug_smooth=True, eigen_smooth=True) #Display and save the heat map , grayscale_cam It's a batch Result , Only one can be selected for display grayscale_cam = grayscale_cam[0,:] visualization = show_cam(grayscale_cam, use_rgb=False) cv2.imwrite(f'cam_image.jpg', visualization) cam_image = Image.open('cam_image.jpg') fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 12)) ax1.set_title('Original') 82 ax2.set_title('Grad-cam') _ = ax1.imshow(img) _ = ax2.imshow(cam_image) plt.show() #Show cam on image visualization = show_cam_on_image(img, grayscale_cam, use_rgb=False) cv2.imwrite(f'cam_image.jpg', visualization) cam_image = Image.open('cam_image.jpg') fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 12)) ax1.set_title('Original') ax2.set_title('Grad-cam') _ = ax1.imshow(img) _ = ax2.imshow(cam_image) plt.show() import typing import io import os import torch import numpy as np import cv2 import matplotlib.pyplot as plt from urllib.request import urlretrieve Chương trình hiển thị Attention Map 83 from PIL import Image from torchvision import transforms, datasets from torch.utils.data import DataLoader from models.modeling import VisionTransformer, CONFIGS # Prepare Model config = CONFIGS["R50-ViT-B_16"] model = VisionTransformer(config, num_classes=10, zero_head=False, img_size=224, vis=True) PATH='model /Finetune_Chest14_R50B16_enhance.bin' model.load_state_dict(torch.load(PATH)) model.eval() VinXray_labels=dict(enumerate(open(' /VinXrayLabel.txt'))) transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.Grayscale(num_output_channels=3), transforms.ToTensor(), transforms.Normalize(mean=[0.5], std=[0.5]), ]) im=Image.open("Images/051c2436c0acdb5e09d085c7e4a764f3.jpg") def get_attention_map(img, get_mask=False): x = transform(img) x.size() logits, att_mat = model(x.unsqueeze(0)) 84 print('logits =',logits) att_mat = torch.stack(att_mat).squeeze(1) # Average the attention weights across all heads. att_mat = torch.mean(att_mat, dim=1) # To account for residual connections, we add an identity matrix to the # attention matrix and re-normalize the weights. residual_att = torch.eye(att_mat.size(1)) aug_att_mat = att_mat + residual_att aug_att_mat = aug_att_mat / aug_att_mat.sum(dim=-1).unsqueeze(-1) # Recursively multiply the weight matrices joint_attentions = torch.zeros(aug_att_mat.size()) joint_attentions[0] = aug_att_mat[0] for n in range(1, aug_att_mat.size(0)): joint_attentions[n] = torch.matmul(aug_att_mat[n], joint_attentions[n-1]) v = joint_attentions[-1] grid_size = int(np.sqrt(aug_att_mat.size(-1))) mask = v[0, 1:].reshape(grid_size, grid_size).detach().numpy() if get_mask: result = cv2.resize(mask / mask.max(), img.size) else: mask = cv2.resize(mask / mask.max(), img.size)[..., np.newaxis] result = (mask * img).astype("uint8") 85 return result def plot_attention_map(original_img, att_map): fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(16, 16)) ax1.set_title('Original') ax2.set_title('Attention Map Last Layer') _ = ax1.imshow(original_img) _ = ax2.imshow(att_map) result = get_attention_map(im) plot_attention_map(im, result) # Check mask for Attention Map check_mask = get_attention_map(im, True) plot_attention_map(im, check_mask) Chương trình triển khai ứng dụng web: Vì số lượng các tệp chương trình khá nhiều và chương trình viết khá dài, do đó không thuận tiện để trình bày tất cả trong báo cáo. Nhóm xin phép chia sẽ mã nguồn của nhóm thông qua link Google Drive dưới dây: https://drive.google.com/file/d/1y- doFvEFrvcFLidWBmTGf37J5ZwSKnnS/view?usp=sharing 862.6 GIỚI THIỆU VỀ API
2.6.1 Khái quát về API
2.6.2 Thư viện Flask
2.6.3 Cơ sở dữ liệu SQLite và công cụ tương tác SQLAlchemy
2.7
DOCKER
GIỚI THIỆU VỀ
Chương 3. THÍ NGHIỆM HUẤN LUYỆN VÀ DÁNH
GIÁ MÔ HÌNH
3.1
PHƯƠNG PHÁP
TỔNG QUAN VỀ
Đặc tính
Tập huấn luyện
Tập đánh giá
u
ệ
i
l
ữ
d
ộ
b
ề
v
ê
k
g
n
ố
h
T
ộ
b
c
ụ
c
n
ã
h
n
n
á
g
c
ợ
ư
đ
h
n
ệ
b
i
ạ
o
l
c
á
C
c
ụ
c
n
à
o
t
h
n
ệ
b
i
ạ
o
l
c
á
C
n
ã
h
n
n
á
g
c
ợ
ư
đ
3.2
LIỆU
CHỨC DỮ
TỔ
3.3
DỤNG
MÔ HÌNH SỬ
3.4
PHƯƠNG PHÁP ĐÁNH GIÁ
Chương 4. THI CÔNG HỆ THỐNG
4.1 TỔNG QUAN VỀ HỆ THỐNG
4.2
XÂY DỰNG WEB API
4.3 TRIỂN KHAI ỨNG DỤNG VỚI DOCKER
Chương 5. KẾT QUẢ
-
NHẬN XÉT
–
ĐÁNH GIÁ
5.1
KẾT QUẢ
5.1.1
Kết quả
đánh giá
định lượng
của mô hình
5.1.2 Khả năng diễn giải mô hình
5.1.3
Kết quả
triển khai
ứng dụng
5.2
NHẬN XÉT ĐÁNH GIÁ
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
6.1 KẾT LUẬN
6.2 HƯỚNG PHÁT TRIỂN
TÀI LIỆU THAM KHẢO
PHỤ LỤC