paint-brush
AI 방사선 전문의 구축: VGG16을 사용하여 폐렴 감지기 생성을 위한 재미있는 가이드~에 의해@kisican
565 판독값
565 판독값

AI 방사선 전문의 구축: VGG16을 사용하여 폐렴 감지기 생성을 위한 재미있는 가이드

~에 의해 Can Kisi5m2024/07/09
Read on Terminal Reader

너무 오래; 읽다

방사선학은 고도로 숙련된 전문가의 전문성에 크게 의존하는 분야입니다. 여기에 인공지능(AI)이 개입하여 인간의 능력을 향상시켜 분야를 변화시키고 있습니다. 이 기사가 끝나면 의료 이미지에서 폐렴을 분석하고 감지하기 위한 고유한 이미지 분류 모델을 만들게 됩니다!
featured image - AI 방사선 전문의 구축: VGG16을 사용하여 폐렴 감지기 생성을 위한 재미있는 가이드
Can Kisi HackerNoon profile picture
0-item
1-item

방사선학은 고도로 숙련된 전문가의 전문성에 크게 의존하는 분야입니다. 방사선 전문의는 의료 영상을 분석하여 단순 골절부터 암과 같은 복잡한 질병까지 다양한 상태를 진단하고 모니터링합니다. 그러나 의료 영상의 급증과 빠르고 정확한 진단에 대한 긴급한 요구로 인해 방사선 전문의는 엄청난 압박을 받고 있습니다. 인공지능(AI)이 개입해 인간의 능력을 향상시켜 분야를 변화시키는 곳이다. 이 기사가 끝나면 의료 이미지에서 폐렴을 감지하는 데 도움이 되는 고유한 이미지 분류 모델을 만들게 됩니다.

1단계: 환경 설정

코딩을 시작하기 전에 환경이 준비되었는지 확인해야 합니다. 필요한 라이브러리를 설치하는 것부터 시작하겠습니다.

 %pip install --upgrade tensorflow keras numpy pandas sklearn pillow


이러한 라이브러리는 모델을 구축하고 훈련하는 데 필수적입니다.

  • 신경망 생성 및 훈련을 위한 tensorflowkeras .
  • 수치 연산을 위한 numpy .
  • 데이터 조작을 위한 pandas .
  • 데이터 전처리를 위한 sklearn .
  • 이미지 처리용 pillow .

2단계: 라이브러리 가져오기

라이브러리가 설치되었으면 가져오겠습니다.

 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


이미지 처리 작업을 위한 신경망 모델을 구축하고 훈련하는 데 필요한 몇 가지 필수 라이브러리와 모듈을 가져오는 것부터 시작합니다. 우리는 TensorFlow와 그 하위 모듈을 사용하여 딥 러닝 모델을 생성하고 관리할 것입니다. 구체적으로, Keras를 가져와서 고급 API로 사용하고 Sequential을 사용하여 계층의 선형 스택을 구성하고 Dense, Conv2D, MaxPool2D, Flatten과 같은 모듈을 가져와 다양한 신경망 계층을 구축하고 구성합니다. 또한 ImageDataGenerator는 이미지 데이터를 확대하여 모델의 일반화 능력을 향상시키는 데 도움이 됩니다. 마지막으로, 수치 연산 지원을 위해 numpy를 가져올 것입니다. 특히 배열을 처리하고 수학 함수를 수행하는 데 유용합니다.

3단계: 데이터 준비

우리의 AI 방사선 전문의는 학습할 데이터가 필요합니다. 우리는 ImageDataGenerator를 사용하여 훈련 및 검증 데이터를 로드하고 강화할 것입니다. 데이터를 다운로드하려면 오픈 소스 데이터인 Kaggle을 사용하고 여기 링크 에서 레이블이 지정된 데이터 세트를 다운로드하십시오.


여기 지도 학습의 맥락에서 레이블이 지정된 데이터 세트는 기계 학습 모델이 예측해야 하는 실제 정보가 됩니다.

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


이 코드 조각은 훈련 및 검증 데이터세트를 위한 데이터 생성기를 설정합니다. 이미지 크기는 VGG16 모델의 표준 입력 크기인 224x224 픽셀로 조정됩니다.


4단계: VGG16 모델 구축

이제 재미있는 부분인 VGG16 모델 구축이 시작됩니다. VGG16은 주로 13개의 컨볼루션 레이어와 3개의 완전 연결 레이어로 구축된 고유한 아키텍처 덕분에 단순성과 효율성으로 유명한 인기 있는 CNN(컨볼루션 신경망) 아키텍처입니다. VGG16을 차별화하는 점은 심층 네트워크 내에서 작은 3x3 컨벌루션 필터를 사용한다는 것입니다. 이 디자인은 계산 효율성을 보장하면서 이미지의 복잡한 패턴을 캡처합니다. 만드는 방법은 다음과 같습니다.


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


그것을 분석해 봅시다:

  • Conv2D 레이어: 가장자리 및 텍스처와 같은 특징을 감지하는 방법을 학습하는 컨볼루셔널 레이어입니다.
  • MaxPool2D 레이어: 공간 크기를 줄여 중요한 기능을 유지합니다.
  • 평면화 레이어: 2D 기능 맵을 1D 벡터로 변환합니다.
  • 밀도 레이어: 분류를 위한 완전히 연결된 레이어입니다.

5단계: 모델 컴파일

모델 아키텍처가 정의되었으면 이를 컴파일해야 합니다.

 opt = keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=opt, loss=keras.losses.binary_crossentropy, metrics=['accuracy'])


여기서는 이진 분류 작업에 적합한 학습률 0.001과 이진 교차 엔트로피를 손실 함수로 사용하는 Adam 최적화 프로그램을 사용합니다. 이러한 선택의 장단점을 분석해 보겠습니다.

요소

장점

단점

아담 옵티마이저

1. 적응형 학습률 2. 기본 설정에서도 잘 작동합니다.

복잡한 모델에 과적합이 발생할 가능성이 있습니다.

이진 교차 엔트로피 손실

이진 분류에 이상적

내 출력 레이어 활성화 기능과 잘 호환되지 않는 이유는 무엇입니까? (댓글에 남겨주세요!)


다양한 옵티마이저, 학습률, 손실 함수를 자유롭게 실험해 보세요. 이는 경험을 쌓는 데 좋은 방법입니다.

6단계: 모델 훈련

이제 AI 방사선 전문의를 훈련할 시간입니다! 검증 정확도가 향상되지 않으면 최상의 모델을 저장하고 조기에 중지하도록 콜백을 설정합니다.

 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: 검증 정확도를 기반으로 최상의 모델을 저장합니다.
  • EarlyStopping: 지정된 에포크 수 동안 모델 성능이 향상되지 않으면 훈련을 중지합니다.



7단계: 교육 진행 상황 시각화

모델이 어떻게 작동하는지 확인하기 위해 훈련 및 검증 손실과 정확도를 플롯할 수 있습니다.

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

이러한 플롯은 모델이 얼마나 잘 학습하고 있는지, 과적합인지 과소적합인지 이해하는 데 도움이 됩니다.

8단계: 예측하기

훈련이 끝나면 AI 방사선 전문의가 예측을 할 준비가 됩니다. 이미지를 로드하고 모델의 예측을 얻는 방법은 다음과 같습니다.

 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)

9단계: 미세 조정 및 실험

AI 방사선 전문의를 양성하는 것은 시작에 불과합니다. 다음은 모델을 미세 조정하고 개선하기 위한 몇 가지 팁입니다.

  • 데이터 확대: 회전, 뒤집기, 확대/축소와 같은 기술을 사용하여 교육 데이터의 다양성을 높입니다.
  • 전이 학습: VGG16과 같은 사전 훈련된 모델을 출발점으로 사용하고 특정 데이터 세트에서 이를 미세 조정합니다.
  • 초매개변수 조정: 다양한 학습률, 배치 크기 및 최적화 도구를 실험하여 최상의 조합을 찾습니다.


결론

와, 정말 멋진 일이네요! 🎉 의료 이미지를 분석하고 예측할 수 있는 모델을 만들었습니다. 정말 훌륭한 의료 성과입니다! :) 신경망 아키텍처의 복잡성을 심층적으로 살펴보면서 정교하게 조정된 AI 모델이 얼마나 큰 영향력을 발휘할 수 있는지 확인하실 수 있습니다. 계속 경계를 넓히고 실험을 계속하세요. 가장 중요한 것은 AI 프로젝트 작업의 모든 순간을 즐기세요!