回不去的昨天

    国庆放了八天长假,从二号回去,到六号回广州,在家呆了四天,实际上除去去武汉的一天半,在家可能也就呆了两天多一点,见到多年不见的老同学其实还是挺开心的,可是又有些失落,从本科到现在我们逐渐在成长,同时回忆也成为了我们永远回不去的昨天,可能是因为今天有些感冒,脑袋昏昏沉沉所以没有了平时奋斗的念头,而一旦松懈下来各种负面的情绪就一齐涌上心头,觉得很累,觉得很失望,觉得不知道自己所做的一切有什么意义或价。回家待着的两天,在路上看到有小朋友在开心的疯玩实际上是很羡慕的,就如同小时候的我们羡慕那些大人们一样吧,终于自己也长大了,也经济独立了,也终于彻底离开了家,到千里之外的城市来打拼,可是却并没有小时候所想得那么快乐,记得以前的时候听他们说一天的工资能有一百块,我当时听了心里羡慕不已,一天一百块,那是多么一笔巨款呀,对于当时一天只有一块钱的零花钱的我来说简直是一件遥不可及的巨款。以前总是想着如果有一台自己的电脑可以随时上网打游戏那该是多么幸福的一件事情,等到真的有了一台属于自己的电脑后发现原来每天打游戏也不是那么快乐,反而更加空虚了。
    在小鹏哥的婚礼上看着在那里弹琴的小鹏哥,似乎又回到了我们大一大二的时候,那个时候没有什么别的爱好,每天除了学习就是弹琴,以前的时候没有感觉,可是猛然回头发现原来离我们进大学已经有七年的时间了,记得刚进大学的时候,那个时候还下着雨,爸爸妈妈送我去的学校,学校里面人很多,刚到宿舍有些人已经到了,只能在剩下的空位中随便找一个铺了铺盖,然后跟着爸妈在学校里面晃了一圈。第二天老爸老妈就回去了,接下来的时间都是我一个人在学校渡过了。本科四年硕士三年,在这七年的时间里,而这七年也许是人生中最快的七年了,在这几年中没有生活的压力,也没有什么其他乱七八糟的想法,每天做的都是自己喜欢的事情,所以日子过得特别快。转眼的时间七年就过去了,看到曾经的同学都已经结婚,还是有些难以置信,似乎在自己的印象中昨天他们还坐在北区情人坡的草地上弹琴唱歌,没有想到如今已经已经要踏入人生的新篇章了。
    这几天一直都在奔波,二号晚上回家,三号上午到家里,四号中午就出发去武汉了,然后五号回来,六号晚上来到广州,如此匆忙,很多人问为什么要回家呢,不回家不是也挺好的么,不回家不是能够更加从容和舒适么,可是每当回去看到爸妈期待的眼神又觉得就算奔波也是值得的吧,实际上自己这二十几年来一直在读书,也没有能够为家里做些什么,以后也恐怕不会回家工作,所以恐怕也很难说能够为家里做些什么吧,爸妈上了年纪总是希望能够有人陪着吧,回家的时候妈妈向我抱怨说如果不是因为在广州工作,如果在岳阳或者在长沙工作,现在应该已经买房买车了,可是现实生活没有如果,既然已经选择了在大城市打拼,也就不去想如果的事情了,平时不会有这么多的感慨,只是现在自己身体感到不适所以总是会有更多的负面情绪吧,感到疲惫,感到孤独,感到无所适从,只想着能够躲到一个安全的港湾中好好的休息,过了今天,等到明天感冒好了又能够找回奋斗的状态吧。最后突然想到了李白的一首诗

阅读全文

tensorflow-十九弹

话说在看论文的过程中看到了有很多神经网络的概念,不管什么学科都是建立在前人的基础之上的,所以了解一下现在相对来说比较古老的深度神经网络结构对我们充分理解深度学习,梳理学习过程是很有帮助的,因此这一讲我们着重了解一下各种其他类型的深度学习网络:

1.LeNet

必须要将他列为经典,必学的网络结构之一,我们现在神经网络中很多特点都是由他开始的,主要设计与应用的目的在于对手写数字进行识别,其网络结构如图:

阅读全文

tensorflow-十八弹

又来到了快乐的机器学习时光,在上一讲中我们提到了如何将自定义数据转换成tensorflow输入的格式,这真是一个好消息,这样我们就可以愉快的训练我们自己的数据了,不过……(我就知道事情不会这么简单)不过自己的数据集还没有训练好,而且数据集太大了,八十几个G害怕自己的电脑受不了,不想在笔记本上跑,所以暂且没有使用自定义的数据,不过还是想看看处理效果,好奇害死猫呀,这不就开始倒腾已有的数据,在这里我训练的是pascal的数据,数据包含二十种第五n多图像,具体多少张我也不知道.我们同样是采用下面的步骤进行处理:

阅读全文

青春的旋律

    昨晚看了这部《海涛之声》,不得不说吉普力工作室总是能够给人惊喜,虽然已经看过一遍,但是再看一遍依然会有一种青春的感觉,洋溢这青春的气息。其实《海涛之声》讲述的不过是一个学生时代的小故事,下面的内容会有大量剧透,请谨慎:
    一个从从小娇生惯养的姑娘-武藤里伽子,因为父母离异的关系被迫从繁华的东京搬家到高知县城上高中,正好和男主角一个班,然而从东京来到高知县后虽然在体育和成绩上都非常优秀,但是总是与其他同学格格不入,由于口音的问题武藤总是显得十分孤傲不愿与人交流,由此也导致了很多非议。然而男主的好朋友松本从一开始就喜欢上了武藤,然而命运总是让人难以琢磨,阴差阳错中武藤找男主杜崎拓借钱买了去东京看父亲,而女主的朋友却因为不想欺骗家里不能陪女主去,无奈之下男主杜崎拓陪着女主去了女主父亲家,原本想象中无比美好的父亲的家里却是一地鸡毛,最后不得不和男主在旅馆挤了一晚上,而这期间男主对武藤也更加的了解,当然武藤对男主杜崎拓也有了更多的了解,也许情愫就是在这一刻产生了吧,可是因为松本的缘故,杜崎拓只能百般抗拒,为了朋友与武藤大吵了一架,为了避嫌而刻意的疏远其实很容易就被武藤和松本看穿.其实年少时的我们又何尝不是这样呢,友情与朦胧的爱情,总是很难去取舍,也难以作出断决,而往往我们以为两全其美的方法不过是自欺欺人罢了.后来拓为了怀念自己喜欢的人而上了东京的大学,而来自东京的里加子却令人意外地上了拓的家乡高知县的大学,松本则考到京都。三人就这样分开了。几年后的同学会上,老同学再次相逢,相比与曾经的年少轻狂,各奔东西后的大家都显得豁达了很多,是呀,曾经我们的世界就这么大,所以喜欢与讨厌也分得那么清楚,随着我们世界的慢慢变大,即使曾经不是那么喜欢的人如今看来也是那么的亲切,曾经耿耿于怀的事情也变得豁然开朗起来,重逢的松本对拓说:”我并不是生气知道你也喜欢里加子的事情,我气的是我知道你是在让我!”因为是好朋友,所以相让是耻辱。朋友是对等,所以若是相让就有轻视的感觉……拓似乎释然了.这也许就是最真诚的友情和最纯粹的爱情吧,友情是平等,而爱情也不一定是占有,也许只有青春少年才会有如此纯真的感情吧.当然这时拓才能真正直面自己的内心,原来曾经的那份悸动只是深深埋藏,却从未改变.
    和我们的青春片不同,这部片子仅仅是描述了简单的学生生活,没有轰轰烈烈的逃学逃课,早恋堕胎,然后各种生离死别歇斯底里,可是生活不就是这样么,学生时代的我们,青春年少的我们,所谓爱情不过是那么朦胧的悸动,在平静生活中的点点涟漪罢了,也许就是在伴随着我们入梦的海涛声中的点点星光,我们的青春变得更加美好.真实的生活总是能够打动人,快乐也罢,悲伤也罢,电影总是喜欢将少数的例子拍给我们看,可是我们无数的普通的经历过的不过是简单的生活,虽然有遗憾,却仍然那么美好,那么怀念不是么?毕竟那些就是我们的青春,我们也曾经如此真诚,如此傻傻的……

阅读全文

tensorflow-十七弹

终于到了十七弹,虽然理论基础还没有介绍完,但是我们还是赶快进行进一步的学习,这一次我们主要来说一个很有用的工具,Fast-RCNN,为什么要说这个,因为目标识别要用到它,所以我们不得不在接下来的一段时间中都对这个RCNN进行研究,当然,我们已经了解了神经网络的基础知识,了解了卷积神经网络,也了解到了循环神经网络,卷积神经网络更多的是用于目标的识别,而循环神经网络更多的是用于对序列数据进行处理,而我们现在要做的是在影像上对目标进行检测,当然咯,最简单的办法就是拿一个框在影像上移动,然后框出目标,这样的方法耗时长不说,对于分辨率不一样的目标识别效果也并不好,由此催生了我们的RCNN,在这一讲中我们并不对RCNN的具体算法进行介绍,我们仅仅只讨论这个工具怎么用.  
在tensorflow中很多模型都已经被实现了,所以我们也不需要再重复造轮子,具体参考这里有使用tensorflow实现的各种深度学习算法,以及论文中出现的比较新的算法,通过tensorflow工具,很方便的去调用,我们针对objecct-detection这个功能进行深入的研究,首先不研究算法,我们先看看他的数据转换的过程:

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import hashlib
import io
import logging
import os

from lxml import etree
import PIL.Image
import tensorflow as tf

from object_detection.utils import dataset_util
from object_detection.utils import label_map_util


flags = tf.app.flags
flags.DEFINE_string('data_dir', '', 'Root directory to raw PASCAL VOC dataset.')
flags.DEFINE_string('set', 'train', 'Convert training set, validation set or '
'merged set.')
flags.DEFINE_string('annotations_dir', 'Annotations',
'(Relative) path to annotations directory.')
flags.DEFINE_string('year', 'VOC2007', 'Desired challenge year.')
flags.DEFINE_string('output_path', '', 'Path to output TFRecord')
flags.DEFINE_string('label_map_path', 'data/pascal_label_map.pbtxt',
'Path to label map proto')
flags.DEFINE_boolean('ignore_difficult_instances', False, 'Whether to ignore '
'difficult instances')
FLAGS = flags.FLAGS

SETS = ['train', 'val', 'trainval', 'test']
YEARS = ['VOC2007', 'VOC2012', 'merged']


def dict_to_tf_example(data,
dataset_directory,
label_map_dict,
ignore_difficult_instances=False,
image_subdirectory='JPEGImages'):
img_path = os.path.join(data['folder'], image_subdirectory, data['filename'])
full_path = os.path.join(dataset_directory, img_path)
with tf.gfile.GFile(full_path, 'rb') as fid:
encoded_jpg = fid.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = PIL.Image.open(encoded_jpg_io)
if image.format != 'JPEG':
raise ValueError('Image format not JPEG')
key = hashlib.sha256(encoded_jpg).hexdigest()

width = int(data['size']['width'])
height = int(data['size']['height'])

xmin = []
ymin = []
xmax = []
ymax = []
classes = []
classes_text = []
truncated = []
poses = []
difficult_obj = []
for obj in data['object']:
difficult = bool(int(obj['difficult']))
if ignore_difficult_instances and difficult:
continue

difficult_obj.append(int(difficult))

xmin.append(float(obj['bndbox']['xmin']) / width)
ymin.append(float(obj['bndbox']['ymin']) / height)
xmax.append(float(obj['bndbox']['xmax']) / width)
ymax.append(float(obj['bndbox']['ymax']) / height)
classes_text.append(obj['name'].encode('utf8'))
classes.append(label_map_dict[obj['name']])
truncated.append(int(obj['truncated']))
poses.append(obj['pose'].encode('utf8'))

example = tf.train.Example(features=tf.train.Features(feature={
'image/height': dataset_util.int64_feature(height),
'image/width': dataset_util.int64_feature(width),
'image/filename': dataset_util.bytes_feature(
data['filename'].encode('utf8')),
'image/source_id': dataset_util.bytes_feature(
data['filename'].encode('utf8')),
'image/key/sha256': dataset_util.bytes_feature(key.encode('utf8')),
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
'image/format': dataset_util.bytes_feature('jpeg'.encode('utf8')),
'image/object/bbox/xmin': dataset_util.float_list_feature(xmin),
'image/object/bbox/xmax': dataset_util.float_list_feature(xmax),
'image/object/bbox/ymin': dataset_util.float_list_feature(ymin),
'image/object/bbox/ymax': dataset_util.float_list_feature(ymax),
'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
'image/object/class/label': dataset_util.int64_list_feature(classes),
'image/object/difficult': dataset_util.int64_list_feature(difficult_obj),
'image/object/truncated': dataset_util.int64_list_feature(truncated),
'image/object/view': dataset_util.bytes_list_feature(poses),
}))
return example


def main(_):
if FLAGS.set not in SETS:
raise ValueError('set must be in : {}'.format(SETS))
if FLAGS.year not in YEARS:
raise ValueError('year must be in : {}'.format(YEARS))

data_dir = FLAGS.data_dir
years = ['VOC2007', 'VOC2012']
if FLAGS.year != 'merged':
years = [FLAGS.year]

writer = tf.python_io.TFRecordWriter(FLAGS.output_path)

label_map_dict = label_map_util.get_label_map_dict(FLAGS.label_map_path)

for year in years:
logging.info('Reading from PASCAL %s dataset.', year)
examples_path = os.path.join(data_dir, year, 'ImageSets', 'Main',
'aeroplane_' + FLAGS.set + '.txt')
annotations_dir = os.path.join(data_dir, year, FLAGS.annotations_dir)
examples_list = dataset_util.read_examples_list(examples_path)
for idx, example in enumerate(examples_list):
if idx % 100 == 0:
logging.info('On image %d of %d', idx, len(examples_list))
path = os.path.join(annotations_dir, example + '.xml')
with tf.gfile.GFile(path, 'r') as fid:
xml_str = fid.read()
xml = etree.fromstring(xml_str)
data = dataset_util.recursive_parse_xml_to_dict(xml)['annotation']

tf_example = dict_to_tf_example(data, FLAGS.data_dir, label_map_dict,
FLAGS.ignore_difficult_instances)
writer.write(tf_example.SerializeToString())

writer.close()


if __name__ == '__main__':
tf.app.run()

阅读全文

EM算法

记得曾经写过一篇关于EM算法的博客,在新浪博客上,不知道是因为是没有仔细学习还是别的什么原因,突然发现自己又不太理解这个算法了,所以在这里又详细进行了一番思考和记录。

准备知识

1.贝叶斯公式:

相信学过统计的同学们对这个公式都不会陌生,贝叶斯公式是表示在确定事件A发生的条件下事件B发生的概率,因而我们将此概率称为最大后验概率,公式表示为:
$$P(A|B)=\frac{P(B|A)P(A)}{P(B)}\propto L(A|B)P(A)\quad(1)$$
其中$P(A)$为事件A出现的先验概率,$P(A|B)$为在B发生的条件下A发生的概率。

阅读全文

tensorflow-十六弹

时隔这么久,又回到了深度学习,其实这一段时间一直有在学习,不过都不系统,想要根据自己的数据训练出一个学习库针对需要的应用进行学习,但是实际上数据获取了,但是数据格式的转换把我难住了,如何进行数据格式的转换,使得转换后的数据格式满足tensorflow/Models的输入需要是要面临的巨大问题,另外数据的标注也是一个不得不面对的问题,由于需要的数据量比较大,则对数据进行标注也是一个很耗费时间的工作,所以就先放一放了,计划是采用Fast-RCNN进行目标的检测,实际上结合了RNN和CNN的深度网络能够 比较高校和准确的在影像上识别出目标,而且需要的训练样本相对较少,在应用中具有很大的优势,但是这次我们从基础开始,讲一讲传说中的RNN。
经过以上一段时间的学习相信大家对CNN都有所了解,主要分为:
$$[输入]\to[卷积,池化,映射]^n \to [全连接]^n\to[输出]$$
简单的来说包含输入层,中间的卷积层池化层,全连接层以及输出层这几个部分,其中卷积池化层可以多次进行,全连接层实际上也是一个神经网络,由此构建了一个深度CNN网络,在CNN中有一个重要的概念就是权值共享,通过权值共享缩小了参数规模,使得学习规模变小,从而使得深度学习成为可能。
这一次我们所提的RNN(循环神经网络)和CNN在理念上存在着一些相似性,具体的东西在下面会交代,实际上RNN主要用于解决输入数据存在着序列相关的问题,在CNN的过程中每次输入都是独立的,因此每一层只与其上一层和下一层有关而在RNN中每一层不仅与上一层和下一层有关,另外还与本层的上一次输入有关,由此使得RNN能够对序列数据进行处理,使得RNN在NLP上具有重要的应用。
RNN模型图:
RNN模型
通过以上模型可以看出整个RNN的运行过程,左侧为pack的模型,右侧为unpack的模型,上图的模型中$x_i$为输入数据$A$为隐含层的网络单元结构,$h_i$为输出数据,我们看到每一个隐含层的网络单元结构不仅要与输入和输出相连还要与它本身相连,由此构成了一个循环神经网络。
实际上在应用过程中,简单的RNN由于其结构比较简单,在进行循环的过程中通过上一次的输入调整$A$然而实际上在网络深度较大的情况下,早期的数据已经无法对$A$产生影响,或者说影响已经被抹去了,因此传统简单的RNN神经元只有短时记忆而不具备长期记忆功能,对于深度较大的应用来说有着明显的缺陷,因此需要对神经元的结构进行调整,由此产生了LSTM结构:
简单神经元与LSTM对比
从以上对比可以看出LSTM在神经元的循环过程中有着更复杂的结构,另外由于LSTM能够克服传统RNN无法处理的短时记忆的问题,因此在网络中同时包含了短期记忆和长期记忆的两种情况,下面我们仔细谈谈LSTM的神经元结构:
LSTM步骤详细分析
OK,这样的话我们先分析上面四幅图中的图a,图a指示的是从上次和输入获取的信息中无用的部分,就是需要放弃的部分,计算方法为:
$$f_t=\sigma(W_f\cdot[h_m,x_t]+b_f)(1)$$
在记忆过程中并不是所有的信息都是有意义的,放弃那些没有意义的输入对于进行长期的记忆具有重要的作用,图b表示获取需要存储的信息,这一里包含了两个部分:

阅读全文

公式反推

正常情况下通过前方交会求解公式为:
$$x=PX(1)$$
其中矩阵$P$包含内参矩阵,旋转和平移矩阵,即$P=K[R|t]$,在此情况下进行求解,则必须将像点坐标 $x$和空间点坐标$X$转换为齐次式,求解过程为:
根据公式$x=PX$,则有 $[x \times P]X=0$ 求解以上齐次线性方程组,通过SVD分解进行分解,在有两个同名点的情况下得到$V$矩阵为求解结果。
然而对于几何校正的应用来说,需要根据矩阵$P$计算地面点的坐标,然而$x=PX$中有三个未知数但是只有两个方程组,是一个欠定问题,无法进行求解,实际上在真实求解过程中一般都是假设地面的高程已知,在高程已知的情况下需要求解的参数就只有2个,能够通过以上方程进行求解了,在此探讨整个求解过程,虽然求解过程比较简单,但是在计算机视觉中似乎没有人提到应该如何进行求解。
我们将式(1)展开,则有:
$$
\begin{bmatrix}
x\\
y\\
1\
\end{bmatrix}=
\begin{bmatrix} a_1 &a_2&a_3&a_4\\ b_1 &b_2&b_3&b_4\\ c_1 &c_2&c_3&c_4 \end{bmatrix}\cdot
\begin{bmatrix} X\\ Y\\ Z\\ 1 \end{bmatrix}
(2)
$$
根据式(2)可知三个线性方程组,现在目标在于在已知$Z$的情况下求解$X$和$Y$,因此我们可以将(2)式乘开,有:
$$
x=a_1X+a_2Y+a_3Z+a_4(3)\\
y=b_1X+b_2Y+b_3Z+b_4(4)\\
1=c_1X+c_2Y+c_3Z+c_4(5)\\
$$
实际上对于式(3)-(5)有用的能够用来计算的式子只有(3)(4),下面我们重点考虑(3)(4)式,在计算过程中由于矩阵$P$是已知的,因此$a_i,b_i,c_i$都是
已知值,$Z$也是已知的,则式(3)(4)可以转换为:
$$
x-a_3Za_4=a_1X+a_2Y(6)\\
y-b_3Z-b_4=b_1X+b_2Y(7)\\
$$
将上式写成矩阵的形式则有:
$$
\begin{bmatrix}\hat{x}\\ \hat{y}\end{bmatrix}=
\begin{bmatrix}a_1&a_2\\ b_1&b_2\end{bmatrix}\cdot
\begin{bmatrix}X\\ Y\end{bmatrix}(8)
$$
则直接对上式进行求解可以得到$X,Y$,以上都是在理想情况下的数学推到结果,得到的结论也是显而易见的,为了验证结论的正确性需要在程序中同时通过正解和反解的方式进行验证,经过思考发现实际上计算结果与式(3)-(5)有差异,实际上在计算过程中齐次坐标可能并不是1,因此将式(3)-(5)修改为:
$$
kx=a_1X+a_2Y+a_3Z+a_4(9)\\
ky=b_1X+b_2Y+b_3Z+b_4(10)\\
k=c_1X+c_2Y+c_3Z+c_4(11)
$$
其中$k$为比例系数,则采用x=(9)/(11),y=(10)/(11),在已知$P,Z$的情况下上式转换为:
$$
x=\frac{a_1X+a_2Y+a_3Z+a_4}{c_1X+c_2Y+c_3Z+c_4}(12)\\
y=\frac{b_1X+b_2Y+b_3Z+b_4}{c_1X+c_2Y+c_3Z+c_4}(13)\\
$$
由式(12)(13)解算得到X,Y,最后求解结果用矩阵表示为:
$$
\begin{bmatrix}\hat{a_1}& \hat{a_2} \\ \hat{b_1}&\hat{b_2}\end{bmatrix}\cdot
\begin{bmatrix}X\\ Y\end{bmatrix}=
\begin{bmatrix}T1\\ T2\end{bmatrix}(14)
$$
求解式(14)可得$X,Y$

阅读全文

婚礼月

    今天周一,工作这么久没有一天像今天这样不想工作,总觉得应该做点别的东西让自己舒坦一下,可是也不是一件容易的事情,不过好在国企好像压力也不是那么大,总是还留着一点时间可以打打野,可以想想自己的事情,但是话又说回来了,我现在有什么好想得呢,是不是太矫情了一点。不过好像一直很矫情在这里也就不要再吐槽我了,至少我还是有些自知之明的…..不过看到QQ空间和朋友圈的状态还是有些感叹。
    原来大家都已经到了应该和可以结婚的年龄了,谁说不是呢,十年前的时候我们进高中,觉得大学是距离我们多么遥远的事情,大学是多么幸福高中时多么痛苦,不过有些事情也是只有经历过了才知道,其中的种种都是难以言说的。不过随着时间的推移,什么事情都在慢慢变化,或是变得厚重或是变得轻松,有在意的变得不在意,有不在意的变得在意,有更加深厚的友谊,有渐渐少去的问候。有朋友在大城市的CBD奋斗,也有朋友过上了陪孩子的美好,总之我们都在变化,都在面临成长和选择,没有人能够拒绝时间,所以只能咬着牙接受了。毕业工作了几个月,不知道自己会面临怎么样的选择,也不知道自己会做出怎么样的选择,只是想着,如果年轻的时候不努力一把,也许真的无法坦然面对以后碌碌无为的自己,好了说了这么多不过就是心理矛盾罢了,大概都是大家晒婚礼的照片晒的吧。
    九月十月难道是传中的结婚月,很多的同学朋友选择在这两个月结婚,或许是十一长假的缘故吧,大家都选在这个时候,其实也挺好的至少能借着这个机会聚聚吧,毕竟总是聚少离多,朋友们婚礼都送上最诚挚的祝福,希望他们在面对生活的琐碎的时候都能够安静坦然,不知道生活应该怎么样才会快乐,不过我想如果被琐碎的事情麻烦而变得无法沟通应该是不会快乐的吧,我倒是很相信我的小伙伴们,他们都是有着生活智慧的人,相信他们了解自己做出的选择,也相信他们能够简直自己的选择获得幸福。
    平时也不是这样,可能是这个周末没有休息好,而今天也有些累了,这样的身体上的疲劳会让自己的精神变得松懈然后失去奋斗的动力吧,不过让我真正的休息的时候又会有一种无所适从的紧迫感,总是感觉一天不学习不奋斗就会滑入堕落的深渊,就会被别人甩在身后。也不知道这样的焦虑是从何而来,可是他就是在这里,在我的脑海里,像恶魔一样折磨着我,在我放松的时候,在我休息的时候,总是有一个声音告诉我应该努力,这么去玩耍浪费光阴永远都只能是一个loser,这个念头让我很紧张,让我变得只想逃避,想躲到一个无人的孤岛过每天只为口腹奋斗,然后等待着明天的到来,这样多好是不是,感觉这样的焦虑时间长了会变成精神分裂的。
    有时候很希望有一个人跟我说,其实你不用这么奋斗,你其实已经超过大家的期望了,你就这样就好,可是并没有,大家总是在说你可以做得更好,你应该做得更好,如果你…那么你肯定能够做得更好,这样我觉得这不是鼓励,这已经变成了煎熬了,为什么就没有人跟我说其实我待在老家挣个差不多的工资,开开心心的就好呢!所以我只能选择更大的城市,选择更大的平台,在这里不停的奋斗,生怕一旦有了松懈的念头就会灰溜溜的回去,让所有人失望,让所有人觉得其实我已经无法做的更好了,其实已经超过我的能力了,我可以么?所以只能羡慕别人的悠闲生活然后回过头来自己继续吧。

阅读全文

无人机影像处理代码效果展示

光束法平差结果展示:


Dataset info:
#views: 10
#poses: 10
#intrinsics: 10
#tracks: 2920
#residuals: 11216

IdViewBasename#ObservationsResiduals minResiduals medianResiduals meanResiduals max
0DSC016816000.000836020.4074720.5786363.7219
1DSC016829198.32022e-050.4586030.6158743.6788
2DSC0168310880.0001154590.4172270.5695783.73954
3DSC0168412870.0002085810.4208970.5974633.63912
4DSC0168514250.0002830190.4299670.6062054.13164
5DSC0168615210.000385970.4353940.5975273.88993
6DSC0168715215.28791e-060.4202680.5893893.96556
7DSC0168813090.0004983310.4332240.6097284.3141
8DSC0168911033.36415e-050.4375970.6077243.97541
9DSC016904430.0005541430.4103590.5746523.97483


Residuals histogram

阅读全文