Deskripsi Cina | Bahasa inggris
Modelscope | Demo | Paper | Blog
Proyek ini adalah versi Cina dari model klip, dan menggunakan data Cina skala besar untuk pelatihan (~ 200 juta pasangan grafik dan teks), yang bertujuan untuk membantu pengguna dengan cepat mewujudkan tugas-tugas seperti karakteristik grafis dan teks dan perhitungan kesamaan, pengambilan lintas-modal, dan klasifikasi gambar nol-sampel di bidang Cina. Kode proyek ini didasarkan pada proyek Open_Clip , dan dioptimalkan untuk data lapangan Cina dan untuk mencapai hasil yang lebih baik pada data Cina. Proyek ini menyediakan API, kode pelatihan dan kode pengujian, dan detail akan dijelaskan secara rinci di bawah ini.
Klip Cina saat ini bersumber terbuka pada 5 skala yang berbeda, dan informasi model dan metode pengunduhannya ditampilkan dalam tabel berikut:
| Ukuran model | Tautan unduh | Kuantitas parameter | Kerangka sisi visual | Jumlah parameter sisi visual | Kerangka sisi teks | Kuantitas parameter sisi teks | Resolusi |
|---|---|---|---|---|---|---|---|
| CN-Clip RN50 | Unduh | 77m | Resnet50 | 38m | Rbt3 | 39m | 224 |
| CN-CLIP VIT-B/16 | Unduh | 188m | Vit-B/16 | 86m | Roberta-WWM-Base | 102m | 224 |
| CN-CLIP VIT-L/14 | Unduh | 406m | VIT-L/14 | 304m | Roberta-WWM-Base | 102m | 224 |
| CN-CLIP VIT-L/14@336px | Unduh | 407m | VIT-L/14 | 304m | Roberta-WWM-Base | 102m | 336 |
| CN-CLIP VIT-H/14 | Unduh | 958m | Vit-H/14 | 632m | Roberta-WWM-Large | 326m | 224 |
Untuk tugas pengambilan grafik dan teks, kami melakukan eksperimen zero-shot dan finetune pada pengambilan muane, flickr30k-cn dan coco-CN. Untuk klasifikasi sampel nol gambar, kami melakukan percobaan pada 10 set data lift. Hasil percobaan ditunjukkan pada tabel di bawah ini. Karena keterbatasan ruang, kami di sini memberikan hasil model skala optimal dari model dasar dan klip Cina. Untuk indikator hasil terperinci dari setiap skala klip Cina, silakan lihat hasilnya. MD untuk detailnya.
Pengambilan teks-ke-gambar mUge (set validasi resmi) :
| Pengaturan | Zero-shot | Finetune | ||||||
|---|---|---|---|---|---|---|---|---|
| Metrik | R@1 | R@5 | R@10 | TN | R@1 | R@5 | R@10 | TN |
| Wukong | 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 retrieval (set tes resmi) :
| Tugas | Teks-ke-gambar | Gambar-ke-teks | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pengaturan | Zero-shot | Finetune | Zero-shot | Finetune | ||||||||
| Metrik | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 |
| Wukong | 51.7 | 78.9 | 86.3 | 77.4 | 94.5 | 97.0 | 76.1 | 94.8 | 97.5 | 92.7 | 99.1 | 99.6 |
| Taiyi | 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 Retrieval (set tes resmi) :
| Tugas | Teks-ke-gambar | Gambar-ke-teks | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pengaturan | Zero-shot | Finetune | Zero-shot | Finetune | ||||||||
| Metrik | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 |
| Wukong | 53.4 | 80.2 | 90.1 | 74.0 | 94.4 | 98.1 | 55.2 | 81.0 | 90.6 | 73.3 | 94.0 | 98.0 |
| Taiyi | 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 |
Klasifikasi gambar Zero-shot :
| Tugas | CIFAR10 | CIFAR100 | Dtd | Eurosat | Fer | Fgvc | Kitti | Mnist | PC | VOC |
|---|---|---|---|---|---|---|---|---|---|---|
| Git | 88.5 | 61.1 | 42.9 | 43.4 | 41.4 | 6.7 | 22.1 | 68.9 | 50.0 | 80.2 |
| MELURUSKAN | 94.9 | 76.8 | 66.1 | 52.1 | 50.8 | 25.0 | 41.2 | 74.0 | 55.2 | 83.0 |
| KLIP | 94.9 | 77.0 | 56.0 | 63.0 | 48.3 | 33.3 | 11.5 | 79.0 | 62.3 | 84.0 |
| Wukong | 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 |
Sebelum memulai proyek ini, Anda perlu memeriksa apakah persyaratan konfigurasi lingkungan berikut dipenuhi:
Jalankan perintah berikut untuk menginstal pustaka tiga partai yang diperlukan untuk proyek ini.
pip install -r requirements.txtBerikut adalah contoh kode sederhana untuk menggambarkan cara menggunakan API klip Cina. Sebelum mulai menggunakan, silakan instal CN_CLIP:
# 通过pip安装
pip install cn_clip
# 或者从源代码安装
cd Chinese-CLIP
pip install -e .Setelah instalasi berhasil, Anda dapat dengan mudah memanggil API melalui metode berikut, lulus dalam gambar yang ditentukan (contoh) dan teks, ekstrak vektor fitur grafis dan menghitung kesamaan:
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]]Kami juga telah menyiapkan dukungan yang relevan untuk menggunakan model ONNX dan TensorRt. Untuk detailnya, silakan merujuk ke Deployment.md.
Jika Anda tidak puas dengan hanya menggunakan API, silakan lanjutkan membaca dokumen ini untuk mempelajari cara menggunakan proyek kami untuk pelatihan dan pengujian model klip.
Berikut ini akan mencakup tutorial pengambilan lintas-modal (termasuk finetune dan inferensi, perhitungan KNN, dll.) Dan tutorial klasifikasi gambar nol-sampel.
Setelah mengunduh proyek ini, silakan buat folder baru ${DATAPATH} untuk menyimpan dataset, CKPT terlatih pra-terlatih, dan Log Model & CKPT yang dihasilkan oleh Finetune. Struktur direktori ruang kerja yang direkomendasikan adalah sebagai berikut:
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/
└── .../ # 更多自定义数据集...
Di sini kami memberikan metode pengunduhan parameter model pra-terlatih, serta proses data pra-pemrosesan sebelum Finetune.
Silakan merujuk ke bagian sebelumnya dari skala model & tautan unduhan untuk mengunduh model CKPT yang sesuai. Disarankan untuk menyimpan file CKPT yang diunduh dalam ${DATAPATH}/pretrained_weights/ direktori.
Untuk beradaptasi dengan kode klip Cina dan memastikan efisiensi pemrosesan dan membaca data, kami merekomendasikan agar set data grafik dan teks yang digunakan untuk pelatihan dan evaluasi diatur ke dalam metode berikut:
${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
di mana ${dataset_name} mengacu pada nama dataset (seperti MUGE)
Untuk memastikan efisiensi pemrosesan file, kami tidak menyimpan gambar dalam sejumlah besar file kecil, tetapi simpan gambar pelatihan/verifikasi/uji di base64 masing -masing dalam file ${split}_imgs.tsv masing -masing. Setiap baris file mewakili gambar, termasuk ID gambar (tipe int) dan basis gambar64, dipisahkan oleh tab, dan formatnya adalah sebagai berikut:
1000002 /9j/4AAQSkZJ...YQj7314oA//2Q==
Cara untuk mengonversi file gambar asli ke Base64 sangat sederhana, harap jalankan kode Python berikut:
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 Informasi teks dan hubungan yang cocok antara pasangan grafik dan teks disimpan dalam file ${split}_texts.jsonl . Setiap baris file adalah baris JSON, formatnya adalah sebagai berikut:
{"text_id": 8428, "text": "高级感托特包斜挎", "image_ids": [1076345, 517602]}
Untuk set tes, hanya ada teks dan saya tidak tahu hubungan yang cocok antara pasangan gambar dan teks, bidang image_ids dari setiap baris dapat diproses sebagai daftar kosong, yaitu, "image_ids": [] .
Akhirnya, kita juga perlu membuat serial file TSV dan JSONL bersama-sama dan mengubahnya menjadi file database LMDB yang diindeks memori untuk memfasilitasi pembacaan acak selama pelatihan.
python cn_clip/preprocess/build_lmdb_dataset.py
--data_dir ${DATAPATH}/datasets/${dataset_name}
--splits train,valid,test
Misalnya, untuk dataset MUGE, ${dataset_name} diatur ke MUGE, dan --splits menentukan divisi dataset yang perlu dikonversi, dipisahkan oleh koma tanpa spasi. Setelah konversi, file serial LMDB berikut akan ditambahkan ke folder dataset.
${DATAPATH}
└── datasets/
└── ${dataset_name}/
└── lmdb/
├── train
│ ├── imgs
│ └── pairs
├── valid
└── test
Untuk mengurangi kesulitan memulai, kami juga menyediakan data MUGE (tautan unduhan) dan paket kompresi data flickr30k-cn (tautan unduhan) yang telah diproses sesuai dengan langkah-langkah di atas. Cukup unduh dan decompress dan letakkan di ${DATAPATH}/datasets/ direktori. Jika data Coco-CN diperlukan, silakan hubungi kami melalui email setelah mengajukan izin dari penulis asli.
Di sini kami memperkenalkan langkah-langkah pelatihan untuk memfasilitasi pengguna lain untuk memahami detail model dan menggunakan model pra-terlatih klip Cina yang kami sediakan untuk Finetune. Berdasarkan dua kumpulan data pencarian hilir dari MUGE dan flickr30k-CN, kami menyediakan skrip sampel pelatihan run_scripts/muge_finetune_vit-b-16_rbt-base.sh dan run_scripts/flickr30k_finetune_vit-b-16_rbt-base.sh . Skrip yang berjalan mendukung mesin tunggal (tunggal atau banyak kartu) dan pelatihan terdistribusi multi-mesin. Sebelum berjalan, silakan isi konfigurasi terkait yang didistribusikan sesuai dengan pedoman dan komentar di awal skrip, dan kemudian jalankan perintah berikut untuk memulai pelatihan (silakan jalankan perintah pada setiap mesin untuk pelatihan multi-mesin). Untuk memori video yang tidak mencukupi, Anda dapat mempertimbangkan untuk mengaktifkan strategi perhitungan ulang di item konfigurasi. File log dan model CKPT yang dihasilkan oleh pelatihan akan secara otomatis disimpan dalam direktori yang ditentukan oleh pengguna:
cd Chinese-CLIP/
bash run_scripts/muge_finetune_vit-b-16_rbt-base.sh ${DATAPATH}Item konfigurasi pelatihan terkait meliputi:
WORKER_CNT : Jumlah mesin terlatihGPUS_PER_NODE : Jumlah GPU pada setiap mesintrain-data : Data Data Pelatihan LMDB Direktori, lihat di atas untuk proses preprocessing untuk menyiapkan file data LMDB.val-data : Verifikasi Data LMDB Directory. Ketika ditentukan tidak ada, verifikasi selama pelatihan tidak akan dilakukan.num-workers : Jumlah proses dalam pelatihan yang ditetapkan pemrosesan data (Dataloader), default adalah 4.valid-num-workers : Jumlah proses untuk pemrosesan data set verifikasi (Dataloader) (jika validasi dilakukan), default adalah 1.vision-model : Tentukan tulang punggung visual, pilih dari ["ViT-B-16", "ViT-L-14", "ViT-L-14-336", "ViT-H-14", "RN50"] .text-model : Tentukan backbone teks, pilih dari ["RoBERTa-wwm-ext-base-chinese", "RoBERTa-wwm-ext-large-chinese", "RBT3-chinese"] .context-length : Panjang urutan input teks.warmup : Langkah Pemanasan.batch-size : Ukuran Batch Kartu Tunggal Selama Pelatihan. (Harap pastikan训练样本总数> batch-size * GPU数, yang memenuhi setidaknya 1 Batch Pelatihan)lr : Tingkat belajar.wd : Pembusukan Berat Badan.max-steps : Jumlah langkah pelatihan, dan jumlah putaran pelatihan juga dapat ditentukan melalui max-epochs .freeze-vision : Apakah akan membekukan tulang punggung visual.use-augment : Apakah akan menggunakan autoaugment untuk meningkatkan data gambar.valid-batch-size : Ukuran Batch yang Berdiri Selama Verifikasi. (Harap pastikan bahwa验证集样本总数> batch-size * GPU数, memuaskan setidaknya 1 batch verifikasi)valid-step-interval dan valid-epoch-interval : Verifikasi frekuensi langkah/zaman. Jika ditentukan sebagai -1, verifikasi tidak akan dilakukan selama pelatihan.grad-checkpointing : Gunakan strategi perhitungan ulang untuk tidak menyimpan hasil perantara selama proses maju, dengan imbalan overhead memori yang lebih sedikit dalam waktu pelatihan, yang cocok untuk memori yang tidak mencukupi. (Parameter store_true , cukup tambahkan --grad-checkpointing ke skrip, saat ini Pytorch> 1.8.0 diperlukan)mask-ratio : Mengacu pada strategi flip, topeng acak dapat ditentukan untuk proporsi tertentu dari tambalan gambar selama Finetune untuk mengurangi overhead memori dan mempercepat pelatihan. Standarnya adalah 0,0, yang berarti bahwa kebijakan ini tidak diaktifkan.use-flash-attention : Menggunakan flashattention dapat secara signifikan mempercepat proses finetune klip Cina dan mengurangi penggunaan memori tanpa mempengaruhi efek. (Parameter store_true . Setelah mengonfigurasi lingkungan, tambahkan --use-flash-attention pada skrip. Silakan lihat flash_attention.md untuk detailnya)accum-freq : Frekuensi akumulasi gradien adalah 1 secara default. Ketika ditentukan sebagai bilangan bulat yang lebih besar dari 1, akumulasi gradien pembelajaran komparatif diaktifkan untuk mensimulasikan ukuran batch yang lebih besar. Jika ukuran batch kartu tunggal adalah m , ukuran total batch adalah accum_freq * m * GPU数.gather-with-grad : Apakah akan melakukan fitur berkumpul dengan gradien penuh selama pelatihan terdistribusi, itu dimatikan secara default.name : Tentukan jalur output. Log HyperParameter, Log Pelatihan dan Output CKPT akan disimpan dalam ${DATAPATH}/experiments/${name}/ .save-step-frequency dan save-epoch-frequency : Interval antara langkah atau putaran CKPT.report-training-batch-acc : Apakah log melaporkan keakuratan grafik pelatihan ke teks & teks ke grafik batch.resume : Jalan untuk dibaca berdasarkan berat badan. Skrip sampel ditentukan sebagai jalur CKPT yang sudah terlatih, atau dapat ditentukan sebagai jalur CKPT finetune pengguna sendiri untuk pelatihan berkelanjutan.reset-data-offset : Apakah akan terus berjalan dari breakpoint data sebelumnya. Jika ukuran batch atau nomor kartu GPU melebihi parameter, disarankan untuk menghidupkan opsi ini.reset-optimizer : Apakah akan menggunakan status pengoptimal. Setelah pelatihan, log akan secara otomatis ada ${DATAPATH}/experiments/${name}/out_${timestamp}.log . Format log pelatihan adalah sebagai berikut:
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
Format log verifikasi adalah sebagai berikut:
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
Catatan : Perbandingan konvergensi pelatihan dan stabilitas pembelajaran berkorelasi dengan ukuran total batch. Jika Anda menggunakan ukuran batch yang lebih kecil (dibandingkan dengan konfigurasi default 128 per-gpu * 8 GPU), disarankan untuk menggunakan tingkat pembelajaran yang lebih kecil. Kami merekomendasikan menggunakan lebih banyak GPU dan ukuran batch yang lebih besar untuk hasil yang lebih baik.
Kami menyediakan proses ekstraksi fitur dan evaluasi tugas pengambilan grafis, yaitu sebagai berikut:
Saat ini, kode ini mendukung penggunaan kartu tunggal GPU untuk ekstraksi fitur grafis, silakan merujuk ke perintah berikut. Kami juga memberikan dukungan untuk menggunakan model ONNX dan TensorRt untuk mempercepat inferensi fitur, lihat Deployment.md untuk detailnya.
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 Fitur grafik output akan disimpan dalam direktori ${DATAPATH}/datasets/${dataset_name} secara default, dan fitur gambar disimpan dalam file ${split}_imgs.img_feat.jsonl . Setiap baris menyimpan fitur gambar di JSON, dan formatnya adalah sebagai berikut:
{"image_id": 1000002, "feature": [0.0198, ..., -0.017, 0.0248]}
Fitur teks disimpan dalam ${split}_texts.txt_feat.jsonl , dengan format sebagai berikut:
{"text_id": 248816, "feature": [0.1314, ..., 0.0018, -0.0002]}
Untuk kumpulan data pencarian akademik skala kecil, kami memberikan implementasi pencarian KNN sederhana untuk memfasilitasi perhitungan hasil penarikan ter atas untuk pencarian teks-ke-grafik dan grafik-ke-teks (Tips: jika Anda ingin membangun demo pencarian dalam proyek, disarankan untuk menghasilkan grafik dan fitur teks berdasarkan model klip Chinese dan menggabungkan front-retri-retri-retri-retri.
Untuk pencarian teks-ke-gambar (gambar yang terkait dengan penarikan teks), jalankan perintah berikut:
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 "Hasilnya disimpan dalam file JSONL yang ditentukan. Setiap baris mewakili ID gambar-K atas dari penarikan teks, dan formatnya adalah sebagai berikut:
{ "text_id" : 153915 , "image_ids" : [ 5791244 , 1009692167 , 7454547004 , 3564007203 , 38130571 , 2525270674 , 2195419145 , 2503091968 , 4966265765 , 3690431163 ]}Untuk pencarian gambar-ke-teks (gambar yang diingat gambar), Demikian pula, jalankan perintah berikut:
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 "Setiap baris hasil output mewakili ID Teks Top-K dari penarikan gambar, dan formatnya adalah sebagai berikut:
{ "image_id" : 977856234 , "text_ids" : [ 156914 , 157914 , 158914 , 155914 , 156179 , 158907 , 157179 , 154179 , 154914 , 154723 ]}Kami memberikan skrip evaluasi untuk menghitung penarikan@1/5/10 dari tugas pencarian, dan memberikan penarikan rata -rata (rata -rata penarikan@1/5/10). Jalankan perintah berikut untuk mendapatkan skor:
Untuk pencarian teks-ke-gambar, jalankan perintah:
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.jsonUntuk pencarian gambar-ke-teks, silakan jalankan perintah berikut terlebih dahulu untuk mengonversi file JSONL yang ditandai dengan format gambar-ke-teks ke gambar-ke-teks:
python cn_clip/eval/transform_ir_annotation_to_tr.py
--input ${DATAPATH} /datasets/ ${dataset_name} / ${split} _texts.jsonlSetelah selesai, jalankan perintah:
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.jsonFormat hasil yang dicetak adalah sebagai berikut:
{ "success" : true , "score" : 85.67 , "scoreJson" : { "score" : 85.67 , "mean_recall" : 85.67 , "r1" : 71.2 , "r5" : 90.5 , "r10" : 95.3 }}Mengenai proses pelatihan dan pengujian pengambilan lintas-modal, kami mengambil dataset pencarian MUGE (grafik e-commerce multimodal dan tantangan teks) sebagai contoh, dan juga menyediakan buku catatan Jupyter (tautan unduhan) yang mencakup semua proses di atas dan dapat dijalankan. Setiap orang dipersilakan berlatih.
Bagian ini memperkenalkan cara menggunakan klip Cina untuk mengimplementasikan klasifikasi gambar sampel nol, mengambil set data dalam lift patokan sebagai contoh. Elevater adalah set evaluasi yang terdiri dari beberapa set data rahasia yang terkenal (termasuk CIFAR-10, CIFAR-100, MNIST, dll.) Untuk mengevaluasi efek nol-sampel dari model pada set data ini. Dalam percobaan kami, kami menyiapkan versi Cina dari propt, label kategori dan gambar asli untuk setiap dataset. Lihat dokumen data untuk detailnya untuk ini untuk menguji model klip Cina. Untuk detail lebih lanjut tentang tolok ukur ini, silakan klik tautannya. Anda juga dapat merujuk pada proses yang kami berikan untuk menyiapkan data dan mengujinya dalam kumpulan data klasifikasi Cina Anda sendiri.
Pertama persiapkan data dalam format berikut. Karena klasifikasi gambar nol-sampel hanya memerlukan pengujian, Anda hanya perlu menyiapkan set tes dan parameter model pra-terlatih, dan menyimpannya di bawah ${DATAPATH} yang ditentukan pengguna sesuai dengan struktur direktori berikut:
${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
└── ...
...
Set tes memastikan bahwa data dalam folder tes dibagi sesuai dengan ID yang sesuai dengan label, dan memastikan bahwa ID dalam urutan kamus (beberapa digit di atas 10 harus dilengkapi dengan nol ke label.zfill(3) , seperti 001, 002, dll.). label_cn.txt adalah label data dengan nama label per baris, seperti yang ditunjukkan di bawah ini:
手风琴
飞机
锚
...
Label ID yang sesuai dengan label masing -masing baris adalah行号-1 , seperti ID label baris pertama adalah 0, dan ID label dari baris kedua adalah 1. Jika jumlah total tag lebih besar dari 10, maka nol hingga tiga digit akan ditambahkan ke kiri, misalnya, jumlah tag adalah 100, dan tag ID akan 000-099 . Pengguna perlu menghasilkan folder yang sesuai untuk setiap ID label dan memasukkan sampel yang ditandai dengan label ke dalamnya. Kami mengambil dataset CIFAR-100 di lift sebagai contoh, silakan klik tautan untuk mengunduh data yang diproses. Jika Anda ingin mencoba menguji klip Cina pada dataset lain yang terkandung dalam lift, lihat dokumentasi data kami.
Kami telah menyiapkan skrip prediksi, silakan periksa run_scripts/zeroshot_eval.sh . Contoh menjalankan perintah adalah sebagai berikut:
bash run_scripts/zeroshot_eval.sh 0
${DATAPATH} ${dataset_name}
${vision_model} ${text_model}
${ckpt_path} ${index_file}Arti dari setiap parameter adalah:
0 adalah ID GPUDATAPATH Lihat bagian persiapan di atas, masukkan jalur yang sesuai sesuai dengan lokasi yang sebenarnya.dataset_name Lihat bagian persiapan di atas dan masukkan nama direktori dataset untuk evaluasi, seperti cifar-100vision_model adalah jenis model yang ditentukan, dan pilihannya termasuk ["ViT-B-32", "ViT-B-16", "ViT-L-14", "ViT-L-14-336", "RN50", "ViT-H-14"]text_model termasuk ["RoBERTa-wwm-ext-base-chinese", "RoBERTa-wwm-ext-large-chinese", "RBT3-chinese"]ckpt_path adalah jalur lengkap CKPT pra-terlatihindex_file (Opsional, hanya evaluasi situs web resmi Elevater yang perlu ditentukan), silakan merujuk ke dokumen data Misalnya, jika Anda menggunakan model pra-terlatih skala VIT-B/16 untuk mengevaluasi CIFAR-100, kemudian jalankan ( ${DATAPATH} perlu diganti sesuai dengan kondisi aktual):
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.ptMengembalikan hasilnya akan mencetak keakuratan Top-1.
Result:
zeroshot-top1: 0.6444
Pada CIFAR-100, skala Klip Cina Vit-B/16 harus diharapkan mencapai 64,4%. Untuk detailnya, silakan lihat results.md untuk detail tentang hasil klasifikasi sampel nol kami untuk skala lain dan set data lainnya.
Pada saat yang sama, program ini juga akan menyimpan file JSON untuk mengirimkan lift resmi. Konten file JSON adalah sebagai berikut:
{ "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)] " } Ini termasuk informasi meta dari nama model model_name , nama dataset dataset_name , kuantitas parameter total num_params , parameter menara visual num_visual_params dan model lain, serta hasil output model, yaitu lababilitas probabilitas model, dan ukurannya adalah [1, 样本数, 标签个数] .
Berdasarkan API ekstraksi fitur kami yang terintegrasi ke dalam transformator huggingface, kami menyediakan demo (API inferensi yang di-host) yang dapat dengan mudah mencoba klasifikasi gambar nol-sampel online di hub model HuggingFace. Lihat tautan demo untuk setiap skala model di bawah ini. Selamat datang untuk mencobanya!
Jika menurut Anda proyek ini bermanfaat, saya harap Anda dapat memberi kami bintang dan membagikannya dengan pengguna di sekitar Anda. Selamat datang di kutipan kerja yang relevan, terima kasih atas dukungan Anda!
@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}
}