پرش به محتوای اصلی
پرش به محتوای مقاله

ترکیب ONNX و .NET؛ مسیر جایگزینی پایتون در استقرار مدل‌های بینایی ماشین

·۲۵ مهر ۱۴۰۵۴۸ دقیقه مطالعه
تصویری از کد سی‌شارپ برای پردازش تصویر با استفاده از کتابخانه OpenCV در محیط دات‌نت.
تصویری از کد سی‌شارپ برای پردازش تصویر با استفاده از کتابخانه OpenCV در محیط دات‌نت.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

تغییر پارادایم از اتکای مطلق به APIهای ابری به سمت اجرای بومی مدل‌های SOTA در محیط .NET با استفاده از ONNX Runtime؛ به گونه‌ای که توسعه‌دهنده کنترل کامل روی سخت‌افزار و حریم خصوصی داده‌ها دارد.

اگر امروز برای استقرار مدل‌های بینایی ماشین در محیط تولید، مجبور به مدیریت پیچیدگی‌های زیرساختی پایتون هستید، اکوسیستم .NET راهکاری بومی و بهینه برای شما دارد. با استفاده از استاندارد ONNX، توسعه‌دهندگان می‌توانند مدل‌های پیشرفته را مستقیماً روی سخت‌افزار محلی اجرا کنند و وابستگی به سرویس‌های ابری یا زبان‌های واسط را به حداقل برسانند.

به نقل از مستندات مایکروسافت، سرویس‌های ابری مانند Azure AI Vision و Document Intelligence وظایف پیچیده را به تماس‌های ساده‌ای با API تبدیل کرده‌اند. اما اکنون با ظهور اکوسیستم ONNX (Open Neural Network Exchange)، توسعه‌دهندگان .NET می‌توانند مدل‌های متن‌باز را در یک فرآیند بومی (Native Process) روی سخت‌افزار محلی اجرا کنند. این رویکرد نیاز به پایتون در محیط‌های عملیاتی را کاملاً از بین می‌برد. این دو مسیر در کنار هم، دسترسی عملی به بینایی ماشین را فراهم می‌کنند؛ حوزه‌ای که هدف آن توانمندسازی نرم‌افزار برای درک تصاویر و ویدیوها از طریق شناسایی محتویات عکس، مکان‌یابی اشیا، استخراج متن از اسناد و تشخیص اینکه آیا دو تصویر یک موجودیت واحد را نشان می‌دهند یا خیر.

یک خط لوله (Pipeline) استاندارد بینایی ماشین از یک جریان ثابت پیروی می‌کند: ابتدا تصویر یا فریم ویدیو با استفاده از کتابخانه‌هایی مثل ImageSharp، SkiaSharp یا OpenCV رمزگشایی و پیش‌پردازش می‌شود تا مواردی مثل تغییر اندازه (Resizing)، نرمال‌سازی (Normalization) و اصلاح جهت (Orientation) انجام شود. سپس این داده‌های پردازش شده به یک مدل تغذیه می‌شوند؛ این مدل می‌تواند یک API ابری، یک مدل ONNX Runtime, ML.NET یا یک مدل زبانی بزرگ چندوجهی (Multimodal LLM) باشد. در نهایت، خروجی از طریق توابع سافت‌مکس (Softmax)، محاسبات جعبه‌های محصور (Bounding Box) با استفاده از حذف غیربیشینه (Non-max Suppression) یا تجمیع متن، پس‌پردازش شده و سپس برای ذخیره‌سازی، جست‌وجو یا فعال‌سازی جریان‌های کاری (Workflow Triggers) وارد منطق کسب‌وکار می‌شود. طبق بررسی‌های فنی، اکثر باگ‌های سیستم‌های بینایی نه در خودِ مدل، بلکه در مراحل پیش‌پردازش و پس‌پردازش رخ می‌دهند. این اهمیت مدیریت دقیق مراحل پردازش، در ابزارهای نوین خط لوله AI که گردش‌کار رسانه‌ای را متحول کرده‌اند نیز به وضوح دیده می‌شود.

همان‌طور که در تحلیل‌های قبلی ما درباره‌ی بهینه‌سازی استنتاج در مدل‌های بازمتن اشاره کردیم، کاهش تأخیر در لبه (Edge) کلید موفقیت است. در این راستا، طبقه‌بندی تصاویر (Image Classification) — که شامل اختصاص یک برچسب به کل تصویر است — بنیادی‌ترین تسک است. در اکوسیستم .NET، کتابخانه ML.NET یک API سطح بالا برای آموزش و مصرف مدل‌های طبقه‌بندی فراهم می‌کند. اما برای کسانی که به عملکردی در سطح استانداردهای جهانی (State-of-the-art) نیاز دارند، ONNX Runtime معیار طلایی است. توسعه‌دهندگان می‌توانند مدل‌های پیش‌آموزش‌دیده مانند ResNet یا EfficientNet را از PyTorch یا TensorFlow به فرمت ONNX صادر کرده و بدون خروج از محیط C#، استنتاجی بسیار بهینه اجرا کنند. این روش تعادلی ایده‌آل بین دقت و تأخیر (Latency) ایجاد می‌کند.

تشخیص اشیا (Object Detection) گامی فراتر می‌رود و هم نوع (Class) و هم مکان اشیا را در یک تصویر شناسایی می‌کند. مدل‌های خانواده YOLO (You Only Look Once) به دلیل سرعت و کارایی بالا، استاندارد صنعت در این زمینه هستند. پیاده‌سازی YOLO در .NET معمولاً شامل استفاده از ONNX Runtime برای پردازش تصویر و سپس یک مرحله پس‌پردازش برای رمزگشایی تنسورهای خروجی به جعبه‌های محصور است. این فرآیند نیازمند مدیریت دقیق جعبه‌های لنگر (Anchor Boxes) و آستانه‌های اطمینان (Confidence Thresholds) است تا اطمینان حاصل شود که تنها مرتبط‌ترین اشیا شناسایی شده و جعبه‌های تکراری و هم‌پوشان از طریق حذف غیربیشینه (Non-max Suppression) فیلتر شوند.

نویسه‌خوانی نوری (OCR) برای دیجیتالی کردن اسناد حیاتی است. توسعه‌دهندگان .NET بسته به نیاز به دقت و حریم خصوصی، چندین انتخاب دارند. سرویس‌های Azure AI Vision و Document Intelligence قابلیت‌های قدرتمندی در فضای ابری ارائه می‌دهند که چیدمان‌های پیچیده و دست‌خط‌ها را به راحتی مدیریت می‌کنند. برای نیازهای آفلاین یا درون‌سازمانی (On-premises)، کتابخانه Tesseract (از طریق Wrapperها) همچنان یک گزینه متن‌باز قابل اتکا است؛ هرچند Tesseract برای دستیابی به دقت بالا، نیازمند پیش‌پردازش‌های شدیدتر تصویر (مانند دوتنی کردن یا Binarization و اصلاح کجی یا Deskewing) است. انتخاب بین OCR ابری و محلی معمولاً به حجم داده‌ها و میزان حساسیت اطلاعات پردازش شده بستگی دارد.

تشخیص چهره و بازشناسی اشیا با محدودیت‌های قانونی و اخلاقی شدیدی همراه است. در حالی که کتابخانه‌هایی مثل OpenCV می‌توانند چهره‌ها را شناسایی (Detect) کنند، اما بازشناسی (Recognize) یک فرد خاص نیازمند مقایسه بردار معنایی (Embedding) است. برای توسعه‌دهندگان ضروری است که کنترل‌های سخت‌گیرانه حریم خصوصی داده‌ها را پیاده کنند تا با مقرراتی مانند GDPR و CCPA مطابقت داشته باشند. داده‌های بیومتریک باید به‌صورت بردار‌های هش‌شده ذخیره شوند و هرگز نباید از تصاویر خام استفاده کرد. همچنین دریافت رضایت صریح کاربر الزامی است. پیاده‌سازی اخلاقی این سیستم‌ها مستلزم کاهش سوگیری (Bias) در مجموعه‌های آموزشی است تا سیستم به‌طور عادلانه برای تمامی گروه‌های دموگرافیک عمل کند.

رویکرد جدید، حرکت به سمت درک برداری است. در اینجا تصویر به جای یک برچسب ساده، به یک بردار با ابعاد بالا (Embedding) تبدیل می‌شود که محتوای معنایی آن را نمایندگی می‌کند. با ذخیره این بردارها در یک پایگاه‌داده برداری (Vector Database)، قابلیت «یافتن تصاویر مشابه» پیاده‌سازی می‌شود. این کار از طریق محاسبه شباهت کسینوسی (Cosine Similarity) بین بردار تصویر پرس‌وجو (Query) و بردارهای موجود در پایگاه‌داده انجام می‌شود. این تکنیک، زیربنای موتورهای جست‌وجوی بصری مدرن و سیستم‌های توصیه‌گر است.

سرویس Azure AI Vision مجموعه‌ای جامع از ابزارهای پیش‌ساخته ارائه می‌دهد که پیچیدگی مدیریت مدل را می‌پوشاند. از برچسب‌گذاری تصاویر (Tagging) و شرح‌نویسی (Captioning) گرفته تا تحلیل‌های مکانی (Spatial Analysis)، این سرویس‌ها اجازه می‌دهند با کمترین کدنویسی، هوشمندی را به اپلیکیشن‌ها اضافه کنید. با این حال، هزینه این راحتی، وابستگی به اتصال ابری و هزینه‌های جاری است. برای بسیاری از سازمان‌ها، یک رویکرد ترکیبی (Hybrid) ایده‌آل است: استفاده از Azure AI برای کارهای پیچیده با حجم کم، و استفاده از ONNX Runtime برای نیازهایی با حجم بالا و تأخیر کم.

برای دستکاری‌های سطح پایین تصویر، ادغام OpenCV از طریق OpenCvSharp ضروری است. OpenCV مبانی ریاضی بینایی ماشین، از جمله تشخیص لبه‌ها (Edge Detection)، یافتن کانتورها (Contouring) و تبدیل‌های فضای رنگی را فراهم می‌کند. اگر مدل‌های سطح بالا به ما می‌گویند «چه چیزی» در تصویر است، OpenCV هندسه و «چگونگی» تصویر را مدیریت می‌کند. در کنار آن، APIهای پردازش تصویر مانند ImageSharp و SkiaSharp قرار دارند. ImageSharp یک کتابخانه کاملاً مدیریت‌شده و چندپلتفرمی است که برای برش (Cropping)، تغییر اندازه و فیلترهای پایه ایده‌آل است. در مقابل، SkiaSharp بر پایه موتور Skia گوگل، گرافیک‌های دو‌بعدی با شتاب سخت‌افزاری ارائه می‌دهد و برای رندرینگ‌های با کارایی بالا مناسب است.

ظهور مدل‌های زبانی بزرگ (LLM) چندوجهی، بینایی ماشین کلاسیک را به چالش کشیده است. مدل‌های کلاسیک در کارهای خاص و قطعی مثل «تشخیص یک پیچ در خط تولید کارخانه» عالی هستند، اما مدل‌های چندوجهی (Multimodal) — مثل GPT-4o یا Claude 3.5 Sonnet — می‌توانند تصویر را به زبان طبیعی توصیف کنند، درباره زمینه (Context) استدلال کنند و به پرسش‌های پیچیده درباره صحنه بصری پاسخ دهند. این توانایی در تحلیل‌های پیشرفته‌تر، مشابه رویکرد خط لوله نظارتی Shadow برای حذف آرتیفکت‌های تصویری است که از مدل‌های چندوجهی برای حفظ ثبات بصری استفاده می‌کند. آینده توسعه در .NET، ارکستراسیون این دو است: استفاده از بینایی کلاسیک برای تشخیص‌های سریع و قطعی، و مدل‌های چندوجهی برای تفسیر و استدلال سطح بالا.

ساخت یک سرویس تولیدی در ASP.NET Core نیازمند تمرکز بر مقیاس‌پذیری و مدیریت منابع است. چون مدل‌های بینایی از نظر محاسباتی گران هستند، نباید مستقیماً در چرخه درخواست-پاسخ (Request-Response) یک API وب اجرا شوند. پیشنهاد می‌شود از الگوی تولیدکننده-مصرف‌کننده (Producer-Consumer) با استفاده از یک صف پیام (مثل RabbitMQ یا Azure Service Bus) و یک سرویس Worker در پس‌زمینه استفاده کنید. این معماری از Timeout شدن API جلوگیری کرده و اجازه می‌دهد گره‌های پردازشی (Worker Nodes) را بر اساس بار GPU یا CPU به‌طور مستقل مقیاس‌دهی کنید. علاوه بر این، پیاده‌سازی یک لایه کشینگ (Caching) برای تصاویری که به‌طور مکرر پردازش می‌شوند، می‌تواند تأخیر را به‌طور چشم‌گیری کاهش دهد.

ارزیابی این سیستم‌ها تنها با درصد صحت (Accuracy) ممکن نیست. توسعه‌دهندگان باید دقت (Precision) — اینکه چند تشخیص واقعاً درست بوده — و فراخوانی (Recall) — اینکه چند درصد از اشیای واقعی پیدا شده‌اند — را رصد کنند. معیار میانگین دقت میانگین (mAP) استاندارد طلایی برای ارزیابی تشخیص اشیا است. همچنین در محیط تولید، رصد «تأخیر استنتاج» (Inference Latency) — یعنی زمانی که مدل برای پردازش یک تصویر نیاز دارد — برای تجربه کاربر حیاتی است. یک اشتباه رایان، نادیده گرفتن «رانش داده‌ها» (Data Drift) است؛ زمانی که تصاویری که در محیط واقعی دریافت می‌شوند با تصاویری که مدل با آن‌ها آموزش دیده تفاوت معناداری دارند. این امر نیازمند ایجاد یک خط لوله برای نظارت مستمر و بازآموزی (Retraining) مدل است.

در نهایت، انتخاب مسیر به محدودیت‌های خاص پروژه بستگی دارد. اگر هدف، نمونه‌سازی سریع با دقت بالا و زمان توسعه کم است، Azure AI Vision بهترین انتخاب است. اگر پروژه نیازمند قابلیت آفلاین، تأخیر بسیار کم و کنترل کامل روی مدل است، ترکیب ONNX Runtime و OpenCvSharp مسیر برتر است. برای دستکاری‌های ساده تصویر و طبقه‌بندی‌های پایه، ML.NET تجربه‌ای ساده و یکپارچه فراهم می‌کند که به‌راحتی با اکوسیستم موجود .NET ادغام می‌شود. با ترکیب این ابزارها، توسعه‌دهندگان .NET می‌توانند سیستم‌های بینایی قدرتمند، مقیاس‌پذیر و هوشمندی بسازند که قادر به حل مسائل واقعی دنیا باشند.

به طور خلاصه، اکوسیستم .NET برای بینایی ماشین به یک جعبه‌ابزار قدرتمند تبدیل شده است. با تسلط بر خط لوله پیش‌پردازش، استنتاج مدل و پس‌پردازش، توسعه‌دهندگان می‌توانند هم از کارایی مدل‌های محلی ONNX و هم از قدرت AI ابری بهره ببرند. چه هدف اتوماسیون اسناد از طریق OCR باشد، چه پیاده‌سازی جست‌وجوی بصری از طریق بردارها، یا استقرار یک سرویس بینایی مقیاس پذیر در ASP.NET Core، ادغام این فناوری‌ها اجازه خلق اپلیکیشن‌های پیچیده‌ای را می‌دهد که می‌توانند دنیای بصری را ببینند، بفهمند و بر اساس آن عمل کنند. با تکامل مدل‌های چندوجهی، مرز بین بینایی و زبان کمرنگ‌تر خواهد شد و فرصت‌های جدیدی برای تعامل بصری انسان و کامپیوتر در چارچوب .NET ایجاد می‌کند.

گام بعدی شما

  • بررسی مستندات ONNX Runtime برای تبدیل مدل‌های PyTorch به فرمت قابل اجرا در C#.
  • پیاده‌سازی یک صف پیام با RabbitMQ برای جداسازی پردازش سنگین مدل از API وب.
  • جایگزینی ذخیره‌سازی تصاویر خام با بردار معنایی در یک پایگاه‌داده برداری برای پیاده‌سازی جست‌وجوی بصری.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell و بهینه‌سازی استنتاج مراجعه کنید.

چرا این موضوع مهم است؟

این رویکرد با حذف نیاز به زیرساخت‌های پایتون در محیط تولید، هزینه نگهداری و تأخیر استنتاج را به‌شدت کاهش می‌دهد. اعتبار این متدولوژی از پذیرش گسترده استاندارد ONNX توسط غول‌های سخت‌افزاری و نرم‌افزاری تأیید شده است.

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که با محدودیت‌های دسترسی به APIهای ابری (مانند Azure) مواجه‌اند، استفاده از ONNX Runtime و مدل‌های وزن‌باز، تنها راه عملی برای پیاده‌سازی سیستم‌های بینایی ماشین در مقیاس صنعتی و آفلاین است.

·نگاه ما
تحریریه دات‌هوش

انتقال مدل‌های بینایی از محیط‌های پایتونی به .NET از طریق ONNX، در واقع پایان دوران «دو-زبانه بودن» استقرار (Deployment) است. این تغییر باعث می‌شود لایه عملیاتی (Ops) از پیچیدگی‌های مدیریت محیط‌های مجازی پایتون رها شده و امنیت و پایداری کد مدیریت‌شده (Managed Code) را در مقیاس صنعتی تجربه کند. به نظر ما، این حرکت، مسیر را برای ادغام عمیق‌تر مدل‌های استدلالی در نرم‌افزارهای سازمانی هموار می‌کند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.