程序环境配置

UAV代码环境配置说明:
由于在代码中使用了很多开源的库文件,其中有一些库配置起来还比较麻烦所以我打算做一个环境配置的详细说明,WTK,想想就是一件
很麻烦但是又不得不去做的事情,做开源很多时候都是这样,为了一点小小的成就感,当然如果可能也为了服务大家,就需要忍受无穷无尽
的麻烦,不过其中的快乐也不足为外人道了,好了,废话不多说讲讲各种库文件的配置:

阅读全文

峥嵘岁月

    周六的时候跟科姐,凯迪还有亮仔聚了聚,话说大家至少也有一年没有见面了,跟亮仔那更是有好几年没有见面了,实际上到目前为止大家认识应该有十年了,以前的时候很难想象大家说十年之后的我们会是什么样子,但是转眼也就十年了,十年之间我们好像没有什么变化,只是从当年的那个山沟沟逃到了广州这个大都市,很少面对繁华的CBD有什么特别的感触,不过这一次真的有一种面对命运的感觉尤其是当我们一行人走在天桥上看着四周高耸的大楼,还有来往的车辆和闪烁的霓虹,我开玩笑似的说了一句我们这几个人在这里有一种中国合伙人的即视感。
    谁又说不是呢,几个毕业没有多久的年轻人,什么都没有,只是怀着满腔的热情从那个十八线的小城市来到了广州这个大都市,一边是面对这个繁华都市和追求和向往一边是面的这繁华都市的无奈,很多时候我们并没有得选择,或者说不愿意去选择,科姐说他的男朋友一定要坚持留在上海即使每天上下班都要在地铁上挤得跟沙丁鱼罐头一样,所以他们分手了,当时吐槽了很多,我们也只是默默的听着而已,想想谁都不容易,都是狗日的生活。
    其实还是亮仔说的比较客观,其实我们当属幸运的了,在这样的大城市只是买房压力比较大而已,其实也并不需要为每日的生计发愁。我其实很赞同亮仔的说法,我们还有闲心去感叹生活的艰难,可是有很多人连抬头看看这些高耸建筑的勇气都没有。每一代人都有他们的苦难和难处,我们当然也不例外。工作后跟老同学见面聊天都有意义了很多,不像以前读书时那样只是回忆一些曾经的八卦消息,不过一起聚聚感觉心里瞬间踏实了很多,至少我不是一个人在奋斗,这大概就是我的感觉了,世界是他们的,不过终究是我们的,所有受过的苦难都会变成曾经的峥嵘岁月,每一代人都需要岁月沉淀才会变得厚重然后才会举重若轻吧。

阅读全文

tensorflow-第十弹

今天稍微描述一下模型深度的度量方式,第一种为基于评估构架所需执行的顺序指令的数目。即对应的流程图中的最长路径视为模型的深度。然而不同的定义方法和不同的函数可能导致模型流程图的计算方法的不同能图的深度也存在一定的差异。第二种为在深度概率模型中使用的方法,他不是将计算图的深度视为模型深度,而是将描述概念彼此如何关联的图的深度视为模型的深度。
实际上通过深度图来判断模型是不是深度学习模型,所以对于模型深度的计算也不一定总是能够达成共识,但是与传统的基于浅层学习的方法相比,基于深度学习的方法模型更加复杂,具有更多的组合特征。
实际上机器学习的数学原理主要有两个,一个是线性代数,另一个为概率论,线性代数在这里就不详细介绍,实际上就是一些矩阵,,张量的操作,在以前的学习和分析中也介绍过,下面主要介绍一下概率论在机器学习中的应用。
实际上在程序设计中处理的大部分实体都是确定且必然的,对于确定的输入通常会有一个确定的输出,但是对于机器学习来说处理的问题往往是一些直觉性的问题,这类问题的特点在于需要在不确定的情况下进行计算或推理,具体的来说不确定性有三种来源

阅读全文

tensorflow-第九弹

说过要做读书笔记的,说话要算话,从今天开始一天至少看一节;

神经网络的拓扑结构随着时间的变化也在不断的发生着变化,但是我们可以使用一种统一的范式进行描述,我们可以将神经网络简单的描述为神经一个有限元的集合 $N={u_1,u_2…,}$ 被称为节点或神经元和以及有限元的集合 $H\subseteq N \times N$ 被称为边,相互按照一定的方向连接组成的网络。神经网络的表现由一系列变量决定,这些变量我们称之为权重,由于神经网络是一个复杂的网络,整体分析比较麻烦,另外各个层的网络存在相似性,因此我们目前只分析单个有限元的的一次处理,并不涉及到权重的变化过程。对于 $x_t (t=1,…,T)$ 其中每一个 $x_t$ 表示某一层神经元,我们称之为event,实际上对于任意的一个 $x_t (t=1,…,T)$ 它的值的来源方式存在两种情况,直接由环境输入,或者有前一个event的生成,我们考虑由前一个event生成的情况 $event_k->event_t$ 则 $x_t = f(net_k)$ 而 $net_k$ 为生成网络,而 $f$ 称为响应函数,生成的网络可能有多种情况,如线性网络,或者乘性网络,也可能有更加复杂的多项式网络。响应函数也有多种选择。实际上在神经网络的计算过程中不管是采用哪种网络类型,随着传递的层次的增加,权重参数的数目会以指数的形式增加,由此造成参数过于复杂的情况,在此情况下发展了共享参数的神经网络,权重参数的共享极大的减少了参数的数目,降低的我网络的复杂度。另外对于监督学习的情况,一般来说都是假设判断结果和实际结果的误差最小,由误差最小的原则对神经网络的权重进行调整,由此得到最佳判别的神经网络,另外监督学习的网络认为输入的event与上一次的event是相互独立的。这个假设在序列决策和增强学习中存在着问题,针对此问题发展了增强学习的方法,增强学习的方法假设下一次的evnet能够回推到输入的event,而权重的调整目标在于使得经过计算后的event能够最好的恢复输入数据。

阅读全文

tensorflow-第八弹

好了,本来准备今天写写关于深度学习的东西,不过下午的时候找到了一本关于深度学习的书,介绍整个深度学习的过程发展的历史的,读了几章也没有详细的进行记录,看看做过的关于tensorflow的学习,觉得单纯的实践如果没有理论的指导的话就像依葫芦画瓢,不能对新的问题能够哦灵活的运用,而且单纯的CNN也不是能够解决所有问题的,所以还需要补充一些理论的知识,在理论知识夯实的基础上针对特定的问题进行简化和优化从而能够更好的进行学习,或者能够达到快速或通过较小的样本也能够获取比较好的学习效果的目的,所以接下来的几章应该就是关于这本书的读书笔记了……

阅读全文

无人机处理

    很久没有做关于tensorflow的更新了,主要的原因有两个,第一是这一周,从上周三开始都在参加培训,晚上很多时候都再加班感工,所以没有那么多时间去更新关于机器学习的知识了,而且我们关于机器学习的一些简单的介绍已经差不多结束了,下一阶段主要是更深入的介绍以及实现我们自己的机器学习算法,所以在这里我们就先把tensorflow放一放,差不多到这个周末再开始新的学习,另外一个就是最近把以前做的那个通过openMVG和openMVS进行无人机影像处理的的代码进行了一些重构和整理使得代码的结构更加的清晰,代码的可读性更好,另外将SIFTGPU引入,结合openMVG和openMVS进行特征点的提取和匹配以期能够最大限度的提高处理的效率。
额,说到这里还是要提一提我们无人机影像处理的整个流程和结构了,结构图为:

我们稍微分析一下这个结构图,获取无人机影像数据后我们先不要想那么多,马上进行特征提取和特征匹配,因为后续的所有操作都离不开这两个步骤,这两个步骤也是前期最耗时的步骤,在完成这两个步骤后再进行判断,判断影像是否包含POS数据,如果包含那么就进行全局的调整,如果不包含则通过序列影像调整的方法进行处理,处理后得到稀疏的点云以及整体的各个影像的旋转矩阵,这个时候需要进行光束法平差,实际上图画得有一丢丢的问题,光束法平差包含在序列影像和全局影像求解的过程中,得到稀疏点数据后实际上我们就可以进行简单的影像颜色调整和拼接了,这个时候拼接得到的数据并不是真正射影像,仅仅是经过几何校正后的影像。进一步的处理就需要进行密集匹配,得到密集的点云,在密集点云的基础上进行正射校正得到正正射影像。
原理就简单的介绍一下,下面详细介绍一下编译的环境和其中所遇到的问题,主要问题在于,在linux下我们通过cmake文件进行编译,由于对cmake不熟由此造成走了很多弯路,另外由于宏定义的问题导致进行了多次的修改,由此造成版本比较混乱的问题,另外一个问题就是编译的debug和release版本的问题,在不同版本下运行效率差别特别大,所以这个也让我纠结了很长时间。在git的过程中由于担心siftGPU无法编译成功,因此对于siftGPU重新git了一个分支,下一步就是将这个分支中的siftGPU处理完善,然后将其合并到主分支当中。

阅读全文

tensorflow-第七弹

今天有一个环境没有部署成功心里还是很不开心的,不过想想还是坚持学习以及记录,毕竟坚持了这么久不好突然放弃,上次我们提到了使用tensorflow搭建一个简单的三层CNN网络并用来训练MNIST数据库,如果大家测试过的话可以发现训练精度能够在98%以上,当然咯,具体的精度与参数的设置和迭代次数是有关系的。相信通过上一讲大家对CNN印象很深刻,下面我们将要介绍的是CNN的数学原理,当然咯一涉及到数学的东西就比较多的公式,应该会比较无聊,不过顺着公式再看看我们以前写的代码会发现我们的代码很有意思。

阅读全文

tensorflow-第六弹

好了,经过前很长时间的准备和学习,我们目前应该掌握的技能应该包括

  • 1.tensorflow的工作流程,也就是图的构建的流程
  • 2.tensorflow的可视化工具,tensorboard的使用以及变量的可视化方法,以及如果查看数据流图
  • 3.通过爬虫从网上获取大量数据的方法

阅读全文

tensorflow-第五弹

今天加了个班,回来就差不多只能去写写博客总结一下了,以前老师觉得写博客是浪费时间。不过现在想想好像也还好啦,一直在学习的过程中也需要时常进行一下总结。所谓学而不思则罔嘛,昨天调通了多线程的爬虫代码,今天来总结一下,好了废话不多说我们直接进入主题。
多线程对我们来说已经不用解释了,我们重点要讲的是如何通过python实现多线程以及多线程爬虫的设计,首先总结一下通过python进行多线程的代码的编写,我们首先来看两个demo:(算了,demo删掉了)我们就直接分析python多线程的写法吧,首先需要import threading这个模块,我们需要定义一个类,此类继承自threading类,然后实现run函数,将线程操作放在run函数中,这一点不知道是不是必要的,不过demo都在run函数中,所以也不做它想以后干脆都写在run函数中算了,这样一个线程类就写好了,在python中启动线程也比较简单,直接start就能够启动线程了,python的线程是轻量级的所以创建和启动都比较容易,至于有什么缺点,这个暂时不去研究了。知道了线程的创建方法之后我们下一步去研究一下如何将爬虫代码修改为多线程,我们采用上次的百度图片的爬虫代码进行研究。
我们分析爬虫代码的耗时过程可以发现主要有两个耗时的过程,第一个为解析,从html,百度的json数据中解析出需要的url是一个比较耗时的过程,另外一个是图片的获取和保存是一个耗时的过程,由于有这两个耗时过程,我们可以对这两个过程进行拆分,将其拆分为两个线程并行处理,简单的思路就这样,我们下面对代码进行分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import threading
import Queue as queue
import re
import urllib2
import urllib
import time

urlqueue = queue.Queue()
headers=("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0")
opener = urllib2.build_opener()
opener.addheaders = [headers]

listurl = []

#thread1
class getURLThread(threading.Thread):
def __init__(self,key,pagestart,pageend,proxy,urlqueue):
threading.Thread.__init__(self)
self.pagestart = pagestart
self.pageend = pageend
self.proxy = urlqueue
self.key = key
def run(self):
page = self.pagestart
for page in range(self.pagestart,self.pageend+1):
url='http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=%E8%BE%B9%E7%89%A7&rn=60&pn='+str(60*page)
data1 =opener.open(url).read()
listurlpat = '"objURL":"(.+?)",'
urlpage = re.compile(listurlpat,re.S).findall(data1)
for urli in urlpage:
time.sleep(7)
for urlj in urlpage:
try:
print(urlj)
urlqueue.put(urlj)
urlqueue.task_done()
except urllib2.URLError as e:
if(hasattr(e,"code")):
print(e.code)
if(hasattr(e,"reason")):
print(e.reason)
time.sleep(10)
except Exception as e:
print('exception:'+str(e))
time.sleep(1)

class getContent(threading.Thread):
def __init__(self,urlqueue,proxy):
threading.Thread.__init__(self)
self.urlqueue = urlqueue
self.proxy = proxy
def run(self):
i = 1
while(True):
try:
imagename = 'Baidu_Dog/'+str(i)+'.jpg'
imageurl = urlqueue.get()
urllib.urlretrieve(imageurl,imagename)
print('get image'+url)
i+=1
except urllib2.URLError as e:
if(hasattr(e,"code")):
print(e.code)
if(hasattr(e,"reason")):
print(e.reason)
time.sleep(10)
except Exception as e:
print('exception:'+str(e))
time.sleep(1)

class control(threading.Thread):
def __init__(self,urlqueue):
threading.Thread.__init__(self)
self.urlqueue = urlqueue
def run(self):
while(True):
print('process~ing')
time.sleep(60)
if(self.urlqueue.empty()):
print('finished!')
exit()

key='AI'
proxy = '119.6.136.122:80'
proxy2 = ''
pagestart = 1
pageend=40

t1 = getURLThread(key,pagestart,pageend,proxy,urlqueue)
t1.start()

t2 = getContent(urlqueue,proxy)
t2.start()

t3 = control(urlqueue)
t3.start()

阅读全文

总想写点啥

    到这里工作已经有一段时间了,差不多一个月吧,到目前为止一直在工作,在学习,在生活,总想找一个平衡点去平衡生活工作的各个方面,可是实际上工作跟我想的也不太一样,目前感觉既没有学到想学的也没有享受到轻松,所以总是处于一种很矛盾的状态,我想做的好一点,又想做自己喜欢做的东西,可是目前来说是那么的难。在前面的路上并没有人能够给与我什么指导和帮助,我感到很困惑,其实也渐渐体会到了一种意志被消磨的感觉,可能是跟待在实验室太像了让我觉得有些烦躁了,感觉实际上就是从一个坑跳到了另一个坑,应该说比实验室还不如,在实验室起码有足够的时间能够让我自己去探索,去做自己觉得有意思的事情,去完成一些让自己很有成就感的工作,可是在这里我还没有感觉到很大的成就感,可能也是自己的工作没有做好的缘故吧,虽然说开发的工作也能够学习到很多新的东西,可是总是感觉有那么一些无奈,感觉自己真的就是一个写代码的机器了,领导们只关心能不能做,好像并不需要去对问题进行深入的研究,对于这一点是我最不习惯的地方,在实验室里总是养成了一种更加深入的思考和猜想的习惯而在这里并没有这样的氛围,只不过是一个项目接着一个项目,虽然也谈不上不充实可是总觉得少了一点什么。
    可能是自己比较矫情,在这个时候还满腹牢骚,但是面对着这些问题,在晚上夜深人静的时候就不由自主的会去想,会去疑惑对自己来说重要的究竟是什么,是按部就班的工作还是做一些不一样的事情,心里总是有一些躁动,想去看看不一样的风景,其实不一样的风景也许并不是那么美好。也许安安心心的做好手上的事情才是最好的选择吧。
    其实安排的工作对我来说都算不上难,毕竟一直就在做着这方面的工作,也能够比较高效的完成工作,我想着大概就是我到现在为止还有时间想着这些乱起八糟的事情的原因吧,很羡慕我的同事,不知道他的生活是什么样,也不知道他会不会有跟我一样的思考,如果不去思考,不去为自己的未来做打算,我将会走向哪里呢。又如果只是完成工作上的事情不抓紧时间为未来学习,以后又将会怎样。工作了这么长的时间真的感觉很累,很累,一直在学习,白天的时候发挥最大的能力和工作效率争取把事情给完成了,然后晚上做一些自己觉得有意思的事情,着一段时间来也一直都在这么做,可是这样真的觉得好累好累,不知道自己什么时候会坚持不下去,不过毕竟现在还年轻,总是能够坚持的吧,至于以后谁知道呢……
    本来有很多东西想写,想写写自己对于工作得看法,工作这么长时间的感受,以及在这边生活的感受,以及对未来的计划等等,可是每当面对着屏幕的时候就开始跑题,就开始胡乱的去想,然后就写下了这些杂乱的文字。写着写着还有一些困了,我想自己本是不应该这么累,感觉压力这么大的,可是是什么在催着我呢,其实我也不知道,如果只是完成手上的工作然后好好休息其实也可以很轻松的,可能是习惯了去为未来生活所以很累吧,我想每个人都有那么一些焦虑吧,或者是现在或者是未来,或者沉湎于过去,不过既然已经开始了,那我也不想半途而废了,再坚持坚持,也许再坚持坚持未来就来了呢!

阅读全文