【项目背景】
本项目是参加了由人工智能实验室举办的“新一代人工智能教师成长营”。以军棋棋子大小的判断做为项目开发入口。
【制作过程】
首先思考作品要实现的功能,用过要解决的功能去选择开源的算法。然后进行对应步骤的操作。
本项目使用的是目标检测,SSD_Lite算法模型。
第一步:采集数据。
使用手机拍摄各个角度的棋子的照片,进行数据采集。(比较麻烦,也可以使用视频抽桢的方式来比较简单一点)
分别采集训练集图片和测试集图片,数量比例在8:2左右。(每一个类照片尽量大于100张越多越好)
第2步:数据标注
利用浦育平台 的在线数据标注工具。
https://www.openinnolab.org.cn/pjlab/projects/channel
1、设置标注的分类。
2、对所有采集的图片进行数据标注。在线标注比较卡,数据少的话可以用(可以使用数据标注软件)
3、对标注好的图片生成数据集。
第3步:转数据集
将标注好的数据进行coco数据集转换
第4步:模型训练
xedu只需要简单的几部就可以实现模型训练。
训练代码:
from MMEdu import MMDetection as det # 导入基础库
model = det(backbone='SSD_Lite') # 算法模型
model.num_classes = 4 #军棋设定4类,目前只设置了 红黑地雷和红黑工兵
model.load_dataset(path='/data/MJT86E/coco') # coco数据集位置
model.save_fold = 'checkpoints/det_model/plate/SSD_Lite' # 训练后权重文件保存路径
checkpoint = 'checkpoints/Pre-trained_ssdlite_mobilenetv2.pth' # 选用训练模型,
model.train(epochs=100, lr=0.0005, validate=True,batch_size=4,checkpoint= checkpoint,device='cuda') # 启动cpu容器将device='cpu',启动GPU容器将device='cuda'
建议使用预训练模型,可以增加训练的速度节约时间。
保存好权重文件,可以导出保存。
第5步:模型推理
模型推理:
from MMEdu import MMDetection as det # 导入基础库
model = det(backbone='SSD_Lite') # 算法模型
checkpoint = 'checkpoints/det_model/plate/SSD_Lite/epoch_54.pth' # 训练好的权重文件
class_path = '/data/MJT86E/coco/classes.txt' # 数据库中的类别
img = 'ceshi/1112.png' # 需要测试的图片
result = model.inference(image=img, show=True, class_path=class_path,checkpoint = checkpoint,device='cpu') # cpu容器将device='cuda',gpu容器device='cpu'
r = model.print_result(result) # 返回结果
测试推理效果。
第6步:模型转换
因为本项目是部署在行空板中,行空板算力有限,为了让行空板可以更好的运行,转模型onnx
from MMEdu import MMDetection as det # 导入基础库
model = det(backbone='SSD_Lite') # 算法模型
model.num_classes = 4 #军旗设定4类,(本项目未用全部棋子,只用了4种演示)
checkpoint = 'checkpoints/det_model/plate/SSD_Lite/epoch_54.pth' # 设置训练好的权重文件
out_file="out_file/COCO-80.onnx" # 输出onnx模型
model.convert(checkpoint=checkpoint, backend="ONNX", out_file=out_file, class_path='dataset/classes.txt')
转换模型后生成onnx模型以及能运行的模型的Python基础代码。
第7步:模型部署
把模型和模型代码拷贝到行空板中运行行空板即可实现。
第8步:功能扩展
附件
评论