kitti数据集中---标注数据label_2

标注文件中16个属性,即16列。但我们只能够看到前15列数据,因为第16列是针对测试场景下目标的置信度得分,也可以认为训练场景中得分全部为1但是没有专门标注出来。下图是000001.txt的标注内容和对应属性介绍。

相机坐标系中,y方向是高度方向,以向下为正方向;z方向是汽车前进方向前进手边方向为x方向(车身方向),满足右手定则。激光雷达坐标系中,z方向是高度方向,x方向是汽车前进方向,前进左手边方向为y方向(车身方向),满足右手定则。

第1列

目标类比别(type),共有8种类别,分别是Car、Van、Truck、Pedestrian、Person_sitting、Cyclist、Tram、Misc或'DontCare。DontCare表示某些区域是有目标的,但是由于一些原因没有做标注,比如距离激光雷达过远。但实际算法可能会检测到该目标,但没有标注,这样会被当作false positive (FP)。这是不合理的。用DontCare标注后,评估时将会自动忽略这个区域的预测结果,相当于没有检测到目标,这样就不会增加FP的数量了。此外,在 2D 与 3D Detection Benchmark 中只针对 Car、Pedestrain、Cyclist 这三类。

第2列

截断程度(truncated),表示处于边缘目标的截断程度,取值范围为0~1,0表示没有截断,取值越大表示截断程度越大。处于边缘的目标可能只有部分出现在视野当中,这种情况被称为截断。

第3列

遮挡程度(occlude),取值为(0,1,2,3)。0表示完全可见,1表示小部分遮挡,2表示大部分遮挡,3表示未知(遮挡过大)。

第4列

观测角度(alpha),取值范围为(-pi, pi)。是在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角。这相当于将物体中心旋转到正前方后,计算其与车身方向的夹角。

第5-8列

二维检测框(bbox),目标二维矩形框坐标,分别对应left、top、right、bottom,即左上(xy)和右下的坐标(xy)。

第9-11列

三维物体的尺寸(dimensions),分别对应高度、宽度、长度,以米为单位。

第12-14列

中心坐标(location),三维物体中心在相机坐标系下的位置坐标(x,y,z),单位为米。

第15列

旋转角(rotation_y),取值范围为(-pi, pi)。表示车体朝向,绕相机坐标系y轴的弧度值,即物体前进方向与相机坐标系x轴的夹角。rolation_y与alpha的关系为alpha=rotation_y - theta,theta为物体中心与车体前进方向上的夹角。alpha的效果是从正前方看目标行驶方向与车身方向的夹角,如果物体不在正前方,那么旋转物体或者坐标系使得能从正前方看到目标,旋转的角度为theta。

第16列

置信度分数(score),仅在测试评估的时候才需要用到。置信度越高,表示目标越存在的概率越大。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是符合要求的Python代码,其需要自己定义正则表达式和曲线图的绘制方式。 ```python import argparse import re import csv import matplotlib.pyplot as plt # 定义命令行参数 parser = argparse.ArgumentParser(description='处理log文件并绘制曲线图') parser.add_argument('log_file', type=str, help='要处理的log文件的路径') parser.add_argument('--output_file', type=str, default='Output.csv', help='输出CSV文件的路径') args = parser.parse_args() # 读取log文件 with open(args.log_file, 'r') as f: lines = f.readlines() # 找到最后一次"My name is kitty"的位置 last_kitty_index = -1 for i, line in enumerate(lines): if 'My name is kitty' in line: last_kitty_index = i # 删除重复的行,只留第一行 unique_lines = [] for i in range(last_kitty_index+1, len(lines)): if lines[i] not in unique_lines: unique_lines.append(lines[i]) # 将第一行按照正则表达式1分列 regex1 = r'your regex pattern 1' header1 = re.findall(regex1, unique_lines[0])[0] header1_columns = header1.split(',') # 将剩余行按照正则表达式2分列 regex2 = r'your regex pattern 2' data = [] for line in unique_lines[1:]: columns = re.findall(regex2, line)[0].split(',') data.append(columns) # 写入CSV文件 with open(args.output_file, 'w', newline='') as f: writer = csv.writer(f) writer.writerow(header1_columns) writer.writerows(data) # 读取CSV文件 with open(args.output_file, 'r', newline='') as f: reader = csv.reader(f) rows = [row for row in reader] # 将标题行分为4类 header = rows[0] category1 = [header.index('ABC'), header.index('DFG')] category2 = [i for i in range(len(header)) if header[i].startswith('CAT')] category3 = [i for i in range(len(header)) if header[i].startswith('DOG')] category4 = [i for i in range(len(header)) if header[i].startswith('Fish')] # 绘制曲线图 for i, category in enumerate([category1, category2, category3, category4]): plt.figure() plt.title('Category {}'.format(i+1)) for j in category: column = [float(row[j]) for row in rows[1:]] plt.plot(column, label=header[j]) plt.legend() plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值