您的位置:首页 > 其它

YOLO下一步:输出预测boundingbox做进一步处理

2017-01-15 14:46 609 查看
对于我们使用yolo做一下research中的其他应用而言,最终目的肯定不是看看预测boundingbox就ok了。

具体对于我而言,就需要在得到boundingbox后再找出目标的局部信息。下面简单介绍一下如何完成。

1.修改源代码

在源代码image.c中找到draw_detections()函数,print出方框的位置即可,如下:



2.记录终端输出到文本文件

我这里使用的命令是| tee train_log.txt ,可参考:Linux中记录终端(Terminal)输出到文本文件

3.python进一步提取boundingbox并做简单处理

先看一眼输入数据(即上一步输出到文件中的数据):



可以看到有时候检测到有时候检测不到,这里我为了后面方便处理(这里我是要提取类别名为tip的box坐标并进行处理),简单处理了一下(已知每一帧有且只有一个tip,如果没有检测到则用相邻帧的坐标填充),并保存到新文件内。

代码如下:

把‘tip’的一行数据读入到dic中

i=0
d={}
with open('output_coordinate.txt') as f:
for line in f.readlines():
if 'Objects:' in line:
i=i+1
if 'tip:' in line:
d[i]=line.strip()

# print(i)
# print(d)


若某一帧中没有检测到tip,则默认为上一帧检测到的数据

d[1]=d[2]
for k in range(1, i+1):
if not d.get(k):
d[k]=d[k-1]
# print(d)


将tip数据分割为list

import re
for k, v in d.items():
d[k]=re.split(r'\s+', v)
# print(d)


数组重组为dict格式

frames=[]
probs=[]
lx=[]
rx=[]
ly=[]
ry=[]

for k, v in d.items():
frames.append(k)
probs.append(v[1])
lx.append(v[2])
rx.append(v[3])
ly.append(v[4])
ry.append(v[5])

data = {'frames':frames,
'probs':probs,
'lx':lx,
'rx':rx,
'ly':ly,
'ry':ry,}


数据存储到DataFrame

from pandas import Series, DataFrame

frames_num=1590

frame = DataFrame(data, columns = ['probs', 'lx', 'rx', 'ly', 'ry'], index = list(range(1, frames_num+1)))
frame.index.name = 'frames'
frame.columns.name = 'coordiante'
frame.head()


coordianteprobslxrxlyry
frames
136%559811247306
236%559811247306
337%559811247305
437%558810246305
537%557810245304
坐标数据保存到文本

with open('tip_coordinate.txt', 'w') as f:
for j in range(frames_num):
f.write(lx[j]+' '+ly[j]+' '+rx[j]+' '+ry[j]+'\n')


最后处理的结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: