lisa traffic sign 数据集训练

2023-11-13

1:lisa下载地址:http://cvrr.ucsd.edu/LISA/datasets.html
2:解压缩后,使用python tools/splitAnnotationFiles.py将数据集划分成训练集和测试集的csv描述文件。
3:转化csv为json格式。

import mmcv
import os
import sys
import json
import cv2
import numpy as np
 
class_names = ['stop', 'speedLimitUrdbl', 'speedLimit25', 'pedestrianCrossing', 'speedLimit35', 'turnLeft', 'slow', 'speedLimit15', 'speedLimit45', 'rightLaneMustTurn', 'signalAhead', 'keepRight', 'laneEnds', 'school', 'merge', 'addedLane', 'rampSpeedAdvisory40', 'rampSpeedAdvisory45', 'curveRight', 'speedLimit65', 'truckSpeedLimit55', 'thruMergeLeft', 'speedLimit30', 'stopAhead', 'yield', 'thruMergeRight', 'dip', 'schoolSpeedLimit25', 'thruTrafficMergeLeft', 'noRightTurn', 'rampSpeedAdvisory35', 'curveLeft', 'rampSpeedAdvisory20', 'noLeftTurn', 'zoneAhead25', 'zoneAhead45', 'doNotEnter', 'yieldAhead', 'roundabout', 'turnRight', 'speedLimit50', 'rampSpeedAdvisoryUrdbl', 'rampSpeedAdvisory50', 'speedLimit40', 'speedLimit55', 'doNotPass', 'intersection']
  
def _2coco(files):
    coco_anno = {'info': {}, 'images': [], 'licenses': [], 'annotations': [], 'categories': []}
    coco_anno['categories'] = [{'supercategory': j, 'id': i+1, 'name': j} for i,j in enumerate(class_names)]
    img_id = 0
    anno_id = 0
    img_ids = mmcv.list_from_file(files)
    for i in range(1,len(img_ids)):
        im_i = img_ids[i].split(';')
        file_name = im_i[0]
        cf = 1
        for z in range(0,len(coco_anno['images'])):
            if file_name == coco_anno['images'][z]['file_name']:
                im_id = coco_anno['images'][z]['id']
                cf = 2
        if cf == 1:
            img_id += 1
            img_ = cv2.imread(file_name)
            ih,iw = img_.shape[:2]
            img_info = {}
            img_info['id'] = img_id
            img_info['file_name'] = file_name
            img_info['height'] = ih
            img_info['width'] = iw
            coco_anno['images'].append(img_info)
        cls_name = im_i[1]
        x1 = float(im_i[2])
        y1 = float(im_i[3])
        x2 = float(im_i[4])
        y2 = float(im_i[5])
        if x2 < x1 or y2 < y1:
            print('bbox not valid: ',file_name)
            continue
        anno_id += 1
        bb = [x1, y1, x2 - x1, y2 - y1]
        categery_id = class_names.index(cls_name) + 1
        area = (x2 - x1) * (y2 - y1)
        anno_info = {}
        anno_info['segmentation'] = []
        anno_info['area'] = area
        if cf == 2:
            anno_info['image_id'] = im_id
        if cf == 1:
            anno_info['image_id'] = img_id
        anno_info['bbox'] = bb
        anno_info['iscrowd'] = 0
        anno_info['category_id'] = categery_id
        anno_info['id'] = anno_id
        coco_anno['annotations'].append(anno_info)

    return coco_anno


_coco = _2coco('split1.csv')
data_dir = sys.path[0]
with open(os.path.join(data_dir, 'coco_train.json'), 'w') as f:
    json.dump(_coco, f, ensure_ascii=False, indent=2)
print('done')
_coco = _2coco('split2.csv')
with open(os.path.join(data_dir, 'coco_test.json'), 'w') as f:
    json.dump(_coco, f, ensure_ascii=False, indent=2)
print('done')

4:安装mmdetection。此部分安装mmcv比较麻烦,原因是之前安装的mmcv会和mmcv-full冲突,直接用conda建一个新环境吧。我弄了俩三小时才弄明白。。。
5:mmdetction,我在用的过程中,发现准确率只有在第一个epoch的第一次是百分之九十,其余全是100,后来看代码发现是rpn_head里的Num_class是1,我修改成47后,直接报吐核错误。把per_gpu降到1还不行,试了一下voc,发现num_class是40。其中有个Bug:


```python
    def load_annotations(self, ann_file):
        """Load annotation from XML style ann_file.

        Args:
            ann_file (str): Path of XML file.

        Returns:
            list[dict]: Annotation info from XML file.
        """

        data_infos = []
        print("ann_file:",ann_file)
        img_ids = mmcv.list_from_file(ann_file)
        for img_id in img_ids:
            # print(img_id)
            img_id = img_id.split(' ')[0]
            filename = f'JPEGImages/{img_id}.jpg'
            xml_path = osp.join(self.img_prefix, 'Annotations',
                                f'{img_id}.xml')
            tree = ET.parse(xml_path)

img_id = img_id.split(’ ')[0],这行需要加上去,在xml_style.py文件中,不然会连 -1也作为图片名字读取了。
6:faster_rcnn pytorch 链接:https://github.com/jwyang/faster-rcnn.pytorch
需要注意:使用torch0.4+torchvision0.2.0,以及用cuda9.0,再报错重新make一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lisa traffic sign 数据集训练 的相关文章

随机推荐

  • 企业应该选择哪种区块链

    随着探索如何把区块链应用在各种场景 许多人就想到 也许不需要全世界的人共同参与 也不需要挖矿 我们只需要用到区块链的可信任 可追溯特性 通过较少节点达到拜占庭将军容错 于是私有链就诞生了 但私有链仍是中心化的 难以维持去中心化的优势 因此又
  • webdriver版本不匹配,重新下载webdriver后不知道应该放在哪个文件夹

    1 从官网上面按照对应的版本下载了对应浏览器的webdriver版本 我的是chrome windows 113开头的版本 2 下载并解压之后发现有很多个webdriver exe的程序 正确步骤是解压后复制exe文件放在原来的文件夹即可
  • Ubuntu根目录文件作用分析

    Ubuntu Linux的文件结构与Windows的文件结构不同 Windows将硬盘分成 等盘 也就是分成这些分区 而Linux操作系统不是把硬盘分 成这样的分区 它有一个根目录 用 表示 一个目录就相当于一个文件夹 根目录就相当于Lin
  • 360周鸿祎:互联网好产品六字法则——刚需、痛点、高频

    如何找到好的产品 它必须满足三个条件 刚需 痛点 高频 6月6号 奇虎360创始人董事长兼CEO周鸿祎走上颠覆式创新研习社的讲台 以他的产品经历 带来移动互联网产品观 干货满满 全程无尿点 课程实录分为上 下两部分 研习社根据演讲整理 未经
  • vue Antd单独隐藏Modal.confirm(this.$confirm方式)对话框的默认ok或cancel按钮

    有时候我们需要单独隐藏Modal对话框的默认确定或取消按钮 设置 footer null 会把两个按钮都隐藏 Antd有提供两个参数用于单独修改确定 取消按钮 对于确定按钮 设置 ok button props style display
  • STM32学习记录——74HC595四位数码管显示

    数模管作为STM32的一个重要外设 由于其成本低 稳定 被用于许多场景中 本篇文章来介绍下四位数码管的使用方法 数码管显示 一 数码管的分类 二 74HC595芯片 串入并出 三 原理图 四 代码主要操作 五 代码分析 1 void HC5
  • PyCharm安装

    lt 一 gt PyCharm安装 下载地址 http www jetbrains com pycharm download section windows professional 表示专业版 community 是社区版 推荐安装社区版
  • CSS3 Flexbox轻松实现元素的水平居中和垂直居中

    网上有很多关于Flex的教程 对于Flex的叫法也不一 有的叫Flexbox 有的叫Flex 其实这两种叫法都没有错 只是Flexbox旧一点 而Flex是刚出来不久的东西而已 为了方便说明 赶上新技术 下面我就把这种布局叫Flex布局 元
  • Unity --- 动画脚本

    1 什么是动画 在Unity中 首先如果游戏物体想要在场景中动起来的话 就必须使其对应组件中的属性发生合适的变化 而将属性的变化过程保存下来后形成的就是动画 以后如果想播放动画的话 只需要调用这段保存下来的属性变化就可以了 二 基础知识部分
  • 内存管理之一__align字节对齐

    转 http www cnblogs com ye moooooo p 4601189 html 一 什么是字节对齐 为什么要对齐 现代计算机中内存空间都是按照byte划分的 从理论上讲似乎对任何类型的变量的访问可以从任何地址开始 但实际情
  • 日志 - 客户端及服务端写法

    一 客户端 先来看一个日志类的实现方法 这个日志类也是代表着大多数客户端日志的主流写法 log h 1 ifndef LOG H 2 define LOG H 3 4 include
  • vue-echarts自适应大小的实现

    vue echarts图表自适应用到了vue resize 完整流程为 1 下载vue resize npm i vue resize S 2 main js中引入 import ResizeObserver from vue resize
  • gtj2018如何生成工程量报表_广联达BIM土建计量平台GTJ2018

    一 概述 建造整个世界 度量每种可能 相比13产品 100 项的增加与优化 量筋合 业务扩展10 以上 效率提升20 30 土建BIM模型数据上下游无缝连接 量筋合一 一次建模 无需互导 土建计量业务范围更广 工作效率提升更高 效率快 量筋
  • 【前端】Vue项目:旅游App-(22)detail:房屋信息、房屋设施、插槽

    文章目录 目标 过程与代码 房屋信息部分info 相似结构的组件section 房屋设施facility 效果 总代码 修改或添加的文件 detail section detail facility detail info detail 参
  • 通俗易懂的告诉你,https是如何保证数据安全的

    HTTP存在的问题 窃听风险 通信使用明文 不加密 内容可能会被窃听 第三方可能获知通信内容 冒充风险 不验证通信方的身份 因此有可能遭遇伪装 篡改风险 无法证明报文的完整性 所以有可能已遭篡改 HTTPS HTTPS网站 可以看到 HTT
  • redis数据类型(图解)

    一些命令的使用场景 1 由于集合是无序的 spop命令可以用于抽奖活动 2 商品销量排行榜可以用zset做 3 setnx命令实现分布式锁 4 消息队列模型 lpush rpop 以上是本人的学习笔记 若有不对的地方 请大家指正 转载于 h
  • 【多模态】3、CLIP

    文章目录 一 背景 二 方法 2 1 使用自然语言来监督训练 2 2 建立一个超大数据集 2 3 选择预训练的方式 对比学习而非预测学习 2 4 模型缩放和选择 三 效果 四 思考 论文 Learning Transferable Visu
  • python函数编程 返回函数 匿名函数 装饰器 偏函数

    返回函数 函数的返回对象可以是一个函数 返回时不立即执行 而是调用返回对象的时候再执行 def lazy sum args def sum ax 0 for n in args ax ax n return ax return sum gt
  • Python边学边用--BT客户端实现之BitTorrent文件解析

    BitTorrent文件使用bencode编码 其中包括了4种数据类型 d 开头表示是dict类型 e 表示结束 l 小写字母L 开头表示是list类型 e 表示结束 i 开头表示是integer类型 e 表示结束 可以表示负数 以数字开头
  • lisa traffic sign 数据集训练

    1 lisa下载地址 http cvrr ucsd edu LISA datasets html 2 解压缩后 使用python tools splitAnnotationFiles py将数据集划分成训练集和测试集的csv描述文件 3 转