【深度学习主题月】EasyDL实现邮车查找
才能我浪费99 发布于2019-10 浏览:2807 回复:0
1
收藏
最后编辑于2022-04

1、功能介绍:
EasyDL平台支持定制图像分类、物体检测、图像分割三类模型。三类模型的功能区别如下:
图像分类:识别一张图中是否是某类物体/状态/场景,适用于图片内容单一、需要给整张图片分类的场景
物体检测:检测图中每个物体的位置、名称。适合图中有多个主体要识别、或要识别主体位置及数量的场景
图像分割:对比物体检测,支持用多边形标注训练数据,模型可像素级识别目标。适合图中有多个主体、需识别其位置或轮廓的场景

2、训练及目标检测:

目标
本案例中使用EasyDL物体检测智能标注邮车。

2.1 上传并标注数据
首先需要建立邮车数据集,步骤如下
① 设计标签
在上传之前确定想要识别哪几种物体,并上传含有这些物体的图片。每个标签对应想要在图片中识别出的一种物体。在本例中只有一个标签,就是邮车。

② 准备图片
基于设计好的标签准备图片:
每种要识别的物体在所有图片中出现的数量最好大于50
如果某些标签的图片具有相似性,需要增加更多图片
一个模型的图片总量限制4张~10万张
图片格式要求:
1、目前支持图片类型为png、jpg、bmp、jpeg,图片大小限制在4M以内
2、图片长宽比在3:1以内,其中最长边小于4096px,最短边大于30px

图片内容要求:
1、训练图片和实际场景要识别的图片拍摄环境一致,举例:如果实际要识别的图片是摄像头俯拍的,那训练图片就不能用网上下载的目标正面图片
2、每个标签的图片需要覆盖实际场景里面的可能性,如拍照角度、光线明暗的变化,训练集覆盖的场景越多,模型的泛化能力越强

本例中从网上找了20多张不同角度的邮车图片。

③上传和标注图片
先在【创建数据集】页面创建数据集:

如果训练数据需要多人分工标注,可以创建多个数据集。将训练数据分批上传到这些数据集后,再将数据集"共享"给自己的小伙伴,同步进行标注。

再进入【数据标注/上传】:

1、选择数据集
2、上传已准备好的图片
3、在标注区域内进行标注

首先在标注框上方找到工具栏,点击标注按钮在图片中拖动画框,圈出要识别的目标

然后在右侧的标签栏中,增加新标签,或选择已有标签

2.2、创建模型
在导航【创建模型】中,填写模型名称、联系方式、功能描述等信息,即可创建模型。

模型创建成功后,可以在【我的模型】中看到刚刚创建的模型。

目前单个用户在每种类型的模型下最多可创建10个模型,每个模型均支持多次训练。


2.3 训练模型
数据提交后,可以在导航中找到【训练模型】,启动模型训练:

① 选择模型
选择此次训练的模型

② 添加训练数据
先选择数据集,再按标签选择数据集里的图片。可从多个数据集选择图片(相同标签的训练图片会被合并)

训练时间与数据量大小有关,1000张图片可能需要几个小时训练,请耐心等待

 

2.4 校验模型效果
可通过模型评估报告或模型校验了解模型效果:

模型评估报告:训练完成后,可以在【我的模型】列表中看到模型效果,以及详细的模型评估报告。如果单个标签的图片量在100张以内,这个数据基本参考意义不大
模型在线校验:实际效果可以在左侧导航中找到【校验模型】功能校验,或者发布为接口后测试。
如果对模型效果不满意,可以通过扩充数据、调整标注等方法进行模型迭代

 

2.5 发布模型—在线API
发布模型生成在线API

训练完毕后就可以在左侧导航栏中找到【发布模型】,发布模型表单页面需要自定义接口地址后缀、服务名称,即可申请发布

申请发布后,通常的审核周期为T+1,即当天申请第二天可以审核完成。

2.6 接口赋权

在正式使用之前,还需要做的一项工作为接口赋权,需要登录EasyDL控制台中创建一个应用,获得由一串数字组成的appid,然后就可以参考接口文档正式使用了

同时支持在EasyDL控制台-云服务权限管理中为第三方用户配置权限

调用代码如下:

def youche(filename):
    request_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/detection/youche"
    
    # 二进制方式打开图片文件
    f = open(filename, 'rb')
    img = base64.b64encode(f.read())
    
    params = dict()
    params['image'] = img
    params = urllib.parse.urlencode(params).encode("utf-8")
    
    access_token = get_token()
    
    begin = time.perf_counter()
    request_url = request_url + "?access_token=" + access_token
    request = urllib.request.Request(url=request_url, data=params)
    request.add_header('Content-Type', 'application/x-www-form-urlencoded')
    response = urllib.request.urlopen(request)
    content = response.read()
    end = time.perf_counter()

    print('处理时长:'+'%.2f'%(end-begin)+'秒')
    
    if content:
        #print(content)
        content=content.decode('utf-8')
        #print(content)
        data = json.loads(content)
        print(data)

 

3、测试及结论:

通过测试发现整体识别效率很快,准确性也很好。

EasyDL对比传统的图像语义分割方式具有如下一些优势:
训练模型:无需机器学习专业知识,只需提供含目标物体的图片并用多边形标注物体即可训练模型,自动识别图中所有目标物体的名称、位置及轮廓
校验模型:支持上传图片校验模型效果、查看详细的效果评估报告,进而分析模型分割有误的图片并有针对性地补充训练数据
发布模型:可将模型以云端API发布后集成使用,具有完善的鉴权、流控等安全机制,GPU集群稳定承载高并发请求

可以应用于专业场景的图像分析,比如在卫星图像中识别建筑、道路、森林,或在医学图像中定位病灶、测量面积等。

收藏
点赞
1
个赞
TOP
切换版块