FCN语义分割算法已经在很多主流深度学习平台上实现了,包括Caffe、TenserFlow、MatConvNet等。这篇博客主要介绍如何在MatConvNet上运行起FCN语义分割,包括CPU和GPU版本。博主的平台是Matlab2017a+Cuda8.0。
月度归档: 2017年4月
LeetCode_218: The Skyline Problem
Skyline是一个经典问题了,一开始博主思考先进行高度排序,从高到低来确定关键点。事实上通过优先队列来获取当前位置的最大高度,沿着x轴来遍历是最好的。这篇博客提供了一份19ms的答案,战胜了97%,当然是从讨论区淘出来的,博主没想到这么优秀的方法。
MFC动态设置CEdit、CStatic文字颜色和背景颜色(修改控件方式)
MFC的控件常常需要动态的改变文字颜色和背景底色,最好的做法是修改控件本身,增加设置颜色的接口函数直接调用,进行控件颜色的修改。CtlColor是反射式消息的响应函数,在控件内部自己实现重绘,这种方式是最好的。与反射式消息修改控件本身不同,还有另一种方式使用OnCtlColor在控件父窗口类中增加代码修改颜色,这两种方式都可以实现颜色的修改。这篇博客主要介绍反射式消息的方式。
LeetCode_313: Super Ugly Number
这道题一种普遍的解法是动态规划。但是同样是动态规划,也有优劣之分。这篇博客贡献一份36ms(80%+)的答案,推荐这份答案不仅是因为速度,还是因为这种思路十分清晰,当然也可以参考讨论区中的7行的动态规划答案,也是十分优秀的。
LeetCode_373: Find K Pairs with Smallest Sums
寻找K个最大组合,博主最开始使用BFS来做的,算法复杂度$latex O(mn)$,计算和$latex mn$,广度优先搜索$latex V+E = mn+(m-1)(n-1)$,速度13ms。此外,博主对DP的掌握一直不够熟练,顺便贴了另一种使用DP的搜索方法,也是13ms,其实两种思路是差不多的。[mathjax]
LeetCode_378: Kth Smallest Element in a Sorted Matrix
经典的数据结构问题,在算法导论堆排序的思考题中出现过这种结构的排序求解问题,该问题解法多样,很适合学习。
LeetCode_407: Trapping Rain Water II
一道很有意思的题目,题目是计算容器雨水积累量,实际上是利用广度优先搜索来不断收缩边界,计算雨水的积累。由于博主之前图一类的题目接触的比较少,这道题目看了一眼答案。这篇博客除了介绍这道题目本身,还将介绍stl中的优先队列priority queue,优先队列是广度优先搜索(BFS)必要的辅助。作为编程辅助,后面还顺便介绍了C++11的花括弧初始化。
图像跟踪(九)FCNT语义跟踪
刚有一个idea,用语义分割来做图像跟踪,搜了一下发现已经有人做过了,细细的看了下Paper,和自己相当还不一样。FCN是深度学习语义分割的鼻祖,而这片Paper的名字叫做FCNT,看了之后发现我误会了,此FCN非彼FCN,由于是比较早的算法了,性能和MEEM处于同一层次,不过考虑到这是深度学习方法用于跟踪的重要实践,还是做个笔记好了。
博主认为图像跟踪过程的本质就是语义的跟踪(我是这么理解的),所以,使用语义分割来完成图像跟踪是自然而然想到的。事实上深度学习用于图像跟踪,也就是利用了其深层特征中的语义信息。这篇博客就主要介绍这篇文献:Visual Tracking with Fully Convolutional Networks。
LeetCode_057: Insert Interval
这道题就是区间插入问题,目前看到的解法主要有三种,一种是直接分析区间重叠,具有O(n)时间和O(n)空间复杂度,另一种是用二叉搜索树来做,还有一种是借助了STL库中的equal_range方法来做,写法比较优雅。这篇博客主要给出第一种解法和第三种解法的代码
LeetCode_164: Maximum Gap
经典的线性时间排序问题,题目标签是hard,主要是要求了线性时间内解决问题,那么很自然想到基数排序和桶排序了。除此之外还有一种常用的线性时间排序,计数排序可以看做间隔为1的桶排序,在数字比较集中且可转化为整数时比较有效,因此计数排序不适合本题目。
LeetCode_274: H-index
H指数的计算,这道题是典型的排序思路,博主第一次使用一般的排序方法写,后来发现整数这种用基数排序更合适,同时需要考虑很多特例,博主贴了这两份代码。由于测试案例的原因,基数排序速度上的优势没有体现出来。
目标跟踪VOT2016 BenchMark评价标准介绍
现在比较流行的跟踪Benckmark有OTB、VOT、KITTI-tracking,之前的算法测试都进行在OTB(Visual Tracker Benckmark)上,考虑到现在VOT的流行程度不亚于OTB,并且VOT每一年都会有更新。VOT16并没有更新图像数据,而是更新了标注的方法。这篇博客主要介绍VOT的评价方法,会结合实验数据介绍官方SDK的代码。
算法导论总结(一)之排序C++
博主之前刷过一遍《算法导论》(Introduction to Algorithms),但是看得多写得少,于是最近抽空动手写写下里面的算法。排序是经典问题了,于是决定将书中的排序算法一一使用C++实现。这篇博客一方面是对排序算法本身的总结(这个书上都有啦),另一方面是博主在使用C++实现算法时的一些体会,更多的是算法细节,希望有助于加深对算法的理解的。
Sublime中设置Protobuf语法支持
Sublime是一款优秀的编辑器,强大的拓展使得数十种语法的高亮提示和自动补全成为可能。Protobuf谷歌的数据交换格式,独立于语言,非常易用。在Sublime中可以通过扩展插件的方式设置Proto文件的语法高亮,这对于常常使用Protobuf的开发者有很大帮助。