筽然wwW看到了44md曾经,微信图片保存在哪里的网止44md可是怎么com登不上了?

未找到信息!
未找到信息!
收录 / 索引信息
未找到信息!
一般不超过80字符
网站关键词
一般不超过100字符
一般不超过200字符
同主机安全
虚假或欺诈网站
挂马或恶意网站
未存在违规内容
alexa排名趋势
服务器信息
服务器类型
源文件大小
压缩后大小
最后修改时间
关闭关闭关闭当我们 chmod 777 的时候,到底干了些什么?
18:56:18 +08:00 · 8085 次点击
警告:杜绝使用 chmod 777 ,尤其是在生产环境!
当我们遇到各种权限问题的时候,例如 Apache 告诉你 Permission dined ,是不是第一时间想到chmod 777?我们知道chmod是更改权限,那么777到底是什么呢?
Unix 系统的权限分三种,分别是拥有者( Owner )、用户组( Group )、其它用户( Other ),用ls的-l参数可以查看文件的权限。
每个项目前面那一串乱七八糟的字母和横杠,就是权限。第一位比较简单,指的是文件类型:-代表普通文件,d代表文件夹, Unix 下文件夹是特殊的文件。后面 9 位分三组,每组就代表了对应用户的权限:
x = 1: 执行
现在看一下上面那个图的bin目录,它的权限是drwxr-xr-x就可以解读为:
d: 这是个目录
rwx: 拥有者(也就是 Learning )可读、可写、可执行
r-x: 用户组(也就是 admin )可读、可执行、但不可写
r-x: 其它用户,跟用户组的权限一样
其中执行权限有什么用呢?可能有人并不知道,比如我有个 C 语言写的程序,编译出来后是a.out,没有执行权限的话,用./a.out命令是执行不了的。 shell 脚本就不一样,假设我有个脚本叫,这个文件没有执行权限,我还可以用sh 执行,但是如果加上执行权限,./就会方便很多,还能用命令行自动补全。
为什么是 1 、 2 、 4 ?
那么权限为什么是 1 、 2 、 4 呢?因为这是二进制:
这么做最主要有两个好处:节省空间和提升运算效率。
Unix 是上个世纪 60 年代末期产物,当时的资源甚是宝贵,所以,只用 3 个 bit 来保存权限,是很不错的选择。当然 CPU 时间也是很宝贵,不可能为了权限判断让你耗费那么多 CPU 时间,所以这种二进制权限适合于位运算,位运算是众所周知最快的,可能大家学过却没怎么用过,这里用代码做个例子:
* AND 0100 (4)
= 0100 (4)
#define READ
int auth = 5; // 101, 权限是读和写
if (auth & READ) {
doRead(); // 有读权限,执行 doRead()
这种二进制和位运算不只用在权限上,还用在了一些配置选项里,比如 wxPython 里也有这么用的,将多个特征分离,需要多种样式时,用位或构造:
slider = wx.Slider(..., style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS )
不用chmod 777,还能怎么办?
那么遇到类似 Apache 的 Permission denied ,还有什么办法呢?
检查一下父级目录,是不是没有权限,就算你这个目录权限是 777 ,而父级目录没权限时,也是白搭。
是不是 symlink ?原目录的权限如何?
一般 Apache 或 nginx 的用户和用户组都是_www,想办法让_www拥有权限
最后再劝大家一句:不要再用 chmod 777 了
原文链接:
微信号:程序员晋级之路『 code-learning 』
70 回复 &| &直到
10:26:38 +08:00
& & 19:01:30 +08:00
这不是基本知识么。。 V 站有人不懂么
& & 19:03:49 +08:00 via Android
这不是基本知识么。。 V 站有人不懂么
& & 19:10:19 +08:00 via iPhone
@ 当然有人不懂呀, V 站还有很多人连图都不会发呢。
& & 19:11:38 +08:00
拿 5 千元工资,我就 777
拿 1 万元工资,我就 755 或者 644
& & 19:12:53 +08:00 via iPhone
这明明是推广。
& & 19:14:27 +08:00 via iPhone
啦啦啦,往下啦
& & 19:16:23 +08:00
我觉得就算拿 3000 工资,这个也应该要懂。
就譬如翻译文员对于 hello 的熟练程度。
& & 19:17:22 +08:00 via iPhone
对于很多 Linux 小白算是科普了吧,还是支持一下楼主
& & 19:33:34 +08:00 via iPhone
难道没人用 o+w 、 o+r 么、数字好暴力
& & 19:36:14 +08:00 via Android
不懂的看了一楼二楼吓得不敢说话
& & 19:39:58 +08:00
希望不要拿站在峰顶的高度看正在爬山的人。
& & 19:44:36 +08:00 via iPhone
@ 一楼二楼也没说错,这确实是基本知识,不过你要是不知道,说明你还需要继续努力学习呀~
& & 19:46:21 +08:00
既然讲了就应该把 sid/目录的权限 也讲讲
& & 19:49:49 +08:00
初学 linux 建议看鸟哥的 linux 私房菜
& & 19:59:16 +08:00
如果把目录权限和 set-user-ID 、 set-group-ID 等内容加上,回复可能就是另一副样子了
& & 20:45:56 +08:00
一本正经的在 v2 科普小学知识。。。可以。。。这广告很硬。。。而且可以完全过滤稍微有一点常识的后端,只剩下目标客户。。。嗯
& & 20:47:23 +08:00
文件 644 ,文件夹 755 ,权限用户和用户组为 www 或者是 www-data
& & 21:16:40 +08:00
大部分时候没必要,真的, linux 的哲学就是把太多东西抽象的不成样子了,
即使是高手程序员 对文件目录的权限了如指掌, 777 o+w 644 一堆 是啥子鬼,又不好记,还特别坑爹,
文件权限这玩意,还是直接抽象成字符串控制比较好,真心的 一堆数字太难记忆了
& & 21:21:04 +08:00
一个 ls 参数 h 居然是 human readable 的隐喻,有的时候真的蛋疼,真的,很多命令的隐喻规则完全不是一回事,有的命令参数 h 是 help 的隐喻 有的 h 就更加不知道啥一回事了
& & 21:26:03 +08:00 via Android
程序问题选择 777 环境问题选择 chown
& & 21:33:41 +08:00
@ 建议看看 Windows Powershell
& & 21:45:45 +08:00 via iPad
谢谢,很有用途,收藏了。 lz 比我写的好多了,以后身边的新人问这些问题的时候直接给他们链接。
& & 21:47:21 +08:00
@ 不懂的看了一楼二楼吓得不敢说话 X2
& & 22:01:08 +08:00 via Android
楼主,你推广就算了,别发这种知识,明显低估 V2EX 的水平,这个知识我 18 年前就知道了。
& & 22:21:27 +08:00
@ V2EX 也高不到哪里去,随便注册个号又不要邀请码,有这么优越?
& & 22:31:32 +08:00 via Android
@ 嗯,现在 V2EX 火了,新人参差不齐。
& & 23:36:09 +08:00 via Android
绝对支持知识科普
& & 23:55:47 +08:00 via iPhone
为科普点赞,
我学习到了为啥 1'2'4 进制
& & 00:02:32 +08:00 via iPhone
777 还敢拿 5 千?在我这第二天就让他滚蛋
& & 05:45:56 +08:00 via Android
chown -R &non-root&:www-data &site directory&
chmod -R 750 &general directory&
chmod -R 770 &writeable directory&
反正我每次都这样不知有没有问题?
& & 06:35:53 +08:00 via Android
靠这种基础的东西拉人气,太过了吧
& & 07:12:01 +08:00 via Android
想问一下你们生存环境的 SELinux 开不开?
& & 07:12:34 +08:00 via Android
& & 07:30:01 +08:00
& & 07:39:12 +08:00
chown chgrp chmod 就行了.
& & 07:44:51 +08:00
呵呵。。一览众山小
& & 08:39:28 +08:00
大学时候用的 ARM 开发板,是单用户的,任何文件权限都是 777 ,然而大学毕业之后,我成为了一个运维
& & 08:39:32 +08:00
然而讲了一堆最基础的东西最终却还是没有解释为什么要杜绝,是楼主内心在存在怀疑和犹豫么哈哈哈!
& & 08:44:47 +08:00
此文写得不合格,为什么不用没讲清楚,我以为要讲坏人会如何利用 777 ,会造成什么危害呢
结果看到底也没写
& & 08:47:33 +08:00
测试环境一般都给 777 ,打着方便,不用移手指。
& & 08:54:24 +08:00
用 git 克隆的代码,用户组和用户都会变成 git ,好烦躁。
每次都要 chown www-data:www-data -R .
有没有简单的方法啊。
& & 08:55:28 +08:00
我就经常用 777 ,这些基础真不懂
& & 09:06:29 +08:00
虽然早就知道了
还是支持下楼主的这种科普行为(
& & 09:24:02 +08:00
这是基本的 Linux 常识啊,不过还是支持楼科普
& & 09:42:48 +08:00
Linux 小白 之前这边遇到权限问题的时候 老大都是直接让我使用 777 我要不要把这个告诉老大呢
& & 09:45:46 +08:00
惹毛了我一般把网站的根目录直接 chown -R nginx:nginx ,哪来这么多废话
& & 09:49:14 +08:00
我还以为系统底层到底干了些什么呢!!!
& & 10:09:30 +08:00
777 就是作死=_=
& & 10:32:06 +08:00
755 是才是常用吧==
& & 10:39:47 +08:00
还是 ACL 好用
& & 11:06:25 +08:00
chmod 777 的根源在于,缺点谁都懂,但是就是因为太多半瓶不满的人只知道说前半句不知道后半句,拿不出完全有效的解决方法,结果很多人知道 777 不好也只能用着
关于这个问题,银弹是 POSIX ACL ,并配以完善的用户 /组的管理
& & 11:09:48 +08:00
& & 11:30:02 +08:00
有人喜欢把这些基础知识掖着藏着,站在高山顶上取笑正在爬山的人。
& & 11:50:42 +08:00
说实话,我看到标题的时候还以为说的是利用 777 的漏洞做一些事情。。。
看来完全不是那回事
不过,支持楼主的科普,虽然说我早就知道了,但毕竟以现在 v2 的水平,这种科普还是有作用的。
& & 12:44:18 +08:00
一个 777 引发的撕逼~
& & 12:49:17 +08:00
你知道 XXX API 、 XXX 命令、 XXX 函数吗...?
甲:拿多少钱干多少事嘛,虽然我知道那些个利弊,我爱用哪个就用哪个。
乙:什么,这你都不知道?!! 这可是基础知识,要是有人不知道,我能让他滚蛋就滚蛋,不能我也得鄙视他!
丙:乃们这样嘲笑新手是不对的,谁不是从新手过来的呢,装逼贩子。
丁:我就觉得以现在 XX 社区,XX 一辈的水平,不知道很正常嘛,来给他们科普科普涨涨姿势,真是的。
总结帖子几个观点如上,不代表本人观点,不针对任何人。
& & 13:10:45 +08:00
从“第一时间想到 777 ”就知道……这人技术素质不行啊
& & 16:49:51 +08:00
支持楼主。还是有涨知识的,比如为什么是 1 , 2 , 4
& & 16:55:34 +08:00
我的 NAS 数据目录用的是 2775 。
& & 18:49:26 +08:00
ntfs-3g mount 是 777 这个怎么解决?
& & 20:02:26 +08:00
git config core.filemode false
& & 20:05:43 +08:00
@ 难道拿 5k 你还多花力气特意去 umask 么(手动滑稽
& & 20:07:00 +08:00
@ 真不能指望理解得了 777 的用户就能知道 ACL 是个什么鬼……成本忽地就上去了。
& & 20:53:23 +08:00 via iPhone
我讲 RHCE 课的时候是这么让学员记住权限数字的
1 ,就是要,你要干事,就是执行
2 ,写代码的人都很二,所以 2 是写
4 ,死人了,读书烦死人了,所以 4 是读
任意两者相加表示两个属性都具有
三个全加一起就是全都有
& & 22:35:13 +08:00
Linux 里面文件夹的权限和文件的权限有一些不同,(这是我曾经掉过的坑),我就直接引用一个吧:

总结 linux 下目录和文件的权限区别
文件:读文件内容( r )、写数据到文件( w )、作为命令执行文件( x )。
目录:读包含在目录中的文件名称( r )、写信息到目录中去(增加和删除索引点的连结)、搜索目录(能用该目录名称作为路径名去访问它所包含的文件和子目录)
具体说就是:
( 1 )有只读权限的用户不能用 cd 进入该目录:还必须有执行权限才能进入。
( 2 )有执行权限的用户只有在知道文件名,并拥有读权利的情况下才可以访问目录下的文件。
( 3 )必须有读和执行权限才可以 ls 列出目录清单,或使用 cd 命令进入目录。
( 4 )有目录的写权限,可以创建、删除或修改目录下的任何文件或子目录,即使使该文件或子目录属于其他用户也是如此。

& & 07:59:18 +08:00 via Android
我是接触了 Android 手机才知道的 read write execute
& & 11:01:16 +08:00
001 002 004
& & 09:04:11 +08:00
@ 哈哈,这比喻
& & 10:24:43 +08:00 via iPhone
& & 10:26:38 +08:00 via iPhone
其实权限还有一位???
& · & 630 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.0 · 23ms · UTC 21:35 · PVG 05:35 · LAX 14:35 · JFK 17:35? Do have faith in what you're doing.3,892被浏览267,730分享邀请回答votchallenge.net/vot2016/download/44_TCNN.zip,速度方面比较突出的如80FPS的SiamFC 和100FPS的GOTURN ,注意都是在GPU上。基于ResNet的SiamFC-R(ResNet)在VOT2016表现不错,很看好后续发展,有兴趣也可以去VALSE听作者自己讲解 ,至于GOTURN,效果比较差,但优势是跑的很快100FPS,如果以后效果也能上来就好了。做科研的同学深度学习类是关键,能兼顾速度就更好了。Nam H, Han B. Learning multi-domain convolutional neural networks for visual tracking [C]// CVPR, 2016.Nam H, Baek M, Han B. Modeling and propagating cnns in a tree structure for visual tracking. arXiv preprint arXiv:, 2016.Bertinetto L, Valmadre J, Henriques J F, et al. Fully-convolutional siamese networks for object tracking [C]// ECCV, 2016.Held D, Thrun S, Savarese S. Learning to track at 100 fps with deep regression networks [C]// ECCV, 2016.最后,深度学习END2END的强大威力在目标跟踪方向还远没有发挥出来,还没有和相关滤波类方法拉开多大差距(速度慢是天生的我不怪你,但效果总该很好吧,不然你存在的意义是什么呢。。革命尚未成功,同志仍须努力)。另一个需要注意的问题是目标跟踪的数据库都没有严格的训练集和测试集,需要离线训练的深度学习方法就要非常注意它的训练集有没有相似序列,而且一直到VOT2017官方才指明要限制训练集,不能用相似序列训练模型。最后强力推荐两个资源。王强
维护的benchmark_results
:大量顶级方法在OTB库上的性能对比,各种论文代码应有尽有,大神自己C++实现并开源的CSK, KCF和DAT,还有他自己的DCFNet论文加源码,找不着路的同学请跟紧。 维护的相关滤波类资源
,详细分类和论文代码资源,走过路过别错过,相关滤波类算法非常全面,非常之用心!(以上两位,看到了请来我处交一下广告费,9折优惠~~)第三部分:相关滤波介绍最经典的高速相关滤波类跟踪算法CSK, KCF/DCF, CN。很多人最早了解CF,应该和我一样,都是被下面这张图吸引了:这是KCF/DCF算法在OTB50上(2014年4月就挂arVix了, 那时候OTB100还没有发表)的实验结果,Precision和FPS碾压了OTB50上最好的Struck,看惯了勉强实时的Struck和TLD,飙到高速的KCF/DCF突然有点让人不敢相信,其实KCF/DCF就是在OTB上大放异彩的CSK的多通道特征改进版本。注意到那个超高速615FPS的MOSSE(严重超速这是您的罚单),这是目标跟踪领域的第一篇相关滤波类方法,这其实是真正第一次显示了相关滤波的潜力。和KCF同一时期的还有个CN,在2014'CVPR上引起剧烈反响的颜色特征方法,其实也是CSK的多通道颜色特征改进算法。从MOSSE(615)到 CSK(362) 再到 KCF(172FPS), DCF(292FPS), CN(152FPS), CN2(202FPS),速度虽然是越来越慢,但效果越来越好,而且始终保持在高速水平:Bolme D S, Beveridge J R, Draper B A, et al. Visual object tracking using adaptive correlation filters [C]// CVPR, 2010.Henriques J F, Caseiro R, Martins P, et al. Exploiting the circulant structure of tracking-by- detection with kernels [C]// ECCV, 2012.Henriques J F, Rui C, Martins P, et al. High-Speed Tracking with Kernelized Correlation Filters [J]. IEEE TPAMI, 2015.Danelljan M, Shahbaz Khan F, Felsberg M, et al. Adaptive color attributes for real-time visual tracking [C]// CVPR, 2014.CSK和KCF都是Henriques J F(牛津大学) 大神先后两篇论文,影响后来很多工作,核心部分的岭回归,循环移位的近似密集采样,还给出了整个相关滤波算法的详细推导。还有岭回归加kernel-trick的封闭解,多通道HOG特征。Martin Danelljan大牛(林雪平大学)用多通道颜色特征Color Names(CN)去扩展CSK得到了不错的效果,算法也简称CN
。MOSSE是单通道灰度特征的相关滤波,CSK在MOSSE的基础上扩展了密集采样(加padding)和kernel-trick,KCF在CSK的基础上扩展了多通道梯度的HOG特征,CN在CSK的基础上扩展了多通道颜色的Color Names。HOG是梯度特征,而CN是颜色特征,两者可以互补,所以HOG+CN在近两年的跟踪算法中成为了hand-craft特征标配。最后,根据KCF/DCF的实验结果,讨论两个问题:1. 为什么只用单通道灰度特征的KCF和用了多通道HOG特征的KCF速度差异很小?第一,作者用了HOG的快速算法fHOG,来自Piotr's Computer Vision Matlab Toolbox,C代码而且做了SSE优化。如对fHOG有疑问,请参考论文Object Detection with Discriminatively Trained Part Based Models第12页。第二,HOG特征常用cell size是4,这就意味着,100*100的图像,HOG特征图的维度只有25*25,而Raw pixels是灰度图归一化,维度依然是100*100,我们简单算一下:27通道HOG特征的复杂度是27*625*log(625)=47180,单通道灰度特征的复杂度是10000*log(1,理论上也差不多,符合表格。看代码会发现,作者在扩展后目标区域面积较大时,会先对提取到的图像块做因子2的下采样到50*50,这样复杂度就变成了2500*log(,下降了非常多。那你可能会想,如果下采样再多一点,复杂度就更低了,但这是以牺牲跟踪精度为代价的,再举个例子,如果图像块面积为200*200,先下采样到100*100,再提取HOG特征,分辨率降到了25*25,这就意味着响应图的分辨率也是25*25,也就是说,响应图每位移1个像素,原始图像中跟踪框要移动8个像素,这样就降低了跟踪精度。在精度要求不高时,完全可以稍微牺牲下精度提高帧率(但看起来真的不能再下采样了)。2. HOG特征的KCF和DCF哪个更好?大部分人都会认为KCF效果超过DCF,而且各属性的准确度都在DCF之上,然而,如果换个角度来看,以DCF为基准,再来看加了kernel-trick的KCF,mean precision仅提高了0.4%,而FPS下降了41%,这么看是不是挺惊讶的呢?除了图像块像素总数,KCF的复杂度还主要和kernel-trick相关。所以,下文中的CF方法如果没有kernel-trick,就简称基于DCF,如果加了kernel-trick,就简称基于KCF(剧透基本各占一半)。当然这里的CN也有kernel-trick,但请注意,这是Martin Danelljan大神第一次使用kernel-trick,也是最后一次。。。这就会引发一个疑问,kernel-trick这么强大的东西,怎么才提高这么点?这里就不得不提到Winsty的另一篇大作:Wang N, Shi J, Yeung D Y, et al. Understanding and diagnosing visual tracking systems[C]// ICCV, 2015. 一句话总结,别看那些五花八门的机器学习方法,那都是虚的,目标跟踪算法中特征才是最重要的(就是因为这篇文章我粉了WIN叔哈哈),以上就是最经典的三个高速算法,CSK, KCF/DCF和CN,推荐。第四部分:14年的尺度自适应VOT与OTB一样最早都是2013年出现的,但VOT2013序列太少,第一名的PLT代码也找不到,没有参考价值就直接跳过了。直接到了VOT2014竞赛
。这一年有25个精挑细选的序列,38个算法,那时候深度学习的战火还没有烧到tracking,所以主角也只能是刚刚展露头角就独霸一方的CF,下面是前几名的详细情况:前三名都是相关滤波CF类方法,第三名的KCF已经很熟悉了,这里稍微有点区别就是加了多尺度检测和子像素峰值估计,再加上VOT序列的分辨率比较高(检测更新图像块的分辨率比较高),导致竞赛中的KCF的速度只有24.23(EFO换算66.6FPS)。这里speed是EFO(Equivalent Filter Operations),在VOT2015和VOT2016里面也用这个参数衡量算法速度,这里一次性列出来供参考(MATLAB实现的tracker实际速度要更高一些):其实前三名除了特征略有差异,核心都是KCF为基础扩展了多尺度检测,概要如下:尺度变化是跟踪中比较基础和常见的问题,前面介绍的KCF/DCF和CN都没有尺度更新,如果目标缩小,滤波器就会学习到大量背景信息,如果目标扩大,滤波器就跟着目标局部纹理走了,这两种情况都很可能出现非预期的结果,导致漂移和失败。SAMF ,浙大Yang Li的工作,基于KCF,特征是HOG+CN,多尺度方法是平移滤波器在多尺度缩放的图像块上进行目标检测,取响应最大的那个平移位置及所在尺度:Li Y, Zhu J. A scale adaptive kernel correlation filter tracker with feature integration [C]// ECCV, 2014.Martin Danelljan的DSST ,只用了HOG特征,DCF用于平移位置检测,又专门训练类似MOSSE的相关滤波器检测尺度变化,开创了平移滤波+尺度滤波,之后转TPAMI做了一系列加速的版本fDSST,非常+非常+非常推荐:Danelljan M, H?ger G, Khan F, et al. Accurate scale estimation for robust visual tracking [C]// BMVC, 2014.Danelljan M, Hager G, Khan F S, et al. Discriminative Scale Space Tracking [J]. IEEE TPAMI, 2017.简单对比下这两种尺度自适应的方法:DSST和SAMF所采用的尺度检测方法哪个更好?首先给大家讲个笑话:Martin Danelljan大神提出DSST之后,他的后续论文就再没有用过(直到最新CVPR的ECO-HC中为了加速用了fDSST)。虽然SAMF和DSST都可以跟上普通的目标尺度变化,但SAMF只有7个尺度比较粗,而DSST有33个尺度比较精细准确;DSST先检测最佳平移再检测最佳尺度,是分步最优,而SAMF是平移尺度一起检测,是平移和尺度同时最优,而往往局部最优和全局最优是不一样的;DSST将跟踪划分为平移跟踪和尺度跟踪两个问题,可以采用不同的方法和特征,更加灵活,但需要额外训练一个滤波器,每帧尺度检测需要采样33个图像块,之后分别计算特征、加窗、FFT等,尺度滤波器比平移滤波器慢很多;SAMF只需要一个滤波器,不需要额外训练和存储,每个尺度检测就一次提特征和FFT,但在图像块较大时计算量比DSST高。所以尺度检测DSST并不总是比SAMF好,其实在VOT2015和VOT2016上SAMF都是超过DSST的,当然这主要是因为特征更好,但至少说明尺度方法不差。总的来说,DSST做法非常新颖,速度更快,SAMF同样优秀也更加准确。DSST一定要33个尺度吗?DSST标配33个尺度非常非常敏感,轻易降低尺度数量,即使你增加相应步长,尺度滤波器也会完全跟不上尺度变化。关于这一点可能解释是,训练尺度滤波器用的是一维样本,而且没有循环移位,这就意味着一次训练更新只有33个样本,如果降低样本数量,会造成训练不足,分类器判别力严重下降,不像平移滤波器有非常多的移位样本(个人看法欢迎交流)。总之,请不要轻易尝试大幅降低尺度数量,如果非要用尺度滤波器33和1.02就很好。以上就是两种推荐的尺度检测方法,以后简称为类似DSST的多尺度和类似SAMF的多尺度。如果更看重速度,加速版的fDSST,和仅3个尺度的SAMF(如VOT2014中的KCF)就是比较好的选择;如果更看重精确,33个尺度的DSST,及7个尺度的SAMF就比较合适。第五部分:边界效应接下来到了VOT2015竞赛
,这一年有60个精挑细选的序列,62个tracker,最大看点是深度学习开始进击tracking领域,MDNet直接拿下当年的冠军,而结合深度特征的相关滤波方法DeepSRDCF是第二名,主要解决边界效应的SRDCF仅HOG特征排在第四:随着VOT竞赛的影响力扩大,举办方也是用心良苦,经典的和顶尖的齐聚一堂,百家争鸣,多达62个tracker皇城PK,华山论剑。除了前面介绍的深度学习和相关滤波,还有结合object proposals(类物体区域检测)的EBT()排第三,Mean-Shift类颜色算法ASMS是推荐实时算法,还有前面提到的另一个颜色算法DAT,而在第9的那个Struck已经不是原来的Struck了。除此之外,还能看到经典方法如OAB, STC, CMT, CT, NCC等都排在倒数位置, 经典方法已经被远远甩在后面。在介绍SRDCF之前,先来分析下相关滤波有什么缺点。总体来说,相关滤波类方法对快速变形和快速运动情况的跟踪效果不好。快速变形主要因为CF是模板类方法。容易跟丢这个比较好理解,前面分析了相关滤波是模板类方法,如果目标快速变形,那基于HOG的梯度模板肯定就跟不上了,如果快速变色,那基于CN的颜色模板肯定也就跟不上了。这个还和模型更新策略与更新速度有关,固定学习率的线性加权更新,如果学习率太大,部分或短暂遮挡和任何检测不准确,模型就会学习到背景信息,积累到一定程度模型跟着背景私奔了,一去不复返。如果学习率太小,目标已经变形了而模板还是那个模板,就会变得不认识目标。快速运动主要是边界效应(Boundary Effets),而且边界效应产生的错误样本会造成分类器判别力不够强,下面分训练阶段和检测阶段分别讨论。训练阶段,合成样本降低了判别能力。如果不加余弦窗,那么移位样本是长这样的:除了那个最原始样本,其他样本都是“合成”的,100*100的图像块,只有1/10000的样本是真实的,这样的样本集根本不能拿来训练。如果加了余弦窗,由于图像边缘像素值都是0,循环移位过程中只要目标保持完整,就认为这个样本是合理的,只有当目标中心接近边缘时,目标跨越了边界的那些样本是错误的,这样虽不真实但合理的样本数量增加到了大约2/3(一维情况padding= 1)。但我们不能忘了即使这样仍然有1/3()的样本是不合理的,这些样本会降低分类器的判别能力。再者,加余弦窗也不是“免费的”,余弦窗将图像块的边缘区域像素全部变成0,大量过滤掉了分类器本来非常需要学习的背景信息,原本训练时判别器能看到的背景信息就非常有限,我们还加了个余弦窗挡住了背景,这样进一步降低了分类器的判别力(是不是上帝在我前遮住了帘。。不是上帝,是余弦窗)。检测阶段,相关滤波对快速运动的目标检测比较乏力。相关滤波训练的图像块和检测的图像块大小必须是一样的,这就是说你训练了一个100*100的滤波器,那你也只能检测100*100的区域,如果打算通过加更大的padding来扩展检测区域,那样除了扩展了复杂度,并不会有什么好处。目标运动可能是目标自身移动,或摄像机移动,按照目标在检测区域的位置分四种情况来看:如果目标在中心附近,检测准确且成功。如果目标移动到了边界附近但还没有出边界,加了余弦窗以后,部分目标像素会被过滤掉,这时候就没法保证这里的响应是全局最大的,而且,这时候的检测样本和训练过程中的那些不合理样本很像,所以很可能会失败。如果目标的一部分已经移出了这个区域,而我们还要加余弦窗,很可能就过滤掉了仅存的目标像素,检测失败。如果整个目标已经位移出了这个区域,那肯定就检测失败了。以上就是边界效应(Boundary Effets),推荐两个主流的解决边界效应的方法,其中SRDCF速度比较慢,并不适合实时场合。Martin Danelljan的SRDCF ,主要思路:既然边界效应发生在边界附近,那就忽略所有移位样本的边界部分像素,或者说限制让边界附近滤波器系数接近0:Danelljan M, Hager G, Shahbaz Khan F, et al. Learning spatially regularized correlation filters for visual tracking [C]// ICCV. 2015.SRDCF基于DCF,类SAMF多尺度,采用更大的检测区域(padding = 4),同时加入空域正则化,惩罚边界区域的滤波器系数,由于没有闭合解,采用高斯-塞德尔方法迭代优化。检测区域扩大(1.5-&4),迭代优化(破坏了闭合解)导致SRDCF只有5FP,但效果非常好是2015年的baseline。另一种方法是Hamed Kiani提出的MOSSE改进算法,基于灰度特征的CFLM
和基于HOG特征的BACF ,主要思路是采用较大尺寸检测图像块和较小尺寸滤波器来提高真实样本的比例,或者说滤波器填充0以保持和检测图像一样大,同样没有闭合解,采用ADMM迭代优化:Kiani Galoogahi H, Sim T, Lucey S. Correlation filters with limited boundaries [C]// CVPR, 2015.Kiani Galoogahi H, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual Tracking [C]// ICCV, 2017.CFLB仅单通道灰度特征,虽然速度比较快167FPS,但性能远不如KCF,不推荐;最新BACF将特征扩展为多通道HOG特征,性能超过了SRDCF,而且速度比较快35FPS,非常推荐。其实这两个解决方案挺像的,都是用更大的检测及更新图像块,训练作用域比较小的相关滤波器,不同点是SRDCF的滤波器系数从中心到边缘平滑过渡到0,而CFLM直接用0填充滤波器边缘。VOT2015相关滤波方面还有排在第二名,结合深度特征的DeepSRDCF,因为深度特征都非常慢,在CPU上别说高速,实时都到不了,虽然性能非常高,但这里就不推荐,先跳过。第六部分:颜色直方图与相关滤波VOT2016竞赛 ,依然是VOT2015那60个序列,不过这次做了重新标注更加公平合理,今年有70位参赛选手,意料之中深度学习已经雄霸天下了,8个纯CNN方法和6个结合深度特征的CF方法大都名列前茅,还有一片的CF方法,最最最重要的是,良心举办方竟然公开了他们能拿到的38个tracker,部分tracker代码和主页,下载地址: (以后妈妈再也不用担心我找不到源码了~),注意部分是下载链接,部分是源码压缩包,部分源码是二进制文件,好不好用一试便知,方便对比和研究,需要的赶快去试试。马上来看竞赛结果(这里仅列举前60个):高亮标出来了前面介绍过的或比较重要的方法,结合多层深度特征的相关滤波C-COT排第一名,而CNN方法TCNN是VOT2016的冠军,作者也是VOT2015冠军MDNet,纯颜色方法DAT和ASMS都在中等水平(其实两种方法实测表现非常接近),其他tracker的情况请参考论文。再来看速度,SMACF没有公开代码,ASMS依然那么快,排在前10的方法中也有两个速度比较快,分别是排第5的Staple,和其改进算法排第9的STAPLE+,而且STAPLE+是今年的推荐实时算法。首先恭喜Luca Bertinetto的SiamFC和Staple都表现非常不错,然后再为大牛默哀三分钟(VOT2016的paper原文):This was particularly obvious in case of SiamFC trackers, which runs orders higher than realtime (albeit on GPU), and Staple, which is realtime, but are incorrectly among the non-realtime trackers.VOT2016竟然发生了乌龙事件,Staple在论文中CPU上是80FPS,怎么EFO在这里只有11?幸好公开代码有Staple和STAPLE+,实测下来,虽然我电脑不如Luca Bertinetto大牛但Staple我也能跑76FPS,而更可笑的是,STAPLE+比Staple慢了大约7-8倍,竟然EFO高出4倍,到底怎么回事呢?首先看Staple的代码,如果您直接下载Staple并设置params.visualization = 1,Staple默认调用Computer Vision System Toolbox来显示序列图像,而恰好如果您没有这个工具箱,默认每帧都会用imshow(im)来显示图像,所以非常非常慢,而设置params.visualization = 0就跑的飞快(作者你是孙猴子派来的逗逼吗),建议您将显示图像部分代码替换成DSST中对应部分代码就可以正常速度运行和显示了。再来看STAPLE+的代码,对Staple的改进包括额外从颜色概率图中提取HOG特征,特征增加到56通道(Staple是28通道),平移检测额外加入了大位移光流运动估计的响应,所以才会这么慢,而且肯定要慢很多。所以很大可能是VOT举办方把Staple和STAPLE+的EFO弄反了,VOT2016的实时推荐算法应该是排第5的Staple,相关滤波结合颜色方法,没有深度特征更没有CNN,跑80FPS还能排在第五,这就是接下来主要介绍的,2016年最NIUBILITY的目标跟踪算法之一Staple (直接让排在后面的一众深度学习算法怀疑人生)。颜色特征,在目标跟踪中颜色是个非常重要的特征,不管多少个人在一起,只要目标穿不用颜色的一幅就非常明显。前面介绍过2014年CVPR的CN是相关滤波框架下的模板颜色方法,这里隆重介绍统计颜色特征方法DAT
,帧率15FPS推荐:Possegger H, Mauthner T, Bischof H. In defense of color-based model-free tracking [C]// CVPR, 2015. DAT统计前景目标和背景区域的颜色直方图并归一化,这就是前景和背景的颜色概率模型,检测阶段,贝叶斯方法判别每个像素属于前景的概率,得到像素级颜色概率图,再加上边缘相似颜色物体抑制就能得到目标的区域了。如果要用一句话介绍Luca Bertinetto(牛津大学)的Staple ,那就是把模板特征方法DSST(基于DCF)和统计特征方法DAT结合: Bertinetto L, Valmadre J, Golodetz S, et al. Staple: Complementary Learners for Real-Time Tracking [C]// CVPR, 2016.前面分析了相关滤波模板类特征(HOG)对快速变形和快速运动效果不好,但对运动模糊光照变化等情况比较好;而颜色统计特征(颜色直方图)对变形不敏感,而且不属于相关滤波框架没有边界效应,快速运动当然也是没问题的,但对光照变化和背景相似颜色不好。综上,这两类方法可以互补,也就是说DSST和DAT可以互补结合:两个框架的算法高效无缝结合,25FPS的DSST和15FPS的DAT,而结合后速度竟然达到了80FPS。DSST框架把跟踪划分为两个问题,即平移检测和尺度检测,DAT就加在平移检测部分,相关滤波有一个响应图,像素级前景概率也有一个响应图,两个响应图线性加权得到最终响应图,其他部分与DSST类似,平移滤波器、尺度滤波器和颜色概率模型都以固定学习率线性加权更新。另一种相关滤波结合颜色概率的方法是17CVPR的CSR-DCF,提出了空域可靠性和通道可靠性,没有深度特征性能直逼C-COT,速度可观13FPS:Luke?i? A, Vojí? T, ?ehovin L, et al. Discriminative Correlation Filter with Channel and Spatial Reliability [C]// CVPR, 2017.CSR-DCF中的空域可靠性得到的二值掩膜就类似于CFLM中的掩膜矩阵P,在这里自适应选择更容易跟踪的目标区域且减小边界效应;以往多通道特征都是直接求和,而CSR-DCF中通道采用加权求和,而通道可靠性就是那个自适应加权系数。采用ADMM迭代优化,可以看出CSR-DCF是DAT和CFLB的结合算法。VOT2015相关滤波还有排第一名的C-COT(别问我第一名为什么不是冠军,我也不知道),和DeepSRDCF一样先跳过。第七部分:long-term和跟踪置信度以前提到的很多CF算法,也包括VOT竞赛,都是针对short-term的跟踪问题,即短期(shor-term)跟踪,我们只关注短期内(如100~500帧)跟踪是否准确。但在实际应用场合,我们希望正确跟踪时间长一点,如几分钟或十几分钟,这就是长期(long-term)跟踪问题。Long-term就是希望tracker能长期正确跟踪,我们分析了前面介绍的方法不适合这种应用场合,必须是short-term tracker + detecter配合才能实现正确的长期跟踪。用一句话介绍Long-term,就是给普通tracker配一个detecter,在发现跟踪出错的时候调用自带detecter重新检测并矫正tracker。 介绍CF方向一篇比较有代表性的long-term方法,Chao Ma的LCT : Ma C, Yang X, Zhang C, et al. Long-term correlation tracking[C]// CVPR, 2015. LCT在DSST一个平移相关滤波Rc和一个尺度相关滤波的基础上,又加入第三个负责检测目标置信度的相关滤波Rt,检测模块Online Detector是TLD中所用的随机蔟分类器(random fern),在代码中改为SVM。第三个置信度滤波类似MOSSE不加padding,而且特征也不加cosine窗,放在平移检测之后。 如果最大响应小于第一个阈值(叫运动阈值),说明平移检测不可靠,调用检测模块重新检测。注意,重新检测的结果并不是都采纳的,只有第二次检测的最大响应值比第一次检测大1.5倍时才接纳,否则,依然采用平移检测的结果。如果最大响应大于第二个阈值(叫外观阈值),说明平移检测足够可信,这时候才以固定学习率在线更新第三个相关滤波器和随机蔟分类器。注意,前两个相关滤波的更新与DSST一样,固定学习率在线每帧更新。LCT加入检测机制,对遮挡和出视野等情况理论上较好,速度27fps,实验只跑了OTB-2013,跟踪精度非常高,根据其他论文LCT在OTB-2015和 VOT上效果略差一点可能是两个核心阈值没有自适应, 关于long-term,TLD和LCT都可以参考 。接下来介绍跟踪置信度。 跟踪算法需要能反映每一次跟踪结果的可靠程度,这一点非常重要,不然就可能造成跟丢了还不知道的情况。生成类(generative)方法有相似性度量函数,判别类(discriminative)方法有机器学习方法的分类概率。有两种指标可以反映相关滤波类方法的跟踪置信度:前面见过的最大响应值,和没见过的响应模式,或者综合反映这两点的指标。 LMCF(MM Wang的目标跟踪专栏: )提出了多峰检测和高置信度更新:Wang M, Liu Y, Huang Z. Large Margin Object Tracking with Circulant Feature Maps [C]// CVPR, 2017. 高置信度更新,只有在跟踪置信度比较高的时候才更新跟踪模型,避免目标模型被污染,同时提升速度。
第一个置信度指标是最大响应分数Fmax,就是最大响应值(Staple和LCT中都有提到)。 第二个置信度指标是平均峰值相关能量(average peak-to correlation energy, APCE),反应响应图的波动程度和检测目标的置信水平,这个(可能)是目前最好的指标,推荐:跟踪置信度指标还有,MOSSE中的峰值旁瓣比(Peak to Sidelobe Ratio, PSR), 由相关滤波峰值,与11*11峰值窗口以外旁瓣的均值与标准差计算得到,推荐:还有CSR-DCF的空域可靠性,也用了两个类似指标反映通道可靠性, 第一个指标也是每个通道的最大响应峰值,就是Fmax,第二个指标是响应图中第二和第一主模式之间的比率,反映每个通道响应中主模式的表现力,但需要先做极大值检测: 第八部分:卷积特征最后这部分是Martin Danelljan的专场,主要介绍他的一些列工作,尤其是结合深度特征的相关滤波方法,代码都在他主页,就不一一贴出了。Danelljan M, Shahbaz Khan F, Felsberg M, et al. Adaptive color attributes for real-time visual tracking [C]// CVPR, 2014.在CN中提出了非常重要的多通道颜色特征Color Names,用于CSK框架取得非常好得效果,还提出了加速算法CN2,通过类PCA的自适应降维方法,对特征通道数量降维(10 -& 2),平滑项增加跨越不同特征子空间时的代价,也就是PCA中的协方差矩阵线性更新防止降维矩阵变化太大。Danelljan M, Hager G, Khan F S, et al. Discriminative Scale Space Tracking [J]. IEEE TPAMI, 2017.DSST是VOT2014的第一名,开创了平移滤波+尺度滤波的方式。在fDSST中对DSST进行加速,PCA方法将平移滤波HOG特征的通道降维(31 -& 18),QR方法将尺度滤波器~1000*17的特征降维到17*17,最后用三角插值(频域插值)将尺度数量从17插值到33以获得更精确的尺度定位。SRDCF是VOT2015的第四名,为了减轻边界效应扩大检测区域,优化目标增加了空间约束项,用高斯-塞德尔方法迭代优化,并用牛顿法迭代优化平移检测的子网格精确目标定位。Danelljan M, Hager G, Shahbaz Khan F, et al. Adaptive decontamination of the training set: A unified formulation for discriminative visual tracking [C]// CVPR, 2016. SRDCFdecon在SRDCF的基础上,改进了样本和学习率问题。以前的相关滤波都是固定学习率线性加权更新模型,虽然这样比较简单不用保存以前样本,但在定位不准确、遮挡、背景扰动等情况会污染模型导致漂移。SRDCFdecon选择保存以往样本(图像块包括正,负样本),在优化目标函数中添加样本权重参数和正则项,采用交替凸搜索,首先固定样本权重,高斯-塞德尔方法迭代优化模型参数,然后固定模型参数,凸二次规划方法优化样本权重。Danelljan M, Hager G, Shahbaz Khan F, et al. Convolutional features for correlation filter based visual tracking [C]// ICCVW, 2015. DeepSRDCF是VOT2015的第二名,将SRDCF中的HOG特征替换为CNN中单层卷积层的深度特征(也就是卷积网络的激活值),效果有了极大提升。这里用imagenet-vgg-2048 network,VGG网络的迁移能力比较强,而且MatConvNet就是VGG组的,MATLAB调用非常方便。论文还测试了不同卷积层在目标跟踪任务中的表现:第1层表现最好,第2和第5次之。由于卷积层数越高语义信息越多,但纹理细节越少,从1到4层越来越差的原因之一就是特征图的分辨率越来越低,但第5层反而很高,是因为包括完整的语义信息,判别力比较强(本来就是用来做识别的)。注意区分这里的深度特征和基于深度学习的方法,深度特征来自ImageNet上预训练的图像分类网络,没有fine-turn这一过程,不存在过拟合的问题。而基于深度学习的方法大多需要在跟踪序列上end-to-end训练或fine-turn,如果样本数量和多样性有限就很可能过拟合。Ma C, Huang J B, Yang X, et al. Hierarchical convolutional features for visual tracking [C]// ICCV, 2015. 值得一提的还有Chao Ma的HCF,结合多层卷积特征提升效果,用了VGG19的Conv5-4, Conv4-4和Conv3-4的激活值作为特征,所有特征都缩放到图像块分辨率,虽然按照论文应该是由粗到细确定目标,但代码中比较直接,三种卷积层的响应以固定权值1, 0.5, 0.02线性加权作为最终响应。虽然用了多层卷积特征,但没有关注边界效应而且线性加权的方式过于简单,HCF在VOT2016仅排在28名(单层卷积深度特征的DeepSRDCF是第13名)。Danelljan M, Robinson A, Khan F S, et al. Beyond correlation filters: Learning continuous convolution operators for visual tracking [C]// ECCV, 2016.C-COT是VOT2016的第一名,综合了SRDCF的空域正则化和SRDCFdecon的自适应样本权重,还将DeepSRDCF的单层卷积的深度特征扩展为多成卷积的深度特征(VGG第1和5层),为了应对不同卷积层分辨率不同的问题,提出了连续空间域插值转换操作,在训练之前通过频域隐式插值将特征图插值到连续空域,方便集成多分辨率特征图,并且保持定位的高精度。目标函数通过共轭梯度下降方法迭代优化,比高斯-塞德尔方法要快,自适应样本权值直接采用先验权值,没有交替凸优化过程,检测中用牛顿法迭代优化目标位置。注意以上SRDCF, SRDCFdecon,DeepSRDCF,C-COT都无法实时,这一系列工作虽然效果越来越好,但也越来越复杂,在相关滤波越来越慢失去速度优势的时候,Martin Danelljan在2017CVPR的ECO来了一脚急刹车,大神来告诉我们什么叫又好又快,不忘初心:Danelljan M, Bhat G, Khan F S, et al. ECO: Efficient Convolution Operators for Tracking [C]// CVPR, 2017.ECO是C-COT的加速版,从模型大小、样本集大小和更新策略三个方便加速,速度比C-COT提升了20倍,加量还减价,EAO提升了13.3%,最最最厉害的是, hand-crafted features的ECO-HC有60FPS。。吹完了,来看看具体做法。第一减少模型参数,定义了factorized convolution operator(分解卷积操作),效果类似PCA,用PCA初始化,然后仅在第一帧优化这个降维矩阵,以后帧都直接用,简单来说就是有监督降维,深度特征时模型参数减少了80%。第二减少样本数量, compact generative model(紧凑的样本集生成模型),采用Gaussian Mixture Model (GMM)合并相似样本,建立更具代表性和多样性的样本集,需要保存和优化的样本集数量降到C-COT的1/8。第三改变更新策略,sparser updating scheme(稀疏更新策略),每隔5帧做一次优化更新模型参数,不但提高了算法速度,而且提高了对突变,遮挡等情况的稳定性。但样本集是每帧都更新的,稀疏更新并不会错过间隔期的样本变化信息。ECO的成功当然还有很多细节,而且有些我也看的不是很懂,总之很厉害就是了。。ECO实验跑了四个库(VOT2016, UAV123, OTB-2015, and TempleColor)都是第一,而且没有过拟合的问题,仅性能来说ECO是目前最好的相关滤波算法,也有可能是最好的目标跟踪算法。hand-crafted features版本的ECO-HC,降维部分原来HOG+CN的42维特征降到13维,其他部分类似,实验结果ECO-HC超过了大部分深度学习方法,而且论文给出速度是CPU上60FPS。最后是来自Luca Bertinetto的CFNet ,除了上面介绍的相关滤波结合深度特征,相关滤波也可以end-to-end方式在CNN中训练了:Valmadre J, Bertinetto L, Henriques J F, et al. End-to-end representation learning for Correlation Filter based tracking [C]// CVPR, 2017. 在SiamFC的基础上,将相关滤波也作为CNN中的一层,最重要的是cf层的前向传播和反向传播公式推导,两层卷积层的CFNet在GPU上是75FPS,综合表现并没有很多惊艳,可能是难以处理CF层的边界效应吧,持观望态度。第九部分:2017年CVPR和ICCV结果下面是CVPR 2017的目标跟踪算法结果:可能MD大神想说,一个能打的都没有!仿照上面的表格,整理了ICCV 2017的相关论文结果对比ECO:哎,还是一个能打的都没有!第十部分:大牛推荐凑个数,目前相关滤波方向贡献最多的是以下两个组(有创新有代码):牛津大学:Joao F. Henriques和Luca Bertinetto,代表:CSK, KCF/DCF, Staple, CFNet (其他SiamFC, Learnet).林雪平大学:Martin Danelljan,代表:CN, DSST, SRDCF, DeepSRDCF, SRDCFdecon, C-COT, ECO.国内也有很多高校的优秀工作就不一一列举了。___________________________________________________________________________我的目标跟踪专栏:,长期更新,专注跟踪,但也会介绍计算机视觉和深度学习的各方面内容,拓展思路。1K141 条评论分享收藏感谢收起16632 条评论分享收藏感谢收起

我要回帖

更多关于 md文件保存 的文章

 

随机推荐