直接使用
请打开基于基于残差网络的度量学习示例,并点击右上角 “ 在DSW中打开” 。
EasyCV度量学习
度量学习又称为相似性学习,有广泛的应用,可在数据集上构建合适的距离度量来建模回答实际问题。在机器学习中distance metric learning(也称 metric learning,度量学习)是一个很典型的任务,通常与很多熟知的 metric-based methods(如 KNN、K-means 等)结合起来使用以实现分类或者聚类 ,效果通常非常不错。
本文将介绍如何在pai-dsw基于EasyCV快速进行度量模型的训练、推理。
运行环境要求
PAI-Pytorch 1.7/1.8镜像, GPU机型 P100 or V100, 内存 32G
安装依赖包
注:在PAI-DSW docker中无需安装相关依赖,可跳过此1,2步骤, 在本地notebook环境中执行1,2步骤安装环境
1、获取torch和cuda版本,并根据版本号修改mmcv安装命令,安装对应版本的mmcv和nvidia-dali
import torch import os os.environ['CUDA']='cu' + torch.version.cuda.replace('.', '') os.environ['Torch']='torch'+torch.version.__version__.replace('+PAI', '') !echo $CUDA !echo $Torch
cu101 torch1.8.1+cu101
# install some python deps ! pip install --upgrade tqdm ! pip install mmcv-full==1.4.4 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.8.0/index.html ! pip install http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/third_party/nvidia_dali_cuda100-0.25.0-1535750-py3-none-manylinux2014_x86_64.whl
2、安装EasyCV算法包 注:在PAI-DSW docker中预安装了pai-easycv库,可跳过该步骤,若训练测试过程中报错,尝试用下方命令更新easycv版本
#pip install pai-easycv ! echo y | pip uninstall pai-easycv easycv ! pip install http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/pkgs/whl/2022_6/pai_easycv-0.3.0-py3-none-any.whl
3、简单验证
from easycv.apis import *
CUB200 度量学习
下面示例介绍如何利用CUB200数据,使用ResNet50模型快速进行图像分类模型的训练评估、模型预测过程
数据准备
下载cub200数据,解压到data/cub200目录, 目录结构如下
data/cub200 ├── images ├── images.txt ├── image_class_labels.txt ├── train_test_split.txt
! mkdir -p data/ && wget https://s3.amazonaws.com/fast-ai-imageclas/CUB_200_2011.tgz && tar -xzf CUB_200_2011.tgz -C data/ && mv data/CUB_200_2011 data/cub200
训练模型
下载训练配置文件,该配置文件默认从基于ImageNet的预训练模型导入权重,如需自监督预训练模型可以从上文的链接中下载并替换config中的配置。
! rm -rf cub_resnet50_jpg.py !wget https://raw.githubusercontent.com/alibaba/EasyCV/master/configs/metric_learning/cub_resnet50_jpg.py
使用单卡gpu进行训练和验证集评估,为了快速跑通,可自行将cub_resnet50_jpg.py中的total_epoch参数设置成10。
!python -m torch.distributed.launch --nproc_per_node=1 --master_port=29500 /home/pai/lib/python3.6/site-packages/easycv/tools/train.py cub_resnet50_jpg.py --work_dir work_dirs/metric_learning/cub/r50 --launcher pytorch --fp16
导出模型
模型训练完成,使用export命令导出模型进行推理,导出的模型包含推理时所需的预处理信息、后处理信息
# 查看训练产生的pt文件 ! ls work_dirs/metric_learning/cub/r50*
RetrivalTopKEvaluator_R@K=1_best.pth 是训练过程中产生的acc最高的pth,导出该模型
! python -m easycv.tools.export ./cub_resnet50_jpg.py work_dirs/metric_learning/cub/r50/RetrivalTopKEvaluator_R@K=1_best.pth work_dirs/metric_learning/cub/r50/best_export.pth
预测
下载测试图片
! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/data/fine_grain_cls/cub_raw/images/001.Black_footed_Albatross/Black_Footed_Albatross_0001_796111.jpg
导入模型权重,并预测测试图片的分类结果
import cv2 from easycv.predictors.feature_extractor import TorchFeatureExtractor output_ckpt = 'work_dirs/metric_learning/cub/r50/best_export.pth' tcls = TorchFeatureExtractor(output_ckpt) img = cv2.imread('Black_Footed_Albatross_0001_796111.jpg') # input image should be RGB order img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) output = tcls.predict([img])