在线模型训练
- 概念理解
- 准备工作
- 1 采集图像
- 1.1 图像要求
- 1.2 使用K210采集图片
- 2 标注图像
- 3 打包数据集
- 4 上传数据
- 4.1创建项目
- 4.1.1图像分类创建项目
- 4.1.2图像检测创建项目
- 4.2上传数据
- 4.2.1分类检测上传数据
- 4.2.2图像检测上传数据
- 5 训练模型
- 6 部署模型以及测试
- 7 测试效果
- 7.1图像检测
- 7.2 图像分类
- 8 齐护编程 程序
- 8.1图像检测
- 8.2 图像分类
- 9.课程资源下载
- 9-1 程序
- 9-2 模型
- 联系我们
我们可以通过Maixhub网站提供的模型训练功能,来实现分类模型和目标检测模型的训练,需要准备好需要训练的数据集。
概念理解
首先我们要理解两个应用概念:
目标分类: 识别图片所属的种类,返回的数据只有类别和概率值。
目标检测:识别目标,返回数据有物品的种类、概率值,以及位置信息等
简单理解,如果不需要检测物体坐标输出的, 用目标分类, 需要坐标则目标检测。
准备工作
请先下载要使用的工具 下载
1 采集图像
1.1 图像要求
采集的图像分辨率为:224x224
采集图像数量
- 目标分类: 每类图片数量不低于40张
- 目标检测: 每类图片数量不低于100张
1.2 使用K210采集图片
使用以下脚本下载到AIstart k210主板内,复制到文本文件,然后存成main.py放入到SD卡内。
这是一个拍照存到SD卡的程序,对着我们要识别的物体拍照,尽量多角度的拍,跟后面实际要识别的角度、环境光等越接近拍下来,后面就识别精度越高,自动存在AIstart的SD卡内,后面我们要用到。
def capture_main(key):
def draw_string(img, x, y, text, color, scale, bg=None , full_w = False):
if bg:
if full_w:
full_w = img.width()
else:
full_w = len(text)*8*scale+4
img.draw_rectangle(x-2,y-2, full_w, 16*scale, fill=True, color=bg)
img = img.draw_string(x, y, text, color=color,scale=scale)
return img
def del_all_images():
os.chdir("/sd")
images_dir = "cap_images"
if images_dir in os.listdir():
os.chdir(images_dir)
types = os.listdir()
for t in types:
os.chdir(t)
files = os.listdir()
for f in files:
os.remove(f)
os.chdir("..")
os.rmdir(t)
os.chdir("..")
os.rmdir(images_dir)
# del_all_images()
os.chdir("/sd")
dirs = os.listdir()
images_dir = "cap_images"
last_dir = 0
for d in dirs:
if d.startswith(images_dir):
if len(d) > 11:
n = int(d[11:])
if n > last_dir:
last_dir = n
images_dir = "{}_{}".format(images_dir, last_dir+1)
print("save to ", images_dir)
if images_dir in os.listdir():
img = image.Image()
img = draw_string(img, 2, 200, "please del cap_images dir", color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
sys.exit(1)
os.mkdir(images_dir)
last_cap_time = 0
last_btn_status = 1
save_dir = 0
save_count = 0
os.mkdir("{}/{}".format(images_dir, save_dir))
while(True):
img0 = sensor.snapshot()
if set_windowing:
img = image.Image()
img = img.draw_image(img0, (img.width() - set_windowing[0])//2, img.height() - set_windowing[1])
else:
img = img0.copy()
# img = img.resize(320, 240)
if key.value() == 0:
time.sleep_ms(30)
if key.value() 0 and (last_btn_status 1) and (time.ticks_ms() - last_cap_time > 500):
last_btn_status = 0
last_cap_time = time.ticks_ms()
else:
if time.ticks_ms() - last_cap_time > 5000:
img = draw_string(img, 2, 200, "release to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)
else:
img = draw_string(img, 2, 200, "release to capture", color=lcd.WHITE,scale=1, bg=lcd.RED)
if time.ticks_ms() - last_cap_time > 2000:
img = draw_string(img, 2, 160, "keep push to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)
else:
time.sleep_ms(30)
if key.value() 1 and (last_btn_status 0):
if time.ticks_ms() - last_cap_time > 5000:
img = draw_string(img, 2, 200, "change 齐护编程ject type", color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
time.sleep_ms(1000)
save_dir += 1
save_count = 0
dir_name = "{}/{}".format(images_dir, save_dir)
os.mkdir(dir_name)
else:
draw_string(img, 2, 200, "capture image {}".format(save_count), color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
f_name = "{}/{}/{}.jpg".format(images_dir, save_dir, save_count)
img0.save(f_name, quality=95)
save_count += 1
last_btn_status = 1
img = draw_string(img, 2, 0, "will save to {}/{}/{}.jpg".format(images_dir, save_dir, save_count), color=lcd.WHITE,scale=1, bg=lcd.RED, full_w=True)
lcd.display(img)
del img
del img0
def main():
try:
capture_main(key)
except Exception as e:
print("error:", e)
import uio
s = uio.StringIO()
sys.print_exception(e, s)
s = s.getvalue()
img = image.Image()
img.draw_string(0, 0, s)
lcd.display(img)
main()
使用请参考这里
使用读卡器从SD拷贝文件,删除掉无效图片。这里我拍了两种物体,分别是我们的C02mini和TFT模块,每种大概有100张左右。
2 标注图像
打开我们刚才下好的工具软件,进行标注。
分类图像不需要操作此步。
-
选择一个需要标类别图片的目录
-
选择输出标文件的目录
-
点标注,框住要识别的物体如图所示
-
输入标签名之后点OK,然后点保存。
-
通过切换图片对目录下所有图片进行标注。
3 打包数据集
分类图像不需要操作此步。
将图片和标数据打包成zip文件
文件格式为 zip 压缩包,大小500M以内
- 数据集格式:同 Pascal VOC 数据集
- 图片数量限制为2000张,超出该数量的图片会被忽略
- 压缩包内应包含 images 文件夹和 xml 文件夹;一张图片对应一个名字相同的 xml 标注文件
- 目录结构:
标结果打包成两个zip文件
4 上传数据
4.1创建项目
4.1.1图像分类创建项目
打开MaixHub,登录后点击模型训练。填入项目名称以及项目类型。根据自己需要选择正确的项目类型。
进入项目后进行数据采集
4.1.2图像检测创建项目
创建时选择项目类型为图像检测即可.
4.2上传数据
4.2.1分类检测上传数据
创建亲的数据集,标类型选择分类。
点击查看后采集数据
- 为分类添加标签名
- 选中一个标签为该标签上传图片。
- 选择该分类所有图片
- 上传图片
再次点数据集,查看刚刚创建的数据集是否正确。
切换标签,检查一下选择的图片是否正确。
4.2.2图像检测上传数据
上传2~3步制作的zip数据包即可。
同样也可以查看是否正确。
5 训练模型
在数据集中选择数据然后确定。
部署平台选择nncase
点击,
输入训练名称开始训练。
等待模型训练完成。
6 部署模型以及测试
点部署模型后选择手动部署,下载对应模型。
下载解压后得到三个文件
-
main.py 用于测试的程序文件
-
.kmodel模型文件,拷贝到SD卡内。
-
report.json 报告文件,内含锚点数据。
将.kmodel和main文件复制到SD卡进行测试。记得修改摄像头垂直和水平镜像
7 测试效果
7.1图像检测
7.2 图像分类
8 齐护编程 程序
8.1图像检测
8.2 图像分类
9.课程资源下载
9-1 程序
下载
9-2 模型
下载
联系我们
扫码或者点这里加群了解更多!
Created by qdprobot