百度飞桨深度学习 21天零基础入门——AI识虫 提交格式问题

一、项目简介

报名了百度大脑AIStudio练习赛AI识虫,有7类虫子数据,通过检测算法将检测结果按照一定格式保存到json,在线提交。具体https://aistudio.baidu.com/aistudio/competition/detail/24?_=1598419570312

二、提交格式

json文件中保存着测试结果,是包含所有图片预测结果的list,其构成如下:

[[img_name, [[label, score, x1, x2, y1, y2], …, [label, score, x1, x2, y1, y2]]], [img_name, [[label, score, x1, x2, y1, y2], …, [label, score, x1, x2, y1, y2]]], … [img_name, [[label, score, x1, x2, y1, y2],…, [label, score, x1, x2, y1, y2]]]]

list中的每一个元素是一张图片的预测结果,list的总长度等于图片的数目 。

每张图片预测结果的格式是:

[img_name, [[label, score, x1, x2, y1, y2],…, [label, score, x1, x2, y1, y2]]]

其中第一个元素是图片名称image_name,第二个元素是包含该图片所有预测框的list,

预测框列表:[[label, score, x1, x2, y1, y2],…, [label, score, x1, x2, y1, y2]]

预测框列表中每个元素[label, score, x1, x2, y1, y2]描述了一个预测框,label是预测框所属类别标签,score是预测框的得分;x1, x2, y1, y2对应预测框左上角坐标(x1, y1),右下角坐标(x2, y2)。每张图片可能有很多个预测框,则将其全部放在预测框列表中。

三、发现问题

按照课程代码生成的“pred_results.json”,在线提交没问题,但是自己本地训练,按照上述“二、提交格式”代码实现生成json上传,在线测评结果很差,不敢相信。检测结果打印图上还是能看出有不少正确的,提交得分烂透了,于是考虑可能是保存格式问题。

最初,我是完全按照“二、提交格式” [label, score, x1, x2, y1, y2]  左上角坐标(x1, y1),右下角坐标(x2, y2) 进行保存的,提交结果如上图所示,score:0、0.00959、4.94523、5.46591,Amazing !

后来,下载在线训练的结果,将结果按照 [label, score, x1, x2, y1, y2] 打印到原图,结果乱糟糟的,这不应该啊!

def draw_paddlejson(paddlejson, images):
    with open(paddlejson, "r") as f_r:
        datas_list = json.load(f_r)
    for data_list in datas_list:
        img_id = data_list[0]
        img_path = os.path.join(images, img_id + ".jpeg")
        img = cv2.imread(img_path)
        objects = data_list[1]
        for j, obj in enumerate(objects):
            label, score, xmin, xmax, ymin, ymax = list(map(int, obj))  #按照提交格式
            cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 0, 255), 1, 1)
            cv2.putText(img, str(label), (xmin, ymin), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 20*j), 2)
        cv2.namedWindow("image", 0)
        cv2.imshow("image", img)
        cv2.waitKey(0)

这说明,在线训练保存的格式和要求的“二、提交格式”是不一样的。于是尝试调整:xywh、xyxy

def draw_paddlejson(paddlejson, images):
    with open(paddlejson, "r") as f_r:
        datas_list = json.load(f_r)
    for data_list in datas_list:
        img_id = data_list[0]
        img_path = os.path.join(images, img_id + ".jpeg")
        img = cv2.imread(img_path)
        objects = data_list[1]
        for j, obj in enumerate(objects):
            # label, score, xmin, xmax, ymin, ymax = list(map(int, obj))  #按照提交格式
            label, score, xmin, ymin, xmax, ymax = list(map(int, obj))    #更正后,正确格式
            cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 0, 255), 1, 1)
            cv2.putText(img, str(label), (xmin, ymin), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 20*j), 2)
        cv2.namedWindow("image", 0)
        cv2.imshow("image", img)
        cv2.waitKey(0)

xyxy格式检测结果是OK的了!

于是将保存格式调整:[label, score, x1, y1, x2, y2]  左上角坐标(x1, y1),右下角坐标(x2, y2),这是正确格式!重新提交,得分正常了。

四、总结

得分不高不低!结果不重要,重要的是过程@_@(OS:是为了学习,不是为了得高分拿奖品,好吧!我酸了!)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值