第四十二周学习笔记
论文阅读概述
- RCNN
- 两个insight:proposal+CNN,ImageNet预训练模型+fine-tuning
- 三个模块:proposal,CNN,SVM
- 四个步骤:提出proposal,CNN提取特征,SVM分类,bounding box回归精炼box
- Fast RCNN
- 解决RCNN慢、multi-stage、存储消耗多的问题
- 对整张图片求特征图后,通过proposal和feature map的位置映射来得到proposal 特征,只需一次计算feature map,时间开销小
- 用两个网络同时得到预测类别结果和边框,将multi-stage变为multi-task
- RoI pooling,将不同大小的RoI区域映射到相同维数的特征
- Faster RCNN
- 将proposal的过程也融合到网络中,加快了proposal的速度
- RPN+detector,RPN使用多个Anchor来找到不同scale和sapect的proposal
- RPN和detector共享特征
- Single Image Haze Removal Using Dark Channel Prior
- 暗通道先验去雾算法,原理基于一个统计结果,自然图像的每个小patch中几乎都有一个像素的某个通道的intensity接近0,而雾因为引入了大气光,导致这个值的增加,只要在每个patch中减去这个值即可
- Semi-Supervised Classification with Graph Convolutional Networks
- 提出了图卷积网络,可以以图为输出,逐层进行特征抽象表示
LeNet-5 for CIFAR10
本周偷懒写LeNet-5,但是看了论文发现,LeNet-5本身网络结构设计上与现在通用的一些层结构由很大差别,比如
- 使用Sigmoid激活函数(这个还好)
- 卷积之后的下采样时,逐个特征图地对池化感受野中的元素求和,再进行一次线性变换,然后在进行非线性变换,这与当前的CONV+RELU+POOL的做法顺序有区别,且池化操作也有区别
- 天秀的CONV操作,玄学选择特征图池化
- 径向基输出层
- 卷积kernel size 都是5
值得注意的是,LeNet中的5×5×16到120的过程实际上是卷积操作,而非全连接操作
所以我放弃写原生的LeNet-5,采用现在的网络设计方式来写LeNet-5
class NewLeNet(nn.Module):
def __init__(self, num_classes=10):
super(NewLeNet, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
self.conv3 = nn.Conv2d(16, 120, 5)
self.fc1 = nn.Linear(120, 84)
self.fc2 = nn.Linear(84, num_classes)
def forward(self, x):
x = F.max_pool2d(F.relu(self.conv1(x)), 2)
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = F.relu(self.conv3(x))
x = x.view((x.size(0), -1))
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
真是so easy,在cifar 10上训练结果在测试集上acc达到75.06%,如图所示
lr=0.01,momentum=0.9,在32k和48k时分别除以10,可见ResNet的训练方法还是不错的~
本周小结
- 论文 5 + 5,完成5
- Faegen的代码跑通了
下周计划
- 论文 5 + 5
- Faegen bug free
- 健身房开了!去锻炼身体!