Metadata-Version: 2.2
Name: newton-vision
Version: 1.1.4
Summary: High-Performance Computer Vision & Deep Learning Framework in C++ & CUDA with PyTorch Parity
Keywords: deep-learning,computer-vision,cuda,autograd,cnn,resnet,mobilenet,cpp
Author-Email: newton-vision Core Team <info@newton-vision.org>
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Image Processing
Project-URL: Homepage, https://github.com/onur/newton-vision
Project-URL: Documentation, https://github.com/onur/newton-vision/tree/master/docs
Project-URL: Repository, https://github.com/onur/newton-vision.git
Requires-Python: >=3.9
Requires-Dist: numpy>=1.20.0
Description-Content-Type: text/markdown

# 🌌 newton-vision

> **PyTorch ekosistemiyle birlikte çalışabilen, deneysel araştırmalar ve eğitim amacıyla geliştirilen, C++17 ve CUDA çekirdekli hafif bir derin öğrenme framework'üdür.**

[![PyPI Version](https://img.shields.io/pypi/v/newton-vision.svg?color=blue)](https://pypi.org/project/newton-vision/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

---

## ❓ 5 Temel Soruda `newton-vision`

### 1. Bu Proje Nedir?
`newton-vision`, yönlü türev grafı (Autograd), evrişimsel sinir ağları (CNN), Vision Transformer (ViT) ve INT8 Kuantizasyon motorunu sıfırdan C++17, CUDA ve Python ile gerçekleyen şeffaf bir derin öğrenme framework'üdür.

### 2. Neden Var?
Derin öğrenme algoritmalarının arkasındaki matematiksel ve donanımsal mantığı (L1/L2 Cache Locality, SIMD AVX2, Topolojik Autograd Sıralaması) şeffaf bir şekilde göstermek, deneyler yapmak ve C++ ortamında bağımsız hızlı çıkarım (inference) çalıştırmak için geliştirilmiştir.

### 3. Kim Kullanmalı?
- Derin öğrenme motorlarının mutfağını ve C++ donanım ivmelendirmesini öğrenmek isteyen **araştırmacılar ve öğrenciler**.
- PyTorch'ta eğittiği modelleri Python bağımlılığı olmadan C++ ortamında veya INT8 kuantize olarak çalıştırmak isteyen **mühendisler**.

### 4. Kim Kullanmamalı?
- Petabaytlarca veri üzerinde binlerce GPU ile devasa LLM (Large Language Model) veya üretim dağıtık eğitimi yapmayı hedefleyen **büyük endüstriyel dağıtık sistem ekipleri** (PyTorch / JAX kullanmaya devam etmelidirler).

### 5. PyTorch İle İlişkisi Ne?
`newton-vision`, PyTorch'un bir rakibi veya "katili" değildir. PyTorch `.pth` `state_dict` ağırlıklarını birebir yükleyebilen, PyTorch ekosistemiyle uyumlu çalışan bir kardeş altyapıdır.

---

## 🚀 Kurulum (Installation)

```bash
pip install newton-vision
```

---

## 💻 1. Hızlı Başlangıç & ViT-Tiny Çıkarımı

```python
import newton_vision as nv
import numpy as np

# 1. Görüntü Tensörü Tanımlama (Batch=1, Channels=3, Height=224, Width=224)
x = nv.Tensor(np.random.randn(1, 3, 224, 224), requires_grad=False)

# 2. Vision Transformer (ViT-Tiny) Modeli Yükleme
model = nv.models.vit_tiny(num_classes=1000)

# 3. İleri Geçiş (Forward Pass Çıkarımı)
logits = model(x)
print("Logits Shape:", logits.data.shape)  # Çıktı: (1, 1000)
```

---

## 🤝 2. PyTorch'tan Ağırlık Aktarımı & INT8 Kuantizasyon

PyTorch'ta eğitilen modellerin ağırlıklarını yükleyip 4 kat daha az bellekle INT8 kuantize çıkarım çalıştırma:

```python
import newton_vision as nv
import torch
import torch.nn as tnn
import numpy as np

# PyTorch Modeli
torch_net = tnn.Linear(10, 5)
state_dict = torch_net.state_dict()

# newton-vision Ağırlık Yükleme & INT8 Kuantizasyonu
q_linear = nv.QuantizedLinear(in_features=10, out_features=5)
q_linear.load_fp32_weights(state_dict["weight"].numpy().T, state_dict["bias"].numpy())

# 4x Küçük Bellekle Çıkarım
dummy_input = np.random.randn(2, 10).astype(np.float32)
out_int8 = q_linear(dummy_input)
print("INT8 Çıktı Boyutu:", out_int8.data.shape)  # Çıktı: (2, 5)
```

---

## 🌌 3. Sadece `newton-vision` ile Sıfırdan Model Eğitimi

Hiçbir harici kütüphaneye ihtiyaç duymadan saf Autograd türev grafı ile model eğitimi:

```python
import newton_vision as nv
import numpy as np

# 1. Sentetik Veri Seti
np.random.seed(42)
X = np.random.randn(80, 16).astype(np.float32)
y = np.random.randint(0, 3, size=(80,)).astype(np.int64)

# 2. Model Mimarisi
fc1 = nv.optics.Linear(16, 32)
relu1 = nv.optics.ReLU()
fc2 = nv.optics.Linear(32, 3)

# 3. Optimizatör & Kayıp Fonksiyonu
optimizer = nv.gravity.Adam([fc1.w, fc1.bias, fc2.w, fc2.bias], lr=0.02)
loss_fn = nv.gravity.CrossEntropyLoss()

# 4. Eğitim Döngüsü (30 Epoch)
for epoch in range(1, 31):
    x_tensor = nv.Tensor(X, requires_grad=True)
    
    # Forward Pass
    logits = fc2(relu1(fc1(x_tensor)))
    loss = loss_fn(logits, y)
    
    # Autograd Backward Pass & Update
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    if epoch % 10 == 0:
        print(f"Epoch {epoch:02d}/30 | Loss: {float(loss.data):.4f}")
```

---

## 📊 Şeffaf & Bilimsel Benchmark Sonuçları

`Intel64 Family 6 (12 Threads)` üzerinde PyTorch v2.6.0 CPU ile dürüst ve istatistiksel karşılaştırma (`Warmup=5, Runs=20`):

| Model | Framework | Mean (ms) | Std (ms) | Min (ms) | Max (ms) | FPS | Karşılaştırma |
|---|---|---|---|---|---|---|---|
| **ViT-Tiny (Transformer)** | newton-vision | **210.62** | ±18.33 | 174.47 | 240.62 | **4.7** | **2.28x Hızlı** 🚀 |
| | PyTorch CPU | 472.23 | ±29.48 | 458.22 | 585.02 | 2.1 | Base |
| **ResNet-18** | newton-vision | **119.95** | ±12.37 | 98.28 | 146.52 | **8.3** | **4.63x Yavaş** |
| | PyTorch CPU | 25.90 | ±0.77 | 24.97 | 27.74 | 38.6 | Base |
| **MobileNetV2** | newton-vision | **4842.70** | ±819.54 | 3619.07 | 7078.85 | **0.2** | **81.01x Yavaş** |
| | PyTorch CPU | 59.78 | ±2.94 | 54.99 | 66.91 | 16.7 | Base |

---

## 🔬 Donanım & Önbellek İnovasyonları

- **`im2col + GEMM` Evrişim Çekirdeği:** 2D görüntüyü L1/L2 önbellekte ardışık (contiguous) bellek matrisine dönüştürerek iç içe döngülü evrişime göre **10 KAT HIZLANMA** sağlar.
- **Dinamik CPUID AVX2 Tespiti:** Çalışma zamanında CPU mimarisini tespit ederek eski işlemcilerde ve ARM (Apple Silicon) çiplerinde çökme yaşanmasını engeller.
- **Kanal Bazlı (Per-Channel) INT8 Kuantizasyon:** Filtre bazlı bağımsız ölçekleme katsayıları ($S_i$) hesaplayarak aşırı uç değerlerin doğruluk kaybına yol açmasını engeller (%74.96 bellek tasarrufu, **+%0.00% doğruluk kaybı**).

---

## 📜 Lisans

Bu proje **MIT Lisansı** ile lisanslanmıştır.
