Davas1410 commited on
Commit
a1ac93a
·
verified ·
1 Parent(s): 6089c39

Upload 8 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ test_dataset.hdf5 filter=lfs diff=lfs merge=lfs -text
37
+ train_dataset.hdf5 filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,13 +1,14 @@
1
  ---
2
- title: Galaxy Classification
3
- emoji: 📈
4
- colorFrom: blue
5
- colorTo: indigo
6
- sdk: gradio
7
- sdk_version: 5.38.1
8
  app_file: app.py
9
  pinned: false
10
- short_description: Galaxy Classifications
 
11
  ---
12
 
13
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Galaxy Classifier
3
+ emoji: 🦀
4
+ colorFrom: pink
5
+ colorTo: red
6
+ sdk: streamlit
7
+ sdk_version: 1.42.1
8
  app_file: app.py
9
  pinned: false
10
+ license: mit
11
+ short_description: Upload a galaxy image and get morphological class prediction
12
  ---
13
 
14
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torch
3
+ import torchvision.transforms as transforms
4
+ from torchvision.transforms import ToTensor, Normalize, Compose
5
+ from PIL import Image
6
+ import numpy as np
7
+ from galaxy_classification import GalaxyCNN # Modelini import et
8
+
9
+ # Streamlit sayfa yapılandırması
10
+ st.set_page_config(
11
+ page_title="Galaxy Morphology Classification",
12
+ page_icon="✨",
13
+ layout="wide",
14
+ initial_sidebar_state="expanded",
15
+ )
16
+
17
+ # Modeli yükle
18
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
19
+ model = GalaxyCNN().to(device)
20
+ model.load_state_dict(torch.load("galaxy_cnn_model.pt", map_location=device))
21
+ model.eval()
22
+
23
+ # Görsel işleme fonksiyonu
24
+ def process_image(image):
25
+ transform = Compose([ToTensor(), Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) # 3 kanal için normalize
26
+ image = image.convert("RGB").resize((64, 64)) # Modelin beklediği boyutta olmalı
27
+ image = transform(image).unsqueeze(0).to(device) # Model için uygun forma getir
28
+ return image
29
+
30
+ # Başlık ve alt başlık
31
+ st.title("🔭 Galaxy Morphology Classifier")
32
+ st.subheader("Upload a galaxy image and predict its morphological class!")
33
+
34
+ # Açıklama
35
+ st.write("""
36
+ ### How It Works
37
+ 1. Upload a galaxy image.
38
+ 2. Click the "Classify Image" button.
39
+ 3. The model predicts the galaxy's morphological class.
40
+ """)
41
+
42
+ # Görsel yükleme alanı
43
+ uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
44
+
45
+ if uploaded_file:
46
+ image = Image.open(uploaded_file)
47
+ st.image(image, caption="Uploaded Image", use_column_width=True)
48
+
49
+ # Tahmin butonu
50
+ if st.button("🔎 Classify Image"):
51
+ # Görseli işle
52
+ processed_image = process_image(image)
53
+
54
+ # Model ile tahmin yap
55
+ with torch.no_grad():
56
+ output = model(processed_image)
57
+ predicted_class = torch.argmax(output, dim=1).item()
58
+
59
+ # Sınıf isimleri
60
+ class_names = ["Smooth Round", "Smooth Cigar", "Edge-on Disk", "Spiral"]
61
+ st.write(f"**Prediction:** {class_names[predicted_class]} 🎯")
galaxy_classification.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.optim as optim
4
+ from torch.utils.data import DataLoader, TensorDataset
5
+ from torchvision.transforms import Compose, ToTensor, Normalize
6
+ from sklearn.metrics import accuracy_score
7
+ import h5py
8
+
9
+ # Veriyi yüklemek için bir fonksiyon
10
+ def load_hdf5_dataset(path):
11
+ with h5py.File(path, "r") as f:
12
+ images = torch.tensor(f['images'][:]) # Görseller
13
+ labels = torch.tensor(f['labels'][:]) # Etiketler
14
+ return images, labels
15
+
16
+ # Verileri yükleme
17
+ train_images, train_labels = load_hdf5_dataset('train_dataset.hdf5')
18
+ test_images, test_labels = load_hdf5_dataset('test_dataset.hdf5')
19
+
20
+ # Normalize etmek ve tensöre dönüştürmek için dönüşümler
21
+ transform = Compose([ToTensor(), Normalize((0.5,), (0.5,))])
22
+
23
+ # Verileri normalize et ve TensorDataset oluştur
24
+ train_images = train_images.permute(0, 3, 1, 2) / 255.0 # Görüntüleri 0-1 aralığına getir
25
+ test_images = test_images.permute(0, 3, 1, 2) / 255.0
26
+ train_dataset = TensorDataset(train_images, train_labels)
27
+ test_dataset = TensorDataset(test_images, test_labels)
28
+
29
+ # CNN Modelini Tanımlama
30
+ class GalaxyCNN(nn.Module):
31
+ def __init__(self):
32
+ super(GalaxyCNN, self).__init__()
33
+ self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)
34
+ self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
35
+ self.pool = nn.MaxPool2d(2, 2)
36
+ self.fc1 = nn.Linear(64 * 16 * 16, 128) # Fully connected layer
37
+ self.fc2 = nn.Linear(128, 4) # 4 sınıf (smooth_round, smooth_cigar, vb.)
38
+ self.relu = nn.ReLU()
39
+ self.dropout = nn.Dropout(0.25)
40
+
41
+ def forward(self, x):
42
+ x = self.pool(self.relu(self.conv1(x)))
43
+ x = self.pool(self.relu(self.conv2(x)))
44
+ x = x.view(-1, 64 * 16 * 16) # Flatten
45
+ x = self.dropout(self.relu(self.fc1(x)))
46
+ x = self.fc2(x)
47
+ return x
48
+
49
+ # DataLoader
50
+ batch_size = 32
51
+ train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
52
+ test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
53
+
54
+ # Model ve cihaz
55
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
56
+ model = GalaxyCNN().to(device)
57
+
58
+ # Kayıp fonksiyonu ve optimizasyon
59
+ criterion = nn.CrossEntropyLoss()
60
+ optimizer = optim.Adam(model.parameters(), lr=0.001)
61
+
62
+ # Eğitim
63
+ epochs = 10
64
+ for epoch in range(epochs):
65
+ model.train()
66
+ running_loss = 0.0
67
+ for images, labels in train_loader:
68
+ images, labels = images.to(device), labels.to(device)
69
+ optimizer.zero_grad()
70
+ outputs = model(images)
71
+ loss = criterion(outputs, labels)
72
+ loss.backward()
73
+ optimizer.step()
74
+ running_loss += loss.item()
75
+
76
+ avg_loss = running_loss / len(train_loader)
77
+ print(f"Epoch {epoch+1}/{epochs}, Loss: {avg_loss:.4f}")
78
+
79
+ # Test ve doğrulama
80
+ model.eval()
81
+ all_preds = []
82
+ all_labels = []
83
+ with torch.no_grad():
84
+ for images, labels in test_loader:
85
+ images, labels = images.to(device), labels.to(device)
86
+ outputs = model(images)
87
+ _, preds = torch.max(outputs, 1)
88
+ all_preds.extend(preds.cpu().numpy())
89
+ all_labels.extend(labels.cpu().numpy())
90
+
91
+ accuracy = accuracy_score(all_labels, all_preds)
92
+ print(f"Validation Accuracy: {accuracy * 100:.2f}%")
93
+ torch.save(model.state_dict(), "galaxy_cnn_model.pt")
94
+ print("Model kaydedildi: galaxy_cnn_model.pt")
95
+
galaxy_cnn_model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d1b1cb8209c1516b54b5a4f5403ea7587de75d094c2a396750f316ab4f1e7fb8
3
+ size 8472044
gitattributes ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ test_dataset.hdf5 filter=lfs diff=lfs merge=lfs -text
37
+ train_dataset.hdf5 filter=lfs diff=lfs merge=lfs -text
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ torch
2
+ torchvision
3
+ scikit-learn
4
+ streamlit==1.18.1
5
+ tensorflow==2.14.0
6
+ Pillow==10.0.0
7
+ numpy==1.24.3
8
+ h5py==3.8.0
test_dataset.hdf5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:95d53ca3e9c8fbf45150b77527cd1180c43e2423da0ff2e0fb0012f986e35901
3
+ size 24580048
train_dataset.hdf5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9e357f36269e4c2d056e3660b877f3f7dc8d17b1446906b1117124b55567a201
3
+ size 98314048