X quang là một lĩnh vực phụ thuộc đáng kể vào chuyên môn của các chuyên gia có tay nghề cao. Các bác sĩ X quang phân tích hình ảnh y tế để chẩn đoán và theo dõi một loạt tình trạng, từ gãy xương đơn giản đến các bệnh phức tạp như ung thư. Tuy nhiên, với sự phát triển của công nghệ hình ảnh y tế và nhu cầu cấp thiết về chẩn đoán nhanh, chính xác, các bác sĩ X quang đang phải chịu áp lực rất lớn. Đây là lúc trí tuệ nhân tạo (AI) bước vào, biến đổi lĩnh vực này bằng cách nâng cao năng lực của con người. Đến cuối bài viết này, bạn sẽ tạo được mô hình phân loại hình ảnh của riêng mình để hỗ trợ phát hiện bệnh viêm phổi trong hình ảnh y tế. Bước 1: Thiết lập môi trường của bạn Trước khi đi sâu vào mã hóa, chúng ta cần đảm bảo môi trường của mình đã sẵn sàng. Chúng ta sẽ bắt đầu bằng cách cài đặt các thư viện cần thiết: %pip install --upgrade tensorflow keras numpy pandas sklearn pillow Những thư viện này rất cần thiết để xây dựng và đào tạo mô hình của chúng tôi: và để tạo và huấn luyện mạng lưới thần kinh. tensorflow keras cho các hoạt động số. numpy để thao tác dữ liệu. pandas để xử lý trước dữ liệu. sklearn để xử lý hình ảnh. pillow Bước 2: Nhập thư viện Với các thư viện đã được cài đặt, hãy nhập chúng: import os from tensorflow import keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten from tensorflow.keras.preprocessing.image import ImageDataGenerator import numpy as np Chúng tôi bắt đầu bằng cách nhập một số thư viện và mô-đun thiết yếu cần thiết để xây dựng và huấn luyện mô hình mạng thần kinh cho các tác vụ xử lý hình ảnh. Chúng tôi sẽ sử dụng TensorFlow và các mô-đun con của nó để tạo và quản lý các mô hình học sâu của mình. Cụ thể, chúng tôi sẽ nhập Keras để sử dụng làm API cấp cao, Sequential để xây dựng một nhóm lớp tuyến tính và các mô-đun như Dense, Conv2D, MaxPool2D và Flatten để xây dựng và định cấu hình các lớp mạng thần kinh khác nhau. Ngoài ra, ImageDataGenerator sẽ giúp chúng tôi tăng cường dữ liệu hình ảnh, nâng cao khả năng khái quát hóa của mô hình. Cuối cùng, chúng tôi sẽ nhập numpy để hỗ trợ các phép toán số, đặc biệt hữu ích để xử lý mảng và thực hiện các hàm toán học. Bước 3: Chuẩn bị dữ liệu Bác sĩ X quang AI của chúng tôi cần dữ liệu để học hỏi. Chúng tôi sẽ sử dụng ImageDataGenerator để tải và tăng cường dữ liệu đào tạo và xác thực của mình: để tải xuống dữ liệu, chúng tôi sẽ sử dụng người bạn dữ liệu nguồn mở Kaggle của mình, hãy truy cập và tải xuống tập dữ liệu được gắn nhãn từ tại đây. liên kết Trong bối cảnh học tập có giám sát ở đây, tập dữ liệu được gắn nhãn sẽ là sự thật cơ bản mà mô hình học máy phải dự đoán. trdata = ImageDataGenerator() traindata = trdata.flow_from_directory(directory="data-task1/train", target_size=(224, 224)) tsdata = ImageDataGenerator() testdata = tsdata.flow_from_directory(directory="data-task1/val", target_size=(224, 224)) Đoạn mã này thiết lập trình tạo dữ liệu cho tập dữ liệu đào tạo và xác thực của chúng tôi. Hình ảnh được thay đổi kích thước thành 224x224 pixel, kích thước đầu vào tiêu chuẩn cho kiểu máy VGG16. Bước 4: Xây dựng mô hình VGG16 Bây giờ đến phần thú vị: xây dựng mô hình VGG16. VGG16 là kiến trúc mạng nơ ron tích chập (CNN) phổ biến được biết đến với tính đơn giản và hiệu quả nhờ kiến trúc độc đáo được xây dựng chủ yếu trên 13 lớp chập và 3 lớp được kết nối đầy đủ. Điều làm nên sự khác biệt của VGG16 là việc sử dụng các bộ lọc tích chập 3x3 nhỏ trong mạng sâu. Thiết kế này ghi lại các mẫu phức tạp trong hình ảnh đồng thời đảm bảo hiệu quả tính toán. Đây là cách chúng tôi tạo ra nó: model = Sequential() model.add(Conv2D(input_shape=(224,224,3), filters=64, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=64, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Flatten()) model.add(Dense(units=4096, activation="relu")) model.add(Dense(units=4096, activation="relu")) model.add(Dense(units=2, activation="softmax")) model.summary() Hãy chia nhỏ nó ra: Đây là các lớp tích chập học cách phát hiện các tính năng như cạnh và kết cấu. Lớp Conv2D: Các lớp này làm giảm kích thước không gian, giữ lại các tính năng quan trọng. Các lớp MaxPool2D: Lớp này chuyển đổi bản đồ đối tượng 2D thành vectơ 1D. Lớp làm phẳng: Đây là các lớp được kết nối đầy đủ để phân loại. Các lớp dày đặc: Bước 5: Biên dịch mô hình Với kiến trúc mô hình đã được xác định, chúng ta cần biên dịch nó: opt = keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=opt, loss=keras.losses.binary_crossentropy, metrics=['accuracy']) Ở đây, chúng tôi sử dụng trình tối ưu hóa Adam với tốc độ học tập là 0,001 và entropy chéo nhị phân làm hàm mất mát, phù hợp cho các nhiệm vụ phân loại nhị phân. Hãy phân tích ưu và nhược điểm của những lựa chọn này: Thành phần Thuận lợi Nhược điểm Trình tối ưu hóa Adam 1. Tỷ lệ học tập thích ứng 2. hoạt động tốt với cài đặt mặc định. Khả năng trang bị quá mức với các mô hình phức tạp. Mất Entropy chéo nhị phân Lý tưởng cho việc phân loại nhị phân không tương thích lắm với chức năng kích hoạt lớp đầu ra của tôi, tại sao? (Để lại nó trong các ý kiến!) Hãy thoải mái thử nghiệm các trình tối ưu hóa, tốc độ học tập và hàm mất mát khác nhau vì đây là một cách tuyệt vời để tích lũy kinh nghiệm. Bước 6: Đào tạo mô hình Đã đến lúc đào tạo bác sĩ X quang AI của chúng ta! Chúng tôi thiết lập lệnh gọi lại để lưu mô hình tốt nhất và dừng sớm nếu độ chính xác xác thực không được cải thiện: from keras.callbacks import ModelCheckpoint, EarlyStopping checkpoint = ModelCheckpoint("vgg16_1.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1) early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto') hist = model.fit_generator(steps_per_epoch=20, generator=traindata, validation_data=testdata, validation_steps=10, epochs=10, callbacks=[checkpoint, early]) Lưu mô hình tốt nhất dựa trên độ chính xác xác thực. ModelCheckpoint: Dừng đào tạo nếu hiệu suất của mô hình không cải thiện trong một số kỷ nguyên được chỉ định. EarlyStopping: Bước 7: Trực quan hóa tiến trình đào tạo Để xem mô hình của chúng tôi đang hoạt động như thế nào, chúng tôi có thể vẽ sơ đồ mức độ mất mát và độ chính xác trong quá trình đào tạo và xác thực: import matplotlib.pyplot as plt # Training loss plt.plot(hist.history['loss']) plt.legend(['Training']) plt.title('Training loss') plt.ylabel('loss') plt.xlabel('epoch') plt.show() # Validation loss plt.plot(hist.history['val_loss']) plt.legend(['Validation']) plt.title('Validation loss') plt.ylabel('validation loss') plt.xlabel('epoch') plt.show() # Training and validation accuracy plt.plot(hist.history['accuracy']) plt.plot(hist.history['val_accuracy']) plt.legend(['Training', 'Validation']) plt.title('Training & Validation accuracy') plt.xlabel('epoch') plt.show() Những biểu đồ này sẽ giúp chúng tôi hiểu mô hình của chúng tôi đang học tốt như thế nào và liệu nó có phù hợp hay không. Bước 8: Đưa ra dự đoán Sau khi đào tạo, bác sĩ X quang AI của chúng tôi đã sẵn sàng đưa ra dự đoán. Đây là cách bạn có thể tải hình ảnh và nhận dự đoán của mô hình: from tensorflow.keras.preprocessing import image # Load and preprocess image img_path = 'path_to_your_image.jpg' img = image.load_img(img_path, target_size=(224, 224)) img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) # Create batch axis # Make prediction prediction = model.predict(img_array) print('Prediction:', prediction) Bước 9: Tinh chỉnh và thử nghiệm Xây dựng một bác sĩ X quang AI chỉ là bước khởi đầu. Dưới đây là một số mẹo để tinh chỉnh và cải thiện mô hình của bạn: Tăng tính đa dạng của dữ liệu đào tạo của bạn bằng các kỹ thuật như xoay, lật và thu phóng. Tăng cường dữ liệu: Sử dụng các mô hình được đào tạo trước như VGG16 làm điểm bắt đầu và tinh chỉnh chúng trên tập dữ liệu cụ thể của bạn. Học chuyển tiếp: Thử nghiệm với các tốc độ học tập, kích thước lô và trình tối ưu hóa khác nhau để tìm ra sự kết hợp tốt nhất. Điều chỉnh siêu tham số: Phần kết luận Wow, công việc tuyệt vời! 🎉 Bạn đã tạo ra một mô hình có thể phân tích hình ảnh y tế và đưa ra dự đoán—thật là một thành tựu y học tuyệt vời! :) Bằng cách đi sâu vào sự phức tạp của kiến trúc mạng thần kinh, bạn đã thấy một mô hình AI được tinh chỉnh có thể có tác động như thế nào. Hãy tiếp tục vượt qua các ranh giới, tiếp tục thử nghiệm và quan trọng nhất là tận hưởng từng khoảnh khắc làm việc với các dự án AI của bạn!