Toybrick

求分享mobilenet-ssd的priorbox.txt的生成代码

Devin

中级会员

积分
452
楼主
发表于 2020-1-16 15:22:05    查看: 10543|回复: 9 | [复制链接]    打印 | 只看该作者
这个了解了下,一个是tf的,一个是https://github.com/Pinnh/NPU_CaffeSSD的,可我没用过tf,用NPU_CaffeSSD时,发现生成的数值有的不在o—1之间,小于0,而且后面都是0.1, 0.2,,请问这个正常吗?大家都怎么生成priorbox.txt文件的呢。谢谢!
回复

使用道具 举报

troy

版主

积分
2376
沙发
发表于 2020-2-1 20:15:27 | 只看该作者
这个文件一般都是模型自带的,跟模型相匹配,不是自己生成的。
回复

使用道具 举报

leok

版主

积分
894
板凳
发表于 2020-2-21 08:58:22 | 只看该作者
1.推理的时候,找到对应模型concat节点,用该节点作为输出,可以拿到min_x, miny_, max_x, max_y,可以按保存center_x, center_y, w, h
2.建议研究下模型算法
回复

使用道具 举报

Devin

中级会员

积分
452
地板
 楼主| 发表于 2020-2-24 14:48:51 | 只看该作者
leok 发表于 2020-2-21 08:58
1.推理的时候,找到对应模型concat节点,用该节点作为输出,可以拿到min_x, miny_, max_x, max_y,可以按保 ...

谢谢!我参考了https://github.com/Pinnh/NPU_CaffeSSD获取了center_x, center_y, w, h并保存下来,结果跟官方给的mobilenet ssd的demo中priorbox文件数据基本一样(why?),我是直接用的标准 mobilenet ssd训练自己数据的,只把类别数设置为2,其他只是改了超参。目前保存下来的数据看上去没毛病了,也都在0-1之间,后面的0.1和0.2也没有了(后面理解了是偏移量),但推理时提示:valid count too much!报错。。我想问题还是出在这个priorbox.txt文件上。。。
回复

使用道具 举报

ylc123

注册会员

积分
148
5#
发表于 2020-6-2 14:32:05 | 只看该作者
本帖最后由 ylc123 于 2020-6-3 14:58 编辑
Devin 发表于 2020-2-24 14:48
谢谢!我参考了https://github.com/Pinnh/NPU_CaffeSSD获取了center_x, center_y, w, h并保存下来,结果 ...
       自己已使用这个github作者提供的方法在rknn官方vgg ssd和自己裁剪后的mobilenet ssd上运行成功。
        我这边使用了https://github.com/Pinnh/NPU_CaffeSSD的方法,
(1)提取了vgg ssd(官方的caffe模型需要自己下载,使用了rknn中的去掉detectionout的prototxt)的pribox.txt,然后和官方对比结果是一致的;
(2)使用rknn的测试代码运行后,保存的result.jpg结果也是一致的。
(3)如果测试自己的模型,要留意rknn官方给的测试脚本中的归一化是否和自己的一致,否则不会输出结果。
         不过,这个github的代码有以下几个问题需要注意,
(1)只适用于检测一个目标的,如果你检测的不是一个目标,需要修改npu_ssd_det.py中的
        a)   conf        = [[x/(x+y),y/(x+y)] for x,y in np.exp(conf)]
        b)   score      = conf[1]    github作者是检测一个目标,所以是[1],如果你是多个目标,这里就得注意一下了
        c)   outlen     =  这个值一般为你的pribox个数*4
        d)   classnum =  这个是你的检测目标个数+1
        这几个地方的代码。
(2)rknn官方的pribox.txt是一个数据一行的,如果要完全按照这个格式,你需要修改这个github代码中pribox.py中的第二个保存txt的代码为如下代码

  1.    pb=np.reshape(pb,(len(pb),1))
  2.     with open("./priorbox_mobilenetssd.txt",'w') as f:
  3.          f.write("")
  4.     with open("./priorbox_mobilenetssd.txt",'a') as f:
  5.          for line in pb:
  6.              f.write("".join(map(str,line))+"\n")
复制代码



回复

使用道具 举报

loi666

新手上路

积分
44
6#
发表于 2020-6-4 16:23:00 | 只看该作者
ylc123 发表于 2020-6-2 14:32
自己已使用这个github作者提供的方法在rknn官方vgg ssd和自己裁剪后的mobilenet ssd上运行成功。
  ...

就是我也用的这个仓库的代码,根据他的实例,然后生成的priorbox为什么有负数存在呀,求解答呀
回复

使用道具 举报

ylc123

注册会员

积分
148
7#
发表于 2020-6-8 11:52:43 | 只看该作者
loi666 发表于 2020-6-4 16:23
就是我也用的这个仓库的代码,根据他的实例,然后生成的priorbox为什么有负数存在呀,求解答呀 ...

官方的里面也有啊
你有测试效果吗
回复

使用道具 举报

loi666

新手上路

积分
44
8#
发表于 2020-6-11 10:34:34 | 只看该作者
ylc123 发表于 2020-6-8 11:52
官方的里面也有啊
你有测试效果吗

我后来看了一下好像是官方给的是中心点的坐标加w,h而用这个仓库提取出来的是他的左上角和右下角的坐标,但是,生成的坐标值好像和原始的官方给的数据没多大差别,难道是固定的default box?不是模型最后拟合的那个实际框吗?
回复

使用道具 举报

loi666

新手上路

积分
44
9#
发表于 2020-6-11 10:39:21 | 只看该作者
本帖最后由 loi666 于 2020-6-11 10:40 编辑

仓库提取的图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

loi666

新手上路

积分
44
10#
发表于 2020-6-11 10:41:37 | 只看该作者
这个0.1,0.2是variance值
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表