如何从0到1进行CV项目实战

一、与极市平台的初识

偶然间看到过极市平台公众号的推文,觉得不错便已早早关注。因专业相关,且对视觉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项目实战。
感兴趣的朋友可以直接到极市平台打榜模块参加,平台还提供了免费算力,还是很不错的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值