直接使用
请打开基于YOLOX模型和iTAG标注数据的图像检测示例,并点击右上角 “ 在DSW中打开” 。
EasyCV图像检测-YOLOX-iTAG
本文将以YOLOX模型为例,介绍如何基于easyCV使用PAI-iTAG标注的数据进行目标检测模型训练和预测。
YOLO系列的开发主要包括V1(2015),V2(2016),V3(2018),V4 (2020)以及V5(2020)等一系列版本。YOLO 是由Joseph Redmon 和 Ross Girshick 在 2015 年的 You Only Look Once: Unified, Real-Time Object Detection (Link) 中提出的单阶段目标检测网络。YOLO系列以其响应速度快、精度高、结构简单、部署方便等特点受到工程研究人员的青睐。同时,YOLO系列由于需要人工设定样本正负,导致模型存在泛化能力差的问题。针对此类问题,旷视科技研究院BaseDetection团队结合学术界的先进成果和工程实践提出了YOLOX.
YOLOX在YOLO系列地基础上汲取近些年学术界目标检测地最新功效并承继YOLO系列简单部署的特性.除此之外,YOLOX设计了Decoupled Head、Data Aug、Anchor Free和SimOTA部件。其代码目前支持各个平台(MegEngine、TensorRT、ONNX、OpenVino 和 ncnn)的部署。
在EasyCV中,我们提供了在COCO2017数据集上多种规格的预训练模型(Link)可用于下游任务的fintune。
本文将介绍如何在pai-dsw基于EasyCV和PAI-iTAG标注数据快速使用YOLOX进行图像检测模型的训练、推理。
运行环境要求
modelscope:tf1.15torch1.11-gpu-py37-cu113-ubuntu20.04 镜像, GPU机型 P100 or V100, 内存 32G
安装依赖包
1、安装mmcv-full
# 根据cuda和torch版本 ! pip install -U openmim && mim install mmcv-full==1.6.1
2、安装EasyCV算法包
可以通过如下命令安装,也可以拉取最新EasyCV代码进行安装
! echo y | pip uninstall pai-easycv && pip install http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/pkgs/whl/2023_02/pai_easycv-0.9.0-py3-none-any.whl ! echo y | pip uninstall mmdet
3、简单验证
from easycv.apis import *
图像检测模型训练&预测
下面示例介绍如何利用PAI-iTAG标注的检测数据集,进行yolox检测模型的训练
数据准备
可以使用PAI-iTAG标注的自定义数据集,也可以使用我们提供了示例iTAG数据快速走通流程
! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/data/itag_det_example/itag_det_example.tar.gz && tar -zxf itag_det_example.tar.gz
使用easycv提供的工具easycv.tools.prepare_data.convert_det_itag2ra将iTAG的标注文件转换成easycv格式
使用该工具需要指定如下参数
- itag_label_file:itag标注文件路径,如下示例中的itag_det_example/pet_det.manifest
- raw_label_dir:转换后的标签文件保存目录,会在该目录下生成train和val文件夹,分别代表训练和验证标签,如下示例中的 itag_det_example/labels
- class_path:该数据的的标签名列表文件,如示例中的 itag_det_example/class_list.txt
- split:代表是否分隔训练验证集
- split_ratio:代表分隔验证集的比例,如示例中为0.2,代表20%的数据会分配给验证集
! python -m easycv.tools.prepare_data.convert_det_itag2raw itag_det_example/pet_det.manifest itag_det_example/labels itag_det_example/class_list.txt --split --split_ratio 0.2
转换后训练所需的文件目录如下
├── imgs │ ├── Abyssinian_100.jpg │ ├── Abyssinian_103.jpg │ ├── Abyssinian_104.jpg │ ├── Abyssinian_105.jpg │ ├── Abyssinian_106.jpg ... │ └── havanese_9.jpg ├── labels │ ├── train │ │ ├── Abyssinian_100.txt │ │ ├── Abyssinian_104.txt │ │ ├── Abyssinian_105.txt ... │ │ └── havanese_9.txt │ └── val │ ├── Abyssinian_103.txt │ ├── Abyssinian_107.txt │ ├── Abyssinian_108.txt .... │ ├── Abyssinian_111.txt │ └── havanese_91.txt
训练模型
下载示例配置文件, 进行YOLOX-S模型训练
! rm -rf yolox_m_raw.py ! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/configs/detection/yolox/yolox_m_raw.py
为了适配小数据,我们对配置文件yolox_m_raw.py做如下字段的修改,减少训练epoch数目、学习率
如果使用自定义的数据集,则还需要修改train_dataset和val_dataset中的图片数据路径img_root_path、标签文件路径label_root_path、以及类别列表CLASSES
total_epochs = 50 #optimizer.lr -> 0.002 optimizer = dict( type='SGD', lr=0.002, momentum=0.9, weight_decay=5e-4, nesterov=True) # log_config.interval 5 log_config = dict(interval=5)
为了保证模型效果,我们在预训练模型基础上finetune, 执行如下命令启动训练
!python -m torch.distributed.launch --nproc_per_node=1 \ /opt/conda/lib/python3.7/site-packages/easycv/tools/train.py \ yolox_m_raw.py --work_dir work_dir/example_det --launcher pytorch --fp16 \ --load_from http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/modelzoo/detection/yolox/yolox_m_bs16_lr002/epoch_300.pth
预测
查看训练产生的模型文件,其中_export.pt结尾的模型文件是最终导出用来做推理的模型
! ls work_dir/example_det/*pt*
导入模型权重,并预测测试图片的检测结果
import cv2 from easycv.predictors import YoloXPredictor output_ckpt = 'work_dir/example_det/epoch_50_export.pt' detector = YoloXPredictor(output_ckpt) output = detector(['itag_det_example/imgs/Abyssinian_1.jpg']) print(output) detector.visualize('itag_det_example/imgs/Abyssinian_1.jpg', output[0], out_file='out.jpg')
将epoch_50_export.pt文件上传至OSS,使用PAI-EAS中的easycv predictor即可部署在线服务