রেডিওলজি এমন একটি ক্ষেত্র যা উল্লেখযোগ্যভাবে অত্যন্ত দক্ষ পেশাদারদের দক্ষতার উপর নির্ভর করে। রেডিওলজিস্টরা সাধারণ ফ্র্যাকচার থেকে শুরু করে ক্যান্সারের মতো জটিল রোগ পর্যন্ত বিভিন্ন অবস্থার নির্ণয় ও নিরীক্ষণের জন্য চিকিৎসা চিত্র বিশ্লেষণ করেন। তবুও, মেডিকেল ইমেজিংয়ের বৃদ্ধি এবং দ্রুত, সঠিক নির্ণয়ের জন্য জরুরি প্রয়োজনের সাথে, রেডিওলজিস্টরা প্রচণ্ড চাপের মধ্যে রয়েছে। এখানেই কৃত্রিম বুদ্ধিমত্তা (AI) পদক্ষেপ নেয়, মানুষের সক্ষমতা বৃদ্ধি করে ক্ষেত্রকে পরিবর্তন করে। এই নিবন্ধের শেষ নাগাদ, আপনি চিকিৎসা চিত্রগুলিতে নিউমোনিয়া সনাক্ত করতে সহায়তা করার জন্য আপনার নিজস্ব চিত্র শ্রেণিবদ্ধ মডেল তৈরি করবেন।
কোডিং এ ডুব দেওয়ার আগে, আমাদের পরিবেশ প্রস্তুত কিনা তা নিশ্চিত করতে হবে। আমরা প্রয়োজনীয় লাইব্রেরি ইনস্টল করে শুরু করব:
%pip install --upgrade tensorflow keras numpy pandas sklearn pillow
এই লাইব্রেরিগুলি আমাদের মডেল তৈরি এবং প্রশিক্ষণের জন্য অপরিহার্য:
tensorflow
এবং keras
।numpy
.pandas
।sklearn
।pillow
।লাইব্রেরি ইনস্টল করার সাথে, আসুন সেগুলি আমদানি করি:
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
আমরা ইমেজ প্রসেসিং কাজের জন্য একটি নিউরাল নেটওয়ার্ক মডেল তৈরি এবং প্রশিক্ষণের জন্য প্রয়োজনীয় বেশ কয়েকটি প্রয়োজনীয় লাইব্রেরি এবং মডিউল আমদানি করে শুরু করি। আমরা আমাদের গভীর শিক্ষার মডেলগুলি তৈরি এবং পরিচালনা করতে টেনসরফ্লো এবং এর সাবমডিউলগুলি ব্যবহার করব। বিশেষত, আমরা আমাদের উচ্চ-স্তরের API হিসাবে ব্যবহার করার জন্য কেরাস আমদানি করব, স্তরগুলির একটি রৈখিক স্ট্যাক তৈরির জন্য অনুক্রমিক, এবং বিভিন্ন নিউরাল নেটওয়ার্ক স্তরগুলি তৈরি এবং কনফিগার করার জন্য ঘন, কনভ2ডি, ম্যাক্সপুল2ডি এবং ফ্ল্যাটেনের মতো মডিউলগুলি। উপরন্তু, ImageDataGenerator আমাদের ইমেজ ডেটা বাড়াতে সাহায্য করবে, মডেলের সাধারণীকরণের ক্ষমতা বাড়াবে। সবশেষে, আমরা এর সংখ্যাসূচক অপারেশন সমর্থনের জন্য numpy আমদানি করব, বিশেষ করে অ্যারে পরিচালনা এবং গাণিতিক ফাংশন সম্পাদনের জন্য দরকারী।
আমাদের এআই রেডিওলজিস্টের কাছ থেকে শেখার জন্য ডেটা প্রয়োজন। আমরা আমাদের প্রশিক্ষণ এবং বৈধতা ডেটা লোড এবং বৃদ্ধি করতে ImageDataGenerator ব্যবহার করব: ডেটা ডাউনলোড করতে, আমরা আমাদের ওপেন-সোর্স ডেটা বন্ধু কাগল ব্যবহার করব, এখানে লিঙ্ক থেকে লেবেলযুক্ত ডেটাসেটটি ডাউনলোড করুন।
এখানে তত্ত্বাবধানে শিক্ষার প্রেক্ষাপটে, লেবেলযুক্ত ডেটাসেটটি হবে গ্রাউন্ড ট্রুথ যা মেশিন লার্নিং মডেলের ভবিষ্যদ্বাণী করা উচিত।
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))
এই কোড স্নিপেট আমাদের প্রশিক্ষণ এবং বৈধতা ডেটাসেটের জন্য ডেটা জেনারেটর সেট আপ করে। চিত্রগুলির আকার 224x224 পিক্সেল করা হয়েছে, VGG16 মডেলের জন্য আদর্শ ইনপুট আকার৷
এখন মজার অংশ আসে: VGG16 মডেল তৈরি করা। VGG16 হল একটি জনপ্রিয় কনভোলিউশনাল নিউরাল নেটওয়ার্ক (CNN) আর্কিটেকচার যা এর সরলতা এবং কার্যকারিতার জন্য পরিচিত তার অনন্য স্থাপত্যের জন্য ধন্যবাদ যা মূলত 13টি কনভোলিউশনাল লেয়ার এবং 3টি সম্পূর্ণ সংযুক্ত লেয়ারের উপর নির্মিত। যেটি 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()
আসুন এটি ভেঙে দেওয়া যাক:
আমাদের মডেল আর্কিটেকচার সংজ্ঞায়িত করে, আমাদের এটি কম্পাইল করতে হবে:
opt = keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=opt, loss=keras.losses.binary_crossentropy, metrics=['accuracy'])
এখানে, আমরা 0.001 এর শেখার হার সহ অ্যাডাম অপ্টিমাইজার এবং বাইনারি ক্রস-এনট্রপি ব্যবহার করি আমাদের ক্ষতি ফাংশন হিসাবে, বাইনারি শ্রেণীবিভাগের কাজের জন্য উপযুক্ত। আসুন এই পছন্দগুলির সুবিধা এবং অসুবিধাগুলি ভেঙে দেওয়া যাক:
উপাদান | সুবিধাদি | অসুবিধা |
---|---|---|
অ্যাডাম অপটিমাইজার | 1. অভিযোজিত শেখার হার 2. ডিফল্ট সেটিংসের সাথে ভাল কাজ করে। | জটিল মডেলের সঙ্গে overfitting জন্য সম্ভাব্য. |
বাইনারি ক্রস-এনট্রপি লস | বাইনারি শ্রেণীবিভাগের জন্য আদর্শ | আমার আউটপুট স্তর অ্যাক্টিভেশন ফাংশনের সাথে খুব সামঞ্জস্যপূর্ণ নয়, কেন? (মন্তব্যে এটি ছেড়ে দিন!) |
বিভিন্ন অপ্টিমাইজার, শেখার হার এবং ক্ষতির ফাংশনগুলির সাথে পরীক্ষা করতে নির্দ্বিধায়, কারণ এটি অভিজ্ঞতা অর্জনের একটি দুর্দান্ত উপায়।
এটা আমাদের 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])
আমাদের মডেল কীভাবে কাজ করছে তা দেখতে, আমরা প্রশিক্ষণ এবং বৈধতা হ্রাস এবং নির্ভুলতা প্লট করতে পারি:
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()
এই প্লটগুলি আমাদের বুঝতে সাহায্য করবে যে আমাদের মডেলটি কতটা ভালভাবে শিখছে এবং এটি ওভারফিটিং বা আন্ডারফিটিং কিনা।
প্রশিক্ষণের পরে, আমাদের এআই রেডিওলজিস্ট ভবিষ্যদ্বাণী করতে প্রস্তুত। এখানে আপনি কিভাবে একটি ছবি লোড করতে পারেন এবং মডেলের ভবিষ্যদ্বাণী পেতে পারেন:
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)
একজন এআই রেডিওলজিস্ট তৈরি করা মাত্র শুরু। আপনার মডেলকে ফাইন-টিউনিং এবং উন্নত করার জন্য এখানে কয়েকটি টিপস রয়েছে:
বাহ, আশ্চর্যজনক কাজ! 🎉 আপনি একটি মডেল তৈরি করেছেন যা চিকিৎসা চিত্র বিশ্লেষণ করতে পারে এবং ভবিষ্যদ্বাণী করতে পারে—কী একটি দুর্দান্ত চিকিৎসা অর্জন! :) নিউরাল নেটওয়ার্ক আর্কিটেকচারের জটিলতার গভীরে ডুব দিয়ে, আপনি দেখেছেন যে একটি সূক্ষ্ম সুর করা এআই মডেল কতটা প্রভাবশালী হতে পারে। সীমানা ঠেলে রাখুন, পরীক্ষা-নিরীক্ষা চালিয়ে যান এবং সবচেয়ে গুরুত্বপূর্ণ, আপনার এআই প্রকল্পগুলির সাথে কাজ করার প্রতিটি মুহূর্ত উপভোগ করুন!