{ "cells": [ { "cell_type": "markdown", "id": "61cbe17c", "metadata": {}, "source": [ "# Module 4: MoonViT-V2 Spatial Patchify Vision Pathway\n", "\n", "## 💡 Concept Primers\n", "- **MoonViT-V2 Spatial Patchify**: Projects 2D pixel patches directly into the unified LLM embedding space without requiring contrastive pre-training." ] }, { "cell_type": "code", "execution_count": 1, "id": "85d42604", "metadata": { "execution": { "iopub.execute_input": "2026-08-10T04:28:01.749058Z", "iopub.status.busy": "2026-08-10T04:28:01.748770Z", "iopub.status.idle": "2026-08-10T04:28:03.033075Z", "shell.execute_reply": "2026-08-10T04:28:03.031590Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input Image Batch Shape: torch.Size([2, 3, 32, 32])\n", "Spatial Patchified Token Shape: torch.Size([2, 4, 64])\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAHqCAYAAABSldSPAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQGJJREFUeJzt3QmcTfX/x/Hv7GOMsY5t7FFCRNpIpChLi/YsZamUUIqKFmSpRGihUIokbajIElIpqV9UiGTLOnZjNrPd/+NzcjUz95p7ffrmdv/zej4ek+be855z7r3nns853/M95xvicrlcBgAA/GOh//xPAAAAiioAABZxpAoAgCUUVQAALKGoAgBgCUUVAABLKKoAAFhCUQUAwBKKKgAAhbWovvXWWyYkJMT5+fLLLz2elxtE1axZ03m+RYsWJtD69evnLMuGDRtOOc0TTzzhTPPTTz85r8n92rZt23bytfr6kWndMjMzTbly5cwll1xyynnm5OSYKlWqmPr16zu//+9//zMPPPCAOe+880yxYsWc/FVXXWWWLl162p+L/ERHR5vy5cubK664wjz77LNm3759HpkhQ4Y40wbCyJEjzZw5c/yeftq0aeb2228355xzjgkNDTXVqlUrcPpvvvnGtG3b1pQsWdIUKVLE1KpVywwbNky1rJ999pm58847nc8mIiLC53u2du1ac8stt5j4+HgTFRXlLGuvXr38mtf3339vOnTo4KwbkpX14NJLLzWPPPKICdRnkvs7cbr8zbqnc/+EhYU5r13ex99+++205/vuu++acePGGS1Zht69e/v9vcv9/RdPPvmk8xmGh4ebEiVKGBuOHz9uXn31VdO8eXNTunRpZ12Uf2U7+/rrr5tjx4759Xfc2zVZdl8CuY0oNEXVTTb8b7zxhsfjy5cvN5s3b3ae/y/o0aOH8++bb755yuImG+zzzz/fNGrUyPn57rvvnH8rVKjg/H/un4YNG5oaNWp4PC7TusnK3qVLF2cDuX79eq/z/eKLL8yOHTtOLt/MmTPNqlWrTPfu3c3cuXPNlClTnI3qlVde6Syfv6ZOneosz+LFi50voLyu559/3px77rnOPHO7++67nWmDoahOnz7drFu3zlx00UXmrLPO8rlBlQ1P8eLFnfdu/vz55rHHHnN2+DRmz55tVq5caerUqWMaNGhQ4LTLli1zljEpKcm89tprZtGiRU4xl50cX+bNm2eaNGniZEeNGuVkx48fb5o2bWpmzZplAvWZ5P5OnIllkHnJ+yifmazH8vp37dp1Rouqv9q1a+fx/Zfv74gRI5wdMdke5v/eaezfv99ZNx5++GFnx3LSpEnODrdsg2XH/NFHH/V7x63Cie2aLPv/S64gM3XqVNkyue6++25XkSJFXEePHs3zfOfOnV2XXnqpq27duq7mzZu7/gsuuugiV/ny5V2ZmZkez33++efO63n55Zf9+lvymuS1+bJ+/Xrn7z7yyCNen7/ttttckZGRrgMHDji/JyYmekyTlZXlql+/vuuss87y+3P54YcfPJ7bvn27q3Llyq5ixYq59u7d6zpdqampLtuKFi3quuuuu/yePjs7++T/t2vXzlW1alWv0+3cudP52/fff7+V5cw/7wceeMB5n71JSUlxVahQwVm+nJyc057P5Zdf7nzW3tbT3Mvwbzndz8Qfy5Ytc94v+def6T744IM8j7/xxhvO48OHDz+t+Ra0jvhD5imftYYsq+S9fae1Wrdu7YqIiHAtX77c6/OyHZk+fXqBf0O2J+np6ac138GDB59yff+vCtoj1TvuuOPkEZbb0aNHzUcffeQcbXlz6NAhZ28qISHBREZGOkd80vQqzRq5paenm4EDB5rq1as708n00jR65MiRPNNJs1r79u3NggULnL1oaearXbu2x1GpHA3u3bvXfP75516P7OSIsFOnTv+4qSs3OTKUZjs5wsrKysrznLwO2Zu9/vrrneYbUbZsWY+/IU1gF1xwgXNE+09IM9SYMWOc5iFpJiqoacf9nn788cfOUbkcYQ0dOtR5Tt7Dnj17mkqVKjmfi3w+8lz+1yef5zPPPOO8B5KX1yjN0N9++63zvMwzJSXFvP322yeb+3ydKpAmX3/IEb78bTnK8dU8LC0K/fv399qcl7sVxt95f/DBB2bPnj1mwIABqiazgwcPmjJlyjhNhvnlXwb35yRH0XKkIu+zfJ9eeuklj++SNB1Li4UcuZcqVcpZL2X9y62gz8Tbd+LHH390muNlOeR7J//KNmH79u3GJvcpFPffldaXyy+/3Pm+FC1a1GmSl6N6OeXiJsstR/2Syd2k7O/6mZt8f2W6mJgYp5VCTgUU1Pwr74M0/QppvpbnBg8e7Jx+uPrqqz3+fnJysvO5yPbtVH744Qen1eLee+91Xrs38ho6d+7s0cQr783w4cOd76ps56QF4FTNv/KeyXoi08n0o0ePNkHJFWRyHxF16dLFOQp0mzhxorO3m5SU5HGkmpaW5hx1yfOjR492LVq0yPXUU0+5wsPDXW3btj05nezhX3311c7j8rxMJ9NLrmHDhnn2tGRPtFKlSq46deq4pk2b5lq4cKHrlltucZYv9x6dLE9MTIzrhhtuyPNaDh065IqKinLdfvvtfu9Z+3ukKqZMmeL8rTlz5uR5/NVXX3UeX7BgQYF5OWKpWbOm87r/yZGqSE5OdoWFhbmuvPLKAvdC5T2Vo60aNWq43nzzTed9WLVqlWvPnj3O0a48//rrr7u++OIL17Bhw5z3r2vXrnmW+YorrnA+v/79+7vmz5/v+uSTT1yDBg1yzZw505nmu+++c1o55HOX/5efdevWuWwchbRs2dJVqlQp571t0KCB85rj4+NdPXv29GhVee6555zXP3fuXOf3tWvXOuuJtLacSkFHqt27d3eeW7Jkiatp06bOkUWJEiWc9WvXrl0+X5e0/ki+T58+rpUrV7oyMjJOOa28/oSEBFeVKlWcz0ne506dOjn5F1544eR0R44ccT4fOYpZunSp877I5xIaGup6++23T05X0Gfi7TshR5RPP/20a/bs2c537b333nO+G/Je79+/39qRqnw28risP6Jfv37OdkZeh7yesWPHusqUKePq1q3byYwst7z/0jrlfi3y4+/6KWSe1apVc7Zv77//vjNdixYtnNzmzZs9vndbt251fv/pp59cPXr0OPn9lvnu2LHDNX78eFdISIjr999/97otKGj9HzFihDONbN/8tXXrVicj64i83g8//NDZlsrj7udk2d3k+yzflcsuu8z18ccfO5/DhRde6KxfwVamgmtp82283V8E2RgJ+RDcG9j8RfW1115zppUVNLfnn3/eeVw+cCErovw+atSoPNPNmjXLeXzSpEl5NizR0dFO82bu4i0bVdmI5ibNWrKRy90kI02+8jcXL178rxTVY8eOuWJjY13XXXddnscvuOACp0D5atJ74oknvBZlTVEV5cqVc5177rk+i6p8uTZu3JjncXk/5bXkfq+F7PDk3ijIzo38Pnny5H+tqbGgonrOOec464Q0dY8cOdL5HGVdkoIhG9rczbLy/1JEpPDJOiw7Z7Vr13Z2QDRFVXYG5Tn5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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import torch\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from pathlib import Path\n", "import subprocess, sys, tempfile\n", "repo = next((p for p in (Path.cwd(), *Path.cwd().parents) if (p / 'src').is_dir()), None)\n", "if repo is None:\n", " repo = (Path('/content') if Path('/content').is_dir() else Path(tempfile.gettempdir())) / 'build-Kimi-K3-architecture'\n", " if not (repo / 'src').is_dir():\n", " subprocess.run(['git', 'clone', '--depth', '1', 'https://github.com/mailtotanvir/build-Kimi-K3-architecture.git', str(repo)], check=True)\n", "sys.path.insert(0, str(repo))\n", "\n", "from src.architecture.vision_pathway import MoonViTV2Patchify\n", "\n", "B, C, H, W = 2, 3, 32, 32\n", "patchify = MoonViTV2Patchify(patch_size=16, in_channels=C, d_model=64)\n", "images = torch.randn(B, C, H, W)\n", "\n", "tokens = patchify(images)\n", "print(f\"Input Image Batch Shape: {images.shape}\")\n", "print(f\"Spatial Patchified Token Shape: {tokens.shape}\")\n", "\n", "# Plot Spatial Patchify Grid\n", "fig, ax = plt.subplots(figsize=(5, 5))\n", "dummy_img = np.random.rand(32, 32, 3)\n", "ax.imshow(dummy_img)\n", "ax.axvline(x=16, color='white', linestyle='--', linewidth=2)\n", "ax.axhline(y=16, color='white', linestyle='--', linewidth=2)\n", "ax.set_title(\"MoonViT-V2 Direct 16x16 Spatial Patchify Grid\")\n", "ax.axis('off')\n", "plt.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.6" } }, "nbformat": 4, "nbformat_minor": 5 }