VGG19 Nedir?
VGG19, adını Oxford Üniversitesi’nde bulunan “Visual Geometry Group” isimli gruptan almaktadır. Sonda bulunan 19 ise katman sayısını belirtmektedir. VGG19, içerisinde 16 convolution, 3 full connected layer, 5 MaxPool ve 1 SoftMax katmanı yer almaktadır. VGG19, 19,6 milyar flop’a sahiptir. Ayrıca VGG’nin VGG11, VGG16 gibi farklı çeşitleri de bulunmaktadır.
VGG’nin detaylarına inmeden önce ImageNet ve CNN hakkında ufak bir bilgilendirme yapmak isterim.
ImageNet
WordNet’e göre hazırlanmış ve yaklaşık 14 Milyon görselden oluşan herkese açık bir hazır veritabanıdır. Görüntü işleme üzerine çalışma yapacak bireylere yardımcı olması amacıyla oluşturulmuştur.
Convolutional Neural Network (CNN)
Makine öğrenimi alanındaki en temel işlerden biri olan görüntü üzerindeki özelliklerin çıkarılması ve tanımlanmasını sağlayan sinir ağıdır. Object detection (nesne tespiti), image classification (görüntü sınıflandırma) gibi pek çok alanda CNN yaygın olarak kullanılmaktadır.
dataset_dir=glob("/content/drive/MyDrive/Dataset/*/*/*") for idx,data in enumerate(dataset_dir): label = data.split('/')[-3] + ' ' + data.split('/')[-2] try: print("*" * 20 + "Iter: " +str(idx) + "*" * 20) img = cv2.imread(data) img_fromarray = Image.fromarray(img,"RGB") img_resized = img_fromarray.resize((128,128)) img_np = np.array(img_resized) images.append(img_np) labels.append(label) except Exception as e: print(f"{e} Error in {label +'/'+data.split('/')[-1]}")
Veri seti tek bir parçadan oluşuyor. Veriyi split ederek train, test ve validation olarak 3’e bölelim:
#Split Data (Train, Test, Validation) x_train,x_test,y_train,y_test = train_test_split(images,labels_ohe,test_size=0.33,random_state=77) x_test,x_val,y_test,y_val = train_test_split(x_test,y_test,test_size=0.75,random_state=77)
Modeli yükleyelim:
myVgg = VGG19( input_shape=(128,128,3), weights='imagenet', include_top=False)
Katmanları ekleyelim
model = Sequential() model.add(myVgg) model.add(BatchNormalization()) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) #Katmanlar arası delay model.add(Dense(classesNum , activation='softmax')) print (model.summary())
Modelimizi compile edelim:
model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy'])
Deneme – yanılma yoluyla accuracy oranını artırmaya yönelik birden fazla kez eğitimi baştan yapacağımız için .h5 uzantılı model dosyalarımızın isimlendirilmesinde tarih ve zamandan faydalanabiliriz.
checkpoint = ModelCheckpoint( f'/content/drive/MyDrive/VGG-Modellerim/MyVgg19Option{datetime.datetime.now()}.h5', monitor='val_accuracy', verbose=1, save_best_only=True )
Eğitim aşamasında overfitting durumuna girilmesi istenmeyen bir durumdur. Early Stop ile bunun gibi istenilmeyen durumlarda eğitimin sonlandırılmasını sağlayabiliriz. Overfitting hakkında detaylı bilgi için “Makine Öğreniminde Aşırı Öğrenme (Overfitting) Durumu” yazısının okuyabilirsiniz.
Early Stop ayarımızı da patience 5 olacak şekilde yaparak son aşamaya gelelim.
earlystop = EarlyStopping(monitor='val_accuracy', patience=5 , verbose=1)
En heyecanlı kısım: Eğitime başlayabiliriz 🚀
batch_size’ı 64 vererek 5 epoch ile eğitmeyi deneyimleyelim:
result = model.fit(x_train, y_train, batch_size=64, validation_data=(x_val, y_val), epochs=5, verbose=1 , callbacks=[checkpoint,earlystop])
Epochların tamamlanma süreleri zaman zaman uzayabilmekte ancak bu model için verilen parametreler ile hızlı bir şekilde ilerledi. İlk epochda 0.7150 validasyon accuracy elde validasyon los değerinin 1.5171 olduğunu görmekteyiz. Bu iki değerin her epochdaki değişimini inceleyecek olursak değerlerin artma – azalma ve tekrar artma eğiliminde olması istediğimiz sonucu sağlıklı olarak alamayacağımızı göstermektedir.
Bu aşamadan sonra yapılması gereken işlem parametreler ile oynayarak eğitim sürecini stabil ilerletmeye çalışmak olacaktır. Bunun için random_state değerini 50 yaparak tekrar eğitim gerçekleştirdim.
İstenilen tutarlılığa eriştik ancak accuracy değerinin çok yüksek olması dikkat çekiyor. Bunun sebebi veri setinin homojen olmaması olabilir. Şu an için önemli olan nokta val_accuracy ve val_loss değerleri olduğu için veri setinin iyileştirilmesi ile ilgili çalışmaların yapılması ilerleyen dönemde yapılmalıdır.
Kaynaklar:
https://iq.opengenus.org/vgg19-architecture/
https://medium.com/mlearning-ai/image-detection-using-convolutional-neural-networks-89c9e21fffa3
Ayrıca Bakınız:
https://keras.io/api/applications/vgg/
Thank you https://medium.com/@melisabardhi