Skip to content

Commit

Permalink
LR
Browse files Browse the repository at this point in the history
  • Loading branch information
EwenWan2017 committed Oct 31, 2017
1 parent 6ce6faf commit 529b790
Show file tree
Hide file tree
Showing 19 changed files with 1,605 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,7 @@ xilaili
https://github.com/xilaili/maskrcnn.mxnet

TuSimple
GitHub: https://github.com/TuSimple/mx-maskrcnn
https://github.com/TuSimple/mx-maskrcnn


本文主要将 Faster R-CNN 拓展到图像分割上,提出了 Mask R-CNN 简单快捷的解决 Instance segmentation,
Expand Down Expand Up @@ -569,5 +569,32 @@ FPN会从不同等级的特征金字塔中提取ROI特征,实验也表明,
“head”方面,根据之前的backbone是Resnet还是FPN有两种形式:


https://github.com/TuSimple/mx-maskrcnn
代码运行记录:
软件依赖
Ubuntu 16.04, Python 2.7
numpy(1.12.1), cv2(2.4.9), PIL(4.3), matplotlib(2.1.0), cython(0.26.1), easydict



1 下载数据集:
城市地形数据集 Cityscapes data,
官方下载 https://www.cityscapes-dataset.com/
(gtFine_trainvaltest.zip, leftImg8bit_trainvaltest.zip)
下载后解压到data/cityscape/

├── leftImg8bit/
│ ├── train/
│ ├── val/
│ └── test/
├── gtFine/
│ ├── train/
│ ├── val/
│ └── test/
└── imglists/
├── train.lst
├── val.lst
└── test.lst


2 下载预训练的模型 Resnet-50 参差网络
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,7 @@ xilaili
https://github.com/xilaili/maskrcnn.mxnet

TuSimple
GitHub: https://github.com/TuSimple/mx-maskrcnn
https://github.com/TuSimple/mx-maskrcnn


本文主要将 Faster R-CNN 拓展到图像分割上,提出了 Mask R-CNN 简单快捷的解决 Instance segmentation,
Expand Down Expand Up @@ -556,7 +556,45 @@ RoIAlign: 是对RoI Pooling的改进。RoI Pooling在 Pooling时可能会有misa



作者将网络分成两个部分:
1 用于提取特征的“backbone”,
2 和用于classification、regression、mask prediction的“head”。

“backbone”方面,作者用了两种不同深度的残差网络:
50层的ResNet和101层的ResNeXt。
这几个残差可以分成4段,特征将在最后的卷积层C4提取出来。
另外,作者还使用了Feature Pyramid Network(FPN)。
FPN会从不同等级的特征金字塔中提取ROI特征,实验也表明,在backbone中用FPN效果更好。

“head”方面,根据之前的backbone是Resnet还是FPN有两种形式:


https://github.com/TuSimple/mx-maskrcnn
代码运行记录:
软件依赖
Ubuntu 16.04, Python 2.7
numpy(1.12.1), cv2(2.4.9), PIL(4.3), matplotlib(2.1.0), cython(0.26.1), easydict



1 下载数据集:
城市地形数据集 Cityscapes data,
官方下载 https://www.cityscapes-dataset.com/
(gtFine_trainvaltest.zip, leftImg8bit_trainvaltest.zip)
下载后解压到data/cityscape/

├── leftImg8bit/
│ ├── train/
│ ├── val/
│ └── test/
├── gtFine/
│ ├── train/
│ ├── val/
│ └── test/
└── imglists/
├── train.lst
├── val.lst
└── test.lst


2 下载预训练的模型 Resnet-50
2 changes: 1 addition & 1 deletion MXnet/mxnet
Submodule mxnet updated from 87068e to 3bec7f
3 changes: 3 additions & 0 deletions MXnet/self_lear_mxnet/1_logistic_regression_FashionMNIST1.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ def transform(data, label):
#下载数据
mnist_train = gluon.data.vision.FashionMNIST(train=True, transform=transform)
mnist_test = gluon.data.vision.FashionMNIST(train=False, transform=transform)
#mnist_train = gluon.data.vision.MNIST(train=True, transform=transform)
#mnist_test = gluon.data.vision.MNIST(train=False, transform=transform)
# 打印一个样本的形状和它的标号
data, label = mnist_train[0]#('example shape: ', (28, 28, 1), 'label:', 2.0)
print data.shape, label
Expand All @@ -44,6 +46,7 @@ def get_text_labels(label):
show_images(data)#图像
print(get_text_labels(label))##标号
## 准备 训练和测试数据集
# 这个DataLoader是一个iterator对象类(每次只载入一个banch的数据进入内存),非常适合处理规模较大的数据集
batch_size = 256#每次训练 输入的图片数量
train_data = gluon.data.DataLoader(mnist_train, batch_size, shuffle=True)#按照 batch_size 分割成 每次训练时的数据
test_data = gluon.data.DataLoader(mnist_test, batch_size, shuffle=False) #测试数据
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
#############################################
### Softmax和交叉熵损失函数
# softmax 回归实现 exp(Xi)/(sum(exp(Xi))) 归一化概率 使得 10类概率之和为1
# 交叉熵损失函数
# 交叉熵损失函数 将两个概率分布的负交叉熵作为目标值,最小化这个值等价于最大化这两个概率的相似度
# 我们需要定义一个针对预测为概率值的损失函数
# 它将两个概率分布的负交叉熵作为目标值,最小化这个值等价于最大化这两个概率的相似度
# 就是 使得 预测的 1*10的概率分布 尽可能 和 标签 1*10的概率分布相等 减小两个概率分布间 的混乱度(熵)
Expand All @@ -58,7 +58,7 @@
#############################################
### 训练 #######################
#learning_rate = .1#学习率
epochs = 7##训练迭代 次数
epochs = 7##训练迭代 次数 训练整个训练即的次数
for epoch in range(epochs):
train_loss = 0.# 损失
train_acc = 0. #准确度
Expand Down
79 changes: 79 additions & 0 deletions MXnet/self_lear_mxnet/2_Multilayer_Percepton_FashionMNIST1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 多层感知机
# 多层感知机与前面介绍的多类逻辑回归非常类似,
# 主要的区别是我们在输入层和输出层之间插入了一到多个隐含层。
# 服饰 FashionMNIST 识别
from mxnet import ndarray as nd
from mxnet import autograd
import random
from mxnet import gluon

import matplotlib.pyplot as plt#画图

import sys
sys.path.append('..')
import utils #包含了自己定义的一些通用函数 如下载 载入数据集等
##########################################################
#### 准备输入数据 ###
#一个稍微复杂点的数据集,它跟MNIST非常像,但是内容不再是分类数字,而是服饰
## 准备 训练和测试数据集
batch_size = 256#每次训练 输入的图片数量
train_data, test_data = utils.load_data_fashion_mnist(batch_size)


###########################################################
### 定义模型 ##################
#@@@@初始化模型参数 权重和偏置@@@@
num_inputs = 28*28##输入为图像尺寸 28*28
num_outputs = 10#输出10个标签

num_hidden = 256#定义一个只有一个隐含层的模型,这个隐含层输出256个节点
weight_scale = .01#初始化权重参数的 均匀分布均值
#输入到隐含层 权重 + 偏置
W1 = nd.random_normal(shape=(num_inputs, num_hidden), scale=weight_scale)
b1 = nd.zeros(num_hidden)
#隐含层到输出层 权重 + 偏置
W2 = nd.random_normal(shape=(num_hidden, num_outputs), scale=weight_scale)
b2 = nd.zeros(num_outputs)
params = [W1, b1, W2, b2]#所有参数
for param in params:#参数添加自动求导
param.attach_grad()

##非线性激活函数
#为了让我们的模型可以拟合非线性函数,我们需要在层之间插入非线性的激活函数。
def relu(X):
return nd.maximum(X, 0)
### 定义模型
def net(X):
X = X.reshape((-1, num_inputs))
h1 = relu(nd.dot(X, W1) + b1)# 隐含层输出 非线性激活
output = nd.dot(h1, W2) + b2
return output

##Softmax和交叉熵损失函数
## softmax 回归实现 exp(Xi)/(sum(exp(Xi))) 归一化概率 使得 10类概率之和为1
#交叉熵损失函数
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()

## 开始训练
learning_rate = .5#学习率
epochs = 7 ##训练迭代训练集 次数
for epoch in range(epochs):##每迭代一次训练集
train_loss = 0.##损失
train_acc = 0. ##准确度
for data, label in train_data:#训练集
with autograd.record():#自动微分
output = net(data)#模型输出 向前传播
loss = softmax_cross_entropy(output, label)#计算损失
loss.backward()#向后传播
utils.SGD(params, learning_rate/batch_size)#随机梯度下降 训练更新参数 学习率递减

train_loss += nd.mean(loss).asscalar()#损失
train_acc += utils.accuracy(output, label)#准确度

test_acc = utils.evaluate_accuracy(test_data, net)#测试集测试
print("E次数 %d. 损失: %f, 训练准确度 %f, 测试准确度%f" % (
epoch, train_loss/len(train_data),
train_acc/len(train_data), test_acc))

50 changes: 50 additions & 0 deletions MXnet/self_lear_mxnet/2_Multilayer_Percepton_FashionMNIST2_glon.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 多层感知机 使用glon库
# 多层感知机与前面介绍的多类逻辑回归非常类似,
# 主要的区别是我们在输入层和输出层之间插入了一到多个隐含层。
# 服饰 FashionMNIST 识别

from mxnet import gluon
## 定义模型
net = gluon.nn.Sequential()#空模型
with net.name_scope():
net.add(gluon.nn.Flatten())##数据变形
net.add(gluon.nn.Dense(256, activation="relu"))##中间隐含层 非线性激活
net.add(gluon.nn.Dense(10))#输出层
net.initialize()#模型初始化

##读取数据并训练
import sys
sys.path.append('..')
from mxnet import ndarray as nd
from mxnet import autograd
import utils#包含了自己定义的一些通用函数 如下载 载入数据集等

batch_size = 256#每次训练导入的图片数量
train_data, test_data = utils.load_data_fashion_mnist(batch_size)#载入数据
##Softmax和交叉熵损失函数
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()##损失函数
## 优化训练函数 随机梯度下降
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.5})
## 开始训练
#learning_rate = .5#学习率
epochs = 7 ##训练迭代训练集 次数
for epoch in range(epochs):
train_loss = 0.##损失
train_acc = 0. ##准确度
for data, label in train_data:#训练集
with autograd.record():#自动微分
output = net(data)#模型输出 向前传播
loss = softmax_cross_entropy(output, label)#计算损失
loss.backward()#向后传播
trainer.step(batch_size)#随机梯度下降 训练更新参数 学习率递减

train_loss += nd.mean(loss).asscalar()#损失
train_acc += utils.accuracy(output, label)#准确度

test_acc = utils.evaluate_accuracy(test_data, net)#测试集测试
print("E次数 %d. 损失: %f, 训练准确度 %f, 测试准确度%f" % (
epoch, train_loss/len(train_data),
train_acc/len(train_data), test_acc))

82 changes: 82 additions & 0 deletions MXnet/self_lear_mxnet/2_Multilayer_Percepton_MNIST3_use_gluon.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 多类别逻辑回归 gluon 实现
# 手写字体MNIST 多层感知器Multilayer Percepton (MLP)识别
# 多层神经网络

import mxnet as mx
from mxnet import gluon, autograd, ndarray
import numpy as np

import sys
sys.path.append('..')
import utils #包含了自己定义的一些通用函数 如下载 载入数据集等

##########################################################
#### 准备输入数据 ###
#我们通过gluon的data.vision模块自动下载这个数据
batch_size = 256#每次训练 输入的图片数量
train_data, test_data = utils.load_data_mnist(batch_size)
'''
def transform(data, label):
return data.astype('float32')/255, label.astype('float32')
#下载数据
#mnist_train = gluon.data.vision.FashionMNIST(train=True, transform=transform)
#mnist_test = gluon.data.vision.FashionMNIST(train=False, transform=transform)
mnist_train = gluon.data.vision.MNIST(train=True, transform=transform)
mnist_test = gluon.data.vision.MNIST(train=False, transform=transform)
# 使用gluon.data.DataLoader载入训练数据和测试数据。
# 这个DataLoader是一个iterator对象类,非常适合处理规模较大的数据集。
train_data = gluon.data.DataLoader(mnist_train, batch_size=32, shuffle=True)
test_data = gluon.data.DataLoader(train_data, batch_size=32, shuffle=False)
'''

###########################################
####定义模型
# 先把模型做个初始化
net = gluon.nn.Sequential()
# 然后定义模型架构
with net.name_scope(): ##线性模型就是使用对应的Dense层
net.add(gluon.nn.Dense(128, activation="relu")) # 第一层设置128个节点
net.add(gluon.nn.Dense(64, activation="relu")) # 第二层设置64个节点
net.add(gluon.nn.Dense(10)) # 输出层



#############################################
##### 设置参数
# 先随机设置模型参数
# 数值从一个标准差为0.05正态分布曲线里面取
net.collect_params().initialize(mx.init.Normal(sigma=0.05))


#### 使用softmax cross entropy loss算法
# Softmax和交叉熵损失函数
# softmax 回归实现 exp(Xi)/(sum(exp(Xi))) 归一化概率 使得 10类概率之和为1
# 交叉熵损失函数 将两个概率分布的负交叉熵作为目标值,最小化这个值等价于最大化这两个概率的相似度
# 计算模型的预测能力
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()

### 优化模型
# 使用随机梯度下降算法(sgd)进行训练
# 并且将学习率的超参数设置为 .1
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': .1})

epochs = 10 ##训练
for e in range(epochs):#每一次训练整个训练集
train_loss = 0.# 损失
train_acc = 0. #准确度
for i, (data, label) in enumerate(train_data): ##训练集里的 每一批次样本和标签
data = data.as_in_context(mx.cpu()).reshape((-1, 784)) ## 28*28 转成 1*784
label = label.as_in_context(mx.cpu())
with autograd.record(): # 自动求微分
output = net(data) # 模型输出 向前传播
loss = softmax_cross_entropy(output, label)## 计算误差
loss.backward() # 向后传播
trainer.step(data.shape[0]) # 优化模型参数 data.shape[0] = batch_size
# Provide stats on the improvement of the model over each epoch
train_loss += ndarray.mean(loss).asscalar() ## 当前的误差损失 均值
train_acc += utils.accuracy(output, label) #准确度
test_acc = utils.evaluate_accuracy(test_data, net)#验证数据集的准确度
print("遍历训练集次数 {}. 训练误差: {}. 训练准确度: {}. 测试准确度: {}.".format(
e, train_loss/len(train_data),train_acc/len(train_data), test_acc))
Loading

0 comments on commit 529b790

Please sign in to comment.