开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
BML 全功能AI开发平台

    用BML实现物体检测

    目录

    1.物体检测简介
    2.平台入口
    3.准备数据
    3.1 道路交通电子眼检测数据介绍
    3.2 创建及导入数据集
    4.训练模型
    5.模型分析和调优
    6.部署模型
    7.公有云调用
    7.1 使用流程

    用BML实现物体检测:以道路交通电子眼检测为例

    物体检测简介

    亲爱的开发者您好,欢迎使用百度BML全功能AI开发平台开启您的AI开发之旅!

    物体检测任务是当前深度学习应用最广的计算机视觉应用任务,主要是检测图中每个物体的位置、名称。适合图中有多个主体要识别、或要识别主体位置及数量。其主要应用场景有:

    • 视频监控:如检测是否有违规物体、行为出现。
    • 工业质检:如检测图片里微小瑕疵的数量和位置。
    • 医疗诊断:如医疗细胞计数、中草药识别等。

    下文中将以道路交通电子眼检测任务为例,分步骤向您详细介绍如何使用百度BML全功能AI开发平台开发您自己的物体检测模型。

    道路交通电子眼检测任务简介:
    在实时地图导航场景下,对于不同种类的交通电子提示装置的实时提醒,在规范车主驾驶行为、保障用户出行等方面至关重要。而各类电子提示装置分布于道路大街小巷,这类物体普通目标小,不易发现,通过常规的数据采集和人力手段很难识别,为实现导航规划增加了额外成本。对以电子眼为代表的道路交通要素进行检测,有着较大的价值。

    平台入口

    BML全功能AI开发平台为企业及个人开发者提供机器学习和深度学习一站式AI开发服务,并提供高性价比的算力资源,助力企业快速构建高精度AI应用,进入官方网站点击【立即使用】。

    1、平台入口.png

    准备数据

    准备数据是AI模型开发的关键一环,训练数据的质量决定了训练所得模型效果可达到的上限,下面来介绍数据规范与相关操作步骤。

    道路交通电子眼检测数据介绍

    道路交通电子眼检测数据集来自于百度与曙光合作的『先导杯·计算应用大奖赛』的比赛数据,采集自百度地图的实际业务数据。训练集包括近2W样本,其中包含三类目标:rect_eye、sphere_eye、box_eye。

    导入平台即可使用,数据下载链接:道路交通电子眼检测数据-json格式

    创建及导入数据集

    1、在官网界面点击【数据总览】,进入数据集操作界面,点击【创建数据集】。

    3.1数据.png

    2、进入创建数据集界面,填写相关信息,选择数据和标注类型(注意训练集、验证集、测试集需要分开创建)。

    3.1数据1.png

    3、数据集创建完成后,可以在数据总览界面看到刚才创建好的数据集ID,点击【导入】,将自己要训练的数据集导入。

    3.1数据2.png

    以本地导入-上传压缩包为例:导入方式选择【本地导入】,选择标注格式,点击【上传压缩包】。

    3.1数据3.png

    仔细阅读上传压缩包格式要求,可点击【下载示例压缩包】确认格式:

    3.1数据4.png

    确认格式无误后,点击【已阅读并上传】, 注意上传时不要关闭网页:

    3.1数据5.png

    点击【确认并返回】后自动开始导入:

    3.1数据6.png

    可看到【标注状态】为100%,如果数据集没有全部标注,可使用平台【智能标注】功能。

    训练模型

    BML上提供了预置模型调参、NoteBook建模、自定义作业三种开发模式,开发难度和开发的灵活性程度不一,分别满足不同水平和需求的开发者。

    本文以使用者最多的预置模型调参开发模式为例,示意训练模型的基本步骤。

    1、进入bml官方平台点击【预置模型调参】-【计算机视觉模型】,点击【创建】。

    4.1训练模型.png

    2、填写项目信息并点击【新建】。

    4.1训练模型1.png

    3、点击【新建任务】。

    4.1训练模型2.png

    4、点击【+请选择】,勾选刚刚上传数据集下的所有标签类,点击右下角【确定】。

    4.1训练模型3.png

    5、可以选择上传验证集和测试集。验证集用来确定模型训练过程中超参数的调整。测试集用来获得更客观的模型效果评估结果。如果选择不上传,系统也会自动从已上传的训练集中分割出验证和测试集。

    4.1训练模型4.png

    6、配置网络,网络选型参考:网络选型介绍

    4.1训练模型5.png

    7、配置超参数。如果选择脚本编辑为超参来源,可在脚本编辑部分代码框内自定义超参数。超参数配置参考:超参数选择

    4.1训练模型5.png

    8、可填写相关信息,并发布模型。也可以模型训练完成后再根据训练结果决定是否发布。

    4.1训练模型6.png

    9、根据自身的周期和经费安排,配置计算资源。

    4.1训练模型7.png

    10、最后点击【提交训练任务】,进入模型训练。

    4.1训练模型8.png

    模型分析和调优

    1、获取评估报告:点击【模型仓库】-【模型管理】,点击对应任务的【版本列表】查看训练好的模型,点击【评估报告】。

    5.1模型评估.png

    评估报告如下所示:

    5.1模型评估1.png

    2、点击【校验模型】。

    5.1模型评估2.png

    3、模型调优:新建模型时添加如下配置,可提高模型效果。

    策略一:数据增强策略(数据增强算子参考

    5.1模型评估3.png

    策略二:百度超大规模数据集预训练(预训练模型参考

    5.1模型评估4.png

    策略三:自动超参搜索(自动超参配置参考

    5.1模型评估6.png

    采用以上优化策略之后,重新打开评估报告,可以看到效果有明显的提升。

    5.1模型评估7.png

    部署模型

    1、在模型管理中,可选择公有云部署, 端云协同服务,批量预测,和纯离线服务四种方式部署模型。具体参考:如何选择部署方式

    6.1部署.png

    2、在模型部署中,用户按照自己情况填写信息完成模型部署。下图以本地部署纯离线服务为例。

    6.1部署1.png

    公有云调用

    模型仓库中的视觉模型,发布为公有云部署时储在云端,可通过独立Rest API调用模型,实现AI能力与业务系统或硬件设备整合。BML具有完善的鉴权、流控等安全机制,并配置丰富的资源集群稳定承载高并发请求。 并且支持查找云端模型识别错误的数据,纠正结果并将其加入模型迭代的训练集,不断优化模型效果。

    使用流程

    1、在BML平台公有云部署的操作页面,点击『部署模型』,新建模型部署的任务。

    6.1模型调用6.png

    2、填写相关信息,完成创建。

    6.1模型调用1.png

    2、完成创建后回到操作页面,点击『查看详情』,查看配置信息,并获取『接口地址』信息。

    6.1模型调用2.png

    6.1模型调用5.png

    3、点击控制台,进入百度智能云-BML控制台,创建应用。

    6.1模型调用3.png

    4、创建应用后,在应用列表页可获取『API Key』和『Secret Key』两个信息。

    6.1模型调用4.png

    5、请求示例如下。

    HTTP方法:POST

    请求URL: 请首先进行自定义模型训练,完成训练后申请上线,上线成功后可在服务列表中查看并获取url。

    URL参数如下:

    参数
    access_token 通过API Key和Secret Key获取的access_token

    Header如下:

    参数
    Content-Type application/json

    注意:如果出现336001的错误码很可能是因为请求方式错误,与其他图像识别服务不同的是定制化图像识别服务以json方式请求。

    6、请求参数注意事项如下。

    参数 是否必选 类型 可选值范围 说明
    image string - 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,注意请去掉头部
    threshold number - 阈值,默认值为推荐阈值(0-1之间),具体值可在我的训练任务列表-模型效果查看

    7、按照下述示例代码,填入相关信息即可完成调用API服务。

    以python3.7为例:

    # coding:utf-8
    """
     Copyright (c) 2021 Baidu.com, Inc. All Rights Reserved
     Author: test@baidu.com
    """
    
    import requests
    import json
    import base64
    import cv2 as cv
    
    
    def data_form(image_path):
        """
        Convert data format.
        """
        with open(image_path, 'rb') as f:
            base64_data = base64.b64encode(f.read())
            data = base64_data.decode()
        return data
    
    
    def show_result(image_path, result, out_path):
        """
        Draw results on image.
        """
        image = cv.imread(image_path)
        for target in result:
            box = target['location']
            label = target['name']
            score = target['score']
            first_point = (box['left'], box['top'])
            last_point = (box['left'] + box['width'], box['top'] + box['height'])
            cv.rectangle(image, first_point, last_point, (0, 255, 0), 2)
            cv.putText(image, label + ':' + '%.4f' % score, first_point, cv.FONT_HERSHEY_SIMPLEX, 0.5,(255,0,0), 1, cv.LINE_AA)
        cv.imwrite(out_path, image)
        img = cv.resize(image, (600,600))
      
    
    def detection(image_path, header, request_url, out_path):
        """
        Processing detection results.
        """
        data = data_form(image_path)
        request_payload = {
            "image": data,
            "threshold": "0.7"}
        response = requests.post(request_url,data=json.dumps(request_payload),headers=header).text
        print('response : ', response)
        tt = json.loads(response)
        result = tt['results']
        show_result(image_path, result, out_path)
        # 打印预测结果
        print('result : ', result)
    
    
    # 调用鉴权接口获取token
    def get_access_token(host):
        """
        get access_token.
        """
        response = requests.get(host)
        if response:
            return response.json()['access_token']
        else:
            print('fail to get access_token')
            return None
    
    
    if __name__ == "__main__":
        # 获取API Key、Secret Key(需要修改)
        AK = '【控制台应用列表处复制】'
        SK = '【控制台应用列表处复制】'
        host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}'.format(AK, SK)
        # 获取access_token
        access_token = get_access_token(host)
        # 本地数据集存放地址 (需要修改)
        image_path = './检测/道路交通电子眼检测/道路交通电子眼检测_测试集/image/19530.jpg'
        # Header
        header = {"Content-Type": "application/json"}
        # API接口地址 (需要修改)
        request_address = 'https://aip.baidubce.com/rpc/2.0/ai_custom_bml/v1/detection/trafficV1'【配置详情页处复制】
        # 拼接API接口地址和access_token
        request_url = '{}?access_token='.format(request_address) + access_token 
        # 预测输出路径 (需要修改)
        out_path = './output/detection_result.jpg'
        # 调用API
        detection(image_path, header, request_url, out_path)
    上一篇
    用BML实现图片分类
    下一篇
    用BML实现实例分割