一、与极市平台的初识
偶然间看到过极市平台公众号的推文,觉得不错便已早早关注。因专业相关,且对视觉Ai的项目开发流程有一定基础,但苦于没有平台实现整个流程的开发,此次9月视觉AI项目实训周活动一出,便早早报名参加,在此次活动中收获颇丰,对一个完整的项目部署有了更深层次的认知。除此之外,极市平台对开发者也有一定的打榜激励,更激发了我对项目完成的动力。(极市平台官网:https://www.cvmart.net/)
二、 项目开发流程
下面我以口罩识别项目为例分享平台的项目流程。
1.环境初步说明
通过点击立即打榜报名项目,并在极市AI开发工作台中创建实例和虚拟环境:
可根据需要的模型选择拉取合适的基础镜像
2.项目、数据集描述
赛道说明中则对项目进行描述
数据集中则可以查看图像数据,但样例集中平台针对隐私进行了模糊处理,在训练中则为原图片:
3.1开发环境说明
进入到编码环境中
Jupterlab内为两个文件夹,训练在train中进行,封装则在ev_sdk中进行。训练数据与环境隔离,/home/data下存在部分测试数据以进行训练流程验证。
下方为编码环境IDE工程文件目录
ev_sdk #AI算法封装sdk工程目录
|-- … |-- src
|-- …
|-- ji.py #自动测试脚本,需开发者按赛道说明完成编码 train #AI算法开发工程目录 |-- src_repo #代码目录,极市平台自动备份此目录
|-- yolov5 #yolov5框架目录,开发者自行下载
|-- run.sh #训练命令脚本
|-- split_train_val.py # 划分数据集脚本,开发者自行构建
|-- voc_label.py #数据集格式转换脚本,开发者自行构建 |-- models #模型保存目录,平台将保存此目录下文件至“模型列表” |-- result-graphs #训练结果图片保存目录 |-- log #训练日志保存目录
开发者在命令行中通过github拉取模型文件,或上传本地文件到平台,环境内通过wget方式进行下载,其通过白名单制度,保障资源合理运用。
开发者在编码环境内完成对模型的构建,并通过样例数据完成程序调试,在发起训练任务后,平台会完整复制当前的在线编码环境及环境中的所有文件,作为正式的训练环境,并且会使用完整的训练数据集替换样例数据集(数据集路径不变,为 /home/data/xxx)
3.2 开始训练
run.sh示例如下:
#run.sh
rm -r /project/train/src_repo/dataset
#创建数据集相关文件夹
mkdir /project/train/src_repo/dataset
mkdir /project/train/src_repo/dataset/Annotations
mkdir /project/train/src_repo/dataset/images
mkdir /project/train/src_repo/dataset/ImageSets
mkdir /project/train/src_repo/dataset/labels
mkdir /project/train/src_repo/dataset/ImageSets/Main
cp /home/data/831/.xml /project/train/src_repo/dataset/Annotations
cp /home/data/831/.jpg /project/train/src_repo/dataset/images
#执行数据集划分、转换
python /project/train/src_repo/split_train_val.py --xml_path /project/train/src_repo/dataset/Annotations --txt_path /project/train/src_repo/dataset/ImageSets/Main
cp /project/train/src_repo/voc_label.py /project/train/src_repo/dataset
python /project/train/src_repo/dataset/voc_label.py
#执行YOLOV5训练脚本
python /project/train/src_repo/yolov5/train.py --data helmet.yaml --project /project/train/models/train
需要注意的是,训练完成后的权重文件与编码环境隔离,只有在训练或测试时根据外部环境提供的路径进行挂载
3.3 进行测试:
后根据得分(成绩得分>0.7)进行封装,
3.4 进行封装部署
封装部署为单独的环境,需单独安装模型导出的环境
git clone https://github.com/ultralytics/yolov5
pip install onnx == 1.9.0
pip install onnx-simplifier == 0.4.1
针对YoloV5,笔者已有封装经验为pt权重文件->wts->engine,利用tensorrt进行加速推理,本次项目由于时间原因较为遗憾没有实现该部分,转而使用pt转为Onnx进行sdk的封装。
需注意的是,在封装过程中,pt导出为onnx需要通过发起训练进行转化,本应该通过shell进行转化,下为export.sh
python /project/train/src_repo/yolov5/export.py --data /project/train/src_repo/yolov5/data/hemlet.yaml --weights /project/train/models/train/exp6/weights/best.pt --simplify --include onnx
但实际上发起任务bash export.sh总会报错,转为直接发起以上命令即可。
Sdk则根据平台已有demo改进处理:
https://gitee.com/cvmart/ev_sdk_demo4.0_pedestrian_intrusion_yolov5.git
修改SampleDetector.cpp
中150行
第一个width改为height
103与105行进行交换
Rgb调整为bgr通道
修改algo_config.json 中的标签
修改SampleAlgorithm.cpp中的标签
SampleAlogorithm.cpp
加入报警
auto iter = find(mConfig.alarmType.begin(), mConfig.alarmType.end(), obj.label);
if(iter == mConfig.alarmType.end())
{
continue;
}
根据报警类型添加77行,0为标签中序号
-
编译SDK库
mkdir -p /usr/local/ev_sdk/build
cd /usr/local/ev_sdk/build
cmake …
make install -
编译测试工具
mkdir -p /usr/local/ev_sdk/test/build
cd /usr/local/ev_sdk/test/build
cmake …
make install
平台内部有文件对已封装的模型进行SDK规范性测试,前两步通过后继而人工验收。
三、极市平台实训周小结
本次实训周加深了我对项目落地实际流程的认知,也让我体验了项目的实际流程开发与模型封装,实现从0到1进行CV项目实战。
感兴趣的朋友可以直接到极市平台打榜模块参加,平台还提供了免费算力,还是很不错的。