简记ReNet

ResNet

论文给出了Resnet有3中类型,ResNet50[res3 res4 res6 res3],ResNet101[res3 res4 res23 res3]和ResNet152[res3 res4 res36 res3]层卷积。 ResNet50[res3 res4 res6 res3]中第一个3表示res2a+res2b+res2c, 而res2a又包含三层卷积,res2a = res2a_brach2a+res2a_brach2b+res2a_brach2c.。
网络结构如图:
这里写图片描述
就ResNet50进行简单介绍。注意标记:每个conv后面都会有batch_norm+scale+relu(只有卷积层branch1没有relu),所以下面写conv的时候,默认为conv(batch_norm+scale+relu)

Conv1(1/2)->pooling1(1/4) -> res2(1/4) -> res3(1/8) -> res4(1/16)> res5(1/32)-> ave pooling->fc(1000维分类)

下面给出pooling1->res2->res3的连接情况:
这里写图片描述
注意:层间才会有branch1,层内部没有(如pooling与res2,res2与res3之间有branch,作用是为了将H(x)=F(x)+x中的x的大小和F(x)大小保证一样,而res2a与res2b,res2b与res2c之间层内没有)

心得

1:普通的深层次的网络存在的问题是当网络深度加深时,网络的准确度开始饱和,然后极速下降。并且这种下降不是由于过拟合造成的,且当深度再次下降时,将会得到更大的trainning error。(如普通的34层网络比18层具有更高的training errors,而34层的残差较普通网络具有更低的training errors(3.51个百分点),18层的差不多(0.06个百分点),但收敛速度也要快很多)。这种现象也不是由于梯度爆炸造成的,因为当在34层网络中加入了batch_norm时,现象依然如此。再者,尝试用更多的迭代次数也无法解决。这个现象产生的原因有待进一步研究。。而论文最后给出残差网络貌似越深效果都会佳
普通的网络都是identity mapping,直接连接前面的浅层网络。这里的残差网络是residual mapping。

2:H(x) = F(x)+x,其中F(x)一般为两层或者三层,设置更多,如果仅仅是一层,则变成了H(x) = Wx+x,F就相当于是一个简单的线性层,这样就没有任何优势了。

3:网络结构:分为ABC三种,A只保留维度相同的shorts connections,B保留维度不同的short connections, C是两种都保留(效果最佳),如res3a, 为res3a_branch2a+res3a_branch2b+res3a_branch2c, 其中res3a_branch2a的kernel是1*1,stride=2,res3a_branch2b的kernel是3*3(因为前一层stride=2,降低了featuremap的大小,也就降低了参数和计算量), res3a_branch2c的kernel是1*1, 如下图fig5,这两种网络结构具有相同的参数和计算复杂度,而右图效果更好,非线性表达能力更强。(左图是vgg的设计思想,右图是resnet的设计思想)
这里写图片描述
ResNet50是有ResNet34将每个模块上图左替换为上图右得到的

猜你喜欢

转载自blog.csdn.net/Lu597203933/article/details/53713820