2024/10/21
: نصدر سلسلة Mini-InternVL. تحقق هذه الطرازات أداءً رائعًا مع حجم صغير: يحقق الطراز 4B 90% من الأداء مع 5% فقط من حجم النموذج. لمزيد من التفاصيل، يرجى مراجعة صفحة المشروع والوثيقة.
2024/08/01
: قام فريق Chartmimic بتقييم نماذج سلسلة InternVL2 وفقًا للمعايير الخاصة بهم. حقق طرازا InternVL2-26B و76B أفضل أداءين بين النماذج مفتوحة المصدر، حيث تجاوز نموذج InternVL2 76B GeminiProVision وأظهر نتائج مماثلة لـ Claude-3-opus.
2024/08/01
: حقق InternVL2-Pro أداء SOTA بين النماذج مفتوحة المصدر في مجموعة بيانات CharXiv، متجاوزًا العديد من النماذج مغلقة المصدر مثل GPT-4V وGemini 1.5 Flash وClaude 3 Sonnet.
2024/07/24
: قام فريق MLVU بتقييم InternVL-1.5 وفقًا لمعيارهم القياسي. وبلغ متوسط الأداء في مهمة الاختيار من متعدد 50.4%، بينما بلغ الأداء في المهام التوليدية 4.02. احتل الأداء في مهمة الاختيار من متعدد المرتبة الأولى بين جميع MLLMs مفتوحة المصدر.
2024/07/18
: ؟؟ حقق InternVL2-40B أداء SOTA بين النماذج مفتوحة المصدر في مجموعة بيانات Video-MME، حيث سجل 61.2 عند إدخال 16 إطارًا و64.4 عند إدخال 32 إطارًا. إنه يتفوق بشكل كبير على النماذج مفتوحة المصدر الأخرى وهو أقرب نموذج مفتوح المصدر إلى GPT-4o mini.
2024/07/18
: ؟ حقق InternVL2-Pro أداء SOTA وفقًا لمعايير DocVQA وInfoVQA.
2024/07/04
: ؟ قمنا بإصدار سلسلة InternVL2. حقق InternVL2-Pro دقة بنسبة 62.0% وفقًا لمعيار MMMU، مما يتوافق مع أداء النماذج التجارية الرائدة مغلقة المصدر مثل GPT-4o. يمكن تطبيق واجهة برمجة التطبيقات المجانية لهذا النموذج عن طريق ملء (نموذج الطلب) / (申请表). نماذج أخرى متوفرة في رابط HF.
2024/06/19
: نقترح "إبرة في كومة قش متعددة الوسائط" (MM-NIAH)، وهو المعيار الأول المصمم لتقييم قدرة MLLMs الحالية على فهم المستندات الطويلة متعددة الوسائط بشكل منهجي.
2024/05/30
: أطلقنا ShareGPT-4o، وهي مجموعة بيانات واسعة النطاق نخطط لفتحها مع 200 ألف صورة و10 آلاف مقطع فيديو و10 آلاف صوت مع أوصاف تفصيلية.
2024/05/28
: شكرًا لفريق lmdeploy على تقديم دعم تكميم AWQ. يتوفر نموذج 4 بت في OpenGVLab/InternVL-Chat-V1-5-AWQ.
2024/05/13
: يمكن الآن استخدام InternVL 1.0 كمشفر نص لنماذج الانتشار لدعم الإنشاء متعدد اللغات محليًا بأكثر من 110 لغة حول العالم. انظر مولان لمزيد من التفاصيل.
2024/04/18
: تم إصدار InternVL-Chat-V1-5 على رابط HF، مما يقترب من أداء GPT-4V وGemini Pro على معايير مختلفة مثل MMMU وDocVQA وChartQA وMathVista وما إلى ذلك.
2024/02/27
: تم قبول InternVL بواسطة CVPR 2024 (عن طريق الفم)! ؟
2024/02/21
: حقق InternVL-Chat-V1-2-Plus أداء SOTA على MathVista (59.9)، وMMBench (83.8)، وMMVP (58.7). انظر مدونتنا لمزيد من التفاصيل.
2024/02/12
: تم إصدار InternVL-Chat-V1-2. لقد حقق 51.6 في اختبار MMMU و 82.3 في اختبار MMBench. لمزيد من التفاصيل، يرجى الرجوع إلى مدونتنا وبيانات SFT. النموذج متاح الآن على HuggingFace، وكل من بيانات التدريب/التقييم والبرامج النصية مفتوحة المصدر.
2024/01/24
: تم إصدار InternVL-Chat-V1-1، وهو يدعم اللغة الصينية ويتمتع بقدرة أقوى على التعرف الضوئي على الحروف، انظر هنا.
2024/01/16
: قمنا بإصدار كود mmcv/mmsegmentation/mmdetection المخصص الخاص بنا، والمتكامل مع DeepSpeed، والذي يمكن استخدامه لتدريب نماذج الكشف والتجزئة واسعة النطاق.
دعم vLLM وOllama
إعادة بناء المستندات باستخدام readthedocs
دعم ضبط LLMs المختلفة باستخدام LoRA
دعم إدخال الفيديو وPDF في العرض التوضيحي عبر الإنترنت
قم بإصدار InternVL2 مع تكامل VisionLLMv2
requirements.txt
الإصدار.txt لـ InternVL2
إطلاق كود التدريب/التقييم لسلسلة InternVL2
إطلاق واجهة مستخدم الويب Streamlit لـ InternVL1.5 وInternVL2
ابدأ
التثبيت: [البيئة] [requirements.txt]
إعداد بيانات التقييم: [تقييم InternVL]
تنسيق بيانات الدردشة: [ملف التعريف] [نص خالص] [صورة واحدة] [صور متعددة] [فيديو]
واجهة برمجة تطبيقات InternVL-Chat: [InternVL2-Pro]
العرض التجريبي للدردشة المحلية: [عرض متدفق] [عرض Gradio التجريبي] [LMDeploy Demo]
البرامج التعليمية: [تعزيز InternVL2 على التسمية التوضيحية لـ COCO باستخدام الضبط الدقيق لـ LoRA]
عائلة InterVL
InternVL 2.0: [مقدمة] [البدء السريع] [الضبط الدقيق] [التقييم] [النشر]
InternVL 1.5: [مقدمة] [البدء السريع] [الضبط الدقيق] [التقييم] [النشر]
InternVL 1.2: [مقدمة] [بداية سريعة] [الضبط الدقيق] [التقييم]
InternVL 1.1: [مقدمة] [بداية سريعة] [تقييم]
InternVL 1.0: [التصنيف] [CLIP-Benchmark] [التجزئة] [InternVL-Chat-LLaVA] [InternVL-G]
اسم النموذج | جزء الرؤية | جزء اللغة | رابط اتش اف | رابط ام اس | وثيقة |
---|---|---|---|---|---|
إنترنVL2-1B | إنترنفيت-300M-448px | Qwen2-0.5B-إرشاد | ؟ وصلة | ؟ وصلة | ؟ وثيقة |
إنترنVL2‑2B | إنترنفيت-300M-448px | interlm2-chat-1-8b | ؟ وصلة | ؟ وصلة | ؟ وثيقة |
إنترنVL2‑4B | إنترنفيت-300M-448px | Phi-3-mini-128k-instruct | ؟ وصلة | ؟ وصلة | ؟ وثيقة |
إنترنVL2‑8B | إنترنفيت-300M-448px | interlm2_5‑7b-دردشة | ؟ وصلة | ؟ وصلة | ؟ وثيقة |
إنترنVL2‑26B | إنترنفيت-6B-448px-V1-5 | interlm2-chat-20b | ؟ وصلة | ؟ وصلة | ؟ وثيقة |
إنترنVL2‑40B | إنترنفيت-6B-448px-V1-5 | نوس-هيرميس-2-يي-34B | ؟ وصلة | ؟ وصلة | ؟ وثيقة |
إنترنVL2-Llama3-76B | إنترنفيت-6B-448px-V1-5 | هيرميس-2-ثيتا- اللاما-3-70ب | ؟ وصلة | ؟ وصلة | ؟ وثيقة |
نرحب بالجميع لاستخدام واجهة برمجة التطبيقات (API) الخاصة بنا للبحث. لإدارة أفضل، يرجى إرسال (نموذج الطلب) / (申请表) للحصول على وصول مجاني لواجهة برمجة التطبيقات (API).
نموذج | تاريخ | رابط اتش اف | رابط ام اس | ملحوظة |
---|---|---|---|---|
Mini‑InternVL‑Chat‑4B‑V1‑5 | 2024.05.28 | ؟ وصلة | ؟ وصلة | ؟؟ 16% من حجم النموذج، 90% من الأداء |
Mini‑InternVL‑Chat‑2B‑V1‑5 | 19.05.2024 | ؟ وصلة | ؟ وصلة | ؟ 8% من حجم النموذج، 80% من الأداء |
InterVL-الدردشة-V1-5 | 2024.04.18 | ؟ وصلة | ؟ وصلة | دعم صورة 4K. التعرف الضوئي على الحروف القوي للغاية؛ الاقتراب من أداء GPT-4V وGemini Pro وفقًا لمعايير مختلفة مثل MMMU وDocVQA وChartQA وMathVista وما إلى ذلك. |
InterVL-Chat-V1-2-Plus | 2024.02.21 | ؟ وصلة | ؟ وصلة | المزيد من بيانات SFT وأقوى |
InterVL-Chat-V1-2 | 2024.02.11 | ؟ وصلة | ؟ وصلة | رفع مستوى LLM إلى 34B |
InterVL-Chat-V1-1 | 2024.01.24 | ؟ وصلة | ؟ وصلة | دعم التعرف الضوئي على الحروف الصيني والأقوى |
InterVL-Chat-19B | 2023.12.25 | ؟ وصلة | ؟ وصلة | حوار متعدد الوسائط باللغة الإنجليزية |
InterVL-Chat-13B | 2023.12.25 | ؟ وصلة | ؟ وصلة | حوار متعدد الوسائط باللغة الإنجليزية |
نموذج | تاريخ | رابط اتش اف | رابط ام اس | ملحوظة |
---|---|---|---|---|
إنترنفيت-300M-448px | 2024.05.25 | ؟ وصلة | ؟ وصلة | نموذج أساس الرؤية الصغيرة المقطرة بمعلمات 300 مليون (؟ جديد) |
إنترنفيت-6B-448px-V1-5 | 2024.04.20 | ؟ وصلة | ؟ وصلة | دعم الدقة الديناميكية وإمكانية استخراج ميزات التعرف الضوئي على الحروف (OCR) القوية للغاية من خلال التدريب المسبق المتزايد (؟ الجديد) |
إنترنفيت-6B-448px-V1-2 | 2024.02.11 | ؟ وصلة | ؟ وصلة | دعم دقة 448 عن طريق التدريب المسبق الإضافي |
إنترنفيت-6B-448px-V1-0 | 30.01.2024 | ؟ وصلة | ؟ وصلة | دعم دقة 448 عن طريق التدريب المسبق الإضافي |
إنترفينيت-6B-224px | 2023.12.22 | ؟ وصلة | ؟ وصلة | الإصدار الأول من InternViT-6B، المستخرج من InternVL‑14B‑224px |
نموذج | تاريخ | رابط اتش اف | رابط ام اس | ملحوظة |
---|---|---|---|---|
إنترنVL-14B-224px | 2023.12.22 | ؟ وصلة | ؟ وصلة | يمكن استخدام النموذج الأساسي للغة الرؤية، InternViT-6B + QLLaMA، لاسترجاع نص الصورة مثل CLIP |
تصنيف صور المسبار الخطي [انظر التفاصيل]
يستخدم ViT-22B مجموعة بيانات JFT-3B الخاصة.
طريقة | #param | في-1K | في ريال | في-V2 | في-أ | في-R | في الرسم |
---|---|---|---|---|---|---|---|
أوبينكليب-G | 1.8 ب | 86.2 | 89.4 | 77.2 | 63.8 | 87.8 | 66.4 |
دينوv2-ز | 1.1 ب | 86.5 | 89.6 | 78.4 | 75.9 | 78.8 | 62.5 |
إيفا-01-كليب-ز | 1.1 ب | 86.5 | 89.3 | 77.4 | 70.5 | 87.7 | 63.1 |
ماس-فيت-6.5ب | 6.5 ب | 87.8 | - | - | - | - | - |
فيتامين-22ب* | 21.7 ب | 89.5 | 90.9 | 83.2 | 83.8 | 87.4 | - |
إنترنفيت-6B (لنا) | 5.9 ب | 88.2 | 90.4 | 79.9 | 77.5 | 89.8 | 69.1 |
التجزئة الدلالية [انظر التفاصيل]
طريقة | فك التشفير | #param (القطار/الإجمالي) | حجم المحاصيل | mIoU |
---|---|---|---|---|
OpenCLIP-G (مجمد) | خطي | 0.3 م/1.8 ب | 512 | 39.3 |
ViT-22B (مجمد) | خطي | 0.9 م / 21.7 ب | 504 | 34.6 |
إنترنفيت-6B (مجمد) | خطي | 0.5 م / 5.9 ب | 504 | 47.2 (+12.6) |
ViT-22B (مجمد) | أوبر نت | 0.8 ب / 22.5 ب | 504 | 52.7 |
إنترنفيت-6B (مجمد) | أوبر نت | 0.4 ب / 6.3 ب | 504 | 54.9 (+2.2) |
فيت-22ب | أوبر نت | 22.5 ب / 22.5 ب | 504 | 55.3 |
إنترفيت-6B | أوبر نت | 6.3 ب / 6.3 ب | 504 | 58.9 (+3.6) |
تصنيف الصور بدون لقطة (انظر التفاصيل)
طريقة | في-1K | في-أ | في-R | في-V2 | في الرسم | كائن نت |
---|---|---|---|---|---|---|
أوبينكليب-G | 80.1 | 69.3 | 92.1 | 73.6 | 68.9 | 73.0 |
إيفا-02-كليب-E+ | 82.0 | 82.1 | 94.5 | 75.7 | 71.6 | 79.6 |
فيتامين-22ب* | 85.9 | 90.1 | 96.0 | 80.9 | - | 87.6 |
InterVL-C (لنا) | 83.2 | 83.8 | 95.5 | 77.3 | 73.9 | 80.6 |
تصنيف الصور Zero-Shot متعدد اللغات [انظر التفاصيل]
EN: الإنجليزية، ZH: الصينية، JP: اليابانية، Ar: العربية، IT: الإيطالية
طريقة | IN-1K (EN) | IN-1K (ZH) | IN-1K (JP) | IN-1K (AR) | IN-1K (إيطاليا) |
---|---|---|---|---|---|
تايي-CLIP-ViT-H | - | 54.4 | - | - | - |
وو كونغ-فيت-إل جي | - | 57.5 | - | - | - |
CN-CLIP-ViT-H | - | 59.6 | - | - | - |
البديلCLIP-ViT-L | 74.5 | 59.6 | - | - | - |
إيفا-02-كليب-E+ | 82.0 | - | - | - | 41.2 |
أوبينكليب-XLM-RH | 77.0 | 55.7 | 53.1 | 37.0 | 56.8 |
InterVL-C (لنا) | 83.2 | 64.5 | 61.5 | 44.9 | 65.7 |
تصنيف الفيديو Zero-Shot
طريقة | #إطار | ك 400 | K600 | K700 |
---|---|---|---|---|
أوبينكليب-G | 1 | 65.9 | 66.1 | 59.2 |
إيفا-02-كليب-E+ | 1 | 69.8 | 69.3 | 63.4 |
InterVL-C (لنا) | 1 | 71.0 | 71.3 | 65.7 |
ViCLIP | 8 | 75.7 | 73.5 | 66.4 |
InterVL-C (لنا) | 8 | 79.4 | 78.8 | 71.5 |
الإنجليزية Zero-Shot Image-Text Retrieval (انظر التفاصيل)
نموذج | فليكر30ك | كوكو | متوسط | ||||||||||
صورة إلى نص | تحويل النص إلى صورة | صورة إلى نص | تحويل النص إلى صورة | ||||||||||
ص @ 1 | ص @ 5 | ص @ 10 | ص @ 1 | ص @ 5 | ص @ 10 | ص @ 1 | ص @ 5 | ص @ 10 | ص @ 1 | ص @ 5 | ص @ 10 | ||
أوبينكليب-G | 92.9 | 99.3 | 99.8 | 79.5 | 95.0 | 97.1 | 67.3 | 86.9 | 92.6 | 51.4 | 74.9 | 83.0 | 85.0 |
إيفا-02-كليب-E+ | 93.9 | 99.4 | 99.8 | 78.8 | 94.2 | 96.8 | 68.8 | 87.8 | 92.8 | 51.1 | 75.0 | 82.7 | 85.1 |
إيفا-كليب-8B | 95.6 | 99.6 | 99.9 | 80.8 | 95.5 | 97.6 | 70.3 | 89.3 | 93.9 | 53.0 | 76.0 | 83.4 | 86.2 |
InterVL-C (لنا) | 94.7 | 99.6 | 99.9 | 81.7 | 96.0 | 98.2 | 70.6 | 89.0 | 93.5 | 54.1 | 77.3 | 84.6 | 86.6 |
InterVL-G (لنا) | 95.7 | 99.7 | 99.9 | 85.0 | 97.0 | 98.6 | 74.9 | 91.3 | 95.2 | 58.6 | 81.3 | 88.0 | 88.8 |
استرجاع النص والصور بدون لقطة صينية [انظر التفاصيل]
نموذج | فليكر30K-CN | كوكو-CN | متوسط | ||||||||||
صورة إلى نص | تحويل النص إلى صورة | صورة إلى نص | تحويل النص إلى صورة | ||||||||||
ص @ 1 | ص @ 5 | ص @ 10 | ص @ 1 | ص @ 5 | ص @ 10 | ص @ 1 | ص @ 5 | ص @ 10 | ص @ 1 | ص @ 5 | ص @ 10 | ||
CN-CLIP-ViT-H | 81.6 | 97.5 | 98.8 | 71.2 | 91.4 | 95.5 | 63.0 | 86.6 | 92.9 | 69.2 | 89.9 | 96.1 | 86.1 |
أوبينكليب-XLM-RH | 86.1 | 97.5 | 99.2 | 71.0 | 90.5 | 94.9 | 70.0 | 91.5 | 97.0 | 66.1 | 90.8 | 96.0 | 87.6 |
InterVL-C (لنا) | 90.3 | 98.8 | 99.7 | 75.1 | 92.9 | 96.4 | 68.8 | 92.0 | 96.7 | 68.9 | 91.9 | 96.5 | 89.0 |
InterVL-G (لنا) | 92.9 | 99.4 | 99.8 | 77.7 | 94.8 | 97.3 | 71.4 | 93.9 | 97.7 | 73.8 | 94.4 | 98.1 | 90.9 |
استرجاع النص والصور بدون لقطة متعددة اللغات على XTD [انظر التفاصيل]
طريقة | إن | إس | الاب | ز | هو - هي | كو | رو | جي بي | متوسط |
---|---|---|---|---|---|---|---|---|---|
AltCLIP | 95.4 | 94.1 | 92.9 | 95.1 | 94.2 | 94.4 | 91.8 | 91.7 | 93.7 |
أوبينكليب-XLM-RH | 97.3 | 96.1 | 94.5 | 94.7 | 96.0 | 90.2 | 93.9 | 94.0 | 94.6 |
InterVL-C (لنا) | 97.3 | 95.7 | 95.1 | 95.6 | 96.0 | 92.2 | 93.3 | 95.5 | 95.1 |
InterVL-G (لنا) | 98.6 | 97.7 | 96.5 | 96.7 | 96.9 | 95.1 | 94.8 | 96.1 | 96.6 |
راجع قسم "المقارنة مع SOTA VLLMs".
استيراد الشعلة من PIL استيراد الصورة من المحولات import AutoModel, CLIPImageProcessormodel = AutoModel.from_pretrained('OpenGVLab/InternViT-6B-448px-V1-5',torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True).cuda().eval( )image = Image.open('./examples/image1.jpg').convert('RGB')image_processor = CLIPImageProcessor.from_pretrained('OpenGVLab/InternViT-6B-448px-V1-5')pixel_values = image_processor(images= الصورة، return_tensors='pt').pixel_valuespixel_values = Pixel_values.to(torch.bfloat16).cuda()outputs = model(pixel_values)
استيراد الشعلة من PIL استيراد الصورة من المحولات استيراد AutoModel، CLIPImageProcessor من المحولات import AutoTokenizermodel = AutoModel.from_pretrained('OpenGVLab/InternVL-14B-224px',torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True).cuda().eval() image_processor = CLIPImageProcessor.from_pretrained('OpenGVLab/InternVL-14B-224px')tokenizer = AutoTokenizer.from_pretrained('OpenGVLab/InternVL-14B-224px', use_fast=False, add_eos_token=True)tokenizer.pad_token_id = 0 # تعيين Pad_token_id إلى 0صور = [Image.open('./examples/image1.jpg').convert('RGB'),Image.open('./examples/image2.jpg').convert('RGB'),Image.open( './examples/image3.jpg').تحويل('RGB') ]prefix = 'summarize:'texts = [prefix + 'a photo of red panda', # Englishprefix + '一张熊猫的照片', # Chineseprefix + '二匹の猫の写真' # اليابانية]pixel_values = image_processor( الصور=صور، return_tensors='pt').pixel_valuespixel_values = Pixel_values.to(torch.bfloat16).cuda()input_ids = tokenizer(texts, return_tensors='pt', max_length=80, اقتطاع=True, الحشو='max_length' ).input_ids.cuda()# InternVL-Clogits_per_image, logits_per_text = model(image=pixel_values, text=input_ids, mode='InternVL-C')probs = logits_per_image.softmax(dim=-1)# Tensor([[9.9609e) -01, 5.2185e-03, 6.0070e-08],# [2.2949e-02, 9.7656e-01, 5.9903e-06],# [3.2932e-06, 7.4863e-05, 1.0000e+00]] , devices='cuda:0',# dtype=torch.bfloat16, grad_fn=)# InternVL-Glogits_per_image, logits_per_text = model(image=pixel_values, text=input_ids, mode='InternVL-G')probs = logits_per_image .softmax(dim=-1)# Tensor([[9.9609e-01, 3.1738e-03, 3.6322e-08],# [8.6060e-03, 9.9219e-01, 2.8759e-06],# [1.7583 e-06, 3.1233e-05, 1.0000e+00]], devices='cuda:0',# dtype=torch.bfloat16, grad_fn= )# يرجى تعيين add_eos_token على False لـ Generationtokenizer.add_eos_token = Falseimage = Image.open('./examples/image1.jpg').convert('RGB')pixel_values = image_processor(images=image, return_tensors='pt').pixel_valuespixel_values = Pixel_values.to(torch.bfloat16).cuda() tokenized = tokenizer("English caption:"، return_tensors='pt')pred = model.generate(pixel_values=pixel_values,input_ids=tokenized.input_ids.cuda(),attention_mask=tokenized.attention_mask.cuda(),num_beams=5, min_new_tokens=8، )caption = tokenizer.decode(pred[0].cpu(), Skip_special_tokens=True).strip()# تسمية توضيحية باللغة الإنجليزية: باندا حمراء تجلس فوق منصة خشبية
هنا، نأخذ OpenGVLab/InternVL2-8B
الأصغر كمثال:
استيراد numpy كـ npimport torchimport torchvision.transforms كـ Tfrom Decord import VideoReader, cpufrom PIL import Imagefrom torchvision.transforms.functional import InterpolationModefrom المحولات import AutoModel, AutoTokenizerIMAGENET_MEAN = (0.485, 0.456, 0.406)IMAGENET_STD = (0.229, 0.224, 0.225 )تعريف build_transform( input_size):MEAN, STD = IMAGENET_MEAN, IMAGENET_STDtransform = T.Compose([T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img),T.Resize((input_size ، input_size)، الاستيفاء = InterpolationMode.BICUBIC)،T.ToTensor()،T.Normalize(mean=MEAN, std=STD) ])return Transformdef find_Closest_aspect_ratio(نسبة العرض إلى الارتفاع، نسبة_الارتفاع، العرض، الارتفاع، حجم_الصورة):best_ratio_diff = float('inf')best_ratio = (1, 1)المساحة = العرض * الارتفاع للنسبة في target_ratios:target_aspect_ratio = نسبة[0] / نسبة[ 1]ratio_diff = abs(نسبة_الارتفاع - نسبة_الارتفاع_الهدف)if نسبة_diff < best_ratio_diff:best_ratio_diff = نسبة_diffbest_ratio = نسبة إليف نسبة_diff == best_ratio_diff:if منطقة > 0.5 * image_size * image_size * نسبة[0] * نسبة[1]:best_ratio = نسبة العائد best_ratiodefdynamic_preprocess( image, min_num=1, max_num=12, image_size=448, use_thumbnail=False):orig_width, orig_height = image.sizeaspect_ratio = orig_width / orig_height# احسب نسبة أبعاد الصورة الحاليةtarget_ratios = set( (i، j) لـ n في النطاق (min_num، max_num + 1) لـ i في النطاق (1، n + 1) لـ j في النطاق (1، n + 1) ifi * j <= max_num و i * j >= min_num)target_ratios =sorted(target_ratios, key=lambda x: x[0] * x[1])# ابحث عن أقرب نسبة عرض إلى ارتفاع للهدفtarget_aspect_ratio = find_Closest_aspect_ratio(aspect_ratio, target_ratios, orig_width, orig_height, image_size)# احسب عرض الهدف و heighttarget_width = image_size * target_aspect_ratio[0]target_height = image_size * target_aspect_ratio[1]blocks = target_aspect_ratio[0] * target_aspect_ratio[1]# resize the imageresize_img = image.resize((target_width, target_height))processed_images = []for i in النطاق (الكتل): المربع = ( (i٪ (target_width // image_size)) * image_size، (i // (target_width // image_size)) * image_size، ((i % (target_width // image_size)) + 1) * image_size, ((i // (target_width // image_size)) + 1) * image_size)# تقسيم الصورplit_img = resize_img.crop(box)processed_images.append(split_img)assert