الوصف الصيني | إنجليزي
ModelsCope | Demo | Paper | Blog
هذا المشروع هو نسخة صينية من نموذج المقطع ، ويستخدم بيانات صينية واسعة النطاق للتدريب (حوالي 200 مليون زوج من الرسوم والنصوص) ، تهدف إلى مساعدة المستخدمين بسرعة على تحقيق المهام مثل خصائص الرسوم والنص وحساب التشابه ، واسترجاع العرض عبر الوسائط ، وتصنيف صورة عينة صفرية في المجال الصيني. يعتمد رمز هذا المشروع على مشروع Open_CLIP ، ويتم تحسينه لبيانات الحقل الصيني ولتحقيق نتائج أفضل على البيانات الصينية. يوفر هذا المشروع واجهة برمجة التطبيقات ورمز التدريب ورمز الاختبار ، وسيتم وصف التفاصيل بالتفصيل أدناه.
المفتوحة الصينية المفتوحة حاليًا في 5 مقاييس مختلفة ، وتظهر معلومات النموذج وطرق التنزيل في الجدول التالي:
| حجم النموذج | الرابط تنزيل | كمية المعلمة | الهيكل العظمي الجانبي البصري | كمية المعلمة الجانبية البصرية | هيكل عظمي جانبي | الكمية المعلمة الجانبية النصية | دقة |
|---|---|---|---|---|---|---|---|
| CN-CLIP RN50 | تحميل | 77 م | RESNET50 | 38 م | RBT3 | 39m | 224 |
| CN-CLIP VIT-B/16 | تحميل | 188m | VIT-B/16 | 86 م | روبرتا-WWM-Base | 102m | 224 |
| CN-CLIP VIT-L/14 | تحميل | 406m | VIT-L/14 | 304m | روبرتا-WWM-Base | 102m | 224 |
| CN-CLIP VIT-L/14@336PX | تحميل | 407m | VIT-L/14 | 304m | روبرتا-WWM-Base | 102m | 336 |
| CN-CLIP VIT-H/14 | تحميل | 958m | VIT-H/14 | 632m | روبرتا وود لارج | 326 م | 224 |
بالنسبة لمهمة استرجاع الرسوم والنص ، أجرينا تجارب صفر واختلاس في استرجاع MUGE ، Flickr30K-CN و COCO-CN. بالنسبة لتصنيف صورة صفر ، أجرينا تجارب على 10 مجموعات بيانات من المرتفعات. يتم عرض النتائج التجريبية في الجدول أدناه. نظرًا لقيود المساحة ، فإننا نعطي هنا نتائج نموذج النطاق المثلى لنموذج خط الأساس و Clip الصيني. للحصول على مؤشرات النتائج التفصيلية لكل مقياس من المقاطع الصينية ، يرجى الاطلاع على النتائج. md للحصول على التفاصيل.
استرجاع النص إلى صورة إلى صورة (مجموعة التحقق الرسمية) :
| يثبت | صفر | ضبط دقيق | ||||||
|---|---|---|---|---|---|---|---|---|
| متري | ص@1 | ص@5 | ص@10 | السيد | ص@1 | ص@5 | ص@10 | السيد |
| ووكونغ | 42.7 | 69.0 | 78.0 | 63.2 | 52.7 | 77.9 | 85.6 | 72.1 |
| R2D2 | 49.5 | 75.7 | 83.2 | 69.5 | 60.1 | 82.9 | 89.4 | 77.5 |
| CN-CLIP | 63.0 | 84.1 | 89.2 | 78.8 | 68.9 | 88.7 | 93.1 | 83.6 |
استرجاع Flickr30K-CN (مجموعة الاختبار الرسمية) :
| مهمة | نص إلى صورة | صورة إلى نص | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| يثبت | صفر | ضبط دقيق | صفر | ضبط دقيق | ||||||||
| متري | ص@1 | ص@5 | ص@10 | ص@1 | ص@5 | ص@10 | ص@1 | ص@5 | ص@10 | ص@1 | ص@5 | ص@10 |
| ووكونغ | 51.7 | 78.9 | 86.3 | 77.4 | 94.5 | 97.0 | 76.1 | 94.8 | 97.5 | 92.7 | 99.1 | 99.6 |
| تايي | 60.8 | 85.0 | 91.0 | - | - | - | - | - | - | - | - | - |
| R2D2 | 60.9 | 86.8 | 92.7 | 84.4 | 96.7 | 98.4 | 77.6 | 96.7 | 98.9 | 95.6 | 99.8 | 100.0 |
| CN-CLIP | 71.2 | 91.4 | 95.5 | 83.8 | 96.9 | 98.6 | 81.6 | 97.5 | 98.8 | 95.3 | 99.7 | 100.0 |
استرجاع Coco-CN (مجموعة الاختبار الرسمية) :
| مهمة | نص إلى صورة | صورة إلى نص | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| يثبت | صفر | ضبط دقيق | صفر | ضبط دقيق | ||||||||
| متري | ص@1 | ص@5 | ص@10 | ص@1 | ص@5 | ص@10 | ص@1 | ص@5 | ص@10 | ص@1 | ص@5 | ص@10 |
| ووكونغ | 53.4 | 80.2 | 90.1 | 74.0 | 94.4 | 98.1 | 55.2 | 81.0 | 90.6 | 73.3 | 94.0 | 98.0 |
| تايي | 60.0 | 84.0 | 93.3 | - | - | - | - | - | - | - | - | - |
| R2D2 | 56.4 | 85.0 | 93.1 | 79.1 | 96.5 | 98.9 | 63.3 | 89.3 | 95.7 | 79.3 | 97.1 | 98.7 |
| CN-CLIP | 69.2 | 89.9 | 96.1 | 81.5 | 96.9 | 99.1 | 63.0 | 86.6 | 92.9 | 83.5 | 97.3 | 99.2 |
تصنيف الصور الصفر :
| مهمة | CIFAR10 | CIFAR100 | DTD | Eurosat | فير | FGVC | كيتي | mnist | الكمبيوتر الشخصي | المركبات العضوية المتطايرة |
|---|---|---|---|---|---|---|---|---|---|---|
| غيت | 88.5 | 61.1 | 42.9 | 43.4 | 41.4 | 6.7 | 22.1 | 68.9 | 50.0 | 80.2 |
| محاذاة | 94.9 | 76.8 | 66.1 | 52.1 | 50.8 | 25.0 | 41.2 | 74.0 | 55.2 | 83.0 |
| مقطع | 94.9 | 77.0 | 56.0 | 63.0 | 48.3 | 33.3 | 11.5 | 79.0 | 62.3 | 84.0 |
| ووكونغ | 95.4 | 77.1 | 40.9 | 50.3 | - | - | - | - | - | - |
| CN-CLIP | 96.0 | 79.7 | 51.2 | 52.0 | 55.1 | 26.2 | 49.9 | 79.4 | 63.5 | 84.9 |
قبل بدء هذا المشروع ، تحتاج إلى التحقق مما إذا كانت متطلبات التكوين البيئي التالي استيفاء:
قم بتشغيل الأمر التالي لتثبيت المكتبات المكونة من ثلاث حفلات المطلوبة لهذا المشروع.
pip install -r requirements.txtفيما يلي مثال رمز بسيط لتوضيح كيفية استخدام واجهة برمجة تطبيقات المقطع الصيني. قبل البدء في الاستخدام ، يرجى تثبيت CN_CLIP:
# 通过pip安装
pip install cn_clip
# 或者从源代码安装
cd Chinese-CLIP
pip install -e .بعد نجاح التثبيت ، يمكنك بسهولة استدعاء واجهة برمجة التطبيقات من خلال الطرق التالية ، وتمريرها في الصورة المحددة (مثال) والنص ، واستخراج متجه ميزة الرسوم وحساب التشابه:
import torch
from PIL import Image
import cn_clip . clip as clip
from cn_clip . clip import load_from_name , available_models
print ( "Available models:" , available_models ())
# Available models: ['ViT-B-16', 'ViT-L-14', 'ViT-L-14-336', 'ViT-H-14', 'RN50']
device = "cuda" if torch . cuda . is_available () else "cpu"
model , preprocess = load_from_name ( "ViT-B-16" , device = device , download_root = './' )
model . eval ()
image = preprocess ( Image . open ( "examples/pokemon.jpeg" )). unsqueeze ( 0 ). to ( device )
text = clip . tokenize ([ "杰尼龟" , "妙蛙种子" , "小火龙" , "皮卡丘" ]). to ( device )
with torch . no_grad ():
image_features = model . encode_image ( image )
text_features = model . encode_text ( text )
# 对特征进行归一化,请使用归一化后的图文特征用于下游任务
image_features /= image_features . norm ( dim = - 1 , keepdim = True )
text_features /= text_features . norm ( dim = - 1 , keepdim = True )
logits_per_image , logits_per_text = model . get_similarity ( image , text )
probs = logits_per_image . softmax ( dim = - 1 ). cpu (). numpy ()
print ( "Label probs:" , probs ) # [[1.268734e-03 5.436878e-02 6.795761e-04 9.436829e-01]]قمنا أيضًا بإعداد الدعم ذي الصلة لنشر نماذج ONNX و Tensorrt. للحصول على التفاصيل ، يرجى الرجوع إلى Deployment.md.
إذا لم تكن راضيًا عن استخدام واجهة برمجة التطبيقات فقط ، فيرجى متابعة قراءة هذا المستند لمعرفة كيفية استخدام مشروعنا لتدريب واختبار نماذج المقطع.
سيتضمن ما يلي دروسًا في مجال الاسترجاع عبر الوسائط (بما في ذلك Finetune والاستدلال ، وحساب KNN ، إلخ) ودروس تصنيف الصور صفرية.
بعد تنزيل هذا المشروع ، يرجى إنشاء مجلد جديد ${DATAPATH} لتخزين مجموعة البيانات ، CKPT المدربة مسبقًا ، و CKPT النموذجية التي تم إنشاؤها بواسطة Finetune. هيكل دليل مساحة العمل الموصى به كما يلي:
Chinese-CLIP/
├── run_scripts/
│ ├── muge_finetune_vit-b-16_rbt-base.sh
│ ├── flickr30k_finetune_vit-b-16_rbt-base.sh
│ └── ... # 更多finetune或评测脚本...
└── cn_clip/
├── clip/
├── eval/
├── preprocess/
└── training/
${DATAPATH}
├── pretrained_weights/
├── experiments/
├── deploy/ # 用于存放ONNX & TensorRT部署模型
└── datasets/
├── MUGE/
├── Flickr30k-CN/
└── .../ # 更多自定义数据集...
نحن هنا نقدم طريقة التنزيل لمعلمات النماذج التي تم تدريبها مسبقًا ، وكذلك عملية المعالجة المسبقة للبيانات قبل Finetune.
يرجى الرجوع إلى القسم السابق من مقياس النموذج وتنزيل الرابط لتنزيل النموذج المقابل CKPT. يوصى بتخزين ملف CKPT الذي تم تنزيله في الدليل ${DATAPATH}/pretrained_weights/ directory.
من أجل التكيف مع الكود الصيني وضمان كفاءة معالجة البيانات وقراءةها ، نوصي بتنظيم مجموعات البيانات والرسومات المستخدمة للتدريب والتقييم في الطرق التالية:
${DATAPATH}
└── datasets/
└── ${dataset_name}/
├── train_imgs.tsv # 图片id & 图片内容
├── train_texts.jsonl # 文本id & 文本内容,连同匹配的图片id列表
├── valid_imgs.tsv
├── valid_texts.jsonl
├── test_imgs.tsv
└── test_texts.jsonl
حيث يشير ${dataset_name} إلى اسم مجموعة البيانات (مثل muge)
لضمان كفاءة معالجة الملفات ، لا نقوم بتخزين الصور بكميات كبيرة من الملفات الصغيرة ، ولكن تخزين صور التدريب/التحقق/الاختبار في BASE64 في ملف ${split}_imgs.tsv على التوالي. يمثل كل سطر من الملف صورة ، بما في ذلك معرف الصورة (نوع int) وقاعدة الصورة 64 ، مفصولة بعلامة التبويب ، والتنسيق كما يلي:
1000002 /9j/4AAQSkZJ...YQj7314oA//2Q==
طريقة تحويل ملف الصورة الأصلي إلى BASE64 بسيط للغاية ، يرجى تنفيذ رمز Python التالي:
from PIL import Image
from io import BytesIO
import base64
img = Image . open ( file_name ) # 访问图片路径
img_buffer = BytesIO ()
img . save ( img_buffer , format = img . format )
byte_data = img_buffer . getvalue ()
base64_str = base64 . b64encode ( byte_data ) # bytes
base64_str = base64_str . decode ( "utf-8" ) # str يتم حفظ المعلومات النصية والعلاقة المطابقة بين أزواج الرسوم والأزواج النصية في ملف ${split}_texts.jsonl . كل سطر من الملف هو سطر من JSON ، التنسيق كما يلي:
{"text_id": 8428, "text": "高级感托特包斜挎", "image_ids": [1076345, 517602]}
بالنسبة لمجموعة الاختبار ، لا يوجد سوى نص ولا أعرف علاقة المطابقة بين أزواج الصورة وأزواج النص ، ويمكن معالجة حقل image_ids لكل سطر كقائمة فارغة ، أي "image_ids": [] .
أخيرًا ، نحتاج أيضًا إلى تسلسل ملفات TSV و JSONL معًا وتحويلها إلى ملفات قاعدة بيانات LMDB المحتملة بالذاكرة لتسهيل القراءة العشوائية أثناء التدريب.
python cn_clip/preprocess/build_lmdb_dataset.py
--data_dir ${DATAPATH}/datasets/${dataset_name}
--splits train,valid,test
على سبيل المثال ، بالنسبة لمجموعة بيانات MUGE ، تم تعيين ${dataset_name} على muge ، و- --splits يحدد قسم مجموعة البيانات التي يجب تحويلها ، مفصولة بفواصل بدون مسافات. بعد التحويل ، سيتم إضافة الملفات المسلسلات LMDB التالية إلى مجلد مجموعة البيانات.
${DATAPATH}
└── datasets/
└── ${dataset_name}/
└── lmdb/
├── train
│ ├── imgs
│ └── pairs
├── valid
└── test
من أجل تقليل صعوبة البدء ، نقدم أيضًا بيانات Muge (رابط التنزيل) و FlickR30K-CN (رابط التنزيل) حزمة الضغط المسبقة وفقًا للخطوات المذكورة أعلاه. ما عليك سوى تنزيل وإلغاء الضغط ووضعه في ${DATAPATH}/datasets/ directory. إذا كانت بيانات COCO-CN مطلوبة ، فيرجى الاتصال بنا عن طريق البريد الإلكتروني بعد التقدم بطلب للحصول على إذن من المؤلف الأصلي.
نقدم هنا خطوات التدريب لتسهيل المستخدمين الآخرين لفهم تفاصيل النموذج واستخدام النموذج الصيني المسبق قبل التدريب الذي نقدمه لـ Finetune. استنادًا إلى مجموعتي بيانات البحث في اتجاه المصب من Muge و Flickr30k-CN ، نقدم نصوص تدريب نصوص run_scripts/muge_finetune_vit-b-16_rbt-base.sh و run_scripts/flickr30k_finetune_vit-b-16_rbt-base.sh . يدعم تشغيل البرامج النصية كلاً من كل من البطاقات المفردة (بطاقات مفردة أو متعددة) والتدريب الموزعة متعددة الآلات. قبل التشغيل ، يرجى ملء التكوينات ذات الصلة الموزعة وفقًا للإرشادات والتعليقات في بداية البرنامج النصي ، ثم تشغيل الأوامر التالية لبدء التدريب (يرجى تشغيل الأوامر على كل جهاز لتدريب متعدد الآلات). لعدم كفاية ذاكرة الفيديو ، يمكنك التفكير في تنشيط استراتيجية إعادة الحساب في عنصر التكوين. سيتم حفظ ملفات السجل والنموذج CKPT التي تم إنشاؤها عن طريق التدريب تلقائيًا في الدليل المحدد من قبل المستخدم:
cd Chinese-CLIP/
bash run_scripts/muge_finetune_vit-b-16_rbt-base.sh ${DATAPATH}تتضمن عناصر تكوين التدريب ذات الصلة:
WORKER_CNT : عدد الآلات المدربةGPUS_PER_NODE : عدد وحدات معالجة الرسومات على كل جهازtrain-data : دليل بيانات التدريب LMDB ، انظر أعلاه للاطلاع على عملية المعالجة المسبقة لإعداد ملفات بيانات LMDB.val-data : تحقق من دليل Data LMDB. عند تحديده على أنه لا شيء ، لن يتم إجراء التحقق أثناء التدريب.num-workers : عدد العمليات في معالجة بيانات مجموعة التدريب (Dataloader) ، الافتراضي هو 4.valid-num-workers : عدد عمليات مجموعة التحقق من معالجة البيانات (Dataloader) (إذا تم إجراء التحقق من الصحة) ، فإن الافتراضي هو 1.vision-model : حدد العمود الفقري البصري ، حدد من ["ViT-B-16", "ViT-L-14", "ViT-L-14-336", "ViT-H-14", "RN50"] .text-model : حدد العمود الفقري للنص ، حدد من ["RoBERTa-wwm-ext-base-chinese", "RoBERTa-wwm-ext-large-chinese", "RBT3-chinese"] .context-length : طول تسلسل إدخال النص.warmup : خطوات الاحماء.batch-size : حجم البطاقة الفردي أثناء التدريب. (يرجى التأكد من训练样本总数> batch-size * GPU数، والتي تلبي مجموعة تدريب واحدة على الأقل)lr : معدل التعلم.wd : انحلال الوزن.max-steps : يمكن أيضًا تحديد عدد خطوات التدريب وعدد جولات التدريب من خلال max-epochs .freeze-vision : سواء لتجميد العمود الفقري البصري.use-augment : ما إذا كان يجب استخدام AutoAgment لتعزيز بيانات الصورة.valid-batch-size : حجم الدُفعات المستقلة أثناء التحقق. (يرجى التأكد من أن验证集样本总数> batch-size * GPU数، مما يرضي دفعة واحدة على الأقل من التحقق)valid-step-interval و valid-epoch-interval : تحقق من تردد الخطوة/الحقبة. إذا تم تحديدها على أنها -1 ، فلن يتم إجراء التحقق أثناء التدريب.grad-checkpointing : استخدم استراتيجية إعادة الحساب لعدم حفظ النتائج الوسيطة أثناء العملية الأمامية ، في مقابل الحصول على أقل من الذاكرة في وقت التدريب ، وهو مناسب لعدم كفاية الذاكرة. (معلمة store_true ، فقط أضف- --grad-checkpointing إلى البرنامج النصي ، حاليًا pytorch> 1.8.0 مطلوب)mask-ratio : بالإشارة إلى استراتيجية Flip ، يمكن تحديد قناع عشوائي لنسبة معينة من بقع الصورة أثناء Finetune لتقليل النفقات العامة للذاكرة وتسريع التدريب. الافتراضي هو 0.0 ، مما يعني أن هذه السياسة لم يتم تنشيطها.use-flash-attention : يمكن أن يؤدي استخدام Flashattention إلى تسريع عملية Finetune بشكل كبير من المشبك الصيني وتقليل استخدام الذاكرة دون التأثير على التأثير. (معلمة store_true . بعد تكوين البيئة ، أضف --use-flash-attention إلى البرنامج النصي. يرجى الاطلاع على flash_attention.md للحصول على التفاصيل)accum-freq : تردد تراكم التدرج هو 1 بشكل افتراضي. عند تحديد عدد صحيح أكبر من 1 ، يتم تمكين تراكم التدرج التعليمي المقارن لمحاكاة حجم دفعة أكبر. إذا كان حجم دفعة البطاقة المفردة m ، فإن حجم الدفعة الإجمالي هو accum_freq * m * GPU数.gather-with-grad : ما إذا كنت تريد أداء تجمع مع التدرجات الكاملة أثناء التدريب الموزع ، يتم إيقاف تشغيله افتراضيًا.name : حدد مسار الإخراج. سيتم تخزين سجل Hyperparameter وسجل التدريب والإخراج CKPT في ${DATAPATH}/experiments/${name}/ .save-step-frequency والتردد save-epoch-frequency : الفاصل الزمني بين خطوات أو جولات CKPT.report-training-batch-acc : ما إذا كان السجل يبلغ عن دقة تدريب الرسم البياني للنصوص والنص على دفعة رسومات.resume : المسار للقراءة بالوزن. يحدد البرنامج النصي عينة مسار CKPT المدربين مسبقًا ، أو يمكن تحديده كمسار CKPT الخاص بالمستخدم للتدريب المستمر.reset-data-offset : ما إذا كنت ستستمر في العمل من نقطة توقف البيانات السابقة. إذا تجاوز حجم الدُفعة أو رقم بطاقة GPU المعلمة ، فمن المستحسن تشغيل هذا الخيار.reset-optimizer : ما إذا كان لاستخدام حالة المحسن. بعد التدريب ، سيكون السجل موجودًا تلقائيًا ${DATAPATH}/experiments/${name}/out_${timestamp}.log . تنسيق سجل التدريب على النحو التالي:
2022-12-11,20:40:34 | INFO | Rank 0 | Global Steps: 1/735 | Train Epoch: 1 [1024/250880 (0%)] | Loss: 2.371020 | Image2Text Acc: 49.90 | Text2Image Acc: 48.73 | Data Time: 1.039s | Batch Time: 3.625s | LR: 0.000000 | logit_scale: 4.605 | Global Batch Size: 1024
تنسيق سجل التحقق كما يلي:
2022-12-11,20:42:47 | INFO | Rank 0 | Validation Result (epoch 1 @ 150 steps) | Valid Loss: 0.502810 | Image2Text Acc: 84.95 | Text2Image Acc: 84.26 | logit_scale: 4.605 | Valid Batch Size: 128
ملاحظة : ترتبط مقارنة تقارب التدريب واستقرار التعلم بحجم الدُفعة الكلي. إذا كنت تستخدم حجم دفعة أصغر (مقارنة بالتكوين الافتراضي البالغ 128 لكل وحدة معالجة الرسومات GPU * 8) ، فمن المستحسن استخدام معدل تعليمي أصغر. نوصي باستخدام المزيد من وحدات معالجة الرسومات وحجم دفعة أكبر لتحسين نتائج.
نحن نقدم عملية استخراج الميزات وتقييم مهمة استرجاع الرسوم ، وهو ما يلي:
حاليًا ، يدعم هذا الرمز استخدام بطاقة GPU الفردية لاستخراج ميزة الرسوم ، يرجى الرجوع إلى الأمر التالي. نقدم أيضًا دعمًا لنشر نماذج ONNX و Tensorrt لتسريع استدلال الميزات ، راجع Deployment.md للحصول على التفاصيل.
cd Chinese-CLIP/
export CUDA_VISIBLE_DEVICES=0
export PYTHONPATH= ${PYTHONPATH} : ` pwd ` /cn_clip
split=valid # 指定计算valid或test集特征
resume= ${DATAPATH} /pretrained_weights/clip_cn_vit-b-16.pt
python -u cn_clip/eval/extract_features.py
--extract-image-feats
--extract-text-feats
--image-data= " ${DATAPATH} /datasets/ ${dataset_name} /lmdb/ ${split} /imgs "
--text-data= " ${DATAPATH} /datasets/ ${dataset_name} / ${split} _texts.jsonl "
--img-batch-size=32
--text-batch-size=32
--context-length=52
--resume= ${resume}
--vision-model=ViT-B-16
--text-model=RoBERTa-wwm-ext-base-chinese سيتم حفظ ميزات الرسم الإخراج في دليل ${DATAPATH}/datasets/${dataset_name} بشكل افتراضي ، ويتم حفظ ميزات الصورة في ملف ${split}_imgs.img_feat.jsonl . يقوم كل سطر بتخزين ميزات صورة في JSON ، والتنسيق كما يلي:
{"image_id": 1000002, "feature": [0.0198, ..., -0.017, 0.0248]}
يتم حفظ ميزات النص في ${split}_texts.txt_feat.jsonl ، مع التنسيق على النحو التالي:
{"text_id": 248816, "feature": [0.1314, ..., 0.0018, -0.0002]}
بالنسبة لمجموعات بيانات البحث الأكاديمي الصغيرة على نطاق واسع ، فإننا نقدم تطبيقًا بسيطًا للبحث في KNN لتسهيل حساب نتائج استدعاء أفضل K للبحث عن نصوص إلى نصوص إلى نصوص إلى نص (نصائح: إذا كنت ترغب في بناء عرض تجريبي للبحث في المشروع ، فمن المستحسن إنتاج ميزات رسومات وميزات نصية بناءً على نموذج المقطع الصيني وجمع بين المصدر المفتوح للمشاريع المُقابلة للخدمات.
للبحث عن نص إلى صورة (صور ذات صلة بالنص) ، قم بتشغيل الأمر التالي:
cd Chinese-CLIP/
split=valid # 指定计算valid或test集特征
python -u cn_clip/eval/make_topk_predictions.py
--image-feats= " ${DATAPATH} /datasets/ ${dataset_name} / ${split} _imgs.img_feat.jsonl "
--text-feats= " ${DATAPATH} /datasets/ ${dataset_name} / ${split} _texts.txt_feat.jsonl "
--top-k=10
--eval-batch-size=32768
--output= " ${DATAPATH} /datasets/ ${dataset_name} / ${split} _predictions.jsonl "يتم حفظ النتيجة في ملف JSONL المحدد. يمثل كل سطر معرف الصورة العلوي K لتذكير النص ، والتنسيق كما يلي:
{ "text_id" : 153915 , "image_ids" : [ 5791244 , 1009692167 , 7454547004 , 3564007203 , 38130571 , 2525270674 , 2195419145 , 2503091968 , 4966265765 , 3690431163 ]}للبحث عن الصورة إلى النص (نص ذي صلة الصورة) ، وبالمثل ، قم بتشغيل الأمر التالي:
split=valid # 指定计算valid或test集特征
python -u cn_clip/eval/make_topk_predictions_tr.py
--image-feats= " ${DATAPATH} /datasets/ ${dataset_name} / ${split} _imgs.img_feat.jsonl "
--text-feats= " ${DATAPATH} /datasets/ ${dataset_name} / ${split} _texts.txt_feat.jsonl "
--top-k=10
--eval-batch-size=32768
--output= " ${DATAPATH} /datasets/ ${dataset_name} / ${split} _tr_predictions.jsonl "يمثل كل سطر من نتائج الإخراج معرف النص العلوي K لتذكير الصورة ، والتنسيق كما يلي:
{ "image_id" : 977856234 , "text_ids" : [ 156914 , 157914 , 158914 , 155914 , 156179 , 158907 , 157179 , 154179 , 154914 , 154723 ]}نحن نقدم البرنامج النصي للتقييم لحساب الاسترجاع@1/5/10 من مهمة البحث ، وإعطاء متوسط الاستدعاء (متوسط الاسترجاع@1/5/10). قم بتشغيل الأمر التالي للحصول على النتيجة:
للبحث عن نص إلى صورة ، قم بتشغيل الأمر:
split=valid # 指定计算valid或test集特征
python cn_clip/eval/evaluation.py
${DATAPATH} /datasets/ ${dataset_name} / ${split} _texts.jsonl
${DATAPATH} /datasets/ ${dataset_name} / ${split} _predictions.jsonl
output.json
cat output.jsonللبحث عن صورة إلى نص ، يرجى تشغيل الأمر التالي أولاً لتحويل ملف JSONL الذي تم وضع علامة عليه بتنسيق الصورة إلى النص على صورة إلى نص:
python cn_clip/eval/transform_ir_annotation_to_tr.py
--input ${DATAPATH} /datasets/ ${dataset_name} / ${split} _texts.jsonlبعد الانتهاء ، قم بتشغيل الأمر:
split=valid # 指定计算valid或test集特征
python cn_clip/eval/evaluation_tr.py
${DATAPATH} /datasets/ ${dataset_name} / ${split} _texts.tr.jsonl
${DATAPATH} /datasets/ ${dataset_name} / ${split} _tr_predictions.jsonl
output.json
cat output.jsonسيكون تنسيق النتيجة المطبوعة كما يلي:
{ "success" : true , "score" : 85.67 , "scoreJson" : { "score" : 85.67 , "mean_recall" : 85.67 , "r1" : 71.2 , "r5" : 90.5 , "r10" : 95.3 }}فيما يتعلق بعملية التدريب والاختبار لاسترجاع العرض عبر الوسائط ، فإننا نأخذ مجموعة بيانات البحث MUGE (رسومات التجارة الإلكترونية متعددة الوسائط وتحدي النص) كمثال ، كما توفر دفتر ملاحظات Jupyter (رابط التنزيل) الذي يتضمن جميع العمليات المذكورة أعلاه ويمكن تشغيله. الجميع مرحب بهم لممارسة ذلك.
يقدم هذا القسم كيفية استخدام Clip الصيني لتنفيذ تصنيف الصور صفرية ، مع أخذ مجموعة البيانات في المرجع المرجعي كمثال. Elevater هي مجموعة تقييم تتكون من مجموعات بيانات مصنفة متعددة معروفة (بما في ذلك CIFAR-10 ، CIFAR-100 ، MNIST ، إلخ) لتقييم تأثير العينة صفرية للنموذج على مجموعات البيانات هذه. في تجربتنا ، قمنا بإعداد نسخة صينية من propt وعلامات الفئات والصور الأصلية لكل مجموعة بيانات. راجع وثيقة البيانات للحصول على تفاصيل لهذا لاختبار النموذج الصيني. لمزيد من التفاصيل حول هذا المعيار ، يرجى النقر على الرابط. يمكنك أيضًا الرجوع إلى العملية التي نقدمها لإعداد البيانات واختبارها في مجموعة بيانات التصنيف الصينية الخاصة بك.
قم أولاً بإعداد البيانات بالتنسيق التالي. نظرًا لأن تصنيف صور العينة الصفرية لا يتطلب الاختبار فقط ، فأنت بحاجة فقط إلى إعداد مجموعة الاختبار ومعلمات النموذج التي تم تدريبها مسبقًا ، وتخزينها تحت ${DATAPATH} المحددة من قبل المستخدم وفقًا لهيكل الدليل التالي:
${DATAPATH}
├── pretrained_weights/
└── datasets/
└── ${dataset_name}/
├── label_cn.txt
└── test/
├── 000/ # label id,如label个数大于10,则将其向左补零到3位数保证字典序
│ ├── image_0003.jpg # 图片样本,命名无特殊要求
│ ├── image_0005.jpg
│ └── ...
├── 001/
│ ├── image_0001.jpg
│ ├── image_0002.jpg
│ └── ...
└── 002/
├── image_0003.jpg
├── image_0005.jpg
└── ...
...
تضمن مجموعة الاختبار أن يتم تقسيم البيانات الموجودة في مجلد الاختبار وفقًا للمعرف المقابل للتسمية ، وتضمن أن يكون المعرف في ترتيب القاموس (يجب استكمال أرقام متعددة أعلاه 10 مع الأصفار إلى label.zfill(3) ، مثل 001 ، 002 ، إلخ). label_cn.txt عبارة عن تسمية بيانات تحمل اسم تسمية لكل سطر ، كما هو موضح أدناه:
手风琴
飞机
锚
...
معرف التسمية المقابل لتسمية كل سطر هو行号-1 ، مثل معرف تسمية السطر الأول هو 0 ، ومعرف تسمية السطر الثاني هو 1. إذا كان العدد الإجمالي للعلامات أكبر من 10 ، فسيتم إضافة صفر إلى ثلاثة أرقام إلى اليسار ، على سبيل المثال ، عدد العلامات 100 ، وسيكون معرف العلامات 000-099 . يحتاج المستخدم إلى إنشاء المجلد المقابل لكل معرف تسمية ووضع العينة المميزة بالعلامة فيه. نحن نأخذ مجموعة بيانات CIFAR-100 في Heopater كمثال ، يرجى النقر على الرابط لتنزيل البيانات المعالجة. إذا كنت ترغب في محاولة اختبار Clip الصيني على مجموعات البيانات الأخرى الموجودة في Heverater ، راجع وثائق البيانات الخاصة بنا.
لقد أعدنا البرنامج النصي للتنبؤ ، يرجى مراجعة run_scripts/zeroshot_eval.sh . مثال على تشغيل أمر على النحو التالي:
bash run_scripts/zeroshot_eval.sh 0
${DATAPATH} ${dataset_name}
${vision_model} ${text_model}
${ckpt_path} ${index_file}معاني كل معلمة هي:
0 هي معرف GPUDATAPATH انظر قسم التحضير أعلاه ، أدخل المسار المقابل وفقًا للموقع الفعلي.dataset_name راجع قسم التحضير أعلاه وأدخل اسم دليل مجموعة البيانات للتقييم ، مثل cifar-100vision_model هو نوع النموذج المحدد ، وتشمل الخيارات ["ViT-B-32", "ViT-B-16", "ViT-L-14", "ViT-L-14-336", "RN50", "ViT-H-14"]text_model ["RoBERTa-wwm-ext-base-chinese", "RoBERTa-wwm-ext-large-chinese", "RBT3-chinese"]ckpt_path هو المسار الكامل لـ CKPT المدربين مسبقًاindex_file (اختياري ، يجب تحديد تقييم موقع الويب الرسمي لـ Helevater فقط) ، يرجى الرجوع إلى مستند البيانات على سبيل المثال ، إذا كنت تستخدم نموذجًا تم تدريبه مسبقًا في VIT-B/16 لتقييم CIFAR-100 ، فيجب تشغيله ( ${DATAPATH} يجب استبداله وفقًا للشروط الفعلية):
bash run_scripts/zeroshot_eval.sh 0
${DATAPATH} cifar-100
ViT-B-16 RoBERTa-wwm-ext-base-chinese
${DATAPATH} /pretrained_weights/clip_cn_vit-b-16.ptسيؤدي إرجاع النتيجة إلى طباعة دقة Top-1.
Result:
zeroshot-top1: 0.6444
على CIFAR-100 ، من المتوقع أن يصل المقياس الصيني من VIT-B/16 إلى 64.4 ٪. للحصول على التفاصيل ، يرجى الاطلاع على النتائج.
في الوقت نفسه ، سيقوم البرنامج أيضًا بحفظ ملف JSON لتقديمه المرتفع الرسمي. محتوى ملف JSON كما يلي:
{ "model_name" : " CN-CLIP-ViT-B-16 " , "dataset_name" : " cifar-100 " , "num_trainable_params" : 0 , "num_params" : 188262913 , "num_visual_params" : 86192640 , "num_backbone_params" : 188262913 , "n_shot" : 0 , "rnd_seeds" : [ 123 ], "predictions" : " prediction probability tensor [size: (1, 10000, 100)] " } وتشمل هذه المعلومات التعريف الخاصة بـ Model Name model_name ، و DataSet Name dataset_name ، الكمية الكلية للكمية num_params ، كمية المعلمة البصرية num_visual_params والنماذج الأخرى ، وكذلك نتيجة إخراج النموذج ، أي توتر احتمال التنبؤ للنموذج ، والحجم هو [1, 样本数, 标签个数] .
استنادًا إلى API لاستخراج الميزات المدمجة في محولات Luggingface ، فإننا نقدم عرضًا تجريبيًا (API المستضيف) يمكنه ببساطة تجربة تصنيف الصور صفرية عبر الإنترنت في Huggingface Model Hub. انظر الروابط التجريبية لكل مقياس نموذج أدناه. مرحبا بكم في تجربته!
إذا كنت تعتقد أن هذا المشروع مفيد ، آمل أن تتمكن من منحنا نجمًا ومشاركته مع المستخدمين من حولك. مرحبًا بك في الاقتباس من العمل ذي الصلة ، شكرًا لك على دعمك!
@article{chinese-clip,
title={Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese},
author={Yang, An and Pan, Junshu and Lin, Junyang and Men, Rui and Zhang, Yichang and Zhou, Jingren and Zhou, Chang},
journal={arXiv preprint arXiv:2211.01335},
year={2022}
}