Window Data Layer

window data layer 的数据是存在硬盘上的图片, 需要在一个txt里指定用于训练或测试的图片以及bounding box, bounding box 对应的标签, 以及bounding box和ground truth bounding box的overlap, 一个例子如下

#
/home/xxx/.jpg 1.0
0.5
0.7 1.0
1.0
1.0
#
/home/xxx/.jpg 1.0
0.5
0.7

其中第一行是图片的index, 从0开始, 接下来三行依此是图片的channel, height, width, 接下来一行表示 bounding box 数量. 再接下来的每一行都是一个bounding box, 第一个数字表示label, 第二个数字表示与真实goundtruth 的overlap, 接下来的四个数字表示x1, y1, x2, y2.

最后, 在prototxt里这样定义

layers {
name: "data"
type: WINDOW_DATA
top: "data"
top: "label"
window_data_param {
source: "window_data_train.txt"
batch_size:
crop_size: # 要把bounding box warp到的大小
fg_threshold: 0.5 # 与ground truth 大于 fg_threshold 的bbox才作为正阳本
bg_threshold: 0.5 # 与ground truth 小于 bg_threshold 的bbox才作为正阳本
fg_fraction: 0.25 # 一个batch中正阳本数量的比例
crop_mode: "warp"
}
transform_param {
mean_value:
mean_value:
mean_value:
mirror: false
}
include: { phase: TRAIN }
}

负样本的label是任意的, 但是overlap要小于threshold (绝对负样本可以将overlap 设置为 0)

2. 如果 fg_fraction 小于 1, 并且如果一个dataset (TRAIN phase / TEST phase) 中没有负样本, 那么逻辑上就是矛盾的, caffe会报错 (但是错误内容是比较莫名其妙的) , 比如:

I0507 ::46.192163  net.cpp:] Setting up fc6
*** Aborted at (unix time) try "date -d @1430963926" if you are using GNU date ***
PC: @ 0x7f5ad296f0db caffe::WindowDataLayer<>::InternalThreadEntry()
*** SIGFPE (@0x7f5ad296f0db) received by PID (TID 0x7f5aacde6700) from PID ; stack trace: ***
@ 0x7f5ad1b19d40 (unknown)
@ 0x7f5ad296f0db caffe::WindowDataLayer<>::InternalThreadEntry()
@ 0x7f5aca2d6a4a (unknown)
@ 0x7f5ac9839182 start_thread
@ 0x7f5ad1bdd47d (unknown)
@ 0x0 (unknown)
./train.sh: line : Floating point exception(core dumped) ./external/caffe/build/tools/caffe train -gpu -solver external/my_models/lsp_window_data/lsp_solver.prototxt

3. 如果bbox坐标超过了image 的大小, 但是bbox有一部分在图像内部, 这种情况是允许的.

LMDB/LevelDB

需要在prototxt里面指定图像大小, 程序内部会check设定的大小是否和数据实际大小一致. 所以数据一旦存储后就不能再改变大小.

Caffe 碎碎念的更多相关文章

  1. Linux碎碎念

    在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...

  2. 一些关于Linux入侵应急响应的碎碎念

    近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...

  3. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  4. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...

  5. 结对编程ending-我和洧洧的碎碎念

    应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...

  6. C语言 · 分分钟的碎碎念

    算法提高 分分钟的碎碎念   时间限制:1.0s   内存限制:256.0MB      问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...

  7. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

  8. Java实现 蓝桥杯VIP 算法提高 分分钟的碎碎念

    算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用箭头画出这个念头的 ...

  9. MySQL碎碎念

    1. 如何修改Mysql的用户密码 mysql> update mysql.user set password=password('hello') where user='root'; mysq ...

随机推荐

  1. 《Linux内核设计与实现》第5章读书整理

                                 <第五章 系统调用>笔记 5.1 与内核通信 系统调用在用户空间和硬件设备之间提供了一个中间层. 中间层的作用: 为用户空间提供一 ...

  2. Spark 实践——基于 Spark Streaming 的实时日志分析系统

    本文基于<Spark 最佳实践>第6章 Spark 流式计算. 我们知道网站用户访问流量是不间断的,基于网站的访问日志,即 Web log 分析是典型的流式实时计算应用场景.比如百度统计, ...

  3. 蜗牛慢慢爬 LeetCode 16. 3Sum Closest [Difficulty: Medium]

    题目 Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  4. 使用alpine的docker镜像下 dind 的方式安装dotnet core 的一个非dockerfile的方法

    1. 下载dind的镜像 docker pull docker:dind 2. 执行该镜像 docker run -it --privileged --name some-docker -d dock ...

  5. Git查看与修改用户名、邮箱

    用户名和邮箱的作用: 用户名和邮箱地址相当于你的身份标识,是本地Git客户端的一个变量,不会随着Git库而改变. 每次commit都会用用户名和邮箱纪录. github的contributions跟你 ...

  6. 关于“代码规范”,“Review”和“Check list”

    关于“代码规范”,“Review”和“Check list”,就我个人理解,这三者相辅相成.代码规范是在编程时就该注意的,为Review减轻负担.而要进行Review,又需要一个Check list作 ...

  7. 二叉树的Java实现及特点总结

    二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 我们先介绍一些关于二叉树的概念名词. 二叉树: ...

  8. spring中的传播性 个人认为就是对方法的设置 其作用能传播到里面包含的方法上

    spring中的传播性 个人认为就是对方法的设置 其作用能传播到里面包含的方法上

  9. bzoj1178/luogu3626 会议中心 (倍增+STL::set)

    贪心地,可以建出一棵树,每个区间对应一个点,它的父亲是它右边的.与它不相交的.右端点最小的区间. 为了方便,再加入一个[0,0]区间 于是就可以倍增来做出从某个区间开始,一直到某个右界,这之中最多能选 ...

  10. 洛谷P1155 双栈排序

    这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??! 题意:给你一个n排列,求它们能不能通过双栈来完成排序.如果能输出最小字典序方案. [update]这里面加了一 ...