Китайское описание | Английский
Моделикоп | демонстрация | бумага | блог
Этот проект представляет собой китайскую версию модели клипа и использует крупномасштабные китайские данные для обучения (~ 200 миллионов графических и текстовых пар), нацеленных на то, чтобы помочь пользователям быстро реализовать такие задачи, как графические характеристики и характеристики текста и расчет сходства, перекрестное извлечение и классификация изображений с нулевым образцом в китайской области. Код этого проекта основан на проекте Open_Clip и оптимизирован для китайских полевых данных и для достижения лучших результатов по китайским данным. Этот проект содержит API, код обучения и тестовый код, а подробности будут подробно описаны ниже.
Китайская зажима в настоящее время открывается в 5 различных масштабах, а ее модельная информация и методы загрузки показаны в следующей таблице:
| Размер модели | Скачать ссылку | Параметр Количество | Визуальный боковой скелет | Визуальное количество параметров | Текстовый боковой скелет | Параметр текста | Разрешение |
|---|---|---|---|---|---|---|---|
| CN-Clip RN50 | Скачать | 77м | Resnet50 | 38м | RBT3 | 39 м | 224 |
| CN-CRIP VIT-B/16 | Скачать | 188m | Vit-B/16 | 86м | Роберта-WWM-баз | 102 м | 224 |
| CN-CRIP VIT-L/14 | Скачать | 406 м | Vit-L/14 | 304 м | Роберта-WWM-баз | 102 м | 224 |
| CN-CRIP VIT-L/14@336PX | Скачать | 407 м | Vit-L/14 | 304 м | Роберта-WWM-баз | 102 м | 336 |
| CN-CRIP VIT-H/14 | Скачать | 958m | Vit-H/14 | 632M | Роберта-Вум-Лардж | 326 м | 224 |
Для задачи поиска графики и текста мы провели эксперименты с нулевым выстрелом и Finetune по поиску Muge, Flickr30K-CN и Coco-CN. Для классификации изображения с нулевым образцом мы провели эксперименты на 10 наборах данных Elevater. Экспериментальные результаты показаны в таблице ниже. Из-за ограничений пространства мы здесь даем результаты оптимальной масштабной модели базовой модели и китайского зажигания. Для получения подробных результатов показателей каждой шкалы китайского зажигания см. Результаты. MD для получения подробной информации.
Muge Text-To-Image поиск (официальный набор проверки) :
| Настраивать | Нулевой выстрел | Тонкая настройка | ||||||
|---|---|---|---|---|---|---|---|---|
| Показатель | R@1 | R@5 | R@10 | МИСТЕР | R@1 | R@5 | R@10 | МИСТЕР |
| 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 поиск (официальный тестовый набор) :
| Задача | Текст к изображению | Изображение в текст | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Настраивать | Нулевой выстрел | Тонкая настройка | Нулевой выстрел | Тонкая настройка | ||||||||
| Показатель | 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 |
| Тайи | 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 (официальный тестовый набор) :
| Задача | Текст к изображению | Изображение в текст | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Настраивать | Нулевой выстрел | Тонкая настройка | Нулевой выстрел | Тонкая настройка | ||||||||
| Показатель | 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 |
| Тайи | 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 | Евросат | Грубый | FGVC | Китти | Мнист | ПК | Вокал |
|---|---|---|---|---|---|---|---|---|---|---|
| Git | 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 |
| 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 |
Перед началом этого проекта необходимо проверить, выполняются ли следующие требования к конфигурации окружающей среды:
Запустите следующую команду, чтобы установить трехпартийные библиотеки, необходимые для этого проекта.
pip install -r requirements.txtВот простой пример кода, чтобы проиллюстрировать, как использовать китайский API -клип. Перед началом использования, пожалуйста, установите CN_CLIP:
# 通过pip安装
pip install cn_clip
# 或者从源代码安装
cd Chinese-CLIP
pip install -e .После успешной установки вы можете легко вызвать API с помощью следующих методов, пропустите указанное изображение (пример) и текст, извлечь вектор графических признаков и вычислить сходство:
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.
Если вы не удовлетворены просто использованием API, пожалуйста, продолжайте читать этот документ, чтобы узнать, как использовать наш проект для обучения и тестирования моделей клипов.
Следующее будет включать в себя учебники по пересечению межмодального (включая 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.
Пожалуйста, обратитесь к предыдущему разделу Scale и Scale Scale и Ссылки для загрузки соответствующей модели CKPT. Рекомендуется сохранить загруженный файл CKPT в ${DATAPATH}/pretrained_weights/ каталог.
Чтобы адаптироваться к коду китайского числа и обеспечить эффективность обработки и чтения данных, мы рекомендуем организовать графические и текстовые наборы данных, используемые для обучения и оценки в следующие методы:
${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, разделенная на TAB, а формат выглядит следующим образом:
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 Training Data, см. Выше для процесса предварительной обработки для подготовки файлов данных LMDB.val-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数, которое соответствует не менее 1 учебной партии)lr : скорость обучения.wd : Веса распада.max-steps : количество учебных этапов и количество учебных раундов также может быть указано через max-epochs .freeze-vision : замораживать визуальную основу.use-augment : использовать автоауг для улучшения данных изображения.valid-batch-size : отдельный размер партии во время проверки. (Пожалуйста, убедитесь, что验证集样本总数> batch-size * GPU数, удовлетворяя не менее 1 партии проверки)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 : использование вспышки может значительно ускорить процесс Finetune в китайском заливе и уменьшить использование памяти, не влияя на эффект. (Параметр store_true . После настройки среды добавьте --use-flash-attention к скрипту. Пожалуйста, см. В деталях Flash_Attention.md)accum-freq : Частота накопления градиента по умолчанию составляет 1. При указании целого числа, превышающего 1, сравнительное накопление градиента обучения включено для моделирования большего размера партии. Если размер партии одной карты равен m , общий размер партии accum_freq * m * GPU数.gather-with-grad : сделать ли функции собирать с полными градиентами во время распределенного обучения, он отключается по умолчанию.name : Укажите выходной путь. Журнал гиперпараметра, журнал обучения и вывод 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 для ускорения вывода функций, для получения подробной информации см. MD. 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, чтобы облегчить расчет результатов отзывов Top-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. Каждая строка представляет идентификатор изображения Top-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 "Каждая строка выходных результатов представляет собой текстовый идентификатор Top-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 (скачать ссылку), которая включает в себя все вышеперечисленные процессы и может быть запущена. Все могут практиковать это.
В этом разделе представлено, как использовать китайскую охват для реализации классификации изображений с нулевым образцом, принимая набор данных в Bender Elevater в качестве примера. 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) . label_cn.txt - это метка данных с именем метки на строку, как показано ниже:
手风琴
飞机
锚
...
Идентификатор метки, соответствующий метке каждой строки, составляет行号-1 , такой как идентификатор метки первой строки, составляет 0, а идентификатор метки второй строки составляет 1. Если общее количество метров больше 10, то влево будет добавлено ноль до трех 000-099 . Пользователь должен генерировать соответствующую папку для каждого идентификатора метки и поместить в нее образец, отмеченный этикеткой. В качестве примера мы принимаем набор данных CIFAR-100 в Elevater, пожалуйста, нажмите на ссылку, чтобы загрузить обработанные данные. Если вы хотите попробовать тестирование китайского зажигания на других наборах данных, содержащихся в Elevater, см. Наша документация по данным.
Мы подготовили скрипт прогнозирования, пожалуйста, ознакомьтесь с 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 (необязательно, необходимо указать только официальную оценку веб -сайта Elevater), пожалуйста, обратитесь к документу данных Например, если вы используете предварительно обученную модель шкалы 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%. Для получения подробной информации, пожалуйста, смотрите Results.md для получения подробной информации о наших результатах классификации с нулевой выборкой для других шкал и других наборов данных.
В то же время программа также сохранит файл JSON для отправки официального Elevater. Содержание файла 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 , DataSet name dataset_name , общее количество параметров num_params , количество параметров визуальной башни num_visual_params и другие модели, а также результат вывода модели, то есть тендентор вероятности прогноза модели, а размер - это [1, 样本数, 标签个数] .
Основываясь на нашем API извлечения функций, интегрированных в трансформаторы guggingface, мы предоставляем демонстрацию (размещенное API с выводом), которая может просто попробовать классификацию изображений с нулевым образцом в онлайн в центре модели Huggingface. См. Демо -ссылки для каждой шкалы модели ниже. Добро пожаловать, чтобы попробовать!
Если вы думаете, что этот проект полезен, я надеюсь, что вы сможете дать нам звезду и поделиться им с пользователями вокруг вас. Добро пожаловать в соответствующую рабочую цитату, спасибо за вашу поддержку!
@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}
}