paint-brush
Xây dựng bác sĩ X quang AI của bạn: Hướng dẫn thú vị để tạo máy phát hiện bệnh viêm phổi với VGG16từ tác giả@kisican
565 lượt đọc
565 lượt đọc

Xây dựng bác sĩ X quang AI của bạn: Hướng dẫn thú vị để tạo máy phát hiện bệnh viêm phổi với VGG16

từ tác giả Can Kisi5m2024/07/09
Read on Terminal Reader

dài quá đọc không nổi

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. Đâ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 để phân tích và phát hiện bệnh viêm phổi trong hình ảnh y tế!
featured image - Xây dựng bác sĩ X quang AI của bạn: Hướng dẫn thú vị để tạo máy phát hiện bệnh viêm phổi với VGG16
Can Kisi HackerNoon profile picture
0-item
1-item

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:

  • tensorflowkeras để tạo và huấn luyện mạng lưới thần kinh.
  • numpy cho các hoạt động số.
  • pandas để thao tác dữ liệu.
  • sklearn để xử lý trước dữ liệu.
  • pillow để xử lý hình ảnh.

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ừ liên kết tại đây.


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:

  • Lớp Conv2D: Đâ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.
  • Các lớp MaxPool2D: 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.
  • Lớp làm phẳng: Lớp này chuyển đổi bản đồ đối tượng 2D thành vectơ 1D.
  • Các lớp dày đặc: Đây là các lớp được kết nối đầy đủ để phân loại.

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])


  • ModelCheckpoint: Lưu mô hình tốt nhất dựa trên độ chính xác xác thực.
  • EarlyStopping: 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.



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 cường dữ liệu: 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.
  • Học chuyển tiếp: 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.
  • Điều chỉnh siêu tham số: 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.


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!