Skip to content

Video Backbone'u Dondur, %0.08'ini Eğit, Robot Hareket Etsin 🧊🤖

Published: March 29, 2026

Selamlar. Bu sefer size üç paper'ın nasıl tek bir matruşka bebeğine dönüştüğünü anlatacağım. Ama önce, her zamanki gibi müzik.

🎧 First in first, background music.


Önce Yap, Sonra Konuş 🔨

Ben "önce yap, sonra konuş" adamıyım. Benchmark'lar gelecek. Ama gelene kadar claim'leri küçük tutacağız. Bu yazı bir manifesto değil — üç projenin nasıl birbirine bağlandığının hikayesi.

Üç paper'ın özeti aslında üç cümle:

  1. Agent loop = Control loop. Aynı döngü chatbot'u da, robot kolunu da yönetiyor.
  2. Bu döngüyü bir SDK'ya çevirdik. 18 policy, 32 robot, 3 simülatör, dört satır kod.
  3. Video backbone'u dondurup %0.08 eğiterek competitive policy çıkardık.

Ve hepsi birbirine bağlı.

Loop'un Anatomisi 🔄

Bir chatbot'un döngüsünü yazın:

while not done:
    response = model(context, tools)
    for tool_call in response:
        result = execute(tool_call)
        context.append(result)

Bir robotun döngüsünü yazın:

while not done:
    obs = sense()
    action = policy(obs, instruction)
    execute(action)
    obs = sense()

Aynı şey. Algıla → Düşün → Yap → Tekrarla. Strands Agents'ın while-loop'u ile bir robotun kontrol döngüsü arasındaki fark, loop'un içinde ne çalıştığı. Dışarıdan bakınca ikisi de aynı kalıp.

graph LR
    subgraph "Agent Loop"
        A1[Observe<br/>user message] --> A2[Think<br/>LLM inference]
        A2 --> A3[Act<br/>tool calls]
        A3 --> A1
    end

    subgraph "Robot Loop"
        R1[Observe<br/>camera + joints] --> R2[Think<br/>policy inference]
        R2 --> R3[Act<br/>motor commands]
        R3 --> R1
    end

    style A2 fill:#0969da,stroke:#044289,color:#fff
    style R2 fill:#8250df,stroke:#5a32a3,color:#fff

Bu insight, Strands-Robots'un temelini oluşturuyor. Robot, agent'ın bir tool'u. Agent loop, kontrol döngüsünü içine alıyor.

Matruşka Bebekleri 🪆

Neon, Strands-Robots'un policy provider'larından biri. Strands-Robots, Strands Agents'ın tool'larından biri. Strands Agents, loop'un kendisi.

Loop (Strands Agents)
  └── Tool: Robot (Strands-Robots)
       └── Policy: Neon
            └── Backbone: Frozen Video Model (7B)
                 └── Eğitilen kısım: 6M parametre
                      └── O da sadece "bu feature → bu hareket" diyor
graph TB
    subgraph "En Dıştaki Bebek"
        Agent["🗣️ 'Kırmızı küpü al'<br/>Strands Agent"]
    end

    subgraph "İkinci Bebek"
        Robot["🤖 Robot Tool<br/>Strands-Robots"]
    end

    subgraph "Üçüncü Bebek"
        Policy["🧠 Neon VLA<br/>Policy Provider"]
    end

    subgraph "Dördüncü Bebek"
        Backbone["🎬 Frozen Video Model<br/>7B parametre — dokunma!"]
    end

    subgraph "En İçteki Bebek"
        Adapter["🎯 Feature → Joint Açısı<br/>6M parametre — sadece burası eğitiliyor"]
    end

    Agent --> Robot --> Policy --> Backbone --> Adapter

    style Agent fill:#2ea44f,stroke:#1b7735,color:#fff
    style Robot fill:#0969da,stroke:#044289,color:#fff
    style Policy fill:#8250df,stroke:#5a32a3,color:#fff
    style Backbone fill:#bf8700,stroke:#875e00,color:#fff
    style Adapter fill:#f85149,stroke:#da3633,color:#fff

Hepsi iç içe geçmiş matruşka bebekleri gibi. En dıştaki bebek sana "kırmızı küpü al" diyor. En içteki bebek servo motorlara açı gönderiyor. Arada dört katman var ama hiçbirini bilmek zorunda değilsin.

Beş satır yeter.

from strands_robots import Robot
from strands import Agent

robot = Robot("so100")
agent = Agent(tools=[robot])
agent("Pick up the red cube")

Neon: Video Backbone'u Dondurmanın Cesareti 🧊

Şimdi gelelim en içteki bebeğe. Neon VLA'nın cesur iddiası şu:

7 milyar parametrelik video modelini hiç eğitme. Dondur. Sadece üstüne 6 milyon parametrelik bir adapter ekle. Feature'ları motor komutlarına çevir.

Neden cesur? Çünkü herkes video modelini fine-tune ediyor. Milyonlarca dolar GPU saati harcıyorlar. Biz dedik ki: bu model zaten videoyu anlıyor — nesnelerin nasıl hareket ettiğini, fizik kurallarını, uzamsal ilişkileri. Bu bilgiyi bozmak yerine kullanmak daha akıllıca.

flowchart LR
    subgraph "Geleneksel Yaklaşım"
        V1[Video Model 7B] -->|Full Fine-tune<br/>320+ GPU-saat| P1[Robot Policy]
    end

    subgraph "Neon Yaklaşımı"
        V2[Video Model 7B ❄️<br/>FROZEN] -->|Features| A[Adapter 6M<br/>4 GPU-saat]
        A --> P2[Robot Policy]
    end

    style V1 fill:#f85149,stroke:#da3633,color:#fff
    style V2 fill:#58a6ff,stroke:#388bfd,color:#fff
    style A fill:#2ea44f,stroke:#1b7735,color:#fff

320 GPU-saat yerine 4 GPU-saat. Aynı performans — benchmark'lar gelecek, ama erken sonuçlar cesaret verici.

Analoji: Bitwise Flags Gibi

Trendyol'da order detail sayfasında 190 satır koşul mantığını 5 satıra düşürmüştük bitwise flags ile. Burada da 320 GPU-saat'i 4'e düşürdük. Farklı domain, aynı felsefe: karmaşıklık kütüphanede yaşar, kullanıcının kodunda değil.

Altı Duyu, Bir Robot 👁️👂🤚📡🗣️🦾

Neon tek kameralı değil. Altı modaliteyi birleştiriyor:

Modalite Açıklama Neden Önemli
🎬 Video Ana kamera akışı Nesne tanıma, hareket planlama
🔊 Audio Ortam sesleri Temas algılama, komut anlama
🤚 Dokunma Basınç sensörleri Kavrama kuvveti kontrolü
📡 Proprioception Joint açıları Kolun nerede olduğunu bilme
🗣️ Dil Doğal dil talimatları "Al şunu"
🦾 Action Önceki hareketler Temporal tutarlılık

Çoğu VLA modeli sadece video + dil kullanır. Neon'un farkı, video backbone'unun temporal anlayışını dokunma ve ses ile zenginleştirmesi. Bir robot nesneyi kavrarken hem görüyor, hem hissediyor, hem duyuyor.

graph TB
    subgraph "Girdi Modaliteleri"
        V[🎬 Video<br/>Frozen backbone]
        A[🔊 Audio<br/>Mel spectrogram]
        T[🤚 Touch<br/>Pressure map]
        P[📡 Proprioception<br/>Joint states]
        L[🗣️ Language<br/>Instruction]
        H[🦾 Action History<br/>Previous cmds]
    end

    F[🔀 Multi-Modal<br/>Fusion Layer]

    V --> F
    A --> F
    T --> F
    P --> F
    L --> F
    H --> F

    F --> Action[🎯 Action Chunk<br/>16 timesteps × DoF]

    style V fill:#58a6ff,stroke:#388bfd,color:#fff
    style F fill:#8250df,stroke:#5a32a3,color:#fff
    style Action fill:#2ea44f,stroke:#1b7735,color:#fff

Neden Bu Önemli? 🌍

Üç projenin birleşim noktasına bakınca:

Katman Proje Ne Yapıyor
Loop Strands Agents Agent döngüsü — algıla, düşün, yap
Tool Strands-Robots 18 policy, 32 robot, 5 satır
Policy Neon VLA Frozen backbone + 6M adapter

Her biri tek başına faydalı. Ama birlikte? Doğal dille konuştuğun bir agent, herhangi bir robotu, herhangi bir policy ile kontrol ediyor. Ve o policy'nin eğitimi 4 GPU-saat sürüyor.

Bu, robotiklerin "pip install" anı. Tıpkı web development'ta bir framework'ü npm install edip hemen kullanmaya başladığın gibi:

pip install strands-agents strands-robots neon-vla
from strands_robots import Robot
from strands import Agent

robot = Robot("so100")
agent = Agent(tools=[robot])
agent("Pick up the red cube")

Teknik Detay: Adapter Mimarisi 🔧

Meraklılar için. Neon'un adapter'ı basit ama etkili:

Video Backbone (7B, Frozen)
    │
    ▼
[Feature Extraction] ── temporal features (T×D)
    │
    ▼
[Cross-Modal Attention] ── audio, touch, proprioception inject
    │
    ▼
[Action Head MLP] ── D → DoF × chunk_size
    │
    ▼
Joint açıları (16 timestep × 6 DoF = 96 değer)

Toplam eğitilen parametre: ~6M. Toplam model: ~7B. Eğitilen oran: %0.08.

Bu, LoRA'nın VLA versiyonu gibi düşünülebilir. Büyük modeli bozmadan, küçük bir adapter ile yeni bir beceri öğretiyorsun.

Dürüstlük Notu

Benchmark'lar henüz yayınlanmadı. "Competitive" derken, internal testlerde full fine-tune modellere yakın performans gördüğümüzü kastediyorum. Resmi karşılaştırmalar gelecek. Bu yazı bir benchmark paper değil, bir mimari hikayesi.

Sokak Sanatçılığına Devam 🎷

PauSiber'de 11 yıl boyunca 1000+ seminer verdik. Find Mentor'da 3000+ kişiyi eşleştirdik. Strands Agents 14M+ download'a ulaştı. Hep aynı şeyi yapıyoruz: karmaşık şeyleri basitleştirip, paylaşıp, herkesin erişebileceği hale getiriyoruz.

Neon da öyle. Video backbone'u dondurmak çılgınca bir fikir gibi görünebilir. Ama bazen en cesur şey, elindekine dokunmamak ve sadece eksiği tamamlamaktır.

Bitwise flags'te 190 satırı 5'e düşürmüştük. Burada 320 GPU-saat'i 4'e düşürdük. Farklı domain, aynı felsefe.

Robotlar artık tek gözle yaşamak zorunda değil. Video görüyorlar. Fiziği anlıyorlar. Ve bunu yapmak için tüm modeli eğitmenize gerek yok — sadece %0.08'ini.

Başla 🚀

# Strands Agents + Robots
pip install strands-agents strands-robots

# Neon VLA (yakında)
pip install neon-vla
from strands_robots import Robot
from strands import Agent

robot = Robot("so100")
agent = Agent(tools=[robot])
agent("Pick up the red cube")

Beş satır. Bir agent. Bir robot. Frozen backbone. %0.08 eğitim. Doğal dil.

Afiyet olsun! 🍽️


Neon açık kaynak olarak yayınlanacak. pip install neon-vla — MIT lisansı.

Paper'lar: Strands-Robots | Neon VLA

— Çağatay Çalı, Karagümrük'ten sevgilerle 🏴