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中
若某一帧中没有检测到tip,则默认为上一帧检测到的数据
将tip数据分割为list
数组重组为dict格式
数据存储到DataFrame
坐标数据保存到文本
最后处理的结果:
具体对于我而言,就需要在得到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()
coordiante | probs | lx | rx | ly | ry |
---|---|---|---|---|---|
frames | |||||
1 | 36% | 559 | 811 | 247 | 306 |
2 | 36% | 559 | 811 | 247 | 306 |
3 | 37% | 559 | 811 | 247 | 305 |
4 | 37% | 558 | 810 | 246 | 305 |
5 | 37% | 557 | 810 | 245 | 304 |
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')
最后处理的结果:
相关文章推荐
- YOLO下一步:输出预测boundingbox做进一步处理
- bounding box的回归原理学习——yoloV2
- C# 处理XML + XSLT转换中HTML元素的输出问题及解决
- Jsp/Servlet接收FORM表格参数时输出乱码的处理
- DataGrid输出到Excel并进行格式化处理
- DataGrid输出到Excel并进行格式化处理
- DataGrid输出到Excel并进行格式化处理
- 对 CSS 控件适配器处理事件的 Bug 进一步修正
- .net下的csc批处理文件,直接输出到 当前目录,方便编译
- DataGrid输出到Excel并进行格式化处理
- DataGrid输出Excel并进行格式化处理
- C++中的文件输入/输出(5):二进制文件的处理
- Don Box:2005年IT技术前景预测 (2004.12.30) 来自:CSDN
- [学习日记]VB图像处理之像素的获取和输出
- DataGrid输出到Excel并进行格式化处理
- VB图像处理,(一)像素的获取和输出
- DataGrid输出到Excel并进行格式化处理
- DataGrid输出到Excel(word)并进行格式化处理
- DataGrid输出到Excel并进行格式化处理
- DataGrid输出到Excel并进行格式化处理