본문 바로가기
AI

[Python] 현미경 영상 분석을 통한 암 진단

by 은구잇 2021. 12. 26.
728x90

1. 데이터 수집

data 폴더내에 정상조직 사진 3750장, 암 조직 사진 625장이 있음.

2. 데이터 전처리 

<주요 코드>

1) 파일 읽어오기

data = []

 classes = os.listdir("data")
        for i, cls in enumerate(classes):
            print("Opening " + cls + "/")
            for el in os.listdir("data/" + cls):
                img = Image.open("data/" + cls + "/" + el)
                data.append((np.asarray(img), i))
                img.close()

 

2)  훈련 데이터, 테스트 데이터 분리하기 8:2

 random.shuffle(data)
        cnt = len(data) - 1000
        for i in range(cnt):
            if i < 0.8*cnt:
                self.train_X.append(data[i][0])
                self.train_Y.append(data[i][1])
            else:
                self.test_X.append(data[i][0])
                self.test_Y.append(data[i][1])

        self.train_X = np.asarray(self.train_X) / 255.0
        self.train_Y = np.asarray(self.train_Y)
        self.test_X = np.asarray(self.test_X) / 255.0
        self.test_Y = np.asarray(self.test_Y)

 

 

3. 신경망 구축

 

# 신경망 생성 코드

model = keras.Sequential([
    keras.layers.Conv2D(16, (3, 3), activation="relu"),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(32, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Flatten(),  # 벡터화 해야함.
    keras.layers.Dense(512,activation = 'relu'),
    keras.layers.Dropout(rate = 0.5), # 오버피팅 현상을 막기위해 추가
    keras.layers.Dense(1)
])

 

model.compile(optimizer = 'adam', metrics = ['accuracy'],
             loss = 'binary_crossentropy')

 

# 인공신경망 학습 
print("\n\n************ TRAINING START ************ ")
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS,
                    validation_data=(dr.test_X, dr.test_Y),
                    callbacks=[early_stop])

 

4. 인공지능 성능 확인

모델 정확도 86%

Epoch 9/10
2700/2700 [==============================] - 91s 34ms/sample - loss: 0.8800 - accuracy: 0.8174 - val_loss: 0.6439 - val_accuracy: 0.8607
Epoch 10/10
2700/2700 [==============================] - 91s 34ms/sample - loss: 0.5129 - accuracy: 0.8496 - val_loss: 0.2845 - val_accuracy: 0.8607

 

손실율과 정확도 그래프로 확인해보기

오버피팅이 살짝 있는 것으로 확인됨!