Hazırlayanlar: Ulaş Görkem Kazan — 23291785 Bora Doğru — 23291786
Bu depo, DAGM 2007 sentetik endüstriyel görüntülerinde defect / no_defect ikili sınıflandırması için Genetik Algoritma (GA) ve Optuna multivariate Tree-structured Parzen Estimator (TPE) yöntemlerini dört CNN ailesi üzerinde kontrollü biçimde karşılaştırır. Çalışmanın amacı yeni bir optimizer önermek değil; aynı veri, aynı model ailesi, aynı ayrık arama uzayı, aynı sekiz adaylık başlangıç tasarımı, aynı validation macro-F1 hedefi ve aynı benzersiz aday bütçesi altında GA ile TPE'nin çözüm kalitesi, arama verimliliği, hesaplama maliyeti ve ID/OOD genelleme davranışını ölçmektir.
Bu proje dokümantasyonu, tamamlanan final deney çıktıları kullanılarak hazırlanmıştır. Sayısal sonuçlar final_comparison_table.csv, search_method_comparison.csv, final_results_checkpoint.json, best_params_all.json ve final_architecture_summary.csv dosyalarından alınmıştır. Görseller paket içindeki assets/readme/ klasöründen gömülür.
- Problem Tanımı
- Araştırma Sorusu ve Hipotezler
- Veri Seti ve Sızıntı Kontrolü
- Görüntü Pipeline'ı
- Model Aileleri
- Hiperparametre Arama Uzayları
- Eğitim ve HPO Protokolü
- Final Görseller
- Final Performans Sonuçları
- Model Bazlı Deney Yorumları
- Metrik Bazlı Değerlendirme
- Seçilen Hiperparametrelerin Yorumu
- Hipotez Değerlendirmesi
- Çalıştırma
- Sınırlılıklar
- Kaynakça ve Kod Eşleştirmesi
Endüstriyel optik kontrolde kusurlar çoğu zaman görüntünün çok küçük bir bölümünü kaplar. DAGM 2007'de görüntüler gri seviye sentetik tekstürlerden oluşur; her örnek no_defect veya defect olarak sınıflandırılır. Kusurlu örneklerde maske dosyası vardır, fakat bu projede maskeler segmentasyon etiketi olarak kullanılmaz. Maske yalnızca görüntünün kusurlu olup olmadığını belirlemek için etiket kaynağıdır.
Bu problemde accuracy tek başına güvenilir değildir. Çünkü test kümelerinde kusurlu örnek oranı yaklaşık %13 civarındadır; model sürekli no_defect tahmin ederse accuracy yüksek görünebilir. Bu nedenle HPO objective olarak validation macro-F1 seçilmiştir. Finalde accuracy, balanced accuracy, macro precision/recall/F1, defect precision/recall/F1, specificity, PR-AUC, ROC-AUC ve DAGM maliyeti birlikte raporlanır.
DAGM maliyeti şu şekilde tanımlanır:
C_DAGM = FP + 20 * FN
Bu maliyet, kusurlu ürünü kaçırmanın (FN) yanlış alarmdan (FP) 20 kat daha pahalı kabul edildiği endüstriyel senaryoyu temsil eder.
Ana araştırma sorusu:
Aynı CNN ailesi, aynı veri protokolü, aynı ayrık arama uzayı, aynı ilk sekiz aday, aynı validation macro-F1 objective'i ve aynı benzersiz aday bütçesi altında GA ile TPE; çözüm kalitesi, örnek verimliliği, hesaplama maliyeti ve ID/OOD genelleme bakımından nasıl ayrışır?
Model ailesi bloklama değişkenidir. Bu yüzden asıl karşılaştırma önce aynı model içinde yapılır: Custom GA ile Custom TPE, VGG16 GA ile VGG16 TPE gibi. VGG16 ile Custom CNN'i doğrudan karşılaştırmak transfer learning etkisiyle model kapasitesi etkisini arama yöntemi etkisine karıştıracağı için ikincil yorumdur.
Önceden tanımlanan hipotezler:
- H1: TPE, pretrained model ailelerinde GA'ya göre daha belirgin avantaj gösterecektir.
- H2: GA, rastgele başlatılan custom model ailelerinde TPE'ye göre daha belirgin avantaj gösterecektir.
Final sonuçlar bu iki hipotezi tek yönlü ve güçlü biçimde desteklememektedir. VGG16'de iki yöntem aynı shared-initial adayı seçmiştir; ResNet50'de TPE validation F1 ve OOD cost açısından küçük/bağlama bağlı avantaj üretirken OOD macro-F1'de GA daha yüksektir. Custom CNN'de TPE daha iyi görünürken, Custom V2'de GA final macro-F1 bakımından daha dengeli davranmıştır. Bu nedenle sonuç, "bir optimizer evrensel olarak üstündür" şeklinde değil, "model ailesi, metrik ve domain shift birlikte değerlendirilmelidir" şeklinde okunmalıdır.
DAGM Class1–Class10 klasörleri hedef sınıf değil, farklı sentetik tekstür/kusur üretim domainleridir.
| Bölüm | Domainler | Kullanım |
|---|---|---|
| Train | Class1–Class6 / Train | HPO aday eğitimi ve final eğitim |
| Validation | Class1–Class6 / Train içinden | Fitness, early stopping, model seçimi |
| ID test | Class1–Class6 / Test | Görülen domainlerde final test |
| OOD test | Class7–Class10 / Test | Görülmeyen domainlerde final test |
Seed 42 ile her geliştirme domaininden ve her etiketten 15 validation görüntüsü ayrılmıştır.
| Bölüm | No defect | Defect | Toplam |
|---|---|---|---|
| Train havuzu | 2,914 | 356 | 3,270 |
| Validation | 90 | 90 | 180 |
| ID test | 2,996 | 454 | 3,450 |
| OOD test | 4,000 | 600 | 4,600 |
Train havuzu yaklaşık 8:1 oranında no_defect ağırlıklıdır. Bu nedenle train sırasında WeightedRandomSampler kullanılır. Sampler zaten sınıf dengesini ele aldığı için loss tarafında class weight kullanılmaz; aksi halde dengesizlik iki kez düzeltilmiş olurdu. Validation seti dengeli ve domain-stratified tutulur. ID ve OOD test setleri HPO bitene kadar kapalıdır.
Pipeline şu şekildedir:
512x512 grayscale PNG → 224x224 resize → 3 kanala kopyalama → normalization → CNN
DAGM görüntüleri gri seviyedir. Buna rağmen VGG16 ve ResNet50 gibi ImageNet-pretrained omurgalar üç kanallı girdi beklediği için gri kanal üç kanala kopyalanır. Bu işlem yeni renk bilgisi üretmez; yalnızca tek gri sinyali R=G=B olacak şekilde pretrained konvolüsyon katmanlarıyla uyumlu hale getirir.
Normalization:
mean = [0.449, 0.449, 0.449]
std = [0.226, 0.226, 0.226]Bu değerler DAGM'den hesaplanmış dataset istatistikleri değildir. Proje bağlamındaki anlamı, gri görüntüleri ImageNet-pretrained omurgaların beklediği giriş ölçeğine yakın tutmaktır. Böylece VGG16/ResNet50'nin ilk katmanlarındaki pretrained filtreler tamamen farklı bir piksel dağılımı ile karşılaşmaz. Custom modeller açısından da aynı normalization kullanıldığı için GA/TPE karşılaştırmasında model içi adalet korunur.
Train augmentation:
- Yatay/dikey çevirme
- ±10 derece rotasyon
- Brightness/contrast jitter
0.1 - Gaussian noise
std=0.015
Validation, ID ve OOD testte yalnız resize + normalization uygulanır. Random Erasing kullanılmaz; çünkü DAGM kusurları küçük alan kapladığından kusur bölgesini tamamen silip görüntü etiketiyle görüntü içeriğini çelişkili hale getirebilir.
Dört CNN ailesi kullanılmıştır:
Depthwise-separable convolution, residual shortcut, BatchNorm, LeakyReLU, opsiyonel Squeeze-and-Excitation ve lokal/global spatial head içerir. Head yalnız Global Average Pooling değildir. Kodda 4x4 AdaptiveMaxPool ile lokal kusur kanıtı, 1x1 AdaptiveAvgPool ile global temsil birleştirilir. Proje açısından bu önemlidir; çünkü kusur alanı küçük olduğunda yalnız global ortalama kusur sinyalini seyreltebilir.
Aranabilir Conv-BN-ReLU-Pool bloklarından oluşur. Block count, base filters, kernel, stride, padding, pooling türü, pool kernel/stride ve channel schedule arama uzayındadır. Custom V2 daha küçük parametre sayısıyla mimari arama etkisini gözlemlemek için kullanılmıştır.
ImageNet ağırlıklarıyla başlar. Son feature modüllerinin açılma miktarı ve classifier dense boyutu aranır. VGG16'nin tam bağlı classifier girdisi büyüktür; bu nedenle dense head ve dropout seçimi overfitting açısından önemlidir.
ImageNet ağırlıklarıyla başlar. Head veya head + son Layer4 residual bloğu eğitilir. Residual bağlantılar optimizasyonu kolaylaştırabilir; fakat OOD sonuçları gösterdiği gibi kolay optimizasyon her zaman en iyi domain genellemesi anlamına gelmez.
| Parametre | Transfer modelleri | Custom modelleri |
|---|---|---|
| Learning rate | 1e-5, 5e-5, 1e-4, 3e-4 |
3e-4, 1e-3, 3e-3 |
| Dropout | 0.1, 0.2, 0.3, 0.4 |
0.0, 0.1, 0.2, 0.3 |
| Optimizer | AdamW, SGD-Nesterov, RMSprop | AdamW, RMSprop |
| Batch size | 16, 32, 64 |
16, 32 |
| Model | Aranan model parametreleri |
|---|---|
| VGG16 | dense units {128, 256, 384, 512}, fine-tune modules {4, 8, 12, 16} |
| ResNet50 | dense units {128, 256, 384, 512}, unfreeze Layer4 block {0, 1} |
| Custom CNN | base filters {16, 32, 64}, blocks {3, 4}, kernel {3, 5}, stem/conv stride {1, 2}, padding {same, valid}, pooling {max, avg}, pool kernel {2, 3}, pool stride {1, 2}, channel schedule {constant, doubling, plateau}, SE {off, on} |
| Custom CNN V2 | base filters {8, 16, 32} ve Custom ile aynı diğer topoloji parametreleri; SE yok |
Custom adaylarda son feature map boyutu 14×14 ile 56×56 dışında kalırsa aday sessizce düzeltilmez, geçersiz sayılır. Bu karar deneysel açıdan önemlidir; çünkü önerilen genotip ile eğitilen fenotipin aynı kalmasını sağlar.
Training loss:
unweighted CrossEntropyLoss
label_smoothing = 0.0
HPO objective training loss değil, adayın eğitim süresince gördüğü en iyi validation macro-F1 değeridir:
fitness(candidate) = max_epoch validation_macro_F1
Early stopping validation macro-F1 izler, min_delta=1e-4 kullanır ve en iyi epoch ağırlıkları geri yüklenir. Learning rate scheduler Cosine Annealing'dir:
eta_min = 0.1 * initial_lr
Weight decay transfer modellerinde 1e-4, custom modellerde 1e-5 kullanılır. AdamW için bu decoupled weight decay anlamına gelir; RMSprop ve SGD-Nesterov için optimizer'ın kendi L2-style weight decay davranışıdır.
| Parametre | Değer |
|---|---|
| Population | 8 |
| Generation | 3 |
| Elite | 1 |
| Selection | Stochastic Universal Sampling |
| Uniform crossover | individual 0.7, gene 0.5 |
| Uniform int. mutation | individual 0.2, gene 0.2 |
İlk sekiz aday TPE ile ortaktır. Tekrar eden hiperparametre imzaları cache'ten alınır, yeniden eğitilmez.
Kod çıktılarındaki
bayesian/BAYESIANetiketi, bu README tablolarında yöntem adı olarakTPEbiçiminde gösterilmiştir.
| Parametre | Değer |
|---|---|
| Yöntem | Optuna multivariate TPE |
| Direction | maximize |
| Seed | 42 |
| İlk 8 trial | GA ile aynı başlangıç adayları |
n_ei_candidates |
24 |
| Unique trial budget | Aynı modelde GA'nın gerçek benzersiz eğitilmiş aday sayısına eşit |
TPE burada Gaussian Process değildir; iyi/kötü gözlemler için yoğunluk modelleri kurar. Objective maximize edildiği için iyi gözlemler yüksek validation macro-F1 tarafındadır.
Aşağıdaki görseller final deney çalışmasında üretilen PNG çıktılarıdır. Bu final README paketinde görseller assets/readme/ klasöründen yerel olarak gömülür; GitHub'a yüklerken README.md ile birlikte assets/readme/ klasörünü de korumak gerekir.
| Model | GA | TPE |
|---|---|---|
| Custom CNN | ![]() |
(aynı grafik) |
| Custom CNN V2 | ![]() |
(aynı grafik) |
| VGG16 | ![]() |
(aynı grafik) |
| ResNet50 | ![]() |
(aynı grafik) |
| Model | GA | TPE |
|---|---|---|
| Custom CNN | ![]() |
![]() |
| Custom CNN V2 | ![]() |
![]() |
| VGG16 | ![]() |
![]() |
| ResNet50 | ![]() |
![]() |
| Model | Yöntem | ID | OOD |
|---|---|---|---|
| Custom CNN | GA | ![]() |
![]() |
| Custom CNN | TPE | ![]() |
![]() |
| Custom CNN V2 | GA | ![]() |
![]() |
| Custom CNN V2 | TPE | ![]() |
![]() |
| VGG16 | GA | ![]() |
![]() |
| VGG16 | TPE | ![]() |
![]() |
| ResNet50 | GA | ![]() |
![]() |
| ResNet50 | TPE | ![]() |
![]() |
| Model | Yöntem | ID Acc | ID Macro-F1 | ID Defect Recall | ID Cost | OOD Acc | OOD Macro-F1 | OOD Defect Recall | OOD Cost |
|---|---|---|---|---|---|---|---|---|---|
| CUSTOM | TPE | 0.8959 | 0.8139 | 0.8811 | 1385 | 0.6700 | 0.5196 | 0.4233 | 8092 |
| CUSTOM | GA | 0.8643 | 0.7699 | 0.8502 | 1760 | 0.7143 | 0.5039 | 0.2417 | 9959 |
| CUSTOM V2 | TPE | 0.5299 | 0.4664 | 0.7026 | 4187 | 0.5002 | 0.4213 | 0.5017 | 7980 |
| CUSTOM V2 | GA | 0.7881 | 0.6530 | 0.6233 | 3980 | 0.5065 | 0.4312 | 0.5467 | 7438 |
| VGG16 | TPE | 0.9896 | 0.9773 | 0.9648 | 340 | 0.7002 | 0.5761 | 0.6100 | 5825 |
| VGG16 | GA | 0.9896 | 0.9773 | 0.9648 | 340 | 0.7002 | 0.5761 | 0.6100 | 5825 |
| RESNET50 | TPE | 0.8125 | 0.7194 | 0.8987 | 1521 | 0.3909 | 0.3777 | 0.9400 | 3486 |
| RESNET50 | GA | 0.8655 | 0.7678 | 0.8238 | 1984 | 0.4459 | 0.4172 | 0.8583 | 4164 |
Bu özet tablo üç önemli noktayı gösterir:
- ID performansında VGG16 açık ara en yüksek sonucu vermiştir. ID macro-F1
0.9773, ID defect recall0.9648ve ID cost340değerleri hem GA hem TPE için aynıdır. Bunun nedeni iki yöntemin de aynı shared-initial adayı seçmesidir. - OOD tarafında en yüksek macro-F1 yine VGG16'dadır (
0.5761), fakat en düşük OOD DAGM maliyeti ResNet50-TPE'dadır (3486). Bu, macro-F1 ile endüstriyel maliyetin aynı şeyi optimize etmediğini gösterir. - ResNet50-TPE OOD defect recall değerini
0.9400seviyesine çıkarırken specificity0.3085seviyesine düşmüştür. Yani model çok sayıda örneği kusurlu işaretlemiş, FN sayısını azaltmış ama FP sayısını artırmıştır. DAGM maliyeti FN'ye 20 kat ceza verdiği için bu davranış OOD cost açısından avantajlıdır.
| Model | Yöntem | Best Val Macro-F1 | Unique Eval. | Eval-to-best | Time-to-best (dk) | Search time (dk) | Trained epoch | Optimizer step | Best origin | Gain over initial | Mean best-so-far | Ort. aday süresi (sn) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CUSTOM | GA | 0.8667 | 19 | 4 | 65.61 | 419.2 | 339 | 53583 | shared_initial_design |
0.0000 | 0.837156 | 1323.875 |
| CUSTOM | TPE | 0.8888 | 19 | 18 | 323.40 | 333.0 | 367 | 54121 | tpe_adaptive_search |
0.0448 | 0.834851 | 1051.304 |
| CUSTOM V2 | GA | 0.7666 | 24 | 8 | 55.11 | 157.9 | 364 | 64420 | shared_initial_design |
0.0000 | 0.743889 | 394.716 |
| CUSTOM V2 | TPE | 0.7656 | 24 | 11 | 80.76 | 178.4 | 422 | 65804 | tpe_adaptive_search |
0.0799 | 0.731633 | 445.829 |
| VGG16 | GA | 0.9833 | 19 | 3 | 23.99 | 167.2 | 270 | 28728 | shared_initial_design |
0.0000 | 0.965652 | 527.933 |
| VGG16 | TPE | 0.9833 | 19 | 3 | 39.68 | 360.8 | 271 | 25006 | shared_initial_design |
0.0000 | 0.965652 | 1139.289 |
| RESNET50 | GA | 0.8775 | 15 | 7 | 121.78 | 250.7 | 200 | 18050 | shared_initial_design |
0.0000 | 0.875219 | 1002.690 |
| RESNET50 | TPE | 0.8778 | 15 | 14 | 127.53 | 133.9 | 203 | 24836 | tpe_adaptive_search |
0.0002 | 0.875249 | 535.628 |
Arama metrikleri, optimizer performansının yalnız final skorla okunmaması gerektiğini gösterir. Örneğin VGG16'de iki yöntem aynı best validation macro-F1 değerine (0.9833) ve aynı best origin'e sahiptir, fakat GA search wall-clock süresi 167.2 dakika, TPE ise 360.8 dakikadır. Bu modelde TPE daha iyi çözüm bulmamış, daha uzun arama süresi üretmiştir. Custom CNN'de ise TPE daha yüksek validation F1 (0.8888 vs 0.8667) ve daha kısa search time (333.0 dk vs 419.2 dk) üretmiştir. ResNet50'de TPE'nin validation kazancı yalnız 0.0002 olduğu için pratik olarak çok küçük kabul edilmelidir.
| Model | Yöntem | LR | Dropout | Optimizer | Batch | Seçilen model/mimari parametreleri | Toplam param. | Eğitilebilir param. |
|---|---|---|---|---|---|---|---|---|
| CUSTOM | GA | 0.001 |
0.1 |
AdamW | 32 | base=64, blocks=3, kernel=3, stem_stride=1, conv_stride=1, padding=same, pool=max, pool_kernel=3, pool_stride=2, channel=doubling, SE=False | 2,321,858 | 2,321,858 |
| CUSTOM | TPE | 0.001 |
0.1 |
AdamW | 32 | base=64, blocks=3, kernel=3, stem_stride=1, conv_stride=1, padding=valid, pool=max, pool_kernel=2, pool_stride=2, channel=doubling, SE=False | 2,325,954 | 2,325,954 |
| CUSTOM V2 | GA | 0.001 |
0.3 |
AdamW | 16 | base=16, blocks=3, kernel=3, stem_stride=1, conv_stride=1, padding=same, pool=max, pool_kernel=3, pool_stride=2, channel=doubling | 163,714 | 163,714 |
| CUSTOM V2 | TPE | 0.001 |
0.0 |
AdamW | 16 | base=16, blocks=3, kernel=3, stem_stride=1, conv_stride=1, padding=same, pool=max, pool_kernel=3, pool_stride=2, channel=doubling | 163,714 | 163,714 |
| VGG16 | GA | 5e-05 |
0.1 |
RMSprop | 64 | dense=128, fine_tune_layers=16 | 17,926,594 | 16,191,106 |
| VGG16 | TPE | 5e-05 |
0.1 |
RMSprop | 64 | dense=128, fine_tune_layers=16 | 17,926,594 | 16,191,106 |
| RESNET50 | GA | 0.0001 |
0.1 |
AdamW | 32 | dense=128, unfreeze_blocks=1 | 23,778,946 | 4,733,506 |
| RESNET50 | TPE | 0.0001 |
0.4 |
RMSprop | 16 | dense=512, unfreeze_blocks=1 | 24,689,986 | 5,644,546 |
Bu tablo hiperparametre seçimlerinin proje bağlamındaki anlamını gösterir. VGG16'de iki yöntem aynı hiperparametreleri seçtiği için optimizer farkı değil, shared initial design'ın güçlü bir aday üretmesi belirleyicidir. ResNet50'de TPE daha yüksek dropout (0.4) ve daha büyük dense head (512) seçmiştir; bu seçim ID/OOD defect recall'ı artırmış, fakat specificity ve macro-F1'i düşürmüştür. Custom CNN'de iki yöntem de aynı LR, dropout, optimizer, batch size, base filter, block count ve kernel seçmiş; fark padding ve pooling kernel tarafında oluşmuştur. Custom V2'de mimari aynı kalmış, temel fark dropout olmuştur: GA 0.3, TPE 0.0 seçmiştir.
| Model | Yöntem | Acc | Bal. Acc | Macro Prec. | Macro Rec. | Macro-F1 | Def. Prec. | Def. Rec. | Def. F1 | Spec. | PR-AUC | ROC-AUC | FP | FN | Cost | Cost/img |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CUSTOM | TPE | 0.8959 | 0.8896 | 0.7739 | 0.8896 | 0.8139 | 0.5674 | 0.8811 | 0.6903 | 0.8982 | 0.8864 | 0.9673 | 305 | 54 | 1385 | 0.4014 |
| CUSTOM | GA | 0.8643 | 0.8584 | 0.7328 | 0.8584 | 0.7699 | 0.4911 | 0.8502 | 0.6226 | 0.8665 | 0.8030 | 0.9500 | 400 | 68 | 1760 | 0.5101 |
| CUSTOM V2 | TPE | 0.5299 | 0.6032 | 0.5473 | 0.6032 | 0.4664 | 0.1766 | 0.7026 | 0.2823 | 0.5037 | 0.3788 | 0.6926 | 1487 | 135 | 4187 | 1.2136 |
| CUSTOM V2 | GA | 0.7881 | 0.7182 | 0.6351 | 0.7182 | 0.6530 | 0.3357 | 0.6233 | 0.4364 | 0.8131 | 0.5906 | 0.8313 | 560 | 171 | 3980 | 1.1536 |
| VGG16 | TPE | 0.9896 | 0.9790 | 0.9755 | 0.9790 | 0.9773 | 0.9563 | 0.9648 | 0.9605 | 0.9933 | 0.9887 | 0.9975 | 20 | 16 | 340 | 0.0986 |
| VGG16 | GA | 0.9896 | 0.9790 | 0.9755 | 0.9790 | 0.9773 | 0.9563 | 0.9648 | 0.9605 | 0.9933 | 0.9887 | 0.9975 | 20 | 16 | 340 | 0.0986 |
| RESNET50 | TPE | 0.8125 | 0.8490 | 0.6928 | 0.8490 | 0.7194 | 0.4044 | 0.8987 | 0.5578 | 0.7994 | 0.7984 | 0.9419 | 601 | 46 | 1521 | 0.4409 |
| RESNET50 | GA | 0.8655 | 0.8478 | 0.7318 | 0.8478 | 0.7678 | 0.4934 | 0.8238 | 0.6172 | 0.8718 | 0.7954 | 0.9348 | 384 | 80 | 1984 | 0.5751 |
| Model | Yöntem | Acc | Bal. Acc | Macro Prec. | Macro Rec. | Macro-F1 | Def. Prec. | Def. Rec. | Def. F1 | Spec. | PR-AUC | ROC-AUC | FP | FN | Cost | Cost/img |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CUSTOM | TPE | 0.6700 | 0.5652 | 0.5346 | 0.5652 | 0.5196 | 0.1781 | 0.4233 | 0.2507 | 0.7070 | 0.2697 | 0.6244 | 1172 | 346 | 8092 | 1.7591 |
| CUSTOM | GA | 0.7143 | 0.5135 | 0.5089 | 0.5135 | 0.5039 | 0.1444 | 0.2417 | 0.1808 | 0.7853 | 0.1570 | 0.6029 | 859 | 455 | 9959 | 2.1650 |
| CUSTOM V2 | TPE | 0.5002 | 0.5008 | 0.5004 | 0.5008 | 0.4213 | 0.1308 | 0.5017 | 0.2075 | 0.5000 | 0.1704 | 0.5396 | 2000 | 299 | 7980 | 1.7348 |
| CUSTOM V2 | GA | 0.5065 | 0.5236 | 0.5107 | 0.5236 | 0.4312 | 0.1410 | 0.5467 | 0.2242 | 0.5005 | 0.1911 | 0.5669 | 1998 | 272 | 7438 | 1.6170 |
| VGG16 | TPE | 0.7002 | 0.6619 | 0.5832 | 0.6619 | 0.5761 | 0.2422 | 0.6100 | 0.3468 | 0.7137 | 0.1848 | 0.6626 | 1145 | 234 | 5825 | 1.2663 |
| VGG16 | GA | 0.7002 | 0.6619 | 0.5832 | 0.6619 | 0.5761 | 0.2422 | 0.6100 | 0.3468 | 0.7137 | 0.1848 | 0.6626 | 1145 | 234 | 5825 | 1.2663 |
| RESNET50 | TPE | 0.3909 | 0.6242 | 0.5705 | 0.6242 | 0.3777 | 0.1694 | 0.9400 | 0.2870 | 0.3085 | 0.1652 | 0.6401 | 2766 | 36 | 3486 | 0.7578 |
| RESNET50 | GA | 0.4459 | 0.6212 | 0.5602 | 0.6212 | 0.4172 | 0.1729 | 0.8583 | 0.2878 | 0.3840 | 0.1625 | 0.6319 | 2464 | 85 | 4164 | 0.9052 |
Custom CNN'de TPE, GA'ya göre ID macro-F1'i 0.7699dan 0.8139a, OOD macro-F1'i 0.5039dan 0.5196ya yükseltmiştir. ID defect recall da 0.8502den 0.8811e çıkmıştır. OOD defect recall'daki fark daha büyüktür: GA 0.2417, TPE 0.4233. Bu nedenle OOD DAGM maliyeti GA'da 9959, TPE'de 8092 olmuştur.
Bu sonuç, Custom CNN için TPE'nin yalnız validation F1'i değil, final OOD maliyetini de iyileştirdiğini gösterir. Ancak TPE'nin OOD specificity değeri GA'dan düşüktür (0.7070 vs 0.7853); yani TPE daha fazla kusur yakalamak için daha fazla yanlış alarm üretmiştir. DAGM maliyetinde FN cezası yüksek olduğu için bu trade-off proje açısından makul görünmektedir.
Seçilen hiperparametreler incelendiğinde iki yöntem de lr=0.001, dropout=0.1, AdamW, batch=32, base=64, blocks=3, kernel=3, channel=doubling ve SE=False seçmiştir. Bu, Custom CNN'de ana kapasite kararlarının iki optimizer tarafından benzer bulunduğunu gösterir. TPE'nin farklılaştığı nokta padding=valid ve pool_kernel=2 seçimidir.
Custom V2, daha küçük parametre sayısı nedeniyle daha sınırlı temsil kapasitesine sahiptir. GA final ID macro-F1 (0.6530) ve OOD macro-F1 (0.4312) bakımından TPE'den (0.4664, 0.4213) daha dengeli sonuç vermiştir. Buna karşılık TPE ID defect recall'da 0.7026 ile GA'nın 0.6233 değerini aşmıştır; fakat ID specificity 0.5037 seviyesine düştüğü için çok fazla false positive üretmiştir.
OOD tarafında iki yöntem de zayıf kalmıştır. TPE OOD defect recall 0.5017, GA 0.5467 üretmiştir; fakat specificity yaklaşık 0.50 düzeyindedir. Bu, modelin unseen texture domainlerinde karar sınırını sağlıklı ayıramadığını gösterir. Custom V2'nin az parametreli yapısı ve yalnız üç bloklu seçilen mimarisi, DAGM texture çeşitliliğini temsil etmek için yetersiz kalmış olabilir.
Hiperparametre farkı esas olarak dropout'tadır: GA dropout=0.3, TPE dropout=0.0 seçmiştir. TPE'nin dropout kullanmaması ID defect recall'ı artırmış görünse de yanlış alarm sayısını çok yükseltmiştir. Bu nedenle Custom V2 özelinde GA'nın daha fazla regularization içeren çözümü daha dengeli final davranış üretmiştir.
VGG16, ID tarafında en güçlü modeldir. GA ve TPE aynı hiperparametreleri ve aynı shared-initial adayı seçtiği için ID/OOD sonuçları birebir aynıdır: ID macro-F1 0.9773, ID defect recall 0.9648, ID cost 340; OOD macro-F1 0.5761, OOD defect recall 0.6100, OOD cost 5825.
Bu sonuç iki şekilde okunmalıdır. Birincisi, ImageNet-pretrained VGG16 özellikleri DAGM Class1–Class6 test domainlerine çok iyi aktarılmıştır. İkincisi, OOD tarafında performans belirgin düşmüştür; ID macro-F1 0.9773 iken OOD macro-F1 0.5761 seviyesindedir. Bu fark, modelin görülen DAGM texture domainlerinde çok iyi çalışsa bile Class7–Class10 domain shift altında aynı başarıyı koruyamadığını gösterir.
VGG16 için seçilen lr=5e-5, dropout=0.1, RMSprop, batch=64, dense=128, fine_tune_layers=16 kombinasyonu; düşük öğrenme oranı ile pretrained özellikleri bozmadan uyarlama, küçük dense head ile overfitting riskini sınırlama ve son feature modüllerini açarak DAGM tekstürlerine adaptasyon sağlama şeklinde yorumlanabilir. Fakat bu yorum optimizer keşfi değil, shared initial adayın başarısıdır.
ResNet50'de GA, ID macro-F1 bakımından TPE'den yüksektir (0.7678 vs 0.7194). Buna rağmen TPE hem ID defect recall (0.8987 vs 0.8238) hem OOD defect recall (0.9400 vs 0.8583) bakımından daha yüksektir. OOD cost da TPE'de 3486, GA'da 4164 olmuştur.
Bu model, macro-F1 ile DAGM cost arasındaki farkı en net gösteren örnektir. TPE daha agresif defect tahmini yapmış, OOD FN sayısını 36ya kadar düşürmüştür; fakat FP sayısı 2766ya yükselmiştir. Bu yüzden OOD accuracy (0.3909) ve OOD macro-F1 (0.3777) düşüktür. Endüstriyel maliyet fonksiyonu FN'ye yüksek ceza verdiği için TPE cost açısından iyi görünürken, genel sınıflandırma dengesi açısından GA daha iyi görünür.
Seçilen hiperparametrelerde iki yöntem de lr=1e-4 ve unfreeze_blocks=1 seçmiştir. TPE'nin dropout=0.4, dense=512, RMSprop, batch=16 seçimi daha oynak ama recall odaklı bir karar sınırı üretmiş olabilir. GA'nın dropout=0.1, dense=128, AdamW, batch=32 çözümü daha dengeli fakat daha az kusur-yakalama odaklıdır.
Accuracy, ID testte VGG16 için anlamlı biçimde yüksektir (0.9896), çünkü model hem defect hem no-defect sınıflarını dengeli biçimde ayırmıştır. Ancak OOD testte accuracy yanıltıcı olabilir. ResNet50-TPE OOD accuracy 0.3909 ile düşük görünürken OOD defect recall 0.9400 ve OOD cost 3486 ile en düşük maliyeti üretmiştir. Bunun nedeni modelin kusur kaçırmamak için çok fazla örneği defect tahmin etmesidir.
Balanced accuracy sınıfları eşit ağırlıkla değerlendirir. OOD domainlerinde class imbalance olduğu için accuracy'den daha bilgilendiricidir. Macro-F1 ise precision ve recall dengesini de dikkate alır. VGG16 OOD macro-F1 0.5761 ile en yüksek değeri verir; çünkü recall artışı tamamen precision çöküşü pahasına gerçekleşmemiştir. ResNet50-TPE ise OOD balanced accuracy 0.6242 ile yüksek görünmesine rağmen OOD macro-F1 0.3777dir; çünkü defect precision yalnız 0.1694 seviyesindedir.
Defect recall, kusurlu ürünü kaçırmama açısından en kritik metriktir. OOD defect recall sıralaması:
| Sıra | Model | OOD Defect Recall |
|---|---|---|
| 1 | ResNet50-TPE | 0.9400 |
| 2 | ResNet50-GA | 0.8583 |
| 3 | VGG16-GA/TPE | 0.6100 |
| 4 | Custom V2-GA | 0.5467 |
| 5 | Custom V2-TPE | 0.5017 |
| 6 | Custom-TPE | 0.4233 |
| 7 | Custom-GA | 0.2417 |
Bu sıralama, OOD cost sıralamasıyla daha yakından ilişkilidir; çünkü cost FN'ye 20 kat ceza verir.
Defect precision, modelin defect dediği örneklerin ne kadarının gerçekten defect olduğunu gösterir. OOD'de tüm modellerin defect precision değerleri düşüktür (0.1308–0.2422). Bu, unseen texture domainlerinde normal tekstürlerin kusur gibi algılanabildiğini gösterir. En yüksek OOD defect precision VGG16'da 0.2422dir; bu yüzden VGG16 OOD macro-F1 tarafında daha avantajlıdır.
Specificity, no-defect örnekleri doğru temiz olarak ayırma yeteneğidir. OOD specificity VGG16'da 0.7137, Custom-GA'da 0.7853, ResNet50-TPE'da ise 0.3085tir. ResNet50-TPE'ın düşük specificity değeri, düşük accuracy ve macro-F1'in ana sebebidir. Buna rağmen FN sayısı düşük olduğu için DAGM cost avantajı korunmuştur.
Defect sınıfı azınlık olduğundan PR-AUC özellikle önemlidir. OOD PR-AUC değerlerinin genel olarak düşük olması, modellerin unseen texture domainlerinde defect skorlamasını güvenilir biçimde sıralamakta zorlandığını gösterir. VGG16 OOD ROC-AUC 0.6626 ve PR-AUC 0.1848 üretmiştir; ResNet50-TPE OOD ROC-AUC 0.6401, PR-AUC 0.1652 üretmiştir. ROC-AUC değerleri orta düzeyde görünse bile PR-AUC düşük kaldığı için azınlık defect sınıfında karar kalitesi sınırlıdır.
DAGM cost, final uygulama bağlamında en kritik operasyonel metriklerden biridir; fakat HPO objective değildir. En düşük ID cost VGG16'da 340; en düşük OOD cost ResNet50-TPE'da 3486dır. Bu fark, validation macro-F1 ile seçilen modelin her zaman en düşük endüstriyel maliyeti vermeyeceğini gösterir. Gelecek çalışmada cost-sensitive objective veya threshold tuning eklenirse OOD maliyeti daha doğrudan optimize edilebilir.
Custom modellerde başarılı adaylar lr=0.001 etrafında toplanmıştır. Rastgele başlatılan modeller için 1e-3, yeterli güncelleme büyüklüğü sağlayarak underfitting riskini azaltmış görünmektedir. Transfer modellerinde ise düşük learning rate (5e-5 VGG16, 1e-4 ResNet50) seçilmiştir. Bu, pretrained temsilleri tamamen bozmadan DAGM'e uyarlama açısından beklenen bir davranıştır.
VGG16 ve Custom CNN'de dropout=0.1 seçilmiştir; bu, çok agresif regularization yerine temsil kapasitesinin korunmasının daha faydalı olduğunu gösterir. Custom V2-GA dropout=0.3 ile daha dengeli final macro-F1 üretmiştir; Custom V2-TPE'nin dropout=0.0 seçimi defect recall'ı artırsa da specificity'yi düşürmüştür. ResNet50-TPE'nin dropout=0.4 seçmesi, recall odaklı fakat precision/specificity açısından maliyetli bir karar sınırıyla ilişkilidir.
Custom modellerde seçilen optimizer AdamW'dir. Bu, rastgele başlatılan ve tüm parametreleri eğitilen modellerde kararlı weight decay davranışı sağlamış olabilir. VGG16'da RMSprop seçilmiştir ve iki yöntem de aynı adayı kullandığı için sonuçlar birebir aynıdır. ResNet50'de GA AdamW, TPE RMSprop seçmiştir; TPE'nin RMSprop + küçük batch + yüksek dropout kombinasyonu yüksek recall fakat düşük specificity üretmiştir.
VGG16 batch=64 ile en iyi sonucu vermiştir. Transfer modelde büyük batch daha stabil gradient ve daha hızlı epoch sağlayabilir. ResNet50-TPE batch=16, GA batch=32 seçmiştir; küçük batch, skorların daha oynak olmasına ve recall lehine karar sınırına katkı vermiş olabilir. Custom V2'de iki yöntem de batch=16 seçmiştir; küçük model ve küçük batch, daha fazla optimizer step üretirken genel genelleme sorununu tamamen çözememiştir.
Custom CNN'de base=64, blocks=3, channel=doubling seçimi kapasiteyi artırmış ve ID/OOD performansı Custom V2'ye göre yükselmiştir. Custom V2'de base=16 ile parametre sayısı yalnız 163,714 seviyesindedir; bu kompaktlık hesaplama açısından avantajlı olsa da DAGM texture çeşitliliğini modellemek için yetersiz kalmış olabilir.
Max pooling seçimi tüm custom final adaylarında ortaktır. Bu proje bağlamında max pooling, küçük kusur bölgelerindeki güçlü lokal aktivasyonları korumak açısından average pooling'e göre daha mantıklıdır. Kodda lokal 4×4 adaptive max pooling ile global average pooling'in birlikte kullanılması da aynı motivasyona dayanır: kusur küçükse global ortalama sinyali zayıflatabilir, lokal maksimum ise kusur kanıtını korur.
Bu hipotez güçlü biçimde desteklenmemiştir. VGG16'da GA ve TPE aynı shared-initial adayı seçmiş, aynı validation ve final sonuçları üretmiştir. ResNet50'de TPE validation F1 tarafında yalnız 0.0002 gain sağlamıştır; OOD cost daha iyidir fakat OOD macro-F1 GA'dan düşüktür. Bu nedenle pretrained modeller için TPE'nin tutarlı ve açık üstünlüğü yoktur.
Bu hipotez de güçlü biçimde desteklenmemiştir. Custom CNN'de TPE, GA'dan hem ID/OOD macro-F1 hem de DAGM cost bakımından daha iyi sonuç vermiştir. Custom V2'de ise GA final macro-F1 bakımından daha dengelidir. Dolayısıyla custom ailesinde de tek yönlü GA üstünlüğü yoktur.
Deneyin ana sonucu, optimizer üstünlüğünün model ailesi ve metrikten bağımsız olmadığıdır. Validation macro-F1, ID/OOD macro-F1 ve DAGM cost farklı sıralamalar üretebilir. Bu nedenle final model seçimi yalnız HPO validation F1'e göre değil; OOD defect recall, false positive sayısı, cost ve uygulama toleransına göre yapılmalıdır.
Proje kök dizininde:
pip install -r requirements.txt
.\run_final_experiment.ps1Kesilen deneyi sürdürmek için:
.\run_final_experiment.ps1 -ResumeFinal sonuçlar:
results/final_experiment_v9/
├── final_comparison_table.csv
├── search_method_comparison.csv
├── final_results_checkpoint.json
├── best_params_all.json
├── final_architecture_summary.csv
└── plots/
- Deney tek seed (
42) ile yürütülmüştür; bu nedenle istatistiksel güven aralığı yoktur. - Validation seti 180 görüntüdür; çok sayıda HPO kararı aynı validation setine dayandığı için selection overfitting riski vardır.
- OOD değerlendirmesi gerçek fabrika verisi değil, DAGM Class7–Class10 sentetik texture domainleridir.
- HPO objective macro-F1'dir; DAGM cost optimize edilmemiştir. Bu yüzden en iyi validation macro-F1'in en iyi OOD cost'u vermesi beklenmemelidir.
- Wall-clock süresi bağımlı sonuç değişkenidir; eşitlenmemiştir. Aynı unique candidate bütçesi altında daha uzun süren yöntem hesaplama maliyeti bakımından dezavantajlı sayılır.
Bu README'deki teknik iddialar aşağıdaki proje dosyaları ve deney çıktılarıyla eşleştirilmiştir:
| Konu | Proje kaynağı |
|---|---|
| Veri yükleme, grayscale, normalization, augmentation, sampler | data_loader.py |
| CrossEntropyLoss, label smoothing, scheduler, early stopping | trainer.py |
| Accuracy, balanced accuracy, macro-F1, PR-AUC, ROC-AUC, DAGM cost | metrics.py |
| Custom search space ve spatial validity | architecture.py |
| Custom CNN lokal/global head | custom_cnn_model.py |
| Custom CNN V2 blok yapısı | custom_cnn_v2_model.py |
| VGG16 fine-tuning | vgg16_model.py |
| ResNet50 fine-tuning | resnet50_model.py |
| GA protokolü | genetic_algorithm.py |
| Bayesian TPE protokolü | bayesian_tpe.py |
| Final performans sonuçları | results/final_experiment_v9/final_comparison_table.csv, final_results_checkpoint.json |
| Arama verimliliği | results/final_experiment_v9/search_method_comparison.csv |
| Seçilen hiperparametreler ve mimari özet | best_params_all.json, final_architecture_summary.csv |
| Grafikler ve confusion matrixler | results/final_experiment_v9/plots/ |
Akademik referanslar için makale taslağındaki IEEE kaynak listesi esas alınmalıdır: DAGM 2007, Bergstra et al. TPE, Optuna, HPOBench, GA-CNN çalışmaları, VGG16, ResNet50, BatchNorm, Dropout, AdamW, Hyperband ve BOHB.




























