1,安装python3.5.2
https://www.python.org/downloads/
貌似是因为tensorflow只兼容windows python3.5.x版本
2,更新pip
python -m pip install --upgrade pip
3,安装tensorflowCPU版本
pip3 install --upgrade tensorflow
4,安装各种有关于Faster-RCNN的python包
pip install pandas
pip install matplotlib
pip install keras - 2.0.3
pip install numpy
pip install opencv-python
pip install sklearn
pip install h5py
等等
5,pycharm安装Git
6,有关tensorflow
使用图(graph)来表示计算任务,在被称之为会话(session)的上下文(context)中执行图,使用tensor表示数据,通过变量(variable)维护状态,使用feed和fetch可以为任意的操作(arbitrary operation)赋值或者从其中获取数据。
tensorflow是一个编程系统,使用图来表示计算任务,图中的节点被称之为op(operation),一个op获得0个或者多个tensor,然后执行计算,产生0个或多个tensor。
一个tensorflow图描述了计算的过程,为了进行计算,图必须在会话里所启动。会话将图的节点分发到CPU或者GPU之类的设备上,同时提供执行op的方法,这些方法执行后,将产生的tensor返回,在python语言中,返回的tensor是numpy ndarray对象。
import tensorflow as tf
# 创建一个op
matrix1 = tf.constant([[3.,3.]])
# 创建另外一个op
matrix2 = tf.constant([[2.],[2.]])
# 创建一个矩阵乘法op,把matrix1和matrix2作为输入
product = tf.matmul(matrix1,matrix2)
# 在一个会话中启动图
sess = tf.Session()
result = sess.run(product)
print(result)
# 关闭会话
sess.close()
交互式使用, 可以使用 InteractiveSession 代替 Session 类, 使用 Tensor.eval() 和 Operation.run() 方法代替 Session.run(). 这样可以避免使用一个变量来持有会话.
#进入一个交互式TensorFlow会话
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0,2.0])
a = tf.constant([3.0,3.0])
# 使用初始化器initializer op的run()方法初始化x
x.initializer.run()
# 增加一个减法op
sub = tf.sub(x,a)
print(sub.eval())
变量
变量维护图执行过程中的状态信息.下面的例子演示了如何使用变量实现一个简单的计数器.代码中 assign() 操作是图所描绘的表达式的一部分,更新变量, 正如 add() 操作一样. 所以在调用 run() 执行表达式之前, 它并不会真正执行赋值操作.
# 创建一个变量, 初始化为标量 0.
state = tf.Variable(0, name="counter")
# 创建一个 op, 其作用是使 state 增加 1
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
# 启动图后, 变量必须先经过`初始化` (init) op 初始化,
# 首先必须增加一个`初始化` op 到图中.
init_op = tf.initialize_all_variables()
# 启动图, 运行 op
with tf.Session() as sess:
# 运行 'init' op
sess.run(init_op)
# 打印 'state' 的初始值
print sess.run(state)
# 运行 op, 更新 'state', 并打印 'state'
for _ in range(3):
sess.run(update)
print sess.run(state)
# 输出:
# 0
# 1
# 2
# 3
Fetch
为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor, 这些 tensor 会帮助你取回结果. 在之前的例子里, 我们只取回了单个节点 state, 但是你也可以取回多个 tensor:需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor).
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)
with tf.Session():
result = sess.run([mul, intermed])
print result
# 输出:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]
CNN
7,关于Faster-RCNN(不看tensorpack版本的)
代码的Github地址:https://github.com/endernewton/tf-faster-rcnn
IOU
体检测需要定位出物体的bounding box,对于bounding box的定位精度,有一个很重要的概念,因为我们算法不可能百分百跟人工标注的数据完全匹配,因此就存在一个定位精度评价公式:IOU。
IOU定义了两个bounding box的重叠度,如下图所示:
矩形框A、B的一个重合度IOU计算公式为:
IOU=(A∩B)/(A∪B)
就是矩形框A、B的重叠面积占A、B并集的面积比例:
IOU=SI/(SA+SB-SI)