├── Activation_Function └── Summary │ ├── activation_function.md │ ├── image-20201208164309436.png │ ├── image-20201208165645088.png │ ├── image-20201208165851327.png │ ├── image-20201208165958179.png │ ├── image-20201208170424929.png │ ├── image-20201208170829790.png │ └── image-20201208190140468.png ├── Classification ├── AlexNet │ ├── AlexNet.md │ ├── Code │ │ └── AlexNet.ipynb │ └── images │ │ ├── image-20210816133247229.png │ │ └── image-20210816133257154.png ├── CBAM │ ├── CBAM.md │ └── images │ │ └── image-20210903160832053.png ├── DenseNet │ ├── Code │ │ └── DenseNet.ipynb │ ├── DenseNet.md │ └── images │ │ ├── image-20210831165408702.png │ │ ├── image-20210831170318587.png │ │ └── image-20210831173643973.png ├── ECANet │ ├── ECANet.md │ └── images │ │ ├── image-20210908125827694.png │ │ ├── image-20210908131600310.png │ │ ├── image-20210908132327436.png │ │ ├── image-20210908133541633.png │ │ ├── image-20210908142416639.png │ │ └── image-20210908142816479.png ├── EfficientNet │ ├── EfficientNet.md │ └── images │ │ ├── image-20210907185649201.png │ │ ├── image-20210907192731334.png │ │ ├── image-20210907194611233.png │ │ ├── image-20210907203132678.png │ │ └── image-20210907222126314.png ├── GoogLeNet_v1 │ ├── Code │ │ └── GoogLeNet.ipynb │ ├── GoogleNet_v1.md │ └── images │ │ ├── image-20210815111348958.png │ │ ├── image-20210815115823288.png │ │ └── image-20210815130143477.png ├── GoogLeNet_v2 │ ├── BN.md │ ├── Code │ │ └── BN.ipynb │ ├── GoogLeNet_v2.md │ └── images │ │ ├── image-20210815165828067.png │ │ ├── image-20210815171356853.png │ │ └── image-20210815173122003.png ├── GoogLeNet_v3 │ ├── GoogLeNet_v3.md │ └── images │ │ ├── image-20210819151047645.png │ │ ├── image-20210819151336189.png │ │ ├── image-20210819152901172.png │ │ ├── image-20210819153244330.png │ │ ├── image-20210819153757578.png │ │ ├── image-20210819161917845.png │ │ ├── image-20210819163145435.png │ │ └── image-20210819163232359.png ├── GoogLeNet_v4 │ ├── GoogLeNet_v4.md │ └── images │ │ ├── image-20210828165915411.png │ │ ├── image-20210828165934493.png │ │ ├── image-20210828165951234.png │ │ ├── image-20210828171718022.png │ │ └── image-20210828172256507.png ├── LeNet-5 │ ├── Code │ │ └── LeNet.ipynb │ ├── LeNet-5.md │ └── images │ │ ├── image-20210816132701474.png │ │ ├── image-20210816132734915.png │ │ └── image-20210816132752567.png ├── MobileNet_v1 │ ├── MobileNet_v1.md │ └── images │ │ ├── image-20210831214152040.png │ │ ├── image-20210831221858061.png │ │ ├── image-20210831222141220.png │ │ ├── image-20210831231138707.png │ │ └── image-20210831233021193.png ├── MobileNet_v2 │ ├── MobileNet_v2.md │ └── images │ │ ├── image-20210905210839531.png │ │ ├── image-20210905211503179.png │ │ ├── image-20210905215253361.png │ │ └── image-20210905221502127.png ├── MobileNet_v3 │ ├── MobileNet_v3.md │ └── images │ │ ├── image-20210907140136063.png │ │ ├── image-20210907150210887.png │ │ └── image-20210907150542053.png ├── NIN │ ├── Code │ │ └── NIN.ipynb │ ├── NIN.md │ └── images │ │ ├── image-20210816132336331.png │ │ ├── image-20210816132345424.png │ │ └── image-20210816132355996.png ├── OverFeat │ ├── OverFeat.md │ └── images │ │ ├── image-20210816132852542.png │ │ ├── image-20210816132900426.png │ │ ├── image-20210816132909236.png │ │ ├── image-20210816132919158.png │ │ ├── image-20210816132927371.png │ │ ├── image-20210816132936739.png │ │ ├── image-20210816132949441.png │ │ ├── image-20210816132958485.png │ │ ├── image-20210816133009521.png │ │ ├── image-20210816133024365.png │ │ ├── image-20210816133034837.png │ │ ├── image-20210816133043977.png │ │ ├── image-20210816133054040.png │ │ └── image-20210816133107298.png ├── ResNeXt │ ├── ResNeXt.md │ └── images │ │ ├── image-20210831121744687.png │ │ ├── image-20210831122202467.png │ │ ├── image-20210831125857855.png │ │ ├── image-20210831130252922.png │ │ └── image-20210831131345647.png ├── ResNet │ ├── Code │ │ └── resnet.ipynb │ ├── ResNet.md │ └── images │ │ ├── image-20210821140606339.png │ │ ├── image-20210821141557330.png │ │ ├── image-20210821143318770.png │ │ └── image-20210821143946428.png ├── ResNet_v2 │ ├── ResNet_v2.md │ └── images │ │ ├── image-20210825193103771.png │ │ ├── image-20210825222038324.png │ │ ├── image-20210825223245415.png │ │ └── image-20210825223701992.png ├── SENet │ ├── SENet.md │ └── images │ │ └── image-20210901195351835.png ├── SKNet │ ├── SKNet.md │ └── images │ │ ├── image-20210905142704771.png │ │ └── image-20210905150718544.png ├── ShuffleNet │ ├── ShuffleNet.md │ └── images │ │ ├── image-20210902210934810.png │ │ ├── image-20210902214522906.png │ │ └── image-20210903175320179.png ├── ShuffleNet_v2 │ ├── ShuffleNet_v2.md │ └── images │ │ ├── image-20210903204006802.png │ │ ├── image-20210903210541214.png │ │ ├── image-20210903211511232.png │ │ ├── image-20210903214310850.png │ │ ├── image-20210903214616246.png │ │ └── image-20210903215110484.png ├── VGG │ ├── Code │ │ └── VGG.ipynb │ ├── VGG.md │ └── images │ │ ├── image-20210816132247204.png │ │ └── image-20210816132256011.png ├── Xception │ ├── Xception.md │ └── images │ │ ├── image-20210831195226133.png │ │ ├── image-20210831195612734.png │ │ ├── image-20210831195621660.png │ │ └── image-20210831200047408.png └── ZFNet │ ├── ZFNet.md │ └── images │ ├── image-20210816133149309.png │ └── image-20210816133200761.png ├── LICENSE ├── Medical_Imaging └── Survey │ ├── Survey.md │ └── images │ ├── image-20210828190400269.png │ ├── image-20210829163837600.png │ └── image-20210829214056210.png ├── Object_Detection ├── CenterNet │ ├── CenterNet.md │ └── images │ │ └── image-20210906145429835.png ├── CornerNet │ ├── CornerNet.md │ └── images │ │ ├── image-20210904123531794.png │ │ ├── image-20210904124712494.png │ │ ├── image-20210904135108000.png │ │ ├── image-20210904141557995.png │ │ └── image-20210904141818501.png ├── DETR │ ├── DETR.md │ └── images │ │ └── image-20210908185944936.png ├── EfficientDet │ ├── EfficientDet.md │ └── images │ │ ├── image-20210910132035405.png │ │ ├── image-20210910134305028.png │ │ └── image-20210910141116959.png ├── FCOS │ ├── FCOS.md │ └── images │ │ ├── image-20210904192039265.png │ │ ├── image-20210904203722093.png │ │ ├── image-20210904205149452.png │ │ ├── image-20210904213019806.png │ │ └── image-20210904215306631.png ├── FPN │ ├── FPN.md │ └── images │ │ └── image-20210830161557169.png ├── Fast_R-CNN │ ├── Fast_R-CNN.md │ └── images │ │ ├── image-20210816092339793.png │ │ └── image-20210816123717144.png ├── Faster_R-CNN │ ├── Faster_R-CNN.md │ └── images │ │ ├── image-20210817142701700.png │ │ ├── image-20210817144006017.png │ │ ├── image-20210817150427267.png │ │ ├── image-20210817151736637.png │ │ ├── image-20210817155446114.png │ │ └── image-20210817170307928.png ├── R-CNN │ ├── R-CNN.md │ └── images │ │ └── image-20210816132030736.png ├── R-FCN │ ├── R-FCN.md │ └── images │ │ ├── image-20210827145936819.png │ │ ├── image-20210827153037333.png │ │ ├── image-20210827153716674.png │ │ └── image-20210827154454090.png ├── RetinaNet │ ├── RetinaNet.md │ └── images │ │ ├── image-20210902124212281.png │ │ ├── image-20210902134302040.png │ │ └── image-20210902145645697.png ├── SPPNet │ ├── SPPNet.md │ └── images │ │ ├── image-20210816132129904.png │ │ ├── image-20210816132141679.png │ │ └── image-20210816132154757.png ├── SSD │ ├── SSD.md │ └── images │ │ ├── image-20210823154110755.png │ │ ├── image-20210823155948348.png │ │ ├── image-20210823161638306.png │ │ └── image-20210823161731089.png ├── YOLOF │ ├── YOLOF.md │ └── images │ │ ├── image-20210915161600719.png │ │ ├── image-20210915163839130.png │ │ ├── image-20210915170551220.png │ │ ├── image-20210915175806150.png │ │ ├── image-20210915182633597.png │ │ └── image-20210915182827438.png ├── YOLOX │ ├── YOLOX.md │ └── image │ │ ├── 屏幕截图 2022-01-29 002406.jpg │ │ ├── 屏幕截图 2022-01-29 012002.jpg │ │ ├── 屏幕截图 2022-01-29 014213.jpg │ │ ├── 屏幕截图 2022-01-29 014633.jpg │ │ ├── 屏幕截图 2022-01-29 014738.jpg │ │ └── 屏幕截图 2022-01-29 014837.jpg ├── YOLO_v1 │ ├── YOLO_v1.md │ └── images │ │ ├── image-20210818104141098.png │ │ └── image-20210818111605277.png ├── YOLO_v2 │ ├── YOLO_v2.md │ └── images │ │ ├── image-20210901120025884.png │ │ ├── image-20210901133504030.png │ │ ├── image-20210901133832881.png │ │ ├── image-20210901140813033.png │ │ ├── image-20210901140830260.png │ │ ├── image-20210901140942575.png │ │ ├── image-20210901141100568.png │ │ ├── image-20210901142155336.png │ │ ├── image-20210901152009637.png │ │ └── image-20210901153919871.png ├── YOLO_v3 │ ├── YOLO_v3.md │ └── images │ │ ├── image-20210903141913600.png │ │ └── image-20210903142804581.png └── YOLO_v4 │ ├── YOLO_v4.md │ └── images │ ├── image-20210912141712113.png │ ├── image-20210912152743088.png │ └── image-20210912153356951.png ├── Optimizer ├── SGD │ └── Theory │ │ └── Gradient_Descent_Optimization.md └── Summary │ └── README.md ├── Person_Detection └── DETR │ ├── DETR_for_Crowd_Pedestrian_Detection.md │ └── image │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ ├── 06.png │ ├── 07.png │ ├── 08.png │ ├── 09.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ └── 14.png ├── Pre-Procession └── Summary │ └── Precautions.md ├── README.md ├── Semantic_Segmentation ├── FCN │ └── FCN.docx ├── SegNet │ ├── SegNet.md │ └── images │ │ ├── image-20210915131115386.png │ │ ├── image-20210915133117965.png │ │ └── image-20210915133651241.png └── UNet │ └── UNet.docx ├── images └── 微信公众号二维码.png └── person_Re-ID └── Re-ID_survey ├── image ├── 01.png ├── 02.png ├── 03.png ├── 04.png ├── 05.png ├── 06.png ├── 07.png ├── 08.png ├── 09.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 15.png ├── 16.png ├── 17.png ├── 18.png ├── 19.png ├── 20.png ├── 21.png └── 22.png ├── survey.md └── 综述原文2001.04193.pdf /Activation_Function/Summary/activation_function.md: -------------------------------------------------------------------------------- 1 | # activation function 2 | 3 | ## Sigmoid 4 | 5 | $$ 6 | \sigma(x) = \frac{1}{1+e^{-x}} 7 | $$ 8 | 9 | ![image-20201208164309436](image-20201208164309436.png) 10 | 11 | 12 | 13 | 优点: 14 | 15 | * 便于求导的平滑函数,其导数为$\sigma(x)(1-\sigma(x))$ 16 | 17 | 18 | 19 | 缺点: 20 | 21 | * 容易出现gradient vanishing 22 | 23 | > 1. 优化神经网络的算法是BP,即导数的后向传递:先计算输出层对应的loss,然后将loss以导数的形式不断向上一层网络传递,修正相应的参数,达到降低loss的目的。 24 | > 2. sigmoid函数在深度网络中常常会导致导数逐渐变为0,使得参数无法被更新,神经网络无法被优化。 25 | > * $\sigma(x)$中$x$较大或较小时,导数接近0,而后向传递的数学依据是微积分求导的链式法则,当前层的导数需要之前各层导数的乘积,几个小数相乘,结果会接近0 26 | > * Sigmoid导数的最大值0.25,意味着在每一层至少会被压缩为原来的1/4 27 | 28 | * 函数输出不是zero-centered 29 | 30 | > sigmoid函数的输出值恒大于0,会导致模型训练的收敛速度变慢。 31 | > 32 | > * 举例: 33 | > 34 | > $\sigma(\sum_{i}w_ix_i +b)$,如果所有的$x_i$均为正数或者负数,那么其对$w_i$的导数总是正数或负数。会导致如下图所示的阶梯式更新。 35 | > 36 | > ![image-20201208165645088](image-20201208165645088.png) 37 | > 38 | > 训练:用zero-centered数据(数据预处理实现)和zero-centered输出 39 | 40 | * 幂运算比较耗时 41 | 42 | 43 | 44 | 45 | 46 | ## tanh函数 47 | 48 | $$ 49 | \tanh x = \frac{e^x-e^{-x}}{e^x+e^{-x}} 50 | $$ 51 | 52 | 53 | 54 | ![image-20201208165851327](image-20201208165851327.png) 55 | 56 | * 解决了zero-centered的输出问题 57 | * 但gradient vanishing问题、幂运算问题依然存在 58 | 59 | 60 | 61 | ## ReLU函数 62 | 63 | $$ 64 | ReLU=max(0,x) 65 | $$ 66 | 67 | ![image-20201208165958179](image-20201208165958179.png) 68 | 69 | 70 | 71 | 优点: 72 | 73 | * 解决了gradient vanishing问题(在正区间) 74 | * 计算速度快,只需要判断输入是否大于0 75 | * 收敛速度远快于sigmoid和tanh 76 | 77 | 78 | 79 | 缺点: 80 | 81 | * ReLU的输出不是zero-centered 82 | * Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。 83 | 84 | 85 | 86 | ## Leaky ReLU函数 87 | 88 | $$ 89 | f(x)=max(0.01x,x) 90 | $$ 91 | 92 | ![image-20201208170424929](image-20201208170424929.png) 93 | 94 | 95 | 96 | 优点:同ReLU,外加不会有Dead ReLU问题 97 | 98 | 缺点:输出不是zero-centered 99 | 100 | 101 | 102 | ## ELU(Exponential Linear Units)函数 103 | 104 | $$ 105 | f(x) = \begin{cases} 106 | x, & \text{if } x > 0 \\ 107 | \alpha(e^x-1), & \text{otherwise} 108 | \end{cases} 109 | $$ 110 | 111 | ![image-20201208170829790](image-20201208170829790.png) 112 | 113 | 解决ReLU存在的问题,具备ReLU的基本所有优点,以及: 114 | 115 | 1. 不会有Dead ReLU问题 116 | 2. 输出均值接近0,zero-centered 117 | 118 | 119 | 120 | 缺点:计算量大 121 | 122 | 123 | 124 | ## Maxout 125 | 126 | 可以看作是在深度学习网络中加入一层激活函数层,包含一个参数k。这一层相比ReLU,sigmoid等,其特殊之处在于增加了k个神经元,然后输出激活值最大的值。 127 | 128 | 常见隐含层节点输出: 129 | $$ 130 | h_i(x)=sigmoid(x^TW_{...i}+b_i) 131 | $$ 132 | 而在Maxout网络中,其隐含层节点的输出表达式为: 133 | $$ 134 | h_i(x)=\max_{j \in [1,k]} z_{ij} \\ 135 | z_{ij}=x^TW_{...ij}+b_{ij},W \in R^{d \times m \times k} 136 | $$ 137 | 138 | 139 | 特点: 140 | 141 | 1. 与常规激活函数不同的是,它是一个可学习的分段线性函数。 142 | 2. Maxout的拟合能力非常强,它可以拟合任意的凸函数 143 | 144 | 145 | 146 | 优点: 147 | 148 | 1. 拟合能力非常强,可以拟合任意的凸函数 149 | 2. 具有ReLU的所有优点,线性、不饱和性 150 | 3. 没有ReLU的一些缺点,如:神经元的死亡 151 | 152 | 153 | 154 | 缺点: 155 | 156 | 1. 每个神经元有多组$(w,b)$参数,参数量增加了$k$倍,导致整体参数的数量激增。 157 | 158 | 159 | 160 | ## Softmax 161 | 162 | Sigmoid函数用于分类只能进行二分类 163 | 164 | softmax函数可以看作sigmoid函数的一般化,可以进行多分类 165 | 166 | 167 | 168 | $V_i$表示$V$中的第$i$个元素,那么这个元素的softmax值就是: 169 | $$ 170 | S_i = \frac{e^i}{\sum_j e^j} 171 | $$ 172 | ![image-20201208190140468](image-20201208190140468.png) 173 | 174 | 本质: 175 | 176 | > softmax将原来输出为3,1,-3通过softmax函数作用,就映射成为(0,1)的值,而这些值的累计和为1(满足概率的性质) 177 | > 178 | > 我们可将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大的结点,作为我们的预测目标。 179 | 180 | 181 | 182 | # reference 183 | 184 | [知乎:聊一聊深度学习的activation function](https://zhuanlan.zhihu.com/p/25110450) 185 | 186 | [知乎:常见的激活函数及其特点](https://zhuanlan.zhihu.com/p/85971385) 187 | 188 | -------------------------------------------------------------------------------- /Activation_Function/Summary/image-20201208164309436.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Activation_Function/Summary/image-20201208164309436.png -------------------------------------------------------------------------------- /Activation_Function/Summary/image-20201208165645088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Activation_Function/Summary/image-20201208165645088.png -------------------------------------------------------------------------------- /Activation_Function/Summary/image-20201208165851327.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Activation_Function/Summary/image-20201208165851327.png -------------------------------------------------------------------------------- /Activation_Function/Summary/image-20201208165958179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Activation_Function/Summary/image-20201208165958179.png -------------------------------------------------------------------------------- /Activation_Function/Summary/image-20201208170424929.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Activation_Function/Summary/image-20201208170424929.png -------------------------------------------------------------------------------- /Activation_Function/Summary/image-20201208170829790.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Activation_Function/Summary/image-20201208170829790.png -------------------------------------------------------------------------------- /Activation_Function/Summary/image-20201208190140468.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Activation_Function/Summary/image-20201208190140468.png -------------------------------------------------------------------------------- /Classification/AlexNet/AlexNet.md: -------------------------------------------------------------------------------- 1 | # AlexNet 2 | 3 | 论文原文:[ImageNet Classification with Deep Convolutional Neural Networks](https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf) 4 | 5 | AlexNet,CNN的大火之作。 6 | 7 | ILSVR2012冠军,自此掀起CNN研究热潮。 8 | 9 | 论文主要思想为三、四章,主要挑选此部分进行翻译+理解。 10 | 11 | ## 3 The Architecture 网络结构 12 | 13 | AlexNet的网络结构如图2所示。它总共包含八层可学习的层——五层卷积层和三层全连接层。接下来,我们将介绍我们的网络结构中全新的以及未曾使用过的点子。3.1-3.4章节的内容按它们的重要性进行前后排序讲解。 14 | 15 | ![image-20210816133247229](images/image-20210816133247229.png) 16 | 17 | ### 3.1 ReLU Nonlinearity ReLU非线性激活函数 18 | 19 | 对模型神经元输出的标准激活函数为$f(x)=\tanh{(x)}$或者$f(x)=(1+e^{-x})^{-1}$。在训练阶段使用梯度下降算法,在训练期间,这种饱和非线性函数的速度显著慢于非饱和非线性函数$f(x)=\max{(0,x)}$。站在Nair和Hinton的肩膀上,我们将这种非线性的神经元命名为整流线性单元(ReLUs)。用ReLUs训练的卷积神经网络比用tanh训练的网络快几倍。这种优势可以由图1所体现,在该图中,可明显显示出在CIFAR-10数据集上达到同样的25%错误率的四层卷积网络,ReLUs具有明显的优势。这张图还显示出在与传统饱和神经元模型做对比时,我们不需要用大型神经网络来做该实验。 20 | 21 | ![image-20210816133257154](images/image-20210816133257154.png) 22 | 23 | 我们不是第一个考虑替换CNN中的传统神经元模型。比如说,Jarrett等人所声明的$f(x)=|\tanh{(x)}|$比其他同种类型函数在Caltech-101数据集上的局部平均池化部分表现更好。可是,在该数据集上,前者主要考虑的避免过拟合,所以与我们的ReLUs用于加速训练的出发点不同。快速训练对在大型数据集上训练的大模型具有显著的影响。 24 | 25 | ### 3.2 Training on Multiple GPUs 多张GPU训练 26 | 27 | 单张GTX580 GPU只有3GB内存,它限制了网络训练的最大尺寸。这将导致充分的120万样例的数据集无法在单张GPU上进行有效工作。因此,我们将网络分布在两张GPU上。当前的GPUs能够有效的跨GPU并行,并且它们能够互相直接读取彼此的内存,还不用增加即时内存。这种并行的机制可以帮助我们将神经元在每张GPU上放一半,同时有一个限制:GPUs的通信只限于特定的层。这意味着,举个例子,第三层可以得到第二层的所有神经元输出。可是第四层就只能得到位于同一GPU的第三层的输出。跨GPU交互模式是一个难点,但这种方式能够帮助我们精确的控制交互的数量从而达到可接收的总计算量。 28 | 29 | 合成架构与Ciresan等人所提出的"柱状"的CNN具有相似性,特别是我们的柱子不是独立的(详见图2)。与一半的网络在单张GPU上训练做对比的话,这种机制分别降低了top-1错误率1.7%以及top-5错误率1.2%。两张GPU的训练时间明显低于单张GPU。 30 | 31 | ### 3.3 Local Response Normalization 局部响应归一化 32 | 33 | ReLUs具有一个明显的属性优势在于它们不需要输入的归一化来避免饱和。如果一些训练样本给予ReLU正向刺激输入,在该神经元就能进行有效学习。可是,我们同时发现局部响应机制能够避免泛化。定义$a_{x,y}^i$为核i在位置(x,y)的神经元,然后使用ReLU非线性激活函数,对应的局部响应归一值$b_{x,y}^i$的表达式展示如下: 34 | 35 | $$ 36 | b_{x,y}^i = a_{x,y}^i / (k + \alpha \sum_{j=\max{(0, i-n/2)}}^{\min{(N-1, i+n/2)}} (a_{x,y}^j)^2)^{\beta} 37 | $$ 38 | 39 | 其中总和是围绕同一空间位置n个相邻内核映射,N指的是该层的内核总数。内核映射的排序当然是任意的,并且在训练开始之前就已经确定好了。这种响应归一化的形式实现了一种受真实神经元类型启发的侧向抑制作用,在使用不同内核计算的神经元输出之间创建大型活动的竞争。常量$k,n,\alpha,\beta$作为超参数,我们设置为$k=2,n=5,\alpha=10^{-4}, \beta=0.75$。我们将这种正则机制放在特定层的ReLU之后。(见3.5节) 40 | 41 | ### 3.4 Overlapping Pooling 重叠池化 42 | 43 | CNN中的池化层只是将同一内核映射层的相邻单元进行了池化。按传统方式,相邻的池化单元是不重叠的。为了叙述更准确,池化层被视为由步长s像素,与邻域大小$z \times z$组成的。如果我们设置$s=z$,我们可以获得形如CNN中的传统池化层。如果我们设置$s 这个问题并不是过拟合导致的(过拟合在训练集应该更好),也不是梯度消失造成的(论文检查了梯度)。 16 | 17 | 18 | 19 | 论文结构: 20 | 21 | 1. 引文(介绍深度卷积神经网络发展,通过网络加深、退化问题引出残差公式) 22 | 2. 相关工作(所用组件的发展史) 23 | 3. 深度残差网络 24 | 4. 实验结果 25 | 26 | 27 | 28 | 主要翻译第3节。 29 | 30 | 31 | 32 | ## 3 Deep Residual Learning 深度残差网络 33 | 34 | ### 3.1 Residual Learning 35 | 36 | ​ 让我们假设$H(x)$作为通过堆叠层实现的要学习的隐藏映射,其中$x$定义为这些层第一层的输入。如果假设多个非线性层可以渐近逼近复杂函数,那么就相当于假设它们可以渐近逼近残差函数,即$H(x)-x$(假设输入输出为相同维度)。因此与其堆叠层来预测$H(x)$,不如让这些层来预测残差函数$F(x):= H(x)-x$。原始寒素就变成了$F(x)+x$。虽然这两种形式都应该能够逼近所需的函数(如假设的一样),但学习的难易程度可能有所不同。 37 | 38 | ​ 这种重新定义学习函数的动机是关于退化问题的反直觉的现象引起的(如图1左)。正如引文中所讨论的那样,如果添加的层可以被认为是恒等映射,较深模型的训练误差不应大于其较浅模型的训练误差。退化问题表明求解器可能难以通过多个非线性层逼近恒等映射。通过残差学习公式,如果恒等映射是最优的话,求解器可以简单地将多个非线性层的权重推向0以接近恒等映射。 39 | 40 | ![image-20210821140606339](images/image-20210821140606339.png) 41 | 42 | ​ 在实际例子中,恒等映射不太可能是最优操作,但我们的公式可有助于重新定义问题前提。如果最优函数更接近于恒等映射而不是零映射,则求解器应该更容易通过恒等映射找到扰动,而不是将其作为新的函数学习。我们通过实验(如图7)表明,学习到的残差函数通常具有很小的响应,这表明恒等映射提供了合理的预处理。 43 | 44 | ### 3.2 Identity Mapping by Shortcuts 通过shortcuts实现恒定映射 45 | 46 | ​ 我们采用残差学习来训练每一个级联层。模块如图2所示。在本篇论文中,模块的准确定义如下: 47 | $$ 48 | \begin{equation} 49 | y= F(x,\{W_i\}) + x \tag{1} 50 | \end{equation} 51 | $$ 52 | 其中$x$和$y$是该模块的输入和输出。$F(x,\{W_i\})$函数表示可学习的残差映射。对图2中所包含的两层例子,$F=W_2\sigma(W_1x)$,其中$\sigma$定义为ReLU,为了简化公式,偏差被舍去了。操作$F+x$通过shortcut connection和element-wise addition组合实现。我们采用加法后接非线性激活函数的方法(如图2)。 53 | 54 | ![image-20210821141557330](images/image-20210821141557330.png) 55 | 56 | ​ 等式(1)中的shortcut connections不引入额外的参数也没有增加计算复杂度。这不仅在实践中很有吸引力,而且在我们比较普通网络和残差网络时也很重要。我们可以公平地比较同时具有相同数量的参数、深度、宽度和计算成本的普通/残差网络。 57 | 58 | ​ 等式(1)中$F$和$x$的维度应当相等。如果不相等(输入输出维度不一致),我们可以通过一个线性映射$W_s$来实现维度的匹配: 59 | $$ 60 | y=F(x,\{W_i\}) + W_s x \tag{2} 61 | $$ 62 | 我们将通过实验证明恒等映射足以解决退化问题并且是经济的,因此$W_s$仅仅用来进行维度匹配。 63 | 64 | ​ 残差函数$F$是灵活的公式。本文实验中的函数$F$包含2-3层(如图5所示),当然更多层也是可行的。但如果$F$只有一层,那等式(1)就相当于一个线性层$y=W_1x + x$,在该层中我们没发现优势。 65 | 66 | ![image-20210821143318770](images/image-20210821143318770.png) 67 | 68 | ​ 我们同样注意到虽然上述符号为简单起见是关于全连接层的,但它们同样适用于卷积层。$F(x,\{W_i\})$可表示为多层卷积层。在单通道上实现两个特征图的逐元素相加。 69 | 70 | 71 | 72 | ### 3.3 Network Architectures 网络结构 73 | 74 | ​ 我们测试了各种各样的plain/residual网络,观察到了一致的现象。为了提供讨论的实例,我们描述了ImageNet的两个模型如下。 75 | 76 | **Plain Network.** 我们的plain基准(图3中)受启发于VGG网络(图3左)。卷积层大多数是$3 \times 3$卷积,还遵循如下两种设计:(i)对于同样的输出特征图大小,该层中拥有相同数量的卷积核,(ii) 如果特征图尺寸变小一倍,卷积核的数量就增加一倍,以保持每层的时间复杂度。我么通过步长为2的卷积层直接执行下采样。网络的最后使用一层全局平均池化层和一个包含softmax的1000维度全连接层。层数的总量为34层(如图3中)。 77 | 78 | ​ 值得注意的是,我们的模型与VGG网络相比拥有更少的卷积核和更小的复杂度(图3左)。我们的34层基准拥有36亿FLOPs,只有VGG-19的18%。 79 | 80 | **Residual Network.** 基于上述plain网络,我们插入shortcut connections(图3右),将网络变成其对应的残差版本。公式(1)中的恒等映射在输入输出维度相同的情况下能直接使用,(图3中的实线连接方式)。当维度增加时(虚线连接方式),我们考虑两种选项:(A) shortcut仍然为恒等映射,通过添加额外的0填充维度;(B) 公式(2)中的projection shortcut方式用于匹配维度(通过$1 \times 1$卷积)。对于两种选项,当shortcuts跨越两种大小的特征图时,它们使用步长为2的卷积实现。 81 | 82 | ![image-20210821143946428](images/image-20210821143946428.png) 83 | 84 | ### 3.4 Implementation 实现 85 | 86 | ​ 我们用于ImageNet的实现遵循AlexNet和VGG的实践。图像通过重整,将最短边随机采样为[256, 480]用于尺度增强。从图像或其水平翻转中随机采样$224 \times 224$裁剪,减去每像素平均值。AlexNet的标准颜色增强也被采纳。我们采用BN层,放在卷积层和激活函数层之间,如GoogLeNet v2中一样。我们采用[13]中的方法进行权重初始化,并从头训练所有普通/残差网络。我们使用SGD优化算法,mini-batch为256。学习率初始为0.1,当错误率下降遇到瓶颈时便降低10倍,总共训练$60 \times 10^4$轮次。我们使用权重衰减0.0001以及momentum设为0.9。不使用dropout。 87 | 88 | ​ 在测试中,为了比较研究,我们采用标准的10-crop测试。为了得到最好的结果,我们采用VGG中的全卷积模式,在多个尺度平均分数。(图像尺寸最短边被重整为{224,256,384,480,640})。 89 | 90 | 91 | 92 | # 理解点 93 | 94 | 1. shortcut connection 95 | 2. residual block 96 | 97 | -------------------------------------------------------------------------------- /Classification/ResNet/images/image-20210821140606339.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet/images/image-20210821140606339.png -------------------------------------------------------------------------------- /Classification/ResNet/images/image-20210821141557330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet/images/image-20210821141557330.png -------------------------------------------------------------------------------- /Classification/ResNet/images/image-20210821143318770.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet/images/image-20210821143318770.png -------------------------------------------------------------------------------- /Classification/ResNet/images/image-20210821143946428.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet/images/image-20210821143946428.png -------------------------------------------------------------------------------- /Classification/ResNet_v2/ResNet_v2.md: -------------------------------------------------------------------------------- 1 | # ResNet v2 2 | 3 | 原论文:[Identity Mappings in Deep Residual Networks](https://arxiv.org/abs/1603.05027) 4 | 5 | 在ResNet v1的基础上,理论分析Residual模块及它在整体网络上的结构,并通过详细的实验来论证。 6 | 7 | 论文结构: 8 | 9 | 1. 引文(介绍ResNet v1相关) 10 | 2. Residual模块分析 11 | 3. 恒等残差连接研究 12 | 4. 激活函数研究 13 | 5. 不同数据集结果 14 | 6. 结论 15 | 16 | 17 | 18 | 主要翻译第2、3节 19 | 20 | 21 | 22 | ## 3 On the Importance of Identity Skip Connections 23 | 24 | ​ 假设一个简单的式子,$h(x_l)=\lambda_l x_l$,来打破恒等映射: 25 | $$ 26 | x_{l+1} = \lambda_l x_l + F(x_l, W_l) 27 | $$ 28 | 其中$\lambda_l$是一个可变的标量(为了简化,我们假设$f$是恒等映射的)。递归地应用这个等式,我们获得了如下式子:$x_L=(\Pi_{i=1}^{L-1} \lambda_i)x_l + \sum_{i=1}^{L-1}(\Pi_{j=i+1}^{L-1}\lambda_j)F(x_i,W_i)$,可简化为: 29 | $$ 30 | x_l=(\Pi_{i=1}^{L-1} \lambda_i)x_l + \sum_{i=1}^{L-1}\hat{F}(x_i,W_i) 31 | $$ 32 | 其中符号$\hat{F}$讲标量吸收到残差函数中,反向传播式子如下: 33 | $$ 34 | \frac{\partial \xi}{\partial x_l} = \frac{\partial \xi}{\partial x_L}((\Pi_{i=1}^{L-1}\lambda_i) + \frac{\partial}{\partial x_L} \hat{F}(x_i, W_i)) 35 | $$ 36 | 该式子中,第一项加项由因子$\Pi_{i=1}^{L-1}\lambda_i$调制,对一个非常深的网络(L非常大)而言,如果$\lambda_i > 1$,对所有$i$而言,这个因子就会变得非常大;反之,则非常小,导致梯度消失,这会阻止来自残差连接的反向传播信号并强制它流过权重层。正如我们通过实验表明的那样,这会导致优化困难。 37 | 38 | ​ 在上述分析中,原始恒等残差连接中的$x_L$被替换尺度变换的式子为$h(x_L)=\lambda_lx_l$。如果$h(x_l)$表示更为复杂的变换(比如gating和$1 \times 1$卷积),第一个因子就变成了$\Pi_{i=1}^{L-1} h_i'$,其中$h'$是$h$的偏导。这个设置也可能阻碍信息传播并妨碍训练过程,如以下实验中所见。 39 | 40 | ![image-20210825193103771](images/image-20210825193103771.png) 41 | 42 | ### 3.1 Experiments on Skip Connections 43 | 44 | ​ 我们使用CIFAR-10数据集训练110层的ResNet。这个很深的的网络拥有54层两层的Residual Units(由$3 \times 3$卷积层组成)。我们的实现细节与ResNet一致。通篇论文采取在CIFAR的5次训练的中间值,减少随机变化的影响。 45 | 46 | ​ 通过我们上述的分析,该节中的$f$均为ReLU,我们在下一节解决恒等$f$的问题。我们的基准ResNet-110在测试集上错误率为6.61%。变化因子的比较如下: 47 | 48 | **Constant scaling.** 所有连接设置$\lambda=0.5$。然后研究两种情况:(i) $F$没有尺度变换(ii) $F$通过常量变换$1-\lambda=0.5$。前一种方案收敛效果不怎么好;后一种能够收敛,但测试误差比原来的高。图3(a)显示出训练误差比原来的高,表明当shortcut信号被缩小时优化有困难。 49 | 50 | ![image-20210825222038324](images/image-20210825222038324.png) 51 | 52 | **Exclusive gating.** 与Highway Networks采用门机制类似,我们假设门函数$g(x)=\sigma(W_gx+b_g)$,其中$\sigma(x)= \frac{1}{1+e^{-x}}$。在卷积网络$g(x)$中,通过$1 \times 1$卷积层实现。门函数通过按元素相乘组合信号。 53 | 54 | **Shortcut-only gating.** 在该方法中没有尺度变化;只有残差路径用$1-g(x)$决定是否通。如图2(d)所示。初始的偏置$b_g$对该例子仍然重要。当偏置为0时,网络收敛到不好的结果12.86%。这同样导致高的训练误差(如图3(c))。 55 | 56 | **$1 \times 1$ convolutional shortcut.** 接下来我们使用$1 \times 1$卷积残差连接来替换恒等映射。该选项在34层的ResNet中显示出了好的结果,显示出$1 \times 1$是有效的。但是当Residual Units更多的时候,并不是想象中的有效。110层的ResNet拥有更坏的结果12.22%(如表1所示)。同样,训练误差也变高了(图3d)。当堆叠更多Residual Units(ResNet-110包含54层),即使是最短的路径也可能会阻碍信号传播。在ImageNet上也观察到了同样的现象。 57 | 58 | ![image-20210825223245415](images/image-20210825223245415.png) 59 | 60 | **Dropout shortcut.** 最后我们使用dropout(值设为0.5)来实现,如图2(f)所示。收敛失败。 61 | 62 | 63 | 64 | ## 4 On the Usage of Activation Functions 65 | 66 | ![image-20210825223701992](images/image-20210825223701992.png) 67 | 68 | 主要了讨论了不同的激活函数放置位置,最终得出full pre-activation是最好的。 69 | 70 | 71 | 72 | # 理解点 73 | 74 | 详尽的实验确定Residual Block里面的组合为:BN->ReLU->weight 75 | 76 | -------------------------------------------------------------------------------- /Classification/ResNet_v2/images/image-20210825193103771.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet_v2/images/image-20210825193103771.png -------------------------------------------------------------------------------- /Classification/ResNet_v2/images/image-20210825222038324.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet_v2/images/image-20210825222038324.png -------------------------------------------------------------------------------- /Classification/ResNet_v2/images/image-20210825223245415.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet_v2/images/image-20210825223245415.png -------------------------------------------------------------------------------- /Classification/ResNet_v2/images/image-20210825223701992.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ResNet_v2/images/image-20210825223701992.png -------------------------------------------------------------------------------- /Classification/SENet/SENet.md: -------------------------------------------------------------------------------- 1 | # SENet 2 | 3 | 原论文:[Squeeze-and-Excitation Networks](https://arxiv.org/abs/1709.01507) 4 | 5 | 在Inception Module基础上,引入了一种通道注意力机制。 6 | 7 | 8 | 9 | 主要翻译论文第3节。 10 | 11 | ## 3 Squeeze-And-Excitation Blocks 12 | 13 | ​ 一个Squeeze-and-Excitation block是一个计算单元,可以建立在变换单元$F_{tr}$上,将输入$X \in R^{H' \times W' \times C'}$映射到特征图$U \in R^{H \times W \times C}$。在定义中我们将$F_{tr}$视为卷积操作,用$V=[v_1, v_2, \cdots, v_C]$来定义可学习的卷积核集合,其中$v_C$代表第$C$个通道。同样我们的输出可写为:$U=[u_1, u_2, \cdots , u_C]$,其中: 14 | $$ 15 | u_C = v_C * X = \sum_{s=1}^{C'}v_c^s * x^s \tag{1} 16 | $$ 17 | 其中$*$代表卷积,$v_c = [v_c^1, v_c^2, \cdots , v_c^{C'}], X = [x^1, x^2, \cdots, x^{C'}], u_c \in R^{H \times W}$。$v_c^s$是2D空间核,对应$X$对应通道的表征。为了简化等式,偏置选项被忽略了。虽然输出通过求所有通道的总和产生,通道依赖被隐式的嵌入到$V_c$中,又与局部空间纠缠不清。卷积建模的通道关系本质上是隐含的局部的。我们希望可学习的卷积特征能够被相互依赖的通道加强,从而使得网络增强对信息特征的敏感度,有助于接下来的特征提取。因此,我们提出捕获全局信息和重新校准卷积核的方法分为两步,分别是squeeze和excitation,在它们被投到下一次变换前。SE模块的结构的图形展示如图1所示。 18 | 19 | ![image-20210901195351835](images/image-20210901195351835.png) 20 | 21 | ### 3.1 Squeeze: Global Information Embedding 22 | 23 | ​ 为了解决通道依赖的问题,我们首先考虑输出特征中每个通道的信号。每个学习到的卷积核都使用局部感受野,因此转换输出U的每个单元都无法利用该区域之外的上下文信息。 24 | 25 | ​ 为了缓解这个问题,我们提出压缩全局信息到一个通道的方法。者通过使用全局平均池化来产生单个通道的统计信息。正式地表示,一个统计$z \in R^C$通过将输出U的空间维度$H \times W$缩放产生,自此第$c$通道的值通过如下式产生: 26 | $$ 27 | z_c = F_{sq(u_c)} = \frac{1}{H \times W} \sum_{i=1}^H \sum_{j=1}^W u_c(i,j) \tag{2} 28 | $$ 29 | 30 | ### 3.2 Excitation: Adaptive Recalibration 31 | 32 | 为了用好压缩操作得到的信息,随后的第二个操作我们致力于捕获逐通道的依赖。为了实现这个目标,函数必须满足两个条件:第一,它必须是灵活的;第二,它能学习非互斥的关系,从而确保允许强调多个通道。为了满足这些条件,我们采用了一个简单的门机制和一个sigmoid激活函数: 33 | $$ 34 | s = F_{ex}(z,W) = \sigma(g(z,W)) = \sigma(W_2 \delta(W_1z)) \tag{3} 35 | $$ 36 | 其中$\delta$代表ReLU函数,$W_1 \in R^{\frac{C}{r} \times C}, W_2 \in R^{C \times \frac{C}{r}}$。为了限制模型复杂度和提高通用性,我们通过两层全连接层来实现门机制,其中包含下降系数$r$的维度缩减层、一个ReLU层、一个升维层。最终的输出通过重整$U$,使用激活函数$s$: 37 | $$ 38 | \tilde{X}_c = F_{scale}(u_c, s_c)=s_cu_c \tag{4} 39 | $$ 40 | 其中$\tilde{X} = [\tilde{x}_1, \tilde{x}_2, \cdots, \tilde{x}_C]$,$F_{scale}(u_c,s_c)$代表标量$s_c$和特征图$u_c \in R^{H \times W}$的逐通道乘积。 41 | 42 | 43 | 44 | # 理解点 45 | 46 | 1. SE block实现通道注意力 47 | 2. 即插即用,方便应用到其他网络 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Classification/SENet/images/image-20210901195351835.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/SENet/images/image-20210901195351835.png -------------------------------------------------------------------------------- /Classification/SKNet/SKNet.md: -------------------------------------------------------------------------------- 1 | # SKNet 2 | 3 | 原论文:[Selective Kernel Network](https://arxiv.org/abs/1903.06586) 4 | 5 | 提出了一种自适应调整感受野大小的的结构块。 6 | 7 | 主要翻译第3节。 8 | 9 | ## 3 Methods 10 | 11 | ### 3.1 Selective Kernel Convolution 12 | 13 | ​ 为了能让神经元适应性地调整它们的感受野大小,我们提出了一种自动选择操作,"Selective Kernel"(SK) convolution,在不同大小的卷积核里面进行多重选择。特别是,我们通过3个操作——Split、Fuse、Select来实现SK卷积,如图1所展示的那样,显示了两个分支的情况。因此在这个例子中,只有两个内核大小不同的内核,但可容易扩展到多分支情况。 14 | 15 | ![image-20210905142704771](images/image-20210905142704771.png) 16 | 17 | **Split** 18 | 19 | ​ 对于任意给定的特征图$X \in \mathbb{R}^{H' \times W' \times C'}$,默认使用两种变换方式:$\tilde{F}: X \rightarrow \tilde{U} \in \mathbb{R}^{H \times W \times C},\hat{F}: X \rightarrow \hat{U} \in \mathbb{R}^{H \times W \times C}$,分别使用3和5的内核。注意,$\tilde{F}$和$\hat{F}$均使用有效的组/深度卷积来实现,BN和ReLU函数也尾随其后。为了进一步提高效率,将具有$5 \times 5$内核的传统卷积替换为具有$3 \times 3$内核和扩张因子为2的空洞卷积。 20 | 21 | **Fuse** 22 | 23 | ​ 正如引文中所述,我们的目标是使得神经元能够根据上下文自动调整其感受野大小。基本思想是使用门来控制来自多个分支的信息流,这些分支携带不同尺度的信息进入下一层的神经元。为了实现这个目标,门需要整合来自所有分支的信息。我们首先通过元素求和融合来自多个(图1中的两个)分支的结果: 24 | $$ 25 | U = \tilde{U} + \hat{U} \tag{1} 26 | $$ 27 | 然后我们通过使用全局平均池化来生成通道信号量$s \in \mathbb{R}^C$。特别是,$s$的第$c$个元素是通过将空间维度$H \times W$的$U$缩小来计算的: 28 | $$ 29 | s_c = F_{gp}(U_c) = \frac{1}{H \times W} \sum_{i=1}^H \sum_{j=1}^W U_c(i,j) \tag{2} 30 | $$ 31 | ​ 此外,创建一个紧凑的特征$z \in \mathbb{R}^{d \times 1}$来进行精确的和适应性选择的引导。这是通过一个简单的全连接层(fc)来实现的,降低维度以提高效率: 32 | $$ 33 | z = F_{fc}(s) = \delta(\Beta(Ws)) \tag{3} 34 | $$ 35 | 其中$\delta$指的是ReLU函数,$\Beta$为BN函数,$W \in \mathbb{R}^{d \times C}$。为了研究$d$对模型效率的影响,我们使用一个降速比$r$来控制它的值: 36 | $$ 37 | d = \max(C/r, L) \tag{4} 38 | $$ 39 | 其中$L$表示$d$的最小值(L=32是我们实验中的典型设置)。 40 | 41 | **Select** 42 | 43 | ​ 跨通道的soft attention用于适应自适应不同空间尺度的信息,这是由紧凑特征描述符$z$引导的。具体来说,一个softmax算子被应用到channel-wise digits: 44 | $$ 45 | a_c = \frac{e^{A_cz}}{e^{A_cz}+e^{B_cz}}, b_c = \frac{e^{B_cz}}{e^{A_cz}+e^{B_cz}} \tag{5} 46 | $$ 47 | 其中$A,B \in \mathbb{R}^{C \times d}$,$a,b$分别定义为$\tilde{U}, \hat{U}$的soft attention vector。注意$A_c \in \mathbb{R}^{1 \times d}$指的是$A$的第$c$列,$a_c$指的是$a$的第$c$个元素,$B_c,b_c$同理。在两个分支的情况下,矩阵$B$是冗余的,因为$a_c + b_c =1$。最终的特征图$V$是通过各种内核上的注意力权重获得的: 48 | $$ 49 | V_c = a_c \cdot \tilde{U}_c + b_c \cdot \hat{U}_c, a_c + b_c = 1 \tag{6} 50 | $$ 51 | 其中$V = [V_1, V_2, \cdots,V_C], V_c \in \mathbb{R}^{H \times W}$。请注意,这里我们为两分支情况提供了一个公式,并且可以通过扩展方程(1)(5)(6)很容易地推断出更多分支的情况。 52 | 53 | ### 3.2 Network Architecture 54 | 55 | ​ 通过使用SK convolutions,整体的SKNet架构如表1所示。我们从ResNeXt开始有两个原因:1) 它具有低计算成本,广泛使用分组卷积,2) 它是最先进的网络架构之一,在对象识别方面具有高性能。与ResNeXt类似,所提出的SKNet主要由一堆重复的瓶颈块组成,称为"SK"单元。每个SK单元由$1 \times 1$卷积、SK卷积和$1 \times 1$卷积的序列组成。一般来说,ResNeXt中原始bottleneck blocks中的所有大内核卷积都被SK卷积替代,使网络能够以自适应方式选择合适的感受野大小。由于SK卷积在我们的设计中非常有效,与ResNeXt-50相比,SKNet-50仅导致参数数量增加10%,计算成本增加5%。 56 | 57 | ![image-20210905150718544](images/image-20210905150718544.png) 58 | 59 | ​ 在SK单元中,由三个重要的超参数决定了SK卷积的最终设置:决定要聚合的不同内核的选择数的路径量$M$,控制每条路径的基数的组数$G$,以及控制fuse操作中参数数量的下降率$r$(见公式(4))。在表1中,我们定义一个典型的SK卷积设置$[M,G,r]$为$[2,32,16]$。这些参数的选择和影响在4.3节中讨论。 60 | 61 | ​ 表1显示了一个50层的SKNet的结构,其中有四个阶段,分别具有$\{3,4,6,3\}$SK单元。通过改变每一阶段SK单元的数量,可以获得不同的架构。在本研究中,我们对其它两种架构进行了实验,SKNet-26具有$\{2,2,2,2\}$个SK单元,SKNet-101具有$\{3,4,23,3\}$个SK单元,在各自的四个阶段。 62 | 63 | ​ 请注意,所提出的SK卷积可应用于其它轻量级网络,例如MobileNet、ShuffleNet,其中广泛使用$3 \times 3$深度卷积。通过用SK卷积替换这些卷积,我们还可以在紧凑的架构中获得非常可喜的结果。(参见第4.1节) 64 | 65 | # 理解点 66 | 67 | 1. 用通道注意力机制来实现多种卷积核的动态选择,实现自适应调整感受野大小。 68 | 69 | -------------------------------------------------------------------------------- /Classification/SKNet/images/image-20210905142704771.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/SKNet/images/image-20210905142704771.png -------------------------------------------------------------------------------- /Classification/SKNet/images/image-20210905150718544.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/SKNet/images/image-20210905150718544.png -------------------------------------------------------------------------------- /Classification/ShuffleNet/ShuffleNet.md: -------------------------------------------------------------------------------- 1 | # ShuffleNet 2 | 3 | 原论文:[ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices](https://arxiv.org/abs/1707.01083) 4 | 5 | 通过逐点群卷积、通道混洗降低计算量。 6 | 7 | 论文主要以第3节翻译为主。 8 | 9 | ## 3 Approach 10 | 11 | ### 3.1 Channel Shuffle for Group Convolutions 12 | 13 | ​ 现代卷积神经网络通常使用架构的模块堆叠。在它们之中,SOTA的网络中Xception以及ResNeXt通过引入有效的深度可分离卷积或组卷积到这些block中来达到表征能力和计算成本的trade-off。然而,我们注意到两种设计都没有将$1\times1$卷积(即逐点卷积)纳入统计,这需要相当大的复杂性。举个例子,在ResNeXt中只有$3 \times 3$卷积配备有组卷积。言而总之,对于ResNeXt中的每个residual unit,驻点卷积占了93.4%的计算量(cardinality=32)。在小网络中,昂贵的逐点卷积使得满足复杂性约束的通道数量有限,会降低准确度。 14 | 15 | ​ 为了解决这个问题,一个直接的方法就是通道稀疏连接,例如在$1 \times 1$卷积层使用组卷积。通过确保每个卷积只对相应的输入通道组进行操作,组卷积显著降低了计算成本。然而,如果多个组卷积堆叠在一起,有一个副作用:输出通道的信息只来源于很小的输入通道。图1(a) 显示了两层级联的组卷积层的情况。它清楚的显示出组卷积的输出只与卷积的组有关。该属性会阻碍通道组之间的信息流动并削弱表征。 16 | 17 | ![image-20210902210934810](images/image-20210902210934810.png) 18 | 19 | ​ 如果我们允许组卷积能够获得不同组的输入数据(如图1(b)),输入和输出通道能够完全相关。特别是,对于前组卷积层产生的特征图,我们可以将每个小组的通道分成几个子小组,然后在下一层形成不同的子小组。这可以通过channel shuffle操作来有效地实现(如图1(c)):假设一个卷积层由$g$个组,它的输出有$g \times n$个通道;我们首先将输出通道维数重整成$(g,n)$,转置然后将其展平作为下一层的输入。值得注意的是,即使两个卷积的组数不同,该操作仍然有效。此外,channel shuffle也是可微的操作,这意味着它可以嵌入到网络结构中进行端到端的训练。 20 | 21 | ​ channel shuffle操作赋予了多重组卷积层有力的结构。在下一个小节我们介绍拥有channel shuffle和组卷积的有效网络。 22 | 23 | ### 3.2 ShuffleNet Unit 24 | 25 | ​ 受益于通道混洗操作,我们提出一种新的专为小网络设计的ShuffleNet。刚开始设计成图2(a)的形式。它是一个residual block。在它的residual分支,对于$3 \times 3$层,我们在bottleneck特征图上应用了经济的$3 \times 3$深度卷积。然后,我们用逐点组卷积替换第一个$1 \times 1$卷积层,然后进行通道混洗操作,形成一个ShuffleNet单元,如图2(b)所示。第二个逐点组卷积的目的是恢复通道维度以匹配残差路径。为简单起见,我们没有在第二个逐点层之后应用额外的通道混洗操作,因为它会产生可比的分数。批量归一化(BN)和非线性的使用,我们在深度卷积后不使用ReLU。对于ShuffleNet与stride一起应用的情况,我们简单地做了两个修改(见图2(c)):(i) 在残差路径上添加了一个$3 \times 3$的平均池化;(ii) 用通道级联代替逐元素加法,这使得在增加通道维度地同时几乎没有额外的计算成本。 26 | 27 | ![image-20210902214522906](images/image-20210902214522906.png) 28 | 29 | ​ 在带通道混洗的逐点组卷积的辅助下,ShuffleNet的所有组件都可以高效地计算。与ResNet和ResNeXt相比,在相同的设置下,我们的结构具有较低的复杂性。举个例子,给定输入大小为$c \times h \times w$,bottleneck的通道为$m$,ResNet单元需要$hw(2cm+9m^2)$的FLOPs,ResNeXt需要$hw(2cm+9m^2/g)$的FLOPs,然而我们的ShuffleNet单元只需要$hw(2cm/g+9m)$的FLOPs,其中$g$代表组卷积总数。换句话说,在给定计算预算下,ShuffleNet可以使用更广泛的特征图。我们发现这对于小型网络至关重要,因为小型网络通常没有足够数量的通道来处理信息。 30 | 31 | ​ 另外,在ShuffleNet中深度卷积仅在bottlenck特征图上执行。尽管深度卷积通常具有非常低的理论复杂度,但我们发现它难以在低功耗移动设备上有效实现,这可能是由于与其他密集操作相比更差的计算/内存访问率。在ShuffleNet单元中,我们有意仅在bottleneck上使用深度卷积,以尽可能地防止开销。 32 | 33 | ### 3.3 Network Architecture 34 | 35 | ​ 基于ShuffleNet单元建立,表1展示了ShuffleNet的整体架构。所提的网络主要由一堆ShuffleNet单元组成,分为三个阶段。每个stage的第一个block应用的stride=2。相同stage的其他超参数保持相同,对于下一个stage,输出通道数量就加倍。与ResNet相似,我们将bottleneck通道的数量设置为每个ShuffleNet输出通道的1/4单元。我们的目的是提供尽可能简单的参考设计,尽管我们发现进一步的超参数调整可能会产生更好的结果。 36 | 37 | ![image-20210903175320179](images/image-20210903175320179.png) 38 | 39 | ​ 在ShuffleNet单元中,组数量$g$控制着逐点卷积的稀疏连接程度。表1实验了不同组数量的实验结果,并且我们调整了输出通道从而保证总体计算成本大致不变(~140MFLOP)。显然,对于给定的复杂性约束,更大的组数会导致更多的输出通道(因此更多的卷积滤波器),这有助于编码更多的信息,尽管由于相应的输入通道有限,这也可能导致单个卷积滤波器的性能下降。 40 | 41 | ​ 为了将网络定制为所需的复杂度,我们可以简单地对通道数应用比例因子s。例如,我们将表1中地网络表示为"ShuffleNet 1$\times$",那么"ShuffleNet s$\times$"意味着将ShuffleNet 1x中地过滤器数量缩放s倍,因此整体复杂度将大约是ShuffleNet 1x的s2倍。 42 | 43 | # 理解点 44 | 45 | 1. 逐点群卷积(pointwise group convolution) 46 | 2. 通道混洗(channel shuffle) 47 | 48 | -------------------------------------------------------------------------------- /Classification/ShuffleNet/images/image-20210902210934810.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet/images/image-20210902210934810.png -------------------------------------------------------------------------------- /Classification/ShuffleNet/images/image-20210902214522906.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet/images/image-20210902214522906.png -------------------------------------------------------------------------------- /Classification/ShuffleNet/images/image-20210903175320179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet/images/image-20210903175320179.png -------------------------------------------------------------------------------- /Classification/ShuffleNet_v2/ShuffleNet_v2.md: -------------------------------------------------------------------------------- 1 | # ShuffleNet v2 2 | 3 | 原论文:[ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design](https://arxiv.org/abs/1807.11164) 4 | 5 | 对ShuffleNet v1进行针对性的优化。 6 | 7 | 论文结构: 8 | 9 | 1. 引文(CNN发展现状) 10 | 2. 网络设计的实践标准 11 | 3. ShuffleNet v2的整体设计 12 | 4. 实验结果 13 | 5. 结论 14 | 15 | 主要翻译第2、3节 16 | 17 | ## 2 Practical Guidelines for Efficient Network Design 18 | 19 | ​ 我们的研究是在两个广泛采用的硬件上进行的,并具有行业级的CNN库优化。值得注意的是我们的CNN库比现有的开源库都高效。因此,我们确保我们的观察和结果是可靠的,并且对工业实践具有重要的意义。 20 | 21 | — GPU。一张NVIDIA GeForce GTX 1080Ti。使用卷积库版本为CUDNN 7.0。我们还激活了CUDNN的基准测试功能,分别为不同的卷积选择最快的算法。 22 | 23 | — ARM。一张Qualcomm Snapdragon 810。使用高度优化的基于Neon的实现。单个线程用于评估。 24 | 25 | ​ 其它的设定包括:全优化设置选项(例如:张量融合,用于减少小操作的开销)。输入图像大小为$224 \times 224$。每个网络随机初始化并且评估100次。选取平均运行时间作结果。 26 | 27 | ​ 在开始我们的研究前,我们分析了现有的两个SOTA网络:ShuffleNet v1和MobileNet v2。它们都是在ImageNet分类任务上高效且准确的网络结构。并且它们都是在低端终端设备比如移动终端上广泛使用的网络。虽然我们只分析了这俩网络,我们注意到它们是当前的代表趋势。它们的核心是组卷积和深度卷积,也是其它SOTA网络的核心部件,比如ResNeXt、Xception、MobileNet、CondenseNet等。 28 | 29 | ​ 整体的运行时间对不同的操作进行分解,就如图2所展示的。我们注意到FLOPs指标只涉及卷积部分。虽然卷积部分耗时很多,但其它部分,比如数据I/O、数据混洗和逐元素操作等占据了大量的时间。因此,FLOPs对实际运行时间的估计不够准确。 30 | 31 | ![image-20210903204006802](images/image-20210903204006802.png) 32 | 33 | ​ 基于这些发现,我们从几个不同的方面对运行时进行了详细分析,并得出了一些有效的网络架构设计的实用指南。 34 | 35 | ### G1) Equal channel width minimizes memory access cost(MAC) 36 | 37 | ​ 现代网络通常采用深度可分离卷积,其中逐点卷积($1 \times 1$卷积)占据了大量的复杂度。我们研究了$1 \times 1$卷积的形状。它的形状主要由两部分组成:输入通道数量$c_1$和输出通道数量$c_2$。$h$和$w$代表特征图的空间尺寸,从而$1 \times 1$卷积的FLOPs为$B=hwc_1c_2$。 38 | 39 | ​ 为了简化,我们假设计算设备中的缓存足够大,能够存储整个特征图和参数。那么,MAC或称之为内存访问操作数量为$MAC=hw(c_1+c_2)+c_1c_2$。请注意,这两个术语分别对应于输入/输出特征图和内核权重的内存访问。 40 | 41 | ​ 从均值不等式,我们有 42 | $$ 43 | MAC \ge 2 \sqrt{hwB} + \frac{B}{hw} \tag{1} 44 | $$ 45 | ​ 因此,MAC有一个由FLOP给出的下限。当输入和输出通道的数量相等时达到最低点。 46 | 47 | ​ 结论是理论层面的。在实践中,许多设备的缓存是不够大的。同样,现代计算库通常采用复杂的阻塞策略来充分利用缓存机制。因此,真实的MAC可能会偏离理论值。为验证上述结论,进行如下实验。一个基准网络是通过重复堆叠10个构建块来构建的。每个block包括两层卷积层。第一个包含$c_1$输入通道和$c_2$输出通道,第二个则反过来。 48 | 49 | ​ 表1展示了在固定时改变c1:c2比率的运行速度的总FLOP。很清晰的是c1:c2为1:1时,MAC变得更小,网络速度更快。 50 | 51 | ![image-20210903210541214](images/image-20210903210541214.png) 52 | 53 | ### G2) Excessive group convolution increases MAC 54 | 55 | ​ 组卷积是现代网络结构的核心。它通过将所有通道之间的密集卷积更改为稀疏(仅在通道组内)来降低计算复杂度(FLOP)。一方面,它允许在给定固定FLOP的情况下使用更多通道并增加网络容量(从而提高准确性)。然而,另一方面,通道数量的增加导致更多的MAC。 56 | 57 | ​ 正式地,遵循G1和等式1中的符号,对于$1\times1$组卷积而言,MAC和FLOPs之间的关系为: 58 | $$ 59 | MAC &= hw(c_1 + c_2) + \frac{c_1c_2}{g} \\ 60 | &=hwc_1+\frac{Bg}{c_1} + \frac{B}{hw} \tag{2} 61 | $$ 62 | 其中$g$指的是组的数量,FLOPs总数是:$B=hwc_1c_2/g$。显而易见的是,给定固定输入尺寸$c_1 \times h \times w$和计算成本$B$,MAC增长了$g$倍。 63 | 64 | ​ 为了在实践中研究这种影响,通过堆叠10个逐点组卷积层来构建基准网络。表2展示了在固定总FLOPs的情况下,使用不同组数量运行速度。很明显,使用大组数会显著降低运行速度。例如,在GPU上使用8个组比使用1个组(标准密集卷积)慢两倍以上,在ARM上最多慢30%。这很大可能是由于MAC的增长。我们注意到我们的实现已经过特别优化,并且比逐组计算卷积要快得多。 65 | 66 | ![image-20210903211511232](images/image-20210903211511232.png) 67 | 68 | ​ 因此,我们建议组数量应该基于目标平台和任务进行慎重选择。使用大数组是不明智地,因为这可以使用更多的通道,因为准确度的提高的好处很容易被快速增加的计算成本所抵消。 69 | 70 | ### G3) Network fragmentation reduces degree of parallelism 71 | 72 | ​ 在GoogLeNet系列和自动生成架构系列中,每个网络块都广泛采用"multi-path"结构。使用了很多小算子(这里称为"fragmented operators"),而不是大算子。例如,在NASNET-A中,fragmented operators的数量(即一个构建块中的单个卷积或池化操作的数量)为13。相比之下,在像ResNet这样的常规结构中,这个数量为2或3。 73 | 74 | ​ 虽然这种碎片化的结构已被证明有利于准确性,但它可能会降低效率,因为它对GPU等具有强大并行计算能力的设备不友好。它还引入了额外的开销,例如内核启动和同步。 75 | 76 | ​ 为了量化网络碎片如何影响效率,我们评估了一系列具有不同碎片程度的网络块。特别是,每个构建块由1-4个$1\times1$卷积组成,线性或并行排列。块结构在附录中展示。每个块重复堆叠10次。表3的结果表明,碎片化显著降低了GPU上的速度,4-fragment结构比1-fragment结构慢3倍。在ARM上,速度慢得相对较小。 77 | 78 | ![image-20210903214616246](images/image-20210903214616246.png) 79 | 80 | ### G4) Element-wise operations are non-negligible 81 | 82 | ​ 如图2所展示的那样,在轻量级模型中,逐元素操作占用大量时间,特别是在GPU上。这里,逐元素运算符包括ReLU、AddTensor、AddBias等。它们的FLOP较小,但MAC相对较重。特别地,我们还将深度卷积视为元素级算子,因为它也具有高MAC/FLOPs比率。 83 | 84 | ​ 为了验证,我们在ResNet中的这些"bottleneck"单元中实验了一下($1 \times 1$卷积后接$3 \times 3$卷积和$1 \times 1$卷积,还有ReLU和残差连接)。ReLU和残差连接分别去除。不同变种的运行时间在表4中展示。我们观察到,在移除ReLU和残差连接后,GPU和ARM都获得了大约20%的加速。 85 | 86 | ![image-20210903214310850](images/image-20210903214310850.png) 87 | 88 | ### Conclusion and Discussions 89 | 90 | ​ 基于上述指导方针和经验性研究,我们得出一个有效的网络架构应当是1) 使用"balanced"卷积(相同通道宽度);2) 注意使用组卷积的成本;3) 降低碎片化程度;4) 减少逐元素操作。这些理想的特性取决于超出理论FLOP的平台特性(例如内存操作和代码优化)。在实际的网络设计中应该考虑到它们。轻量级神经网络架构的最新进展主要基于FLOP的度量,并且不考虑上述这些属性。举个例子,ShuffleNet v1严重依赖于组卷积(违背G2)和bottleneck-like building blocks(违背G1)。MobileNet v2使用inverted bottleneck结构,违背了G1。它在"thick"特征图上使用深度卷积和ReLU,这违背了G4。自动生成结构式高度碎片化的,违背了G3。 91 | 92 | ## 3 ShuffleNet V2: an Efficient Architecture 93 | 94 | ![image-20210903215110484](images/image-20210903215110484.png) 95 | 96 | # 理解点 97 | 98 | 1. 更加高效的CNN网络结构设计准则 99 | 100 | -------------------------------------------------------------------------------- /Classification/ShuffleNet_v2/images/image-20210903204006802.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet_v2/images/image-20210903204006802.png -------------------------------------------------------------------------------- /Classification/ShuffleNet_v2/images/image-20210903210541214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet_v2/images/image-20210903210541214.png -------------------------------------------------------------------------------- /Classification/ShuffleNet_v2/images/image-20210903211511232.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet_v2/images/image-20210903211511232.png -------------------------------------------------------------------------------- /Classification/ShuffleNet_v2/images/image-20210903214310850.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet_v2/images/image-20210903214310850.png -------------------------------------------------------------------------------- /Classification/ShuffleNet_v2/images/image-20210903214616246.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet_v2/images/image-20210903214616246.png -------------------------------------------------------------------------------- /Classification/ShuffleNet_v2/images/image-20210903215110484.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ShuffleNet_v2/images/image-20210903215110484.png -------------------------------------------------------------------------------- /Classification/VGG/VGG.md: -------------------------------------------------------------------------------- 1 | # VGG 2 | 3 | 原论文:[Very Deep Convolutional Networks For Large-Scale Image Recognition](https://arxiv.org/abs/1409.1556) 4 | 5 | ILSVRC2014定位任务冠军,分类任务亚军。 6 | 7 | 主要思想:探索深度对性能的影响(消融实验),反复堆叠$3\times3$卷积。 8 | 9 | 论文架构: 10 | 1. 引文(介绍CNN发展及论文组织结构) 11 | 2. 模型结构 12 | 3. 网络训练和评估结构 13 | 4. 分类实验 14 | 5. 结论 15 | 16 | 主要翻译2、3节,理解VGG主体思想。 17 | 18 | ## 2 ConvNet Configurations 卷积网络设置 19 | 20 | 为了基于公平的准则来衡量卷积网络深度对结构性能的影响,我们的网络结构中所有的卷积层设置和AlexNet使用同样的原则。在该章节中,首先在2.1节中讨论我们卷积网络的通用布置,2.2节中展示评估网络的具体设置细节,2.3节讨论我们的网络结构选择与之前的对比。 21 | 22 | ### 2.1 Architecture 结构 23 | 24 | 在训练阶段,我们的卷积网络输入大小为固定的$224 \times 224$的RGB图像。唯一的预处理就是对训练集上的每个像素的RGB值取平均。图像经过堆叠的卷积层进行处理,其中感受野大小均为$3 \times 3$,这种大小的感受野刚好能够捕捉左右、上下、中间点的信息。在我们的设置中同样使用了$1 \times 1$卷积核,这可被视为输入通道的线性转换(后接非线性转换器)。卷积步长固定为1;卷积层的输入填充是为了卷积后分辨率保持不变,对$3 \times 3$卷积层而言填充设置为1像素。空间池化由五个最大池化层组成,接在一些卷积层后面(不是所有卷积层后面都接着最大池化层)。最大池化层设置为$2 \times 2$的像素窗口,步长为2。 25 | 26 | 卷积层的级联(在不同的结构中具有不同的深度)后面接着三层全连接层(FC层):前两层各拥有4096通道,第三层包含1000通道(即ILSVRC的不同类别)。最后一层为softmax层。全连接层的设置在所有网络中设置相同。 27 | 28 | 所有的隐藏层都包含ReLU非线性激活函数。我们的网络中不包含LRN算法。在第4节中我们会介绍LRN算法没有提高网络在ILSVRC数据集上的表现力,还增加了内存占用和计算时间。如果网络结构中使用的话,就是使用AlexNet中LRN层的参数。 29 | 30 | ### 2.2 Configurations 设置 31 | 32 | 该篇论文中卷积网络的设置在表格1中展示出来。在接下来的环节中我们将使用它们的代词(A-E)。所有通用的设置在2.1节中叙述完,唯一的不同点就在于网络的深度:从A中的11层(8层卷积+3层全连接层)到E中的19层(16层卷积+3层全连接层)。卷积层的宽度(即通道数)是相对小的,从第一层的64,每经过一层最大池化层就扩大2倍,直到达到512。 33 | 34 | ![image-20210816132247204](images/image-20210816132247204.png) 35 | 36 | 在表格2中,展示了每种设置的参数总量。得益于网络深度的提升,参数总量也顺势提升。 37 | 38 | ![image-20210816132256011](images/image-20210816132256011.png) 39 | 40 | ### 2.3 Discussion 讨论 41 | 42 | 我们的卷积网络设置与ILSVRC-2012(AlexNet)和ILSVRC-2013(ZFNet)数据集的SOTA结果有所不同。与它们第一层使用大的感受野不同的是,我们整个网络中使用的都是$3 \times 3$的感受野,步长为1。显而易见的是两层级联$3 \times 3$卷积拥有$5 \times 5$的感受野;三层级联$3 \times 3$拥有$7 \times 7$的有效感受野。如果我们使用三层级联$3 \times 3$卷积替换$7 \times 7$卷积能够有什么好处?第一,用三层非线性整流层替换简单的一层,使得决策函数更具判别性。第二,降低了参数使用量:假设我们的输入输出都是$C$通道数,级联的参数量为$3(3^2C^2)=27C^2$,同时,单一的$7 \times 7$卷积的参数量为$7^2C^2=49C^2$。 43 | 44 | 表1中网络C的$1 \times 1$卷积的集成是在不影响卷积层感受野的情况下增强决策函数的非线性能力。尽管在我们的例子中$1\times 1$卷积本质上是在相同维度空间上的线性投影(输入和输出通道的数量相同),但ReLU激活函数引入了额外的非线性能力。值得注意的是,NIN网络架构中也使用了$1\times1$卷积。 45 | 46 | ## 3 Classification Framework 分类架构 47 | 48 | 在前面章节中,我们展示了网络结构的设置,在该章节中,我们叙述分类卷积网络的训练和测试细节。 49 | 50 | ### 3.1 Training 训练 51 | 52 | 卷积网络的训练程序大致跟AlexNet一样(除了输入训练图像的随机裁剪,过后解释)。训练优化器采用小批次梯度下降法(基于BP算法)。batch size设为256,momentum设为0.9。训练通过权重衰减进行正则化(L2惩罚系数设为$5 \times 10^{-4}$),最后两层全连接层的dropout系数设为0.5。初始学习率设为0.01,当验证集准确率不再提升的时候就降10倍。总计学习率降了3次,学习轮次停在了370K迭代次数(74 epochs)。我们推测,尽管我们的网络与AlexNet相比具有更多的参数和更大的深度,但由于(a) 更大深度和更小的卷积增强的正则化特性 (b) 某些确定层的预初始化 使得网络需要更少的epochs来收敛。 53 | 54 | 网络权重初始化是非常重要的,坏的初始化会使得深度网络的梯度的不稳定导致无法学习。为了解决这个问题,我们首先在网络A中使用随机初始化进行训练。然后到训练更深的结构时,我们将第一层卷积层和最后三层全连接层的参数用网络A中的参数初始化(中间层的参数随机初始化)。我们不下降预初始化层的学习率,允许它们在训练中改变。对于随机初始化,满足均值为0方差为0.01的正态分布。偏置初始化为0。 55 | 56 | 为了获得固定$224 \times 224$大小的输入图像,从大型训练集中随机裁剪(每SGD迭代一次,每张图像裁剪一次)。为了近一步扩大训练集,数据还经历了随即水平翻转和随机RGB颜色偏移。下面解释了训练图像重新缩放。 57 | 58 | 59 | Training image size. 设S时各向同性重新缩放的训练图像的最小边,从中裁剪ConvNet的输入(我们也将S称为训练尺度)。虽然裁剪尺寸固定为$224\times224$,但原则上S可设为任何不小于224的值:S设为224,裁剪能够捕获整张图象的统计数据,完全跨越训练图像的最小边;设为大于224时,裁剪将对应图像的一小部分,包含一个小对象或一个对象部分。 60 | 61 | 我们考虑两种方法来设置训练尺度S。第一种是固定S,对应于单尺度训练。在我们的实验中,我们模型在两种固定尺寸上训练:$S=256, S=384$。给定卷积网络设置,首先使用$S=256$进行训练。为了加速$S=384$的训练,用$S=256$预训练好的参数初始化网络,然后使用小的初始学习率0.001。 62 | 63 | 第二种方法是多尺度训练。将每张训练图像分别随机上采样到尺寸范围$[S_{min}, S_{max}]$,其中$S_{min}=256$以及$S_{max}=512$。由于图像中的对象可能具有不同的大小,因此在训练中考虑到这一点是非常有益的。这可以看作是通过尺度抖动增强数据集,从多尺度训练单一模型去识别目标。为了速度上的考虑,我们通过将单一尺度上预训练好的模型参数迁移到多尺度模型中去。 64 | 65 | ### 3.2 Testing 测试 66 | 67 | 测试的相关介绍,可直接参考原文。 68 | 69 | ### 3.3 Implementation Details 实现细节 70 | 71 | 使用C++ Caffe toolbox实现。在单一系统下实现多GPU运行,同时在多种尺度的完整大小图像下训练和评估。多GPU训练方式实现了数据并行机制,通过将同一batch的训练图像等分到几个GPU中去,然后同时训练。当GPU的批次梯度训练好后,将所有GPU的梯度取平均。梯度计算在所有GPUs同步,所以最终结果与单张GPU训练等同。 72 | 73 | 最近加速卷积网络训练的先进方法提出,具体为为网络的不同层采用模型和数据并行机制。我们发现我们简单的数据并行机制能够在4-GPU上加速3.75倍,与单GPU做对比。GPU使用NVIDIA Titan Black GPUs,训练一个网络大致需要2-3周。 74 | 75 | # 理解点 76 | 77 | 1. 堆叠$3 \times 3$卷积的优势 78 | 2. 网络深度对卷积网络效果的提升 79 | 3. 预训练低层模型参数为深层模型参数初始化赋值。 80 | 4. 多GPU运行(数据并行机制) -------------------------------------------------------------------------------- /Classification/VGG/images/image-20210816132247204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/VGG/images/image-20210816132247204.png -------------------------------------------------------------------------------- /Classification/VGG/images/image-20210816132256011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/VGG/images/image-20210816132256011.png -------------------------------------------------------------------------------- /Classification/Xception/Xception.md: -------------------------------------------------------------------------------- 1 | # Xception 2 | 3 | 原论文:[Xception: Deep Learning with Depthwise Separable Convolutions](https://arxiv.org/abs/1610.02357) 4 | 5 | 从Inception的角度出发,探讨了Inception和深度可分离卷积的关系,从一个全新的角度解释了深度可分离卷积。结合ResNet,提出Xception。 6 | 7 | 论文主要思想在原文第3节。 8 | 9 | ## 3 The Xception architecture 10 | 11 | ​ 我们提出一种完全基于深度可分类卷积层的卷积神经网络架构。实际上,我们做出如下假设:卷积神经网络特征图中的跨通道相关性和空间相关性的映射可以完全解耦。因为这个假设是基于Inception架构假设的更强版本,所以我们将提出的架构命名为Xception,它代表"Extreme Inception"。 12 | 13 | ​ 网络设置的完整描述如图5所示。Xception架构有36个卷积层,构成了网络的特征提取基础。在我们的实验评估中,我们专门研究图像分类,因此我们的架构后面跟着逻辑回归层。一个可选项是可在逻辑回归层之前插入全连接层,这在实验评估部分进行了探讨(特别参见图7和图8)。36个卷积层被构造成14个模块,除了第一个和最后一个模块外,所有模块周围都有线性残差连接。 14 | 15 | ![image-20210831200047408](images/image-20210831200047408.png) 16 | 17 | ![image-20210831195226133](images/image-20210831195226133.png) 18 | 19 | ![image-20210831195612734](images/image-20210831195612734.png) 20 | 21 | ![image-20210831195621660](images/image-20210831195621660.png) 22 | 23 | ​ 简而言之,Xception架构是具有残差连接的深度可分离卷积层的线性堆栈。这使得架构非常容易定义和修改;使用高级库(例如Keras或Tensorflow)只需要30到40行代码,与VGG-16等架构没有什么不同,也不像Inception V2或V3定义那么复杂的架构。在MIT许可下,使用Keras和Tensorflow的Xception的开源实现作为Keras应用程序模块的一部分提供。 24 | 25 | # 理解点 26 | 27 | 1. Xception和深度可分离卷积的关系。 28 | 2. Inception和深度可分离卷积的关系(全新角度解释)。 29 | 30 | -------------------------------------------------------------------------------- /Classification/Xception/images/image-20210831195226133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/Xception/images/image-20210831195226133.png -------------------------------------------------------------------------------- /Classification/Xception/images/image-20210831195612734.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/Xception/images/image-20210831195612734.png -------------------------------------------------------------------------------- /Classification/Xception/images/image-20210831195621660.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/Xception/images/image-20210831195621660.png -------------------------------------------------------------------------------- /Classification/Xception/images/image-20210831200047408.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/Xception/images/image-20210831200047408.png -------------------------------------------------------------------------------- /Classification/ZFNet/ZFNet.md: -------------------------------------------------------------------------------- 1 | # ZFNet 2 | 3 | 原论文:[Visualizing and Understanding Convolutional Networks](https://arxiv.org/abs/1311.2901) 4 | 5 | ILSVRC 2013冠军。 6 | 7 | 主要解决问题:卷积特征图的可视化 8 | 9 | 这篇主要以2、3章翻译为主(方法、训练细节) 10 | 11 | # Abstract 摘要 12 | 13 | Krizhevsky等人已经在ImageNet上验证了大型卷积网络模型的优良分类性能。可是,目前为止还没有对应的理论去理解它们为什么表现这么好以及为什么能提点。在这篇论文中,我们研究了这两个问题。我们引入一种新的可视化技术,能够可视化模型的中间特征层以及分类器的操作。这种可视化技术可以用来解释为什么Krizhevsky等人在ImageNet上分类的模型为什么效果那么好。我们同样做了消融实验来验证模型不同层的作用。我们将在ImageNet上的模型泛化到其他数据集上:重新训练softmax分类器后,它能在Caltech-101和Caltech-256数据集上表现SOTA。 14 | 15 | # 2 Approach 方法 16 | 17 | 18 | 整篇论文中,我们使用的是LeCun等人(LeNet)和Krizhevsky等人(AlexNet)所定义的标准完整自监督卷积模型。这些模型通过将2D的图像输入$x_i$,通过一系列中间层后,映射到C个类别的结果向量$\hat{y_i}$。每一层包含(i)来自上一层的结果输出以及可学习的卷积核集合;(ii) 用整流线性函数$(relu(x)=\max{(x,0)})$作为激活函数;(iii)[可选]局部邻域的最大池化;(iv)[可选]对特征图的局部响应归一化。对于更多细节的展示就要参考AlexNet原文了。图3展示了我们所使用的结构。 19 | 20 | ![image-20210816133149309](images/image-20210816133149309.png) 21 | 22 | 我们使用大型数据集来训练我们的模型,该数据集总共包含N张标签数据${x,y}$,其中$y_i$表示真实类别的离散值。适用于图像分类的交叉熵损失函数用于比较$\hat{y_i}$和$y_i$。网络的参数通过随机梯度下降算法和BP算法传递训练。训练细节在第3节展示。 23 | 24 | ## 2.1 Visualization with a Deconvnet 反卷积可视化 25 | 26 | 理解卷积的操作需要中间层特征图的可解释性。我们推出一种新的方法,将这些中间层结果反卷积成输入像素空间进行展示,从而展示出特征图所包含的激活模式。我们通过使用Zeiler等人提出的反卷积网络来实现这种映射。反卷积可被视为正常卷积模块(卷积、池化)的逆过程,将映射特征的过程反过来。在Zeiler等人的论文中,反卷积可被视为非监督学习的有效方式。但在我们这里,它们不具备自我学习的能力,只是作为对已经训练好的卷积网络的扩展。 27 | 28 | 如图1顶部所示,为了理解一个卷积网络,反卷积网络在每一层中都有应用,提供一种映射回输入图像空间的路径。刚开始,输入图像像正常卷积那样计算特征。为了理解每个卷积的激活效果,我们设置当前层的其他激活为0,然后将这些特征图作为输入应用到对应的反卷积层。接下来我们就使用(i)unpool (ii)rectify (iii)filter 来重建展示当前层的激活效果。 29 | 30 | ![image-20210816133200761](images/image-20210816133200761.png) 31 | 32 | Unpooling: 在卷积网络中,最大池化方法是不可逆的。然而我们可通一组开关变量来记录每个池化区域中的最大值的位置来获得近似的逆。在反卷积中,反池化操作使用这些开关变量来重组当前层的值到对应的位置中去,避免结构的改变。如图1底部所展示的过程。 33 | 34 | Rectification: 卷积使用relu非线性激活函数,能够整流特征图确保特征图总是正值的。为了确保每一层的特征重建的有效性(也是要确保为正值),我们同样经过一个relu非线性激活函数。 35 | 36 | Filtering: 卷积网络使用可训练的卷积核来卷积上一层的输出获得特征图。为了有效的逆反这个过程,反卷积使用同样卷积核的转置版本(就像其他自编码器模型,比如RBMs),但把它应用到整流映射,而不是像之前一样针对输出。在实际使用,这意味着每个卷积核都要垂直方向和水平方向旋转一波。 37 | 38 | 请注意,我们不适用任何对比归一化操作来重建路径。从更高层通过开关变量使得卷积的最大池化向上还原。由于这些开关变量是输入图像特有的,因此从单个激活的重建类似于原始输入图像的一小部分,其结构根据它们对特征激活的贡献进行加权。由于模型的训练是有区别的,这暗含着输入图像哪些部分是有区别的。请注意,这些预测因为不涉及生成过程,所以不是来自于模型的样本。整个生成过程类似于一张特征图的BP过程(与传统的梯度不同)。 39 | 40 | # 3 Training Details 训练细节 41 | 42 | 图3展示了使用的网络模型的整体架构,与Krizhevsky所提出的类似(AlexNet),用于ImageNet的图像分类。一个不同点在于AlexNet中3,4,5层是稀疏连接(2GPU运算),而我们是使用密集连接。另外一个不同点在于1、2层的设置不同,详见原文4.1节。 43 | 44 | 模型训练使用ImageNet 2012训练集(130万张图像,1000种类别)。和AlexNet的预处理一致,每张RGB图像预处理为256维大小的图像,然后将256x256图像按中心和4个角点采样224x224大小的图像,再进行水平翻转。使用SGD优化算法,mini-batch size设为128,学习率为0.01,其中momentum设为0.9。当验证错误稳定时,我们手动降低学习率。Dropout在6、7层使用,随机值设为0.5。所有权重初始化为0.01,偏置初始化为0。 45 | 46 | 47 | 训练期间第一层卷积的可视化表明,第一层的卷积重要性很强。为了解决这个问题,我们将RMS值超过0.1固定半径的卷积层中的每个卷积核重新归一化到这个固定尺寸。这一点对第一层至关重要,输入图像范围大致在[-128, 128]。和AlexNet一致,我们使用多次剪切和翻转每张训练样本来进行数据增强。训练周期为70 epochs,单张GTX580训练耗时大概12天,其它具体实现和AlexNet一致。 48 | 49 | 50 | # 理解点 51 | 52 | 1. 反卷积操作实现对中间层的可视化 53 | 2. 针对可视化结果对网络结构进行改进 -------------------------------------------------------------------------------- /Classification/ZFNet/images/image-20210816133149309.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ZFNet/images/image-20210816133149309.png -------------------------------------------------------------------------------- /Classification/ZFNet/images/image-20210816133200761.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Classification/ZFNet/images/image-20210816133200761.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Alex 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Medical_Imaging/Survey/images/image-20210828190400269.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Medical_Imaging/Survey/images/image-20210828190400269.png -------------------------------------------------------------------------------- /Medical_Imaging/Survey/images/image-20210829163837600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Medical_Imaging/Survey/images/image-20210829163837600.png -------------------------------------------------------------------------------- /Medical_Imaging/Survey/images/image-20210829214056210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Medical_Imaging/Survey/images/image-20210829214056210.png -------------------------------------------------------------------------------- /Object_Detection/CenterNet/CenterNet.md: -------------------------------------------------------------------------------- 1 | # CenterNet 2 | 3 | 原论文:[Objects as Points](https://arxiv.org/abs/1904.07850) 4 | 5 | 直接预测bounding box的中心点和尺寸,预测阶段不需要NMS操作。 6 | 7 | 主要翻译第3、4节。 8 | 9 | ## 3 Preliminary 10 | 11 | ​ 设定$L \in R^{W \times H \times 3}$作为输入图像。我们的目的是产生keypoint heatmap $\hat{Y} \in [0,1]^{\frac{W}{R} \times \frac{H}{R} \times C}$,其中$R$是输出步长,$C$是关键点的类型数量。在人体姿态估计中Keypoint types有$C=17$个人体节点,目标检测中有$C=80$个目标类别。在本文中默认的输出步长$R=4$。输出步长下采样程度根据下降因子$R$来控制。预测$\hat{Y}_{x,y,z}=1$对应一个检测关键点,$\hat{Y}_{x,y,z}=0$为背景类。我们使用剧中不同的全卷积encoder-decoder网络从一张图像来预测$\hat{Y}$:堆叠hourglass网络、ResNet、DLA。 12 | 13 | ​ 用Law and Deng它们的方式训练关键点预测网络。对于属于类别$c$的每个真值关键点$p \in R^2$,低分辨率的同等点为$\tilde{p} = \lfloor \frac{p}{R} \rfloor$。然后将所有真值关键点通过高斯内核$Y_{xyz}= \exp(-\frac{(x-\tilde{p}_x)^2 + (y-\tilde{p}_y)^2}{2 \sigma_p^2})$映射到heatmap $Y \in [0,1]^{\frac{W}{R} \times \frac{H}{R} \times C}$中,其中$\sigma_p$是目标大小自适应标准偏差。如果两个高斯函数拥有相同的类别覆盖,我们按元素取最大值。训练目标是具有focal loss的penalty-reduced pixel-wise logistic regression。 14 | $$ 15 | L_k = \frac{-1}{N} \sum_{xyc} \begin{cases} 16 | (1- \hat{Y}_{xyc})^{\alpha} \log(\hat{Y}_{xyc}) & \text{if }Y_{xyc} = 1 \\ 17 | (1- \hat{Y}_{xyc})^{\beta} (\hat{Y}_{xyc})^{\alpha} &\text{otherwise} \\ 18 | \log(1 - \hat{Y}_{xyc}) 19 | \end{cases} \tag{1} 20 | $$ 21 | 其中$\alpha, \beta$是focal loss的超参数,$N$是图像$I$的关键点总数。$N$用来正则化是用于规范所有positive focal loss instances至1。其中$\alpha = 2, \beta = 4$。 22 | 23 | ​ 为了恢复输出步长导致的离散型误差,我们针对每个center point预测一个本地偏置$\hat{O} \in R^{\frac{W}{R} \times \frac{H}{R} \times 2}$。所有类别共享相同的offset预测。offset使用L1 Loss进行训练: 24 | $$ 25 | L_{off} = \frac{1}{N} \sum_p |\hat{O}_{\tilde{p}} - (\frac{p}{R} - \tilde{p})| \tag{2} 26 | $$ 27 | 监督效果仅在关键点位置$\tilde{p}$起作用,其它位置都被忽略。在下一节中,我们将展示如何扩展这个关键点估计到通用目标检测器中。 28 | 29 | ## 4 Objects as Points 30 | 31 | ​ 设定$(x_1^{(k)}, y_1^{(k)}, x_2^{(k)}, y_2^{(k)})$为关键点$k$为类别$c_k$的边界框。它的中心点在$p_k = ( \frac{x_1^{(k)} + x_2^{(k)}}{2},\frac{y_1^{(k)} + y_2^{(k)}}{2} )$。我们使用关键点估计$\hat{Y}$来预测所有中心点。此外,我们针对每个目标$k$回归目标尺寸$s_k = (x_2^{(k)} - x_1^{(k)}, y_2^{(k)} - y_1^{(k)})$。为了限制计算成本,我们针对所有目标类别使用单个尺寸估算$\hat{S} \in R^{\frac{W}{R} \times \frac{H}{R} \times 2}$。我们使用L1 Loss来针对中心点与真值点的相似度: 32 | $$ 33 | L_{size} = \frac{1}{N} \sum_{k=1}^N |\hat{S}_{p_k} - s_k | \tag{3} 34 | $$ 35 | 我们不标准化尺度并直接使用原始像素坐标。我们改为使用一个常数$\lambda_{size}$来缩放损失。整体的训练目标是: 36 | $$ 37 | L_{det} = L_k + \lambda_{size} L_{size} + \lambda_{off} L_{off} \tag{4} 38 | $$ 39 | 除非特别注明,我们的实验中设置$\lambda_{size}=0.1, \lambda_{off}=1$。我们使用单个网络来预测关键点$\hat{Y}$,偏移量$\hat{O}$,尺寸$\hat{S}$。每个位置预测总共$C+4$的输出。所有输出共享全卷积的backbone网络。对于每种模态,backbone形成的特征之后都会经过$3 \times 3$卷积、ReLU和另一个$1 \times 1$卷积。图4显示了网络输出的整体架构。第5节为额外的架构细节和补充。 40 | 41 | ![image-20210906145429835](images/image-20210906145429835.png) 42 | 43 | **From points to bounding boxes** 44 | 45 | ​ 在推理阶段,我们首先独立提取每个类别的the peaks in the heatmap。我们检测其值大于或等于其8个邻域的所有响应并保留前100个峰值。设定$\hat{P}_c$为$n$个检测中心点属于类别$c$的中心点$\hat{P} = \{(\hat{x}_i, \hat{y}_i)\}_{i=1}^n$。每个关键点位置由整数坐标$(x_i,y_i)$给定。我们使用关键点值$\hat{Y}_{x_iy_ic}$作为其检测置信度的度量,并在位置生成边界框: 46 | $$ 47 | (\hat{x}_i + \delta \hat{x}_i - \hat{w}_i/2, \hat{y}_i + \delta \hat{y}_i - \hat{h}_i/2, \\ \hat{x}_i + \delta \hat{x}_i + \hat{w}_i/2, \hat{y}_i + \delta \hat{y}_i + \hat{h}_i/2,) 48 | $$ 49 | 其中$(\delta \hat{x}_i, \delta \hat{y}_i) = \hat{O}_{\hat{x}_i, \hat{y}_i}$是偏移预测,$(\hat{w}_i, \hat{h}_i) = \hat{S}_{\hat{x}_i,\hat{y}_i}$是尺寸预测。所有输出直接来源于关键点估计而非基于IoU的NMS或其它后处理步骤。峰值关键点提取作为一个足够的NMS替代方案,可以在使用$3 \times 3$卷积的最大池化操作的设备上有效实现。 50 | 51 | ### 4.1 3D detection 52 | 53 | ​ 3D检测估算每个目标的三维边界框,并用额外的每个中心点属性:depth、3D dimension,orientation。为每一个添加额外的检测头。每个中心点预测一个标量$d$,然而,depth预测并没这么直接。我们使用$d= 1/ \sigma(\hat{d})-1$来预测depth,其中$\sigma$为sigmoid函数。我们将depth视为计算关键点预测的额外输出通道$\hat{D} \in [0,1]^{\frac{W}{R} \times \frac{W}{R}}$。它再次使用由ReLU分隔的两个卷积层。与之前的模态不同,它在输出层使用逆sigmoid变换。在sigmoid变换之后,我们在原始depth domain中使用L1 loss训练深度估计器。 54 | 55 | ​ 一个目标的3D维度为3个标量。通过使用检测头$\hat{\varGamma} \in R^{\frac{W}{R} \times \frac{W}{R} \times 3}$和L1 loss来直接回归绝对值。 56 | 57 | ​ 方向默认是个标量。然而,它并不好回归。我们使用two bins with in-bin regression来表示方向。特别是,对于每个orientation使用8个标量表示,每个bin使用4个标量表示。对于每个bin,两个标量用于softmax分类,剩余的用于回归每个bin的角度。在附录中详见这些损失的细节。 58 | 59 | ### 4.2 Human pose estimation 60 | 61 | ​ 人体姿态估计用于估计每个人体实例的$k$个2D人体关节(COCO中$k=17$)。我们设定姿势视为中心点的$k \times 2$维属性,并通过到中心点的偏量堆每个关键点进行参数化。我们直接用L1 Loss回归关键点偏移(在像素点层面)$\hat{J} \in R^{\frac{W}{R} \times \frac{W}{R} \times k \times 2}$,我们通过掩盖损失来忽略不可见的关键点。这导致类似于基于回归的单阶段多人人体姿态估计器slow-RCNN版本。 62 | 63 | ​ 为了微调关键点,我们进一步使用标准的自下而上的多人姿态估计来估计$k$个人体关节点的heatmaps $\hat{\Phi} \in R^{\frac{W}{R} \times \frac{H}{R} \times k}$。我们使用focal loss来训练人体节点heatmap,以及类似于第3节中讨论的中心检测的局部像素偏移。 64 | 65 | ​ 然后,我们将初始预测捕捉到此heatmap上最近检测到的关键点。在这里,我们的中心偏移充当分组提示,将单个关键点检测分配给它们最近的人体实例。特别是,设定$(\hat{x}, \hat{y})$为检测的中心点。我们首先回归所有的关节位置$l_j = (\hat{x}, \hat{y}) + \hat{J}_{\hat{x}\hat{y}j}$,其中$j \in 1 \cdots k$。对于与heatmap$\Phi_{..j}$相对应的关节点$j$,其置信度大于0.1的提取所有关键点位置$L_j=\{\tilde{l}_{ji}\}_{i=1}^{n_j}$。然后我们分配每个回归位置$l_j$到它的邻近检测关键点$\arg \min_{l \in L_j}(l - l_j)^2$,只考虑边界框内检测物体的关节点检测。 66 | 67 | # 理解点 68 | 69 | 1. 直接预测物体bounding box的中心点和尺寸 70 | 2. 预测阶段去除NMS 71 | 72 | -------------------------------------------------------------------------------- /Object_Detection/CenterNet/images/image-20210906145429835.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/CenterNet/images/image-20210906145429835.png -------------------------------------------------------------------------------- /Object_Detection/CornerNet/images/image-20210904123531794.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/CornerNet/images/image-20210904123531794.png -------------------------------------------------------------------------------- /Object_Detection/CornerNet/images/image-20210904124712494.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/CornerNet/images/image-20210904124712494.png -------------------------------------------------------------------------------- /Object_Detection/CornerNet/images/image-20210904135108000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/CornerNet/images/image-20210904135108000.png -------------------------------------------------------------------------------- /Object_Detection/CornerNet/images/image-20210904141557995.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/CornerNet/images/image-20210904141557995.png -------------------------------------------------------------------------------- /Object_Detection/CornerNet/images/image-20210904141818501.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/CornerNet/images/image-20210904141818501.png -------------------------------------------------------------------------------- /Object_Detection/DETR/DETR.md: -------------------------------------------------------------------------------- 1 | # DETR 2 | 3 | 原论文:[End-to-End Object Detection with Transformers](https://arxiv.org/abs/2005.12872) 4 | 5 | 将Transformer引入到目标检测领域的开篇之作。Transformer用作检测头。 6 | 7 | 主要翻译第3节。 8 | 9 | ## 3 The DETR model 10 | 11 | ​ 对检测的直接集合预测很重要的两点是:(1) 集合预测损失需要预测框和真值框的一一匹配。(2) 一个预测一系列目标集合的架构,并建模它们的联系。图2展示详细细节。 12 | 13 | ![image-20210908185944936](images/image-20210908185944936.png) 14 | 15 | ### 3.1 Object detection set prediction loss 16 | 17 | ​ DETR推理一个固定尺寸为$N$的预测,通过decoder单向传播,其中$N$是远远大于一张图像的目标数量的。训练阶段的一个主要困难在于将预测目标(class, position, size) 与ground truth进行一一对应。我们的loss使用一个最优的二分匹配来进行预测目标和真值目标的一一配对,然后再优化特定目标的边界框损失。 18 | 19 | ​ 设定$y$为目标的真值集合,$\hat{y}=\{\hat{y}_i\}_{i=1}^N$为$N$个预测值集合。假定$N$远远大于图像中的目标数量,我们设定$y$为包含$\varnothing$(no object)的大小为$N$的集合。为了在两个集合中找到最佳二分匹配,以最低计算成本搜索N个元素的最小成本: 20 | $$ 21 | \hat{\sigma} = \arg \min_{\sigma} \sum_{i}^N L_{match}(y_i, \hat{y}_{\sigma(i)}) \tag{1} 22 | $$ 23 | 其中$L_{match}(y_i, \hat{y}_{\sigma(i)})$是真值$y_i$和预测坐标值$\sigma(i)$的配对匹配成本。这种最优的分配通过Hungarian algorithm计算。 24 | 25 | ​ 匹配成本是class prediction和the similarity of predicted and ground truth boxes的集合。真值集合中每个元素$i$可被视为$y_i=(c_i,b_i)$,其中$c_i$代表target class label(可为$\varnothing$),同时$b_i \in [0,1]^4$是一个向量,代表ground truth box的中心坐标和它相对于图像大小的高和宽。为了预测$\sigma(i)$位置,我们设定类别$c_i$的概率为$\hat{p}_{\sigma(i)}(c_i)$,预测框为$\hat{b}_{\sigma(i)}$。通过这些设置,我们定义$L_{match}(y_i, \hat{y}_{\sigma(i)}) = - \mathbb{1}_{\{c_i \ne \varnothing \}} \hat{p}_{\sigma(i)}(c_i) + \mathbb{1}_{\{c_i \ne \varnothing \}} L_{box} (b_i, \hat{b}_{\sigma(i)})$。 26 | 27 | ​ 在现代检测器中,这种寻找匹配的方式可作为启发式赋值来匹配proposal或anchors和ground truth objects进行对应。最大的不同在于我们找到一种一对一匹配的方式来直接进行集合预测,并非重复预测。 28 | 29 | ​ 第二步就是计算损失函数,对上一步匹配的对进行Hungarian loss。我们定义和通常的目标检测器损失类似的损失函数,针对类别预测的负似然估计的线性聚合,以及边界框的损失定义如下: 30 | $$ 31 | L_{Hungarian}(y, \hat{y}) = \sum_{i=1}^N [- \log_{\hat{p}_{\hat{\sigma}(i)}}(c_i) + \mathbb{1}_{\{c_i \ne \varnothing \}} L_{box}(b_i, \hat{b}_{\hat{\sigma}}(i))] \tag{2} 32 | $$ 33 | 其中$\hat{\sigma}$是上一步计算出最佳匹配。在实践中,为了解决类别不平衡,我们将类别为$c_i = \varnothing$的目标的似然估计权值降低10倍。这与Faster-RCNN训练正负样本的方式等同。值得注意的是,一个目标和$\varnothing$之间的计算成本不取决于预测值,这意味着在该例子中计算量为常量。这使得类预测项与$L_{box}(\cdot,\cdot)$(如下所述)相称,并且我们观察了更好的经验表现。 34 | 35 | **Bounding box loss** 36 | 37 | ​ 这是匹配成本的第二部分,也是Hungarian loss的边界框损失分数。不同于对预测做一些初始化猜测的边界框预测,我们直接进行边界框预测。虽然这种方法简化了实现,但它带来了损失相对缩放的问题。最常用的L1 Loss对于大小不同的boxes会有不同的尺度,即使它们相对误差相似。为了解决这个问题,我们使用了L1 Loss和GIoU loss的线性聚合。$L_{iou}(\cdot,\cdot)$是尺度不变的。总之,我们的box loss是$L_{box}(b_i, \hat{b}_{\sigma(i)})$,它定义为$\lambda_{iou} L_{iou}(b_i, \hat{b}_{\sigma(i)}) + \lambda_{L1}||b_i - \hat{b}_{\sigma(i)}||_1$,其中$\lambda_{iou}, \lambda_{L1} \in \mathbb{R}$属于超参数。这两个损失由批次内的对象数量标准化。 38 | 39 | ### 3.2 DETR architecture 40 | 41 | ​ 整体的DETR架构是极其简单的,如图2所展示的那样。它包含了3种不同的部件:一个用于特征提取的CNN backbone,一个encoder-decoder transformer,一个简单的FFN用于最终的目标预测。 42 | 43 | ​ 不同于现在的检测器,DETR能够在许多深度学习框架中简单实现,只要它提供CNN backbone和transformer架构。用PyTorch实现的话代码量少于50行。我们希望这种方法的简易性能够吸引更多的研究者致力于检测领域。 44 | 45 | **Backbone** 46 | 47 | ​ 初始图像大小为$x_{img} \in \mathbb{R}^{3 \times H_0 \times W_0}$。卷积的CNN backbone产生的低维特征图$f \in \mathbb{R}^{C \times H \times W}$。我们使用的结果为$C=2048, H = \frac{H_0}{32}, \frac{W_0}{32}$。 48 | 49 | **Transformer encoder** 50 | 51 | ​ 首先,一个$1 \times 1$卷积用于降维,将backbone产生的特征图$f$的通道维度降低为$d$。从而形成一个新的特征图$z_0 \in \mathbb{R}^{d \times H \times W}$。encoder希望一个序列作为输入,因此我们将$z_0$的空间维度压缩成一个维度,形成结果特征图$d \times HW$。每个encoder layer拥有一个标准结构,并由多头自注意力模块和一个FFN组成。transformer结构是permutation-invariant的,我们额外添加固定的positional encoding到每个attention层。 52 | 53 | **Transformer decoder** 54 | 55 | ​ decoder使用transformer的标准结构,使用多头自注意力机制转换$N$个大小为$d$的向量。与原始transformer机制不同的是,我们的模型并行的 decodes $N$个目标。decoder也是permutation-invariant的,N个input embeddings应当产生不同的输出。这些input embeddings是learnt positional encodings,称之为object queries,与encoder中的类似,我们将它们与每个attention layer相加。N个object queries转换成对应的output embedding。然后通过FFN层分别转换成对应的边界框坐标和类别标签,最终产生$N$个结果。 56 | 57 | **Prediction feed-forward networks(FFNs)** 58 | 59 | ​ 最终的预测是通过一个3-layer perceptron以及ReLU激活函数,隐藏维度$d$,和一个linear projection layer生成。FFN预测规范化后的中心坐标,边界框的高和宽。线性层使用softmax函数预测类别标签。预测固定大小的$N$个边界框,其中$N$远远大于一张图片中的潜在目标数量,一个额外的类别标签$\varnothing$用于表示没有目标。可视为标准目标检测方法中的"background"类别。 60 | 61 | **Auxiliary decoding losses** 62 | 63 | ​ 在训练期间我们发现使用auxiliary losses非常有用,特别是帮厨模型输出每个目标类别的正确数量。在每个decoder层后添加预测FFNs层和Hungarian loss。所有预测FFNs层共享它们的参数。我们使用额外的共享layer-norm来正则化FFNs的不同decoder层的输出。 64 | 65 | # 理解点 66 | 67 | 1. 将Transformer用于目标检测的开山之作 68 | 2. Hugarian algorithm 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Object_Detection/DETR/images/image-20210908185944936.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/DETR/images/image-20210908185944936.png -------------------------------------------------------------------------------- /Object_Detection/EfficientDet/EfficientDet.md: -------------------------------------------------------------------------------- 1 | # EfficientDet 2 | 3 | 原论文:[EfficientDet: Scalable and Efficient Object Detection](https://arxiv.org/abs/1911.09070) 4 | 5 | 引入BiFPN,目标检测的大跨步。 6 | 7 | 主要翻译3、4节。 8 | 9 | ## 3 BiFPN 10 | 11 | ​ 在该节中,我们首先介绍多尺度特征融合问题,然后提出我们的BiFPN主要思想:efficient bidirectional cross-scale connections 和 weighted feature fusion。 12 | 13 | ### 3.1 Problem Formulation 14 | 15 | ​ 多尺度特征融合致力于融合不同分辨率的特征。正式的说,给定多尺度特征列表$\overrightarrow{P}^{out} = (P_{l_1}^{in}, P_{l_2}^{in}, \cdots)$,其中$P_{l_i}^{in}$代表$l_i$层的特征,我们的目标是要找一种转换方式$f$将不同的特征聚合,并输出一个特征集合:$\overrightarrow{P}^{out} = f(\overrightarrow{P}^{in})$。具体的例子,图2(a)显示了自上而下的卷积FPN。它吸纳3-7级的输入特征$\overrightarrow{P}^{in}=(P_3^{in}, \cdots, P_7^{in})$,其中$P_i^{in}$表示该级特征图为输入图像分辨率的$1/2^i$。举个例子,如果输入分辨率为$640\times 640$,那么$P_3^{in}$表示第3级特征图($640/2^3=80$),分辨率为$80 \times 80$,其中第7级特征,分辨率变为$5 \times 5$。卷积FPN以自上而下的方式进行多尺度特征聚合。 16 | 17 | ![image-20210910132035405](images/image-20210910132035405.png) 18 | 19 | ### 3.2 Cross-Scale Connections 20 | 21 | ​ 传统的自上而下的FPN受限于单向信息流。为了解决这个问题,PANet添加了一个额外的自下而上的聚合路径,如图2(b)所展示的那样。Cross-scale的连接也被进一步研究了。最近,NAS-FPN使用NAS来搜索更好的跨尺度特征网络拓扑结构,但它需要大量的GPU时间用于搜索,并且搜索到的网络是不够稳定或微调的。如图2(c)所展示的。 22 | 23 | ​ 通过研究这三个网络的表现和有效性(表5)。我们发现PANet达到了比FPN和NAS-FPN更好的准确度,但消耗了更多的参数和计算量。为了提高模型的效率,本文提出了几个优化cross-scale connections的方法:第一,我们移除哪些只包含单个input edge的nodes。初始动机很简单:如果一个input edge不包含特征融合,那么它对不同特征融合的贡献度不同。这推导出简单的bidirectional network;第二,我们添加了额外的边从输入到输出,并且假定它们在相同的层,为了保证在不添加额外的消耗下进行特征融合;第三,不同于PANet只有一条自上而下和自下而上的路径,我们将每个bidrectional path视为一个特征网络层,重复相同的层多次,以确保更多的高层特征融合。图2、3展示了我们新的特征网络BiFPN。 24 | 25 | ![image-20210910134305028](images/image-20210910134305028.png) 26 | 27 | ![image-20210910141116959](images/image-20210910141116959.png) 28 | 29 | ### 3.3 Weighted Feature Fusion 30 | 31 | ​ 当融合不同分辨率的特征时,首先是将它们resize成相同分辨率,然后将它们相加。Pyramid attention network引入了global self-attention upsampling来恢复像素定位。所有先前的工作都对输入特征一视同仁。然而,我们发现,由于不同分辨率的输入特征,通常对输出特征的贡献不均等。为了解决这个问题,我们提出了在每个输入添加额外的权重,然后让网络自主学习每个输入特征的重要性。基于这个想法,我们考虑3种加权融合方法: 32 | 33 | **Unbounded fusion** 34 | 35 | ​ $O=\sum_i w_i \cdot I_i$,其中$w_i$是可学习的权重,可为scalar(per-feature),vector(per-channel),或multi-dimensional tensor(per-pixel)。我们发现相比其他低计算量的方法,一个标量能够达到具有竞争性的准确度。然而,标量权重是无穷的,它可能会导致训练的不稳定性。因此,我们针对每个权重进行了权重正则化到一定区间。 36 | 37 | **Softmax-based fusion** 38 | 39 | ​ $O= \sum_i \frac{e^{w_i}}{\sum_j e^{w_j}}$。初始动机是,将softmax应用到每个权重,这样就归化到了0-1范围。代表每个输入的重要性。 40 | 41 | **Fast normalized fusion** 42 | 43 | ​ $O = \sum_i \frac{w_i}{\epsilon + \sum_j w_j}$。其中$w_i \ge 0$通过在每个$w_i$后应用ReLU保证,$\epsilon = 0.0001$是一个小的数值从而保证数值的稳定性。相似的,每个正则权值在0-1范围。相比softmax方式,速度更快,并且和softmax效果差不多。 44 | 45 | ## 4 EfficientDet 46 | 47 | ​ 基于我们提出的BiFPN,我们开发了EfficientDet目标检测器系列。在该节中,我们讨论下网络结构,以及一种新的compound scaling method用于EfficientDet。 48 | 49 | ### 4.1 EfficientDet Architecture 50 | 51 | ​ 图3展示EfficientDet的整体架构,遵循one-stage detectors原则。我们使用预训练的EfficientNets作为backbone。我们提出的BiFPN类似特则会那个网络,从backbone网络中提取3-7级特征,然后重复自上而下和自下而上路径进行双向特征融合。这些融合的特征送入class和box网络进行预测。和RetinaNet类似,class和box分支共享所有层的特征。 52 | 53 | ### 4.2 Compound Scaling 54 | 55 | ​ 为了最优化速度和准确度的平衡,我们发展了一系列模型来满足不同的资源受限的条件下。这里的一个关键挑战在于如何对baseline EfficientDet模型进行尺度变换。 56 | 57 | ​ 先前的工作都是对大的backbone网络尺度变换baseline detector,通过使用大的输入图像,或者堆叠更多FPN层。这些方法通常是无效的,因为它们只关注单一或有限的缩放维度。最近的工作展示了联合网络width、depth、input resolution进行尺度变换的有效方法。受这些方法启发,我们提出了一种的用于目标检测的新的compound scaling method,它采用一个单一的compound coefficient $\phi$ 用于联合尺度变换backbone所有维度。 58 | 59 | **Backbone network** 60 | 61 | ​ 我们使用和EfficientNet-B0 to B6相同的width/depth scaling coefficients。从而我们能轻松使用ImageNet-pretrained checkpoints。 62 | 63 | **BiFPN network** 64 | 65 | ​ 我们线性地增加BiFPN深度$D_{bifpn}$(#layers),因为深度需要四舍五入为小整数。对于BiFPN的宽度$W_{bifpn}$(#channels),与[39]类似,以指数形式增长BiFPN宽度$W_{bifpn}$(#channels)。特别是,我们在一个值列表$\{1.2, 1.25, 1.3, 1.35, 1.4, 1.45\}$里面选择最佳的值1.35作为BiFPN的width scaling factor。正式的,BiFPN的的width和depth遵从以下变换规则: 66 | $$ 67 | W_{bifpn} = 64 \cdot (1.35^{\phi}), \space \space D_{bifpn} = 3 + \phi \tag{1} 68 | $$ 69 | **Box/class prediction network** 70 | 71 | ​ 我们使用和BiFPN的同样的width来固定($W_{pred}=W_{bifpn}$)。使用如下等式线性增长depth(#layers): 72 | $$ 73 | D_{box} = D_{class} = 3 + \lfloor \phi/3 \rfloor \tag{2} 74 | $$ 75 | **Input image resolution** 76 | 77 | ​ BiFPN里面使用3-7级特征,输入分辨率会被下降$2^7=128$倍,所以我们使用以下等式线性增长分辨率: 78 | $$ 79 | R_{input} = 512 + \phi \cdot 128 \tag{3} 80 | $$ 81 | 利用等式1,2,3和不同的$\phi$,我们构建了如表1所示的EfficientDet-D0($\phi=0$) to EfficientDet-D7($\phi=7$)。其中D7和D7x拥有相同的BiFPN和检测头,但是D7使用高分辨率,D7x使用大的backbone网络和更多级的特征图(从$P_3$到$P_8$)。 82 | 83 | 84 | 85 | # 理解点 86 | 87 | 1. 尺度缩放方法用于BiFPN的构建 88 | 2. BiFPN架构 89 | 90 | -------------------------------------------------------------------------------- /Object_Detection/EfficientDet/images/image-20210910132035405.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/EfficientDet/images/image-20210910132035405.png -------------------------------------------------------------------------------- /Object_Detection/EfficientDet/images/image-20210910134305028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/EfficientDet/images/image-20210910134305028.png -------------------------------------------------------------------------------- /Object_Detection/EfficientDet/images/image-20210910141116959.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/EfficientDet/images/image-20210910141116959.png -------------------------------------------------------------------------------- /Object_Detection/FCOS/images/image-20210904192039265.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/FCOS/images/image-20210904192039265.png -------------------------------------------------------------------------------- /Object_Detection/FCOS/images/image-20210904203722093.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/FCOS/images/image-20210904203722093.png -------------------------------------------------------------------------------- /Object_Detection/FCOS/images/image-20210904205149452.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/FCOS/images/image-20210904205149452.png -------------------------------------------------------------------------------- /Object_Detection/FCOS/images/image-20210904213019806.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/FCOS/images/image-20210904213019806.png -------------------------------------------------------------------------------- /Object_Detection/FCOS/images/image-20210904215306631.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/FCOS/images/image-20210904215306631.png -------------------------------------------------------------------------------- /Object_Detection/FPN/FPN.md: -------------------------------------------------------------------------------- 1 | # FPN 2 | 3 | 原论文:[Feature Pyramid Networks for Object Detection](https://arxiv.org/abs/1612.03144) 4 | 5 | 实现浅层特征和深层特征的融合。 6 | 7 | 8 | 9 | 主要思想在于第3节。 10 | 11 | ## 3 Feature Pyramid Networks 特征金字塔网络 12 | 13 | ​ 我们的目标在于探索一个属于卷积网络的金字塔型特征层次,它拥有从低级到高级的语义特征,并构建一个具有高级语义的特征金字塔。由此产生的特征金字塔网络是通用的,在本文中,我们专注于滑动窗口提议器(区域提议网络,RPN)和基于区域的检测器(Fast R-CNN)。 14 | 15 | ​ 我们方法的输入为任意大小的单尺度图片,并用全卷积的方式输出多个级别成比例大小的特征图。该过程独立于主干卷积架构,在本文中,我们使用ResNets展示结果。我们金字塔的构建涉及自下而上的路径、自上而下的路径和横向连接,如下所述。 16 | 17 | 18 | 19 | **Bottom-up pathway 自下而上的路径** 20 | 21 | ​ 自下而上的路径是主干ConvNet的前馈计算,它计算由多个尺度的特征图组成的特征层次结构,缩放步长为2。通常有很多层产生相同大小的输出图,我们说这些层在同一个stage。对于我们的特征金字塔,我们定义一个stage为一个金字塔级别。我们选择每个stage的最后一层的输出作为我们的特征图引用集合,我们将丰富它(某种方式)然后创建我们的金字塔。这种选择是很自然的,因为每个stage的最深层应该具有最强的特征。 22 | 23 | ​ 特别是,对于ResNet系列而言,我们使用每个stage的最后一个residual block的激活特征结果。我们定义这些residual block的输出为$\{C_2, C_3, C_4, C_5\}$对应为conv2、conv3、conv4、conv5的输出,分别对应输入图像下采样$\{4,8,16,32\}$倍。由于其大内存占用,我们没有将conv1包含在金字塔中。 24 | 25 | 26 | 27 | **Top-down pathway and lateral connections 自上而下的路径和横向连接** 28 | 29 | ​ 自上而下的路径通过对来自更高金字塔级别的空间上更粗糙但语义上更强大的特征图进行上采样来幻化更高分辨率的特征。然后这些特征通过横向连接从自下而上的路径中得到增强。每个横向连接从自下而上的路径和自上而下的路径合并相同空间大小的特征图。自下而上的特征图具有较低级别的语义,但由于它被下采样的次数较少,能够更准确地定位。 30 | 31 | ​ 图3显示了构建自上而下特征图的构建块。对于较粗分辨率的特征图,我们将空间分辨率上采样2倍(为简单起见,使用最近邻上采样)。然后上采样特征图和对应的自下而上特征图汇合(通过$1 \times 1$卷积层来降低通道维度),通过按元素相加。这个过程迭代进行,知道最终分辨率的特征图生成。为了开始迭代流程,我们简单的在$C_5$层附加$1 \times 1$卷积层来生成最粗分辨率图。最后,在每个汇总后的特征图上使用$3 \times 3$卷积来生成最终特征图,这是为了减少上采样的混叠效应。特征图的最终集合称为$\{P_2, P_3, P_4, P_5\}$,分别对应$\{C_2, C_3, C_4, C_5\}$,拥有相同的空间大小。 32 | 33 | ![image-20210830161557169](images/image-20210830161557169.png) 34 | 35 | ​ 因为金字塔的所有层次都使用共享的分类分支/回归分支,与传统特征化图像金字塔中的一样,我们在所有特征图中固定特征维度(通道数,表示为d)。设置$d=256$,然后所有额外的卷积层的输出都是256维。这些额外层中不包含非线性操作,依据经验发现它们的影响很小。 36 | 37 | ​ 简化是我们设计的核心,并且我们发现我们的模型对很多设计结构都具有鲁棒性。我们在很多当前先进的blocks进行了实验验证,发现表现优于之前的模型。设计更好的连接模型不是本文的重点,因此我们选择了上述的简单设计。 38 | 39 | 40 | 41 | # 理解点 42 | 43 | 1. 借鉴ResNet的跳接操作,结合浅层特征和深层特征。 44 | 2. 在不同分辨率的特征图上做预测。 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Object_Detection/FPN/images/image-20210830161557169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/FPN/images/image-20210830161557169.png -------------------------------------------------------------------------------- /Object_Detection/Fast_R-CNN/images/image-20210816092339793.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Fast_R-CNN/images/image-20210816092339793.png -------------------------------------------------------------------------------- /Object_Detection/Fast_R-CNN/images/image-20210816123717144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Fast_R-CNN/images/image-20210816123717144.png -------------------------------------------------------------------------------- /Object_Detection/Faster_R-CNN/images/image-20210817142701700.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Faster_R-CNN/images/image-20210817142701700.png -------------------------------------------------------------------------------- /Object_Detection/Faster_R-CNN/images/image-20210817144006017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Faster_R-CNN/images/image-20210817144006017.png -------------------------------------------------------------------------------- /Object_Detection/Faster_R-CNN/images/image-20210817150427267.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Faster_R-CNN/images/image-20210817150427267.png -------------------------------------------------------------------------------- /Object_Detection/Faster_R-CNN/images/image-20210817151736637.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Faster_R-CNN/images/image-20210817151736637.png -------------------------------------------------------------------------------- /Object_Detection/Faster_R-CNN/images/image-20210817155446114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Faster_R-CNN/images/image-20210817155446114.png -------------------------------------------------------------------------------- /Object_Detection/Faster_R-CNN/images/image-20210817170307928.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/Faster_R-CNN/images/image-20210817170307928.png -------------------------------------------------------------------------------- /Object_Detection/R-CNN/R-CNN.md: -------------------------------------------------------------------------------- 1 | # RCNN 2 | 3 | 原论文:[Rich feature hierarchies for accurate object detection and semantic segmentation](https://arxiv.org/abs/1311.2524) 4 | 5 | 将检测任务转化为区域上的分类任务,是深度学习方法在检测任务上的试水。 6 | 7 | 论文架构: 8 | 1. 引文(介绍CNN之前的一些尝试) 9 | 2. R-CNN目标检测架构 10 | 3. 结果可视化、消融实验 11 | 4. ILSVRC2013目标检测数据集 12 | 5. 语义分割 13 | 6. 结论 14 | 15 | 主要思想为 第2节,以此作翻译+理解。 16 | 17 | ## 2 Object detection with R-CNN 用R-CNN作目标检测 18 | 19 | 我们的目标检测系统包括3个模块。第一个模块产生类别独立的区域生成框。这些生成框是我们目标检测器检测的候选目标集合。第二个模块是一个大型的卷积神经网络,用于提取固定区域大小的特征向量。第三个模块是线性SVM类别分类器。在该章节中,我们介绍每个模块的详细设计,介绍它们在测试期间的使用,展示参数是如何学习的,展示在PASCAL VOC 2010-12和ILSVRC2013上的结果。 20 | 21 | 22 | 23 | ### 2.1 Module design 模块设计 24 | 25 | Region proposals. 用于生成类别独立的区域生成框的论文方法有很多。其中包括:objectness, selective search, category-independent object proposals, constrained parametric min-cuts(CPMC), multi-scale combinatorial grouping, Ciresan等人提出的用CNN提取规则间隔的方形区域方法。在上述方法中,我们选择selective search作为区域生成的方法。 26 | 27 | Feature extraction. 我们使用由Caffe实现的AlexNet网络提取每一个区域生成块的4096维的特征向量。特征的计算通过将$227 \times 227$RGB的图像经过5层卷积网络和两层全连接层的前向计算得来。我们提醒读者去阅读Caffe和AlexNet两篇文章获取更多网络细节。 28 | 29 | 为了从一个区域生成框中计算特征,我们必须将区域中的图像数据转成能够输入到CNN中的格式(它要求输入图像大小固定为$227 \times 227$)。对于我们生成的任意大小的图像,我们优先选择最简单的。不管候选区域的大小或者纵横比多少,我们将围绕它的边界框将所有像素扭曲成固定大小。在变形之前,我们先扩张边界框,这样就能让原始框恰好有$p$个像素的变形图像上下文(固定使用$p=16$)。 30 | 31 | ![image-20210816132030736](images/image-20210816132030736.png) 32 | 33 | ### 2.2 Test-time detection 测试期间检测 34 | 35 | 在测试时间,我们使用selective search算法在测试图像上提取2000个生成区域(在所有例子中,使用selective search的快速模式)。将每个区域形变至固定大小然后送进CNN中前向计算特征。然后,对每个类别,我们使用训练好的SVM分类器依据每个提取的特征进行分类。给定一张图像的所有区域分数,我们应用贪婪NMS算法(每个类别单独使用),通过计算IoU值,当它达到一定值后就将它覆盖。 36 | 37 | Run-time analysis. 两个方法使得检测高效。第一,所有CNN参数由所有类别共享。第二,与其它现有方法相比,CNN计算的特征向量具有低维特性,例如具有视觉词袋编码的空间金字塔。举个例子,UVA检测系统中使用的特征,比我们的特征维度大两个数量级。(360k vs 4k-dimensional) 38 | 39 | 这种特征共享的结果是区域生成和特征计算由所有类别共同享有(13s/image on a GPU or 53s/image on a CPU)。按类别计算的部分为特征与SVM权重的点积和NMS算法。在实践中,所有图像的点积计算都被包装成简单的矩阵-矩阵运算。特征矩阵大小为$2000 \times 4096$,SVM权重矩阵为$4096 \times N$,其中$N$是类别的数量。 40 | 41 | 经过该分析可知,R-CNN能够扩展到数千个对象类,而无需求助于近似技术,例如哈希。即使这里有100k种类别,结果矩阵也只需要在多核CPU中花费10秒计算。这种高效不仅仅是区域生成和特征共享的结果。UVA系统由于它的高维特征,比我们慢2个数量级,并且需要134GB的内存空间来存储100k的线性预测,与我们的低维特征并且只占1.5GB的情况相比的话。 42 | 43 | ### 2.3 Training 训练 44 | 45 | Supervised pre-training. 我们将CNN放在大型数据集上进行预训练。使用开源的Caffe CNN库。简而言之,我们的CNN与AlexNet表现大致匹配,在ILSVRC2012验证集上top-1错误率提升了2.2个点。这得益于训练流程的简化。 46 | 47 | Domain-specific fine-tuning. 为了将我们的CNN适用到新的任务(检测)以及新的领域(形变区域框),我们继续使用SGD算法训练CNN参数,只使用形变的区域生成框。与在ImageNet上的CNN的1000种类别分类层不同的是,我们使用随机初始化的$(N+1)$类别分类层(其中$N$是目标类别数量,外加1个背景类别),CNN架构未改变。对VOC数据集而言,$N=20$;对ILSVRC2013数据集而言,$N=200$。NMS参数阈值设置为0.5。SGD的学习率设置为0.001(是预训练设置的十分之一),这允许在不破坏初始化的情况下,微调能得到想要的效果。在每次SGD迭代中,我们使用32种正类(在所有类别中)和96种负类框组成128 batch size。我们偏向于采样正样本框是因为与背景框相比它们数量太少。 48 | 49 | Object category classifiers. 假设训练一个二分类器来检测汽车。可以想象,包含汽车的所有框都应该是正样本,相似的,没有包含汽车的应该属于负样本。不清晰的点在于如何标记包含汽车的框。我们使用IoU重叠阈值来解决这个问题,低于阈值的区域就属于负样本。阈值选择了0.3。我们发现阈值选择至关重要。当把它设为0.5后,mAP下降了5个点。同样的,设置为0也下降了4个点。正样本简单地定义为每个类别地真实边界框。 50 | 51 | 一旦特征提取好,训练类别标记好,我们给每个类别使用一个线性SVM分类。因为训练集过去庞大,我们采样标准的难例挖掘算法。该算法收敛块,并且在实验中,仅通过一次遍历所有图像,mAP即可保持稳定。 52 | 53 | 在附录B中,我们讨论了为什么在微调和SVM训练阶段正负样本定义不同。我们还讨论了训练检测SVM所涉及的权衡,而不是简单的使用来自微调CNN的最终softmax层的输出。 54 | 55 | # 理解点 56 | 57 | 1. CNN可用于基于区域的定位和分割物体。 58 | 2. 用分类网络(ImageNet)预训练好的模型作为基网络,在检测问题上fine-tuning的方法在之后的任务中经常使用。 59 | 3. 检测任务如何转化成区域上的分类任务,将分类任务和检测任务联系起来。 60 | 4. CNN用于特征提取的通用性。 -------------------------------------------------------------------------------- /Object_Detection/R-CNN/images/image-20210816132030736.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/R-CNN/images/image-20210816132030736.png -------------------------------------------------------------------------------- /Object_Detection/R-FCN/R-FCN.md: -------------------------------------------------------------------------------- 1 | # R-FCN 2 | 3 | 原论文:[R-FCN:Object Detection via Region-based Fully Convolutional Networks](https://arxiv.org/abs/1605.06409) 4 | 5 | 主要解决:分类任务中位移不变性和检测任务中位移可变性之间的矛盾 6 | 7 | 论文架构: 8 | 9 | 1. 引文(介绍CNN发展情况,引出分类任务和检测任务的矛盾,R-FCN用于解决这个矛盾) 10 | 2. 方法 11 | 3. 相关工作 12 | 4. 实验 13 | 5. 结论和未来期望 14 | 15 | 以第二节翻译为主 16 | 17 | ## 2 Our approach 18 | 19 | **Overview.** 20 | 21 | ​ 与R-CNN相似,我们采用两阶段目标检测策略,包含:(i) 区域生成,(ii) 区域分类。虽然不依赖区域生成框的方法确实存在,但基于区域生成的系统在几个benchmarks上都达到了更高的准确度。我们通过RPN网络获取候选框,它是全卷积的架构。跟Faster R-CNN类似,我们在RPN和R-FCN之间共享特征。图2显示了我们系统的整体架构。 22 | 23 | ![image-20210827145936819](images/image-20210827145936819.png) 24 | 25 | ​ 给定RoIs,R-FCN架构用于实现将RoIs分类为目标类别和背景。在R-FCN中,所有可学习的层都是卷积层,并且在整个图像上进行计算。最后的卷积层生成针对每个类别的$k^2$个位置敏感分数特征图,因此输出层含有$k^2(C+1)$个通道,其中$C$是目标类别数,$1$是指背景。$k^2$的分数图对应$k \times k$的空间单元的相对位置。举个例子,$k \times k = 3 \times 3$,9个分数图编码每个目标类别的位置{左上,中上,右上,...,右下}。 26 | 27 | ​ R-FCN以位置敏感的RoI池化层(position-sensitive RoI pooling layer)结束。该层聚合了最后卷积层的输出并且生成每个RoI的分数。不同于Fast R-CNN和SPPNet,我们的position-sensitive RoI layer进行选择性池化(selective pooling),每$k \times k$ bin聚合了来自$k \times k$个分数图中的一个分数图。通过端到端训练,这个RoI层引导最后一个卷积层来学习专用的位置敏感分数图。图1揭示了这个想法,图3和图4可视化了一个例子。细节展示如下。 28 | 29 | ![image-20210827153037333](images/image-20210827153037333.png) 30 | 31 | ![image-20210827153716674](images/image-20210827153716674.png) 32 | 33 | **Backbone architecture.** 34 | 35 | ​ 本文中的R-FCN采用ResNet-101作为backbone,尽管其它网络(AlexNet、VGG)也适用。ResNet-101包含100个卷积层,后接全局平均池化层和1000类别的全连接层。我们移除平均池化层和全连接层,只使用卷积层来计算特征图。我们使用在ImageNet上预训练好的ResNet-101。ResNet-101最后卷积层的输出结果为2048维,我们后接一个随机初始化的1024维的$1 \times 1$卷积层用于降维(准确来说,将表1的深度增加了1)。然后我们应用$k^2(C+1)$通道的卷积层来生成分数图,就像之后介绍的那样。 36 | 37 | ![image-20210827154454090](images/image-20210827154454090.png) 38 | 39 | **Position-sensitive score maps & Position-sensitive RoI pooling.** 40 | 41 | ​ 为了将位置信息明确编码到每个RoI中,我们将每个RoI矩形通过规则网格划分为$k \times k$个bin。对于大小为$w \times h$的一张RoI,一个bin的大小约为$\frac{w}{k} \times \frac{h}{k}$。在我们的方法中,最后的卷积层用于生成$k^2$个针对每个类别的分数图。在$(i,j)$个bin中($0 \le i,j \le k-1$),我们定义position-sensitive RoI pooling操作为仅在第$(i,j)$个得分图上进行池化: 42 | $$ 43 | r_c(i,j|\Theta) = \sum_{(x,y) \in bin(i,j)} z_{i,j,c}(x+x_0, y+y_0|\Theta)/n \tag{1} 44 | $$ 45 | 其中$r_c(i,j)$指的是第$(i,j)$个bin针对第$c$个类别的响应,$z_{i,j,c}$指的是$k^2(C+1)$个分数图中的一个,$(x_0,y_0)$定义为RoI的左上角,$n$指的是该bin中的像素数量,$\Theta$定义为网络中所有可训练的参数。第$(i,j)$个bin的像素范围为$\lfloor i \frac{w}{k} \rfloor \le x < \lceil (i+1)\frac{w}{k} \rceil, \lfloor j \frac{h}{k} \le y < \lceil (j+1) \frac{h}{k} \rceil$。(1)式的计算在图1中展示出来了,其中一种颜色代表一个$(i,j)$。等式(1)使用的平均池化(通篇论文也是使用的它),其实最大池化表现得也不错。 46 | 47 | ​ $k^2$个位置敏感分数对RoI进行投票。在该论文中,我们通过平均分数来简化投票过程,对每个RoI产生产生$(C+1)$维的向量:$r_c(\Theta)=\sum_{i,j}r_c(i,j|\Theta)$。然后我们针对类别计算softmax响应:$s_c(\Theta)=e^{r_c(\Theta)}/ \sum_{c'=0}^C e^{r_c'(\Theta)}$。它们用于评估训练期间的交叉熵损失和推理期间的RoI排名。 48 | 49 | ​ 然后我们使用同样的方法来解决边界框回归问题。与上述$k^2(C+1)$维卷积层并行的是,我们另开一个分支$4k^2$维用于边界框回归。position-sensitive RoI pooling 是在这$4k^2$张图上进行的,针对每个RoI产生$4k^2$维度向量。然后通过average voting生成4维向量。这个4维向量按照Fast R-CNN中的方式参数化边界框为$t=(t_x,t_y,t_w,t_h)$。我们注意到,为了简单起见,我们执行了与类无关的边界框回归,但特定于类的对应物(拥有$4k^2C$维的输出层)也是适用的。 50 | 51 | **Training.** 52 | 53 | ​ 使用预计算的区域生成框,可以轻松地实现端到端地训练R-FCN架构。与Fast R-CNN一致,我们针对每个RoI的损失函数定义为交叉熵损失函数和边界框回归损失函数的总和:$L(s,t_{x,y,w,h})=L_{cls}(s_{c^*}) + \lambda[c^* > 0]L_{reg}(t,t^*)$。这里的$c^*$指的是RoI的真值标签($c^*$指的是背景)。$L_{cls}(s_{c^*})=- \log{(s_{c^*})}$指的是用于分类的交叉熵损失函数,$L_{reg}$指的是Fast R-CNN中定义的边界框回归损失函数,$t^*$指的是真值框。$[c^* > 0]$指的是该项如果存在就为1,否则为0。将平衡权重值设为$\lambda=1$。我们将正例定义为与真值框IoU重叠度超过0.5的RoI,其余的为负例。 54 | 55 | ​ 我们的方法很容易在训练期间采用在线难例挖掘(OHEM)。我们可以忽略不计的per-RoI计算实现了几乎免费的示例挖掘。假设每个图像有N个生成框,在前向传播阶段,我们评估所有N个生成框的损失。然后我们按损失对所有RoI(正的和负的)进行排序,并选择具有最高损失的$B$个RoI。反向传播是基于所选示例执行的。因为我们的per-RoI计算可以忽略不计,所以前向传播时间几乎不受$N$的影响,与OHEM相反,Fast R-CNN会使训练时间加倍。 56 | 57 | ​ 权重衰减为0.0005,momentum设置为0.9。默认我们使用单尺度训练:图像大小重整为最短边为600像素大小。每个GPU训练一张图片,选择$B=128$个RoI用于反向传播。使用8张GPU进行训练。我们使用0.001的学习率进行微调R-FCN的前20k mini-batches,使用0.0001学习率微调后10k mini-batches,在VOC数据集上。我们使用Faster R-CNN的四步训练法来实现共享特征的训练,在RPN和R-FCN训练中交替实现。 58 | 59 | **Inference.** 60 | 61 | ​ 正如图2揭示的一样,RPN和R-FCN的共享特征图的计算在单一尺度为600的单一图像上。然后RPN部分生成RoIs,R-FCN部分评估类别得分并回归边界框。在推理期间,为了公平比较,我们像Faster R-CNN一样评估了300个RoIs。结果的后处理使用NMS算法,设置IoU阈值为0.3。 62 | 63 | **À trous and stride.** 64 | 65 | ​ 我们的全卷积架构享有FCN广泛用于语义分割的网络修改的好处。特别是,我们将ResNet-101的有效步幅从32像素减少到了16像素,从而提高了分数图的的分辨率。conv4阶段(stride=16)之前和之中的所有层都没有改变;conv5模块中的stride从2改为1。并且conv5阶段的所有convolutional filters都由"hole algorithm"修改,以补偿减少的步长。为了公平的比较,RPN在conv4阶段的顶部计算(与R-FCN共享)。 66 | 67 | **Visualization.** 68 | 69 | ​ 在图3和图4中,我们可视化了position-sensitive score maps,其中$k \times k = 3 \times 3$。这些特定的maps会在物体的特定相对位置被强烈激活。 70 | 71 | 72 | 73 | # 理解点 74 | 75 | 1. Position-sensitive score maps & Position-sensitive RoI pooling. -------------------------------------------------------------------------------- /Object_Detection/R-FCN/images/image-20210827145936819.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/R-FCN/images/image-20210827145936819.png -------------------------------------------------------------------------------- /Object_Detection/R-FCN/images/image-20210827153037333.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/R-FCN/images/image-20210827153037333.png -------------------------------------------------------------------------------- /Object_Detection/R-FCN/images/image-20210827153716674.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/R-FCN/images/image-20210827153716674.png -------------------------------------------------------------------------------- /Object_Detection/R-FCN/images/image-20210827154454090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/R-FCN/images/image-20210827154454090.png -------------------------------------------------------------------------------- /Object_Detection/RetinaNet/images/image-20210902124212281.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/RetinaNet/images/image-20210902124212281.png -------------------------------------------------------------------------------- /Object_Detection/RetinaNet/images/image-20210902134302040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/RetinaNet/images/image-20210902134302040.png -------------------------------------------------------------------------------- /Object_Detection/RetinaNet/images/image-20210902145645697.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/RetinaNet/images/image-20210902145645697.png -------------------------------------------------------------------------------- /Object_Detection/SPPNet/SPPNet.md: -------------------------------------------------------------------------------- 1 | # SPPNet 2 | 3 | 原论文:[Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition](https://arxiv.org/pdf/1406.4729.pdf) 4 | 5 | 主要贡献:解决FC层导致的需要输入固定size的图像的问题,同一张图像共享卷积进行特征提取 6 | 7 | 论文结构: 8 | 1. 引文(介绍SPP之前的网络以及相比的优势) 9 | 2. SPP的网络结构 10 | 3. 分类实验 11 | 4. 目标检测实验 12 | 5. 结论 13 | 14 | 主要思想位于第2节,以第2节的翻译+理解为主。 15 | 16 | ## 2 Deep Networks With Spatial Pyramid Pooling SPP网络 17 | 18 | ### 2.1 Convolutional Layers and Feature Maps 卷积层和特征图 19 | 20 | 设想最出名的两个七层网络架构AlexNet和ZFNet。前五层为卷积层,其中穿插着池化层。这些池化层同样可理解为卷积层,想象成滑动窗口。最后两层为全连接层,最后输出N个经过softmax的值,N代表类别数量。 21 | 22 | 以上的深度网络均需要固定输入尺寸的图像。然而,我们注意到固定输入大小的限制是由于全连接层固定输入长度的限制。从另外一个角度说,卷积层可以接收任意尺度的输入。卷积层使用滑动过滤器,然后它们的输出拥有输入差不多的纵横比。这些输出被视为特征图(feature map):它们不仅仅包括了响应的强度,还包括它们的空间位置。 23 | 24 | 在图2中,我们将一些特征图可视化。它们产生于第五个卷积层的卷积核。图2(c)展示了ImageNet数据集经过卷积后产生的高强度激活图像。我们能明晰一个卷积核能够被一些语义上下文激活。举个例子,第55个卷积核(图2,中左)大多数是被圆形形状激活;第66个卷积核(图2,上右)被∧形状激活,第118个卷积核(图2,中右)被∨形状激活。在输入图像中的这些形状和特征图中的 25 | 位置一一对应。 26 | 27 | ![image-20210816132129904](images/image-20210816132129904.png) 28 | 29 | 值得注意的是,图2的特征图没有固定输入尺寸。这些由深度卷积层生成的特征图类似于传统方法中的特征图。在这些方法中,SIFT向量或图像块被密集提取然后编码,比如 矢量量化,稀疏编码,Fisher内核等。这些编码特征包括特征图,然后被BoW或者空间金字塔池化。与此相同,深度卷积特征也可以以类似的方法池化。 30 | 31 | ### 2.2 The Spatial Pyramid Pooling Layer 空间金字塔池化层 32 | 33 | 卷积层能接收非固定输入大小,但同时它们也生成各种大小的输入。分类器(SVM/softmax)或者全连接层需要固定长度的向量。这种向量可以用BoW方法池化特征来生成。空间金字塔池化能够比BoW更进一步,它能通过局部空间箱(local spatial bins)来保存空间信息。这些空间箱和图像尺寸成比例,所有无论图像大小如何,数量是固定的。这与之前的滑动窗口池化有所不同,其中滑动窗口数量取决于输入大小。 34 | 35 | 为了让深度网络适应任意尺寸的图像,我们用空间金字塔池化层(spatial pyramid pooling layer)替换最后一层池化层。图3揭示了我们的方法。在每个空间箱中,我们池化每个卷积核的响应(通篇文章使用最大池化)。空间金字塔池化的输出为$kM$维向量,其中箱数量为$M$,($k$是最后一层卷积层的卷积核数量)。固定维度的向量就被送入全连接层。 36 | 37 | ![image-20210816132141679](images/image-20210816132141679.png) 38 | 39 | 在空间金字塔池化的帮助下,输入图像可以是任意尺寸大小的。这不仅仅是任意纵横比,还有任意尺度,应用相同的深度网络。当输入图像是不同尺度时,网络(相同卷积核大小)能够提取不同尺度的特征信息。在传统方法中尺度的作用很大,比如说,SIFT向量中通过多尺度提取特征(由patch大小和高斯核决定)。随后还会说明尺度对深度网络的准确度也很重要。 40 | 41 | 有趣的是,最粗糙的金字塔级别也有一个单一的空间箱覆盖整张图片。可以理解为事实上的”全局池化“操作,它和其它几个池化同时实现。 42 | 43 | ### 2.3 Training the Network 网络训练 44 | 45 | 理论上,上述网络可用标准BP算法训练,无论输入尺寸大小如何,但在实际的GPU实现中更倾向于固定输入大小。接下来,我们将描述我们的训练解决方案,该解决方案利用这些GPU来实现,同时保留空间金字塔池化行为。 46 | 47 | Single-size training 单一尺度训练 48 | 49 | 在先前的工作中,我们首先考虑从图像中裁剪固定的大小($224 \times 224$)。这种裁剪方法是为了数据增强。对于给定的一张图像,我们能预计算空间金字塔池化所需的箱大小。假设第五层卷积层输出的特征图大小为$a \times a$(比如$13 \times 13$)。设定金字塔层为$n \times n$大小的箱子,我们将池化方式视为滑动窗口池化,其中窗口大小$win=⌈a/n⌉$,步长$str = ⌊a/n⌋$。如果有l级的金字塔,我们就实现l层该层。接下来的全连接层将l个输出连接起来。图4就展示了3级金字塔池化在CUDA下的实现。 50 | 51 | ![image-20210816132154757](images/image-20210816132154757.png) 52 | 53 | 单一尺寸训练的主要目的在于赋予多级池化能力。实验结论得出它能提高准确度。 54 | 55 | Multi-size training 多尺度训练 56 | 57 | 我们的SPP网络可被用于任意大小的图像。为了解决训练图像任意大小的问题,我们考虑一些预定大小的集合。我们考虑了两种尺寸:$180 \times 180$和$224 \times 224$。与裁剪更小的$180 \times 180$区域不同的是,我们将上述$224 \times 224$区域大小调整为$180 \times 180$。因此,区域的不同在于分辨率的不同,而不是上下文/布局的不同。为了让网络接收$180 \times 180$大小的输入,我们实现了另一个固定大小输入的网络。经过第5层卷积层的输出为$a \times a = 10 \times 10$。然后我们仍使用$win=⌈a/n⌉$和$str = ⌊a/n⌋$来实现每级金字塔。180分辨率的网络和225分辨率的网络都拥有固定尺寸。咋某种程度上,两个网络在每一层中拥有相同参数。换句话说,在训练期间,我们通过两个共享参数的固定大小的网络来实现不同输入大小的SPP网络。 58 | 59 | 为了减少两个网络之间切换的开销,一个网络训练完一个epoch,就切换到另一个网络训练完整epoch(保存所有权重)。在实验中,我们发现多尺度训练的收敛和上述单尺度训练类似。 60 | 61 | 我们多尺度训练的主要目的在于模拟在输入大小不同的情况下,仍然能利用现有的优化好的固定大小来实现。除了上述两种尺度的实现外,我们还测试了输入为$s \times s$大小,其中$s$为每一epoch中$[180,224]$范围的任意值。 62 | 63 | 值得注意的是,单/多尺度的情况主要用于训练阶段。在测试阶段,它就可以直接使用任意尺度的SPP-net了。 64 | 65 | # 理解点 66 | 67 | 1. 多尺度训练如何实现(参数共享) 68 | 2. 空间金字塔池化 69 | 3. 一张图片特征提取一次 70 | 4. 先CNN提取整张图片的feature map,然后再对每个feature map上的块做空间金字塔池化。 -------------------------------------------------------------------------------- /Object_Detection/SPPNet/images/image-20210816132129904.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/SPPNet/images/image-20210816132129904.png -------------------------------------------------------------------------------- /Object_Detection/SPPNet/images/image-20210816132141679.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/SPPNet/images/image-20210816132141679.png -------------------------------------------------------------------------------- /Object_Detection/SPPNet/images/image-20210816132154757.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/SPPNet/images/image-20210816132154757.png -------------------------------------------------------------------------------- /Object_Detection/SSD/SSD.md: -------------------------------------------------------------------------------- 1 | # SSD 2 | 3 | 原论文:[SSD: Single Shot MultiBox Detector](https://arxiv.org/abs/1512.02325) 4 | 5 | 多尺度特征图,大特征图提取小物体,小特征图提取大物体 6 | 7 | 论文结构: 8 | 9 | 1. 引文(介绍发展史引出SSD) 10 | 2. SSD结构 11 | 3. 实验结论 12 | 4. 相关工作(R-CNN、YOLO、OverFeat等对比介绍) 13 | 5. 结论 14 | 6. 致谢 15 | 16 | 17 | 18 | 主要以第二节翻译为主 19 | 20 | 21 | 22 | ## 2 The Single Shot Detector(SSD) 23 | 24 | ​ 2.1节描述我们的检测器的架构,2.2节讲解相关联的训练策略,之后的第3节讲解数据集特定的模型细节和实验结论。 25 | 26 | 27 | 28 | ### 2.1 Model 29 | 30 | ​ SSD方法基于一个前向传播卷积网络产生一个固定尺寸的边界框集合,附带标记这些边界框里面物体实例的类别,然后通过NMS算法产生最后的预测。网络的早期层基于高标准图像分类的标准结构(在分类层之前截断),这种结构我们称之为基网。然后我们添加辅助结构来产生预测框,主要结构为以下几个: 31 | 32 | **Multi-scale feature maps for detection** 33 | 34 | 我们在基网的最后添加卷积特征层。这些层按尺度顺序下降,并且能够在多个尺度进行检测预测。每层卷积层预测检测结果是不同的(OverFeat和YOLO都是单尺度预测)。 35 | 36 | **Convolutional predictors for detection** 37 | 38 | 通过使用一系列卷积核,每层特征层(可以说是除基网以外的特征层)能产生固定数量的检测集合。这些在图2中的SSD网络显示出。对特征图大小为$m \times n$,通道为$p$, 39 | 40 | ![image-20210823154110755](images/image-20210823154110755.png) 41 | 42 | 用于预测的基本参数为$3 \times 3 \times p$的小卷积核组成,产生一个类别分数或者相对于默认框的相对坐标。在每个$m \times n$的位置上,通过卷积核产生一个输出结果。边界框的偏移值是与每张特征图对应位置的默认框大小而言的(YOLO通过使用全连接层来替换卷积核实现这一步)。 43 | 44 | **Default boxes and aspect ratios** 45 | 46 | 我们将一组默认边界框与每个特征图单元相关联,用于网络顶部的多个特征图。默认框以卷积的方式平铺特征图,这样每个框相对于其对应单元格的位置是固定的。在每个特征图单元格,我们预测相对于单元格中默认框形状的偏移量,以及每个类别的分数,这些分数表明每个框类是否存在类别实例。具体而言,就是对于指定位置中的k个框,每个框,我们就预测$c$类分数和相对于默认框的4个坐标偏移量。这些结果通过特征图每个位置的$(c+4)k$个卷积核计算得来,对$m\times n$大小的特征图就产生$(c+4)kmn$的输出。对于默认框的设置,可参考图1。我们的默认框与Faster R-CNN的锚点框类似,不同点在于我们将它们应用到不同特征图分辨率中。在几个特征图中允许不同的默认框形状让我们有效地离散化可能的输出框形状的空间。 47 | 48 | ![image-20210823155948348](images/image-20210823155948348.png) 49 | 50 | ### 2.2 Training 51 | 52 | ​ 训练SSD和训练基于区域生成框的检测器不同点在于,需要将ground truth信息分配给固定检测器用于输出集中的特定结果。一些版本采用了YOLO的训练方法,以及Faster R-CNN和MultiBox等区域生成类方法。一旦分配决定以后,损失函数和BP算法就能实现端到端训练。训练同样包括选定用于检测的默认框及其尺度,同样还有难例挖掘和数据增强策略。 53 | 54 | **Matching strategy** 55 | 56 | 在训练期间,我们需要决定哪个默认框匹配哪个真值框,然后再训练。对每个真值框而言,我们从不同位置、长宽比和比例的默认框来进行选择。我们首先将每个真值框和具有最佳jaccard重叠的默认框匹配(如MultiBox中一样)。不同于MultiBox,我们将阈值设为0.5。这简化了学习困难,赋予网络对多个重叠的默认框预测高分的能力,而不是仅仅拥有最大重叠度的那一个。 57 | 58 | **Training objective** 59 | 60 | SSD的训练目标源自MultiBox的目标,将其扩展到处理多个对象类别。定义$x_{ij}^p=\{1,0\}$为类别$p$的第$i$个默认框和第$j$个真值框的匹配度。在上述匹配策略中,我们会得到$\sum_i x_{ij}^p \ge 1$。整体的目标损失函数是位置损失和置信度损失的加权和: 61 | $$ 62 | L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x,l,g)) 63 | $$ 64 | 其中$N$指匹配默认框数量。如果$N=0$,设置损失为0。位置损失采用Smooth L1 Loss。与Faster R-CNN相似的是,我们采用与中心点的相对坐标以及它的宽高: 65 | 66 | ![image-20210823161638306](images/image-20210823161638306.png) 67 | 68 | 置信度损失采用对于多个类别置信度的softmax损失。 69 | 70 | ![image-20210823161731089](images/image-20210823161731089.png) 71 | 72 | 通过交叉验证后,$\alpha$设为1。 73 | 74 | 75 | 76 | **Choosing scales and aspect ratios for default boxes** 77 | 78 | 为了解决不同目标尺度的问题,一些方法建议处理不同尺度的图像,然后组合结果。然而,通过利用单一网络中不同层的特征图用于预测,我们可以模拟出同样的结果,同时还跨所有对象比例共享参数。先前的工作已然证明,使用低层的特征图有助于增强语义分割质量,因为低层能够捕获输入目标的更多细节。同样的,ParseNet架构展示出对特征图进行全局信息上下文池化能够使语义结果更加平滑。受这些方法启发,我们使用低层和高层的特征图来做预测。图1显示了两个示例特征图($8 \times 8$和$4 \times 4$)。在实践中,我们可以使用更多小的计算开销来替换。 79 | 80 | ​ 从同一网络中不同层得到的特征图拥有不同的感受野尺寸。在SSD架构中,默认框不需要与每一层的实际感受野相对应。我们设计了默认框的平铺,以便特定的特征图能够对特定尺度的对象作出反映。假设我们使用$m$个特征图用于预测,对每个特征图的默认框尺度就由下式计算: 81 | $$ 82 | s_k = s_{min} + \frac{s_{max}-s_{min}}{m-1}(k-1), \space \space k \in [1,m] 83 | $$ 84 | 其中$s_{min}=0,2,s_{max}=0.9$,意味着最底层的尺度为0.2,最高层的为0.9,中间的所有层结果是线性变化的。我们对默认框使用不同的长宽比,将它们定义为$\{1,2,3,\frac{1}{2},\frac{1}{3}\}$。对每个默认框,我们能计算宽($w_k^a=s_k \sqrt{a_r}$)和高($h_k^a=s_k/\sqrt{a_r}$)。对长宽比为1的,我们也设置默认框的尺寸为$s_k'=\sqrt{s_ks_{k+1}}$,在每个特征图位置产生6个默认框。我们设置每个默认框中心点为$(\frac{i+0.5}{|f_k|}, \frac{j+0.5}{|f_k|})$,其中$|f_k|$为第$k$个方形特征图,$i,j \in [0,|f_k|]$。在实践中,可以针对特定的数据集来设计默认框的分布。如何设计最优就是个开放的问题了。 85 | 86 | ​ 通过聚合所有默认框的预测,我们就拥有了不同的预测集合,包含各种各样的输入目标尺寸和形状。举个例子,在图1中,对于$4 \times 4$特征图默认框能够匹配狗,但在$8 \times 8$特征图就无法匹配。这是因为这些框具有不同的尺度并且与狗框不匹配,因此在训练期间被视为负数。 87 | 88 | **Hard negative mining** 89 | 90 | ​ 经过匹配步骤后,大多数默认框属于难例,特别是可能默认框数量庞大的时候。这就引入了一个重要的正负训练样本不平衡的问题。与其使用所有负例,我们使用最高置信度损失对每个默认框进行排序,然后选择顶部的几个,以此保持正负样本比例在1:3。我们发现这样的设置可以拥有更快的优化和更稳定的训练。 91 | 92 | **Data augmentation** 93 | 94 | 为了使模型对不同输入目标尺度和形状更具鲁棒性,每个训练图像随机通过下列方式进行采样: 95 | 96 | 1. 使用完整原始输入图像; 97 | 2. 采样部分使得最低jaccard重叠为0.1,0.3,0.5,0.7,或0.9; 98 | 3. 随机采样一个patch。 99 | 100 | 每个采样patch的大小为原图像尺寸的[0.1,1],长宽比在0.5和2之间。如果中心在采样patch中,我们就保留GT的重叠部分。经过上述采样步骤后,每个采样patch重整为固定尺寸,水平翻转率为0.5,还应用了其它的光度失真方法。 101 | 102 | 103 | 104 | # 理解点 105 | 106 | 1. 多尺度特征图 107 | 2. 利用卷积进行预测 108 | 3. 先验框(Default boxes and aspect ratios) 109 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /Object_Detection/SSD/images/image-20210823154110755.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/SSD/images/image-20210823154110755.png -------------------------------------------------------------------------------- /Object_Detection/SSD/images/image-20210823155948348.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/SSD/images/image-20210823155948348.png -------------------------------------------------------------------------------- /Object_Detection/SSD/images/image-20210823161638306.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/SSD/images/image-20210823161638306.png -------------------------------------------------------------------------------- /Object_Detection/SSD/images/image-20210823161731089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/SSD/images/image-20210823161731089.png -------------------------------------------------------------------------------- /Object_Detection/YOLOF/YOLOF.md: -------------------------------------------------------------------------------- 1 | # YOLOF 2 | 3 | 原论文:[You Only Look One-level Feature](https://arxiv.org/abs/2103.09460) 4 | 5 | 用空洞卷积实现FPN效果。 6 | 7 | 主要思想在第4节。 8 | 9 | ## 4 Method 10 | 11 | ​ 受上述目的启发,并基于C5特征已经包含各个目标的丰富上下文信息,在该节中,我们尝试使用简单的SiSo encoder替换复杂的MiMo encoder。但是根据图3的结果,使用SiSo encoders这种替换是不寻常的,表现大幅下降。给定这种情况,我们仔细分析了SiSo无法与MiMo达到相同结果的原因。我们发现SiSo encoders结果下降主要是两个问题。第一个问题是对于尺度匹配的C5特征的感受野是受限的,这妨碍了跨尺度的物体检测性能。第二个问题是单一尺度稀疏锚点导致的正锚点不平衡问题。接下来,我们详细讨论这两个问题并提供我们的解决方案。 12 | 13 | ![image-20210915161600719](images/image-20210915161600719.png) 14 | 15 | ### 4.1 Limited Scale Range 16 | 17 | ​ 识别不同尺度的目标是目标检测领域的基础挑战。针对该挑战可行的一个方案是使用多尺度特征。在MiMo或SiMo encoders的检测器中,他们整合不同感受野的多尺度特征(P3-P7),然后在对应尺度进行目标检测。然而,单一尺度的设定将改变该架构。在SiSo只有一个输出特征图,它的感受野是一个常量。如图4(a)所示,C5特征的感受野只能覆盖受限的尺度范围,从而导致感受野外的目标无法匹配从而导致低性能。为了达到通过SiSo encoders实现检测所有目标的期望,我们找到一种通过不同大小感受野的方式来生成一个输出特征图,补偿多尺度特征的缺陷。 18 | 19 | ![image-20210915163839130](images/image-20210915163839130.png) 20 | 21 | ​ 我们首先通过堆叠标准卷积和空洞卷积来扩大C5特征的感受野。虽然在一定程度上扩大了尺度范围,但它仍然不能覆盖所有所有对象尺度,因为扩展过程将大于1的因子乘以所有最初覆盖的尺度。如图4(b)所展示的结果一样,与图4(a)相比,整个尺度范围变得更大。然后,我们通过对应特征相加来联合原始的尺度范围和扩张的尺度范围,最终得到多个感受野能够覆盖所有目标尺度的最终输出特征图,如图4(c)。上述操作可通过construction residual blocks with dilations在中间$3\times3$卷积轻松实现。 22 | 23 | **Dilated Encoder** 24 | 25 | ​ 基于上述设计,我们推出如图5所示的SiSo encoder,命名为Dilated Encoder。它包含两个主要部件:Projector和Residual Blocks。projection层首先用$1 \times 1$卷积来实现通道维度下降,然后用$3\times 3$卷积层来微调语义信息,与FPN类似。在这之后,我们堆叠连续的具有不同空洞因子的$3\times3$卷积层的dilated residual blocks来生成包含多感受野信息的输出特征图,能够覆盖所有目标尺度。 26 | 27 | ![image-20210915170551220](images/image-20210915170551220.png) 28 | 29 | **Discussion** 30 | 31 | ​ 空洞卷积是目标检测领域扩张特征感受野的常用策略。如第2节所述,TridentNet用空洞卷积来生成多尺度特征。它通过多分支架构和权重共享机制来解决目标检测的尺度变化问题,与我们的单尺度特征设定不同。此外,Dilated Encoder线性堆叠没有权重共享的dilated residual blocks。虽然DetNet也线性堆叠dilated residual blocks,它的目的在于确保特征的空间分辨率和维持backbone输出的细节,然而我们是用于为backbone生成多感受野的特征。Dilated Encoder的设计赋予我们在单尺度特征上检测所有目标的能力,而不是像TridentNet和DetNet那样的多级特征图。 32 | 33 | ### 4.2 Imbalance Problem on Positive Anchors 34 | 35 | ​ 在目标检测领域中正锚点的定义是非常严谨的。在anchor-based检测器中,它的定义由anchors和ground-truth boxes之间的IoU值主导。在RetinaNet中,如果anchor和ground-truth的IoU超过阈值0.5,即被视为正锚点。我们称之为Max-IoU matching。 36 | 37 | ​ 在MiMo encoders中,在密集型检测头中锚点是在多级特征图中预定义的,给定divide-and-conquer机制,Max-IoU matching赋予了每个尺度的ground-truth boxes产生一系列正锚点的作用。然而,当我们采用SiSo encoder的时候,与MiMo encoder相比,锚点数量从100k降低到5k,变成稀疏锚点。稀疏锚点在使用Max-IoU时遇到匹配困难,如图6所示。与小的ground-truth boxes相比大的ground-truth boxes包含更多的正锚点,这导致了正锚点的不平衡问题。这种不平衡使得训练阶段检测器更多的关注大的ground-truth boxes而忽略了小的。 38 | 39 | ![image-20210915175806150](images/image-20210915175806150.png) 40 | 41 | **Uniform Matching** 42 | 43 | ​ 为了解决正样本的不平衡问题,我们提出了Uniform Matching策略:对每个ground-truth box采用k近邻锚点作为正样本,这能确保无论大小如何,都能匹配到一定数量的正锚点。正样本的平衡确保所有ground-truth boxes对训练的贡献程度一致。此外,与Max-IoU matching策略相似,我们设定Uniform Matching中的IoU阈值来忽略IoU大于0.7的负样本和小于0.15的正样本。 44 | 45 | 46 | 47 | **Discussion: relation to other matching methods** 48 | 49 | ​ 应用topk为匹配策略不是新东西。ATSS首先针对$L$特征图中的每个ground-truth box选择topk个锚点,然后通过动态IoU阈值针对$k \times L$个候选框选择正样本锚点。然而,ATSS分别定义正负样本,然而我们的uniform matching侧重于达到稀疏锚点间正样本的平衡。虽然上述几个方法达到了正样本间的平衡,但他们的分配策略并不是为不平衡问题设计的。举个例子,YOLO和YOLOv2将ground-truth boxes与最好的锚点匹配;DETR使用Hungarian algorithm来匹配。这些策略都能视为top1策略,相当于我们的uniform matching的特例。跟重要的是,我们的uniform matching和learning-to-match方法不同的是:learning-to-match方法根据学习的状态分配正负样本,例如FreeAnchor和PAA,然而我们的uniform matching是固定的且在训练过程中不可进化的。 50 | 51 | ![image-20210915182633597](images/image-20210915182633597.png) 52 | 53 | ### 4.3 YOLOF 54 | 55 | 我们将YOLOF定义为三部分:backbone,encoder,decoder。图9显示YOLOF的整体架构。在该节中,我们简单介绍YOLOF的主要部件。 56 | 57 | ![image-20210915182827438](images/image-20210915182827438.png) 58 | 59 | **Backbone** 60 | 61 | ​ 在所有模型中,我们简单的采用了ResNet和ResNeXt系列作为我们的backbone。所有模型都在ImageNet上预训练。C5特征图的输出有2048通道,下降因子32。为了与其他检测器作比较,backbone中的所有batchnorm层都固定了。 62 | 63 | **Encoder** 64 | 65 | ​ 对于encoder,我们首先和FPN类似,在backbone之后使用两个卷积层(一个$1\times1$,一个$3 \times 3$),结果为512通道的特征图。然后,使用encoder的输出特征图覆盖任意尺度的所有目标,我们提出添加residual blocks,它包含3个连续的卷积组合:首先是$1\times1$卷积应用通道下降因子为4,然后使用包含空洞卷积的$3\times3$卷积来扩大感受野,最后,使用$1\times1$卷积来回到原先的通道数。 66 | 67 | **Decoder** 68 | 69 | ​ 对于decoder,我们采用RetinaNet的主要涉及。包含两个平行的任务头:分类头和回归头。我们只进行了两个主要改动。第一个是和DETR里面的FFN类似,使得两个头里面的卷积层数量不同。在回归头中使用4层卷积层后接BN层和ReLU层,而分类头中使用两层。第二是我们使用类似Autoassign的机制,添加一个针对每个锚点和回归点隐含的objectness prediction(不直接监督)。最终的分类预测是分类输出和对应的implicit objectness的结果相乘。 70 | 71 | **Other Details** 72 | 73 | ​ 如上节所述,YOLOF里面预定义的锚点是稀疏的,降低了锚点和真值点间的匹配质量。我们在图像上添加随机位移操作以规避此问题。此外,我们发现,在使用单级特征图时,对锚点中心的移位限制也有助于分类。我们添加了针对所有锚点的移位限制在32像素以内。 74 | 75 | # 理解点 76 | 77 | 1. Dilated encoder可实现替代FPN的效果 78 | 2. Uniform matching解决不同尺度样本不平衡问题 79 | 80 | -------------------------------------------------------------------------------- /Object_Detection/YOLOF/images/image-20210915161600719.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOF/images/image-20210915161600719.png -------------------------------------------------------------------------------- /Object_Detection/YOLOF/images/image-20210915163839130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOF/images/image-20210915163839130.png -------------------------------------------------------------------------------- /Object_Detection/YOLOF/images/image-20210915170551220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOF/images/image-20210915170551220.png -------------------------------------------------------------------------------- /Object_Detection/YOLOF/images/image-20210915175806150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOF/images/image-20210915175806150.png -------------------------------------------------------------------------------- /Object_Detection/YOLOF/images/image-20210915182633597.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOF/images/image-20210915182633597.png -------------------------------------------------------------------------------- /Object_Detection/YOLOF/images/image-20210915182827438.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOF/images/image-20210915182827438.png -------------------------------------------------------------------------------- /Object_Detection/YOLOX/image/屏幕截图 2022-01-29 002406.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOX/image/屏幕截图 2022-01-29 002406.jpg -------------------------------------------------------------------------------- /Object_Detection/YOLOX/image/屏幕截图 2022-01-29 012002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOX/image/屏幕截图 2022-01-29 012002.jpg -------------------------------------------------------------------------------- /Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014213.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014213.jpg -------------------------------------------------------------------------------- /Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014633.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014633.jpg -------------------------------------------------------------------------------- /Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014738.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014738.jpg -------------------------------------------------------------------------------- /Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014837.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLOX/image/屏幕截图 2022-01-29 014837.jpg -------------------------------------------------------------------------------- /Object_Detection/YOLO_v1/YOLO_v1.md: -------------------------------------------------------------------------------- 1 | # YOLO v1 2 | 3 | 原论文:[You only look once: Unified, real-time object detection](https://arxiv.org/abs/1506.02640) 4 | 5 | one-stage目标检测的开山之作。 6 | 7 | 将检测任务表述成统一的、端到端的回归问题。 8 | 9 | 论文结构: 10 | 11 | 1. 引文(介绍YOLO思想来源) 12 | 2. YOLO架构 13 | 3. 与现有目标检测系统对比 14 | 4. 实验结论 15 | 5. YOLO的实时速度优势,源码链接 16 | 6. 结论(YOLO在实时目标检测领域SOTA) 17 | 18 | 19 | 20 | 主体思想在第2节,本篇以第2节翻译。 21 | 22 | 23 | 24 | ## 2 Unified Detection 统一检测 25 | 26 | ​ 我们将目标检测的各个模块统一成一个单一的神经网络。我们的网络使用整张图像的特征来预测每一个边界框。它在预测所有边界框的同时还预测边界框所包含的类别。从全局的角度,这意味着我们的网络能够从图像特征直接推导图像中所有目标所在位置。YOLO的设计在保证平均精度的同时实现了端到端训练和实时速度。 27 | 28 | ​ 我们的系统将输入图像分成$S \times S$个网格。如果目标中心点落入其中一个网格,那个网络就用来预测该目标。 29 | 30 | ​ 每个网格预测$B$个边界框和这些边界框的置信度。这些置信度分数反映了边界框包含物体的概率以及它认为该物体是其预测的准确度,将置信度公式定义为:$Pr(Object)*IOU_{pred}^{truth}$。如果该网格不存在物体,那么置信度分数应该为0。否则我们认为置信度分数等同于真实边框和预测边框的IOU值。 31 | 32 | ​ 每个边界框包括5个预测值:$(x,y,w,h,confidence)$。$(x,y)$代表相对于网格边界框的预测框中心。宽和高的预测值是相对于整张图而言的。最终,置信度的预测代表了真实边框和预测边框之间的IOU值。 33 | 34 | ​ 每个网格单元预测$C$种条件类别概率,$Pr(Class_i|Object)$。这些概率的限制条件是该网格单元包含对象。无论$B$的数量多少,每个网格单元只预测一个类别概率集合。 35 | 36 | ​ 在测试时间,我们将条件类别概率和单一边界框的置信度预测相乘。 37 | $$ 38 | Pr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth} = Pr(Class_i)*IOU_{pred}^{truth} 39 | $$ 40 | 这就给了我们每个边界框的特定类别预测分数。这些分数内置了边界框中类别出现的概率以及预测边界框包含物体的程度。 41 | 42 | ​ 为了在PASCAL VOC数据集上检验YOLO,我们设定$S=7,B=2$。VOC数据集包含20个标记类别,所以$C=20$。我们最终的预测结果为$7 \times 7 \times 30$的张量。 43 | 44 | ### 2.1 Network Design 网络设计 45 | 46 | ​ 我们实现的模型使用卷积神经网络,在VOC检测数据集上做测试。最初的卷积层用于特征提取,过后的全连接层做概率和坐标预测。 47 | 48 | ​ 我们的网络结构受用于图像分类的GoogLeNet的启发。我们的网络包含24个卷积层+2个全连接层。与GoogLeNet的Inception模块不同的是,我们只使用$3 \times 3$卷积和$1 \times 1$卷积的结合,和NIN类似。图3显示整体网络结构。 49 | 50 | ![image-20210818104141098](images/image-20210818104141098.png) 51 | 52 | ​ 同样我们训练一种YOLO的快速版本来推动边界框的快速预测。Fast YOlO使用更少的卷积层(24层改为9层)和更少的卷积核。与网络大小不同的是,所有训练和测试的参数在两个版本均相同。 53 | 54 | ​ 我们网络的最终结果是$7 \times 7 \times 30$的张量预测。 55 | 56 | ### 2.2 Training 训练 57 | 58 | ​ 我们网络的卷积层在ImageNet上进行预训练。为了预训练我们使用了图3中的前20层卷积层,外加一层平均池化层和一层全连接层。该网络训练了接近一周,在ImageNet 2012的验证集上单次裁剪top-5准确率指标达到了88%,与Caffe的Model Zoo中的GoogLeNet模型相当。 59 | 60 | ​ 然后我们将模型用于检测任务。Ren等人的实验结果表明卷积层和全连接层添加到预训练网络能够提点。借鉴他们的例子,我们添加了4层卷积层和2层全连接层,均随机初始化。检测通常需要细粒度的视觉信息,因此我们将输入分辨率从$224 \times 224$提高到$448 \times 448$。 61 | 62 | ​ 我们最后的全连接层预测类别概率和边界框坐标。我们将边界框宽高除以整张图的宽高,所以它们在0到1范围内。我们将参数坐标$x,y$设定为一个特定网格坐标的偏移值,因此他们同样在0到1范围内。 63 | 64 | ​ 我们在最后一层使用线性激活函数,所有其它层使用LeakyReLU函数。 65 | 66 | ​ 我们针对模型输出中的平方和误差进行了优化。我们使用平方和误差是因为它们易于优化,然而,它并不完全符合我们最大化平均精度的目标。它将定位误差和分类误差同等加权,这或许并不理想。同样,在每张图像中许多网格单元不包含任意目标。这些都使得置信度分数偏向于0,通常会压倒包含对象的单元格的梯度。从而导致模型的不稳定性,进而导致训练早期出现分歧。 67 | 68 | ​ 为了解决这个问题,我们增加了边界框坐标预测损失的权重,降低了边界框内无物体时置信度预测损失的权重。我们使用两个参数$\lambda_{coord}$和$\lambda_{noobj}$来实现。是定$\lambda_{coord}=5, \lambda_{noobj}=.5$。 69 | 70 | ​ 平方和误差针对大小边界框的权重是一致的。我们的误差度量应该反映出大物体中的小偏差应当比小物体中的小。为了部分的解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。 71 | 72 | ​ YOLO预测单个网格单元的多个边界框。在训练期间,我们希望一个边界框预测一个物体。我们指定一个预测器“负责”预测一个物体,该物体与真实值具有最大的IOU值。这使得边界框预测器之间的专业化。每个预测器在预测特定大小、纵横比或对象类别方面会变得更好,从而提高整体召回率。 73 | 74 | ​ 在训练期间,我们使用如下的多部份损失函数: 75 | 76 | ![image-20210818111605277](images/image-20210818111605277.png) 77 | 78 | ​ 请注意,损失函数只会惩罚该网格单元中存在对象的分类错误(因此时前面讨论的条件类概率)。它同样惩罚预测与真实边界框的偏移错误(在同一网格中真实边界框与预测值有最大IOU的那一项)。 79 | 80 | ​ 网络训练135epochs,验证集从VOC 2007换成了VOC 2012。当测试2012数据集时,我们同样包括VOC 2007的测试数据用于训练。batch size设为64,momentum设为0.9,权重衰减为0.0005。 81 | 82 | ​ 我们的学习率遵从如下规则:对开始的epochs,我们学习率从0.001缓慢上升到0.01。如果我们该开始就用较大的学习率那么就会导致模型的梯度不稳定从而引发无法收敛。然后继续用0.01继续训练75epochs,然后0.001训练30epochs,最后0.0001训练30epochs。 83 | 84 | ​ 为了避免过拟合,我们采用了dropout以及丰富的数据增强。在第一个连接层之后具有$rate=.5$的dropout层可防止层之间的协同适应。为了数据增强,我们引入了随机缩放和平移。我们还在HSV颜色空间中随机调整图像的曝光和饱和度,最高可达1.5倍。 85 | 86 | ### 2.3 Inference 推理 87 | 88 | ​ 如训练一样,测试图像的检测预测只需要一次网络评估。在VOC数据集上,网络在单一图像上预测98个边界框以及对每个框的类别概率。YOLO在测试期间是特别快的,因为它只需要一次网络评估,和基于分类器的方法不同。 89 | 90 | ​ 网格的设计使得边界框预测中包含空间多样性。通常很清楚一个对象属于哪个网格单元,并且网络只为每个对象预测一个框。然而,一些大的目标或者或邻近多个网格边界的目标可被多个网格很好的定位。NMS算法可被很好的用于固定多个检测。没有经过向R-CNN或DPM那样杨哥预测,NMS可以在mAP上提点2-3%。 91 | 92 | 93 | 94 | # 理解点 95 | 96 | 1. 将目标检测转化为统一的回归问题 97 | 2. 损失函数的巧妙设计(宽高取根号的作用、坐标与置信度损失的权重、有无目标的权重) 98 | 3. 基于网格的回归(先验知识) 99 | 100 | -------------------------------------------------------------------------------- /Object_Detection/YOLO_v1/images/image-20210818104141098.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v1/images/image-20210818104141098.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v1/images/image-20210818111605277.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v1/images/image-20210818111605277.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901120025884.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901120025884.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901133504030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901133504030.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901133832881.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901133832881.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901140813033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901140813033.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901140830260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901140830260.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901140942575.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901140942575.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901141100568.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901141100568.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901142155336.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901142155336.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901152009637.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901152009637.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v2/images/image-20210901153919871.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v2/images/image-20210901153919871.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v3/YOLO_v3.md: -------------------------------------------------------------------------------- 1 | # YOLO v3 2 | 3 | 原论文:[YOLOv3: An Incremental Improvement](https://arxiv.org/abs/1804.02767) 4 | 5 | 不仅提出了新网络DarkNet-53,还基于FPN的思想设计了三个分支分别预测大中小物体。 6 | 7 | 论文结构: 8 | 9 | 1. 引文(YOLO系列缺点介绍) 10 | 2. YOLOv3采用的方法 11 | 3. 实验效果 12 | 4. 一些我们测试但并不有效的部件 13 | 5. 总结 14 | 15 | 主要翻译第2节。(这篇论文作者写得很有趣) 16 | 17 | ## 2 The Deal 18 | 19 | ​ 本文中推出YOLOv3网络架构:从他人研究成果中提取了很多有用的想法。同时训练了一个比其他分类器效果都好的分类网络。我们从头梳理网络结构从而能够让您理解整个网络结构。 20 | 21 | ### 2.1 Bounding Box Prediction 22 | 23 | ​ 如YOLO9000那样,我们的系统使用维度聚类边界框形成锚点框。网络对每个边界框预测4个坐标$(t_x,t_y,t_w,t_h)$。如果网格的坐标是图像左上角的偏移值$(c_x,c_y)$,边界框先验具有宽度和高度$p_w, p_h$,那么预测就对应于: 24 | $$ 25 | b_x = \sigma(t_x) + c_x \\ 26 | b_y = \sigma(t_y) + c_y \\ 27 | b_w = p_w e^{t_w} \\ 28 | b_h = p_h e^{t_h} 29 | $$ 30 | ​ 在训练期间我们使用平方误差损失总和。如果一些真值坐标预测是$\hat{t}_*$,我们的梯度是真实值(从真实值框计算)减去我们的预测:$\hat{t}_* - t_*$。通过反转上面的等式,可以很容易地计算出这个真实值。 31 | 32 | ​ YOLOv3使用逻辑回归预测每个边界框的objectness score。如果边界框先验与真值对象的重叠比任何其他边界框先验都多,则该值应该为1。如果边界框先验不是最佳的,但确实与真实对象重叠超过某个阈值,我们忽略了预测。我们的阈值设置为.5。不同于我们的系统针对每个真值对象分配一个边界框先验。如果边界框先验未分配给真值对象,则不会导致坐标或类别预测损失,只会导致objectness损失。 33 | 34 | ### 2.2 Class Prediction 35 | 36 | ​ 每个框使用多标签分类预测边界框可能包含的类别。我们不使用softmax,因为我们发现它对于性能的增长没必要。在训练期间,我们使用binary cross-entropy loss来实现类别预测。 37 | 38 | ​ 当我们转向更复杂的情况时,如Open Images Dataset等,这个公式会有所帮助。在这个数据集中有许多重叠的标签(比如Woman和Person)。使用softmax强加了一个假设,即每个框只有一个类,但通常情况并非如此。多标签方法可以更好地对数据建模。 39 | 40 | ### 2.3 Predictions Across Scales 41 | 42 | ​ YOLOv3在3个不同的尺度预测边界框。我们的系统使用与特征金字塔网络类似的概念从这些尺度中提取特征。从我们的基本特征提取器中,我们添加了几个卷积层。最后一个预测3维张量编码边界框、对象和类别预测。在我们对COCO实验中,我们在每个尺度上预测了3个框,因此对于4个边界框偏移、1个对象预测和80个类别预测,张量是$N \times N \times [3 * (4+1+80)]$。 43 | 44 | ​ 接下来我们从之前的2层中获取特征图,然后将其上采样2倍。我们还从网络的早期结构中获取特征图,并使用串联的方式将其与我们的上采样特征合并。这种方法使我们能够从上采样的特征中获得更有意义的语义信息,并从早期的特征图中获得更细粒度的信息。然后我们再添加几个卷积层来处理这个组合的特征图,最终预测一个类似的张量,尽管现在是两倍。 45 | 46 | ​ 我们再执行一次相同的设计来预测用于最终尺度的框。因此,我们对第三个尺度的预测受益于所有先前的计算以及网络早期的细粒度特征。 47 | 48 | ​ 我们仍然使用k-means聚类算法来确定我们的边界框先验。我们只是随意选择了9个clusters和3种尺度,然后在各个尺度上均匀划分clusters。针对COCO数据集的9个clusters是:$(10 \times 13), (16 \times 30), (33 \times 23), (30 \times 61), (62 \times 45), (59 \times 119), (116 \times 90), (156 \times 198), (373 \times 326)$。 49 | 50 | ### 2.4 Feature Extractor 51 | 52 | ​ 我们使用一个新的网络进行特征提取。我们的新网络是YOLOv2、DarkNet-19中使用的网络和新的残差网络之间的混合方法。我们的网络使用连续的$3 \times 3$和$1 \times 1$卷积层,但现在也有一些残差连接,而且明显更大。它拥有53层卷积层,因此我们叫它Darknet-53! 53 | 54 | ![image-20210903141913600](images/image-20210903141913600.png) 55 | 56 | ​ 该网络比Darknet-19更有效,并且比ResNet-101或ResNet-152更有效。 57 | 58 | ​ 这是在ImageNet上的训练结果: 59 | 60 | ![image-20210903142804581](images/image-20210903142804581.png) 61 | 62 | ​ 每个网络都使用相同的设置$256 \times 256$进行训练和测试,单次裁剪准确度。运行时间是在Titan X上以$256 \times 256$测量的。因此,Darknet-53的性能与最先进的分类器相当,但浮点运算更少,速度更快。Darknet-53比ResNet-101好,并且快1.5倍。DarkNet-53的性能与ResNet-152相似,速度快2倍。 63 | 64 | ​ Darknet-53还实现了每秒最高实测浮点计算操作。这意味着网络结构更好地利用了GPU,使其评估效率更高,从而速度更快。这主要是因为ResNets层太多,效率不高。 65 | 66 | ### 2.5 Training 67 | 68 | ​ 我们没有使用难例挖掘或其他方法在完整图像上。我们使用多尺度训练、大量数据增强、批量归一化、以及所有标准的东西。我们使用Darknet网络架构用于训练和测试。 69 | 70 | 71 | 72 | # 理解点 73 | 74 | 1. 新网络Darknet-53 75 | 2. 采用多分支结构预测大中小物体 76 | 77 | -------------------------------------------------------------------------------- /Object_Detection/YOLO_v3/images/image-20210903141913600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v3/images/image-20210903141913600.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v3/images/image-20210903142804581.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v3/images/image-20210903142804581.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v4/YOLO_v4.md: -------------------------------------------------------------------------------- 1 | # YOLO v4 2 | 3 | 原论文:[YOLOv4: Optimal Speed and Accuracy of Object Detection](https://arxiv.org/abs/2004.10934) 4 | 5 | 主要翻译第3节。 6 | 7 | ## 3 Methodology 8 | 9 | ​ 基础的目标在于优化神经网络在生产系统以及并行计算上的快速操作速度,而不是理论上的低BFLOP。我们推出了两种实时神经网络: 10 | 11 | * 对于GPU,我们使用一个小的组数量(1-8)用于卷积层:CSPResNeXt50/CSPDarknet53 12 | * 对于VPU,我们使用组卷积,避免使用SE模块 - 特别是包括该模块的以下模型:EfficientNet-lite/MixNet/GhostNet/MobileNetV3 13 | 14 | ### 3.1 Selection of architecture 15 | 16 | ​ 我们的目标是找到输入网络分辨率、卷积层数量、参数数量($filter\_size^2 * filters * channel/groups $)、输出层数量的最优平衡。举个例子,我们的实验证明CSPResNeXt50在ImageNet目标分类上的效果优于CSPDarknet53。然而,相反而言,CSPDarkNnet53在目标检测的COCO数据集上优于CSPResNeXt50。 17 | 18 | ​ 另一个目标是选择额外的模块用于增长感受野和聚合不同backbone层的不同检测层:比如FPN、PAN、ASFF、BiFPN。 19 | 20 | ​ 一个在分类领域相对较优的模型不一定在检测领域较优。与分类器相比,检测器需要以下几方面: 21 | 22 | * 高输入图像尺寸 - 为了检测到多个小尺寸的目标 23 | * 更多层 - 用大的感受野来覆盖输入图像的尺寸增长 24 | * 更多参数 - 为了提升一个模型的更好的检测单张图像不同大小目标的表达能力 25 | 26 | 27 | 28 | ​ 假设来说,我们设定一个具有大的感受野和大量参数的模型能够作为backbone。表1显示了CSPResNeXt50、CSPDarknet53、EfficientNet B3的信息。CSPResNeXt50包含16层$3\times3$卷积层,一个$425 \times 425$的感受野和20.6M的参数量,然而CSPDarknet53包含29层$3 \times 3$的卷积层和$725 \times 725$的感受野和27.6M的参数量。这是理论上的比较,并结合我们的多次实验,证明CSPDarknet53是作为backbone的最优选择。 29 | 30 | ![image-20210912141712113](images/image-20210912141712113.png) 31 | 32 | ​ 不同大小感受野的影响总结如下: 33 | 34 | * 取决于目标大小 - 能够查看整个对象 35 | * 取决于网络大小 - 能够查看目标上下文 36 | * 超过网络大小 - 增加图像点和最终激活之间的连接数量。 37 | 38 | 39 | 40 | ​ 在CSPDarknet53中添加SPP块,它能够显著增加感受野大小,分理处上下文的特征,并且不会影响网络的速度。我们使用PANet作为Neck,而不是YOLOv3中的FPN。 41 | 42 | ​ 最终,我们选择CSPDarknet53作为backbone,SPP额外模块,PANet作为neck,YOLO v3的检测头(achor based)作为YOLO v4的检测头。 43 | 44 | ​ 我们没有使用Cross-GPU Batch Normalization(CGBN or SyncBN)或其他昂贵的特定设备。这使得每个人都可以用传统的图形处理器复现我们的SOTA结果:GTX 1080Ti 或 RTX 2080Ti。 45 | 46 | ### 3.2 Selection of BoF and BoS 47 | 48 | ​ 为了提高目标检测的训练,一个CNN网络通常设置如下: 49 | 50 | * **Activations**: ReLU, Leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish 51 | * **Bounding box regression loss**: MSE, IoU, GIoU, CIoU, DIoU 52 | * **Data augmentation**: CutOut, MixUp, CutMix 53 | * **Regularization method**: DropOut, DropPath, Spatial DropOut, or DropBlock 54 | * **Normalization of the network activations by their mean and variance**: Batch Normalization(BN), Cross-GPU Batch Normalization(CGBN or SyncBN), Filter Response Normalization(FRN), or Cross-Iteration Batch Normalization(CBN) 55 | * **Skip-connections**: Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections(CSP) 56 | 57 | 58 | 59 | ​ 至于训练的激活函数,PReLU和SELU是非常难训练的,ReLU6是为量化网络设计的,因此,我们从候选列表中删除了上述激活函数。在reqularization方法中,发表Drop-Block方法的人详细对比了该方法和其他方法,证明有效性。因此,我们毫不犹豫的选择DropBlock方法作为我们的正则化方法。至于归一化方法的选择,优于我们专注于仅使用一个GPU的训练策略,因此没有考虑SyncBN。 60 | 61 | ### 3.3 Additional improvements 62 | 63 | ​ 为了使得设计的检测器能够在单个GPU上训练稳定,我们添加了额外的设计如下: 64 | 65 | * 引入新的数据增强方法Mosaic和Self-Adversarial Training(SAT) 66 | * 我们通过遗传算法选择最优的超参数 67 | * 我们修改了现有的方法来使得我们的设计能够有效训练和检测 - modified SAM, modified PAN, and Cross mini-Batch Normalization(CmBN) 68 | 69 | 70 | 71 | ​ Mosaic代表一种新的数据增强方法,能够混合四张训练图像。然后,4张不同的上下文被混合,然而CutMix混合两张。这使得目标的检测能够脱离原先的上下文。此外,batch normalization计算每层4张不同图像的激活统计量。这大大减轻了大的mini-batch设置的需要。 72 | 73 | ​ SAT表示一种新的数据增强技术,在2个前向后向阶段运行的技术。在第1 stage,神经网络改变原始图像而不是网络权重。通过这个方法,神经网络对自身执行对抗性攻击,改变原始图像以创建图像上没有所需对象的欺骗。在第2 stage,训练神经网络以常规方式检测此修改图像上的对象。 74 | 75 | ​ CmBN表示一个CBN的修改版本,如图4所示。 76 | 77 | ![image-20210912152743088](images/image-20210912152743088.png) 78 | 79 | ​ 我们将SAM从spatial-wise attention变成了point-wise attention,并且将PAN中的shortcut connection替换为concatenation,如图5,6所示。 80 | 81 | ![image-20210912153356951](images/image-20210912153356951.png) 82 | 83 | ### 3.4 YOLO v4 84 | 85 | ​ 在该节,我们将详细说明YOLOv4的细节。 86 | 87 | ​ YOLOv4包含: 88 | 89 | * Backbone: CSPDarknet53 90 | * Neck: SPP, PAN 91 | * Head: YOLOv3 92 | 93 | 94 | 95 | ​ YOLOv4使用的模块: 96 | 97 | * Bag of Freebies(BoF) for backbone: CutMix and Mosaic data augmentation, DropBlock regularization, Class label smoothing 98 | * Bag of Specials(BoS) for backbone: Mish activation, Cross-stage partial connections(CSP), Multi-input weighted residual connections(MiWRC) 99 | * Bag of Freebies(BoF) for detector: CIoU-loss, CmBN, DropBlock regularization, Mosaic data augmentation, Self-Adversarial Training, Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler, Optimal hyper-parameters, Random training shapes 100 | * Bag of Specials(BoS) for detector: Mish activation, SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS 101 | 102 | 103 | 104 | # 理解点 105 | 106 | 1. 各种trick的介绍和集成 107 | 2. 最好通读原文,信息量很大 108 | 109 | -------------------------------------------------------------------------------- /Object_Detection/YOLO_v4/images/image-20210912141712113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v4/images/image-20210912141712113.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v4/images/image-20210912152743088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v4/images/image-20210912152743088.png -------------------------------------------------------------------------------- /Object_Detection/YOLO_v4/images/image-20210912153356951.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Object_Detection/YOLO_v4/images/image-20210912153356951.png -------------------------------------------------------------------------------- /Optimizer/SGD/Theory/Gradient_Descent_Optimization.md: -------------------------------------------------------------------------------- 1 | # Gradient Descent Optimization 2 | 3 | 原理:目标函数$J(\theta)$关于参数$\theta$的梯度将是损失函数(loss function)上升最快的方向。 4 | 5 | 目标:最小化loss,将参数沿着梯度相反的方向前进一个步长,就可实现目标函数(loss function)的下降。步长$\alpha$称为学习率,$\nabla J(\theta)$是参数的梯度。 6 | $$ 7 | \theta \longleftarrow \theta-\alpha \cdot \nabla J(\theta) 8 | $$ 9 | 10 | 11 | ​ 根据计算目标函数采用数据量的不同,梯度下降法又可分为批量梯度下降算法(Batch Gradient Descent)、随机梯度下降算法(Stochastic Gradient Descent)和小批量梯度下降算法(Mini-batch Gradient Descent) 12 | 13 | ​ 假设用只含**一个特征**的线性回归来展开。此时线性回归的**假设函数**为: 14 | $$ 15 | h_\theta (x^{(i)}) = \theta_1 x^{(i)} + \theta_0 16 | $$ 17 | ​ 其中$i=1,2,...,m$表示样本数。 18 | 19 | ​ 对应的**目标函数(代价函数)**即为: 20 | $$ 21 | J(\theta_0,\theta_1)= \frac{1}{2m} \sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 22 | $$ 23 | 24 | 25 | 26 | 27 | ## 1 批量梯度下降(Batch Gradient Descent, BGD) 28 | 29 | 特点:使用整个训练集。(又被称为**批量**(batch)或**确定性**(deterministic)梯度算法,因为它们会**在一个大批量中同时处理所有样本**。 30 | 31 | 1. 对目标函数求偏导: 32 | $$ 33 | \frac{\Delta J(\theta_0,\theta_1)}{\Delta \theta_j} = \frac{1}{m} \sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} 34 | $$ 35 | 其中$i=1,2,...,m$表示样本数,$j=0,1$表示特征数,这里使用了偏置项$x_0^{(i)}=1$。 36 | 37 | 2. 每次迭代对参数进行更新: 38 | $$ 39 | \theta_j :=\theta_j - \alpha \frac{1}{m} \sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} 40 | $$ 41 | 42 | 43 | 44 | 伪代码: 45 | $$ 46 | repeat\{ \\ 47 | \theta_j :=\theta_j - \alpha \frac{1}{m} \sum^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \\ 48 | (for j=0,1)\\ 49 | \} 50 | $$ 51 | 52 | 53 | 54 | 55 | Advantage: 56 | 57 | 1. 一次迭代是对所有样本进行计算,可使用矩阵操作,实现并行 58 | 2. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。 59 | 60 | 61 | 62 | Disadvantage: 63 | 64 | 1. 当样本数目m很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。 65 | 66 | 67 | 68 | 69 | 70 | ## 2 随机梯度下降(Stochastic Gradient Descent, SGD) 71 | 72 | 特点:**每次迭代使用一个样本**来对参数进行更新。使得训练速度加快。 73 | 74 | 对于一个样本的目标函数为: 75 | $$ 76 | J^{(i)}(\theta_0,\theta_1) = \frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 77 | $$ 78 | 79 | 1. 对目标函数求偏导 80 | $$ 81 | \frac{\Delta J^{(i)}(\theta_0,\theta_1)}{\theta_j}=(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} 82 | $$ 83 | 84 | 2. 参数更新 85 | $$ 86 | \theta_j := \theta_j - \alpha (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} 87 | $$ 88 | 89 | 90 | 91 | 伪代码: 92 | $$ 93 | repeat\{ \\ 94 | for \quad i=1,...,m \{ \\ 95 | \theta_j := \theta_j - \alpha (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \\ 96 | (for \quad j=0,1) \\ 97 | \} \\ 98 | \} 99 | $$ 100 | 101 | 102 | advantage: 103 | 104 | 1. 不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。 105 | 106 | 107 | 108 | disadvantage: 109 | 110 | 1. 准确度下降。即使目标函数为强凸函数,SGD仍无法做到线性收敛。 111 | 2. 可能会收敛到局部最优,但单个样本并不能代表全体样本的趋势。 112 | 3. 不易于并行实现。 113 | 114 | 115 | 116 | ## 3 小批量梯度下降(Mini-Batch Gradient Descent, MBGD) 117 | 118 | 上述两种方法的折中办法。 119 | 120 | 特点:每次迭代使用 **batch_size** 个样本对参数进行更新。 121 | 122 | 123 | 124 | 假设 batch_size=10, 样本数m=1000 125 | 126 | 127 | 128 | 伪代码: 129 | $$ 130 | repeat\{ \\ 131 | for i = 1,11,21,31,...,991\{ \\ 132 | \theta_j := \theta_j -\alpha \frac{1}{10} \sum_{k=i}^{(i+9)}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)} \\ 133 | (for j=0,1) \\ 134 | \} \\ 135 | \} 136 | $$ 137 | 138 | 139 | advantage: 140 | 141 | 1. 通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。 142 | 2. 使用batch减少收敛所需迭代次数。 143 | 3. 可实现并行化 144 | 145 | 146 | 147 | disadvantage: 148 | 149 | 1. batch_size选择不当可能会带来问题。 150 | 151 | 152 | 153 | -------------------------------------------------------------------------------- /Optimizer/Summary/README.md: -------------------------------------------------------------------------------- 1 | # 随机梯度下降法SGD 2 | 3 | * 用小批量样本的平均损失代替全体样本的平均损失进行参数更新,可以加快参数更新频率,加速收敛。 4 | * 小批量样本的平均损失是全体样本平均损失的无偏估计。 5 | 6 | 7 | 8 | > 训练集中的同类样本是相关的,同类样本中不同个体的损失是相似的,所以随机抽取的一个样本损失可以作为该类所有样本损失的估计。 9 | 10 | 11 | 12 | 前提:定义一些相关变量和学习率,并随机生成训练集 13 | 14 | 算法步骤(epoch): 15 | 16 | 1. 获得随机打乱的整数序列 17 | 2. 整体打乱训练集 18 | 3. 顺序取出batch个样本 19 | 4. 计算梯度 20 | 5. 更新参数 21 | 22 | 23 | 24 | 基于SGD的改进算法,只有第5步的参数更新不同,前面都一样的,后面只给出更新参数的程序段。 25 | 26 | # 基本动量法 27 | 28 | 模拟小球的滚动过程来加速神经网络的收敛。 29 | 30 | 速度变量积累了历史梯度信息,使之具有惯性,当梯度方向一致时,加速收敛;当梯度方向不一致时,减小路径曲折程度。 31 | 32 | 33 | 34 | ```python 35 | mu = 0.9 36 | v = mu * v # v:速度,初始化为0. 该语句表明v累加了历史梯度 37 | v += - lr * dx # 速度v受当前梯度dx调节 38 | x += v 39 | ``` 40 | 41 | 42 | 43 | mu越大,摩擦越大;mu=1,没有摩擦;mu=0,摩擦无穷大,变为基本的梯度下降法。 44 | 45 | 46 | 47 | 前进方向:由下降方向的历史累积v和当前点的梯度方向dx合成的。 48 | 49 | 50 | 51 | # Nesterov动量法 52 | 53 | Nesterov Accelerated Gradient,简称NAG 54 | 55 | 56 | 57 | ```python 58 | mu = 0.9 59 | pre_v = v 60 | v = mu * v 61 | v += - lr * dx 62 | x += v + mu * (v - pre_v) 63 | ``` 64 | 65 | 66 | 67 | # AdaGrad 68 | 69 | 前面3种方法都是对参数向量进行整体操作,对向量每个元素的调整都是一样的。 70 | 71 | 72 | 73 | 自适应算法。 74 | 75 | 76 | 77 | ```python 78 | cache += dx ** 2 79 | x += - (lr / (np.sqrt(cache) + eps)) * dx 80 | ``` 81 | 82 | PS: 83 | 84 | 1. 变量cache初始化为0,它和梯度向量dx同维度,每个元素累加了对应梯度元素的历史平方和。 85 | 2. cache用来归一化参数以更新步长,归一化是逐元素进行的。 86 | 3. 对于高梯度值的权重,其历史累计和大,等效学习率减小,更新强度减弱;对于低梯度值的权重,其历史累计和小,等效学习率增加,更新强度增强。 87 | 4. 除数加小常量eps可以防止除数为0。 88 | 89 | 90 | 91 | dx为0时,更新停止,小球不可能冲出当前平地,即鞍点。 92 | 93 | 94 | 95 | # RMSProp 96 | 97 | 采用指数衰减的方式,让cache丢弃遥远过去的历史梯度信息,只对最近的历史梯度信息进行累加,使之不那么激进,单调地降低学习率。 98 | 99 | 修改方式:使用一个梯度平方的指数加权的移动平均: 100 | 101 | ```python 102 | decay_rate = 0.9 103 | cache = decay_rate * cache + (1 - decay_rate) * (dx ** 2) 104 | x += - (lr / (np.sqrt(cache) + eps)) * dx 105 | ``` 106 | 107 | 108 | 109 | # Adam 110 | 111 | 看起来像是RMSProp的动量版。 112 | 113 | 114 | 115 | ```python 116 | mu = 0.9 117 | decay_rate = 0.999 118 | eps = 1e-8 119 | v = mu * v + (1-mu) * dx 120 | vt = v/(1 - mu ** t) 121 | cache = decay_rate * cache + (1-decay_rate) * (dx ** 2) 122 | cachet = cache/(1 - decay_rate ** t) 123 | x += - (lr/ (np.sqrt(cachet) + eps)) * vt 124 | ``` 125 | 126 | 127 | 128 | # AmsGrad 129 | 130 | Adam存在可能不收敛的缺点,因为其有效学习率为lr/(np.sqrt(cache) + eps),其中cache主要受最近的梯度历史信息影响,故其值波动较大。当它取比较小的值时,会使有效学习率很大,使之不能收敛。 131 | 132 | 改进:使有效学习率不饿能增加,只需在Adam方法种进行很小的修改。 133 | 134 | ```python 135 | cache = np.max((cache, decay_rate * cache + (1 - decay_rate) * (dx ** 2))) 136 | ``` 137 | 138 | 139 | 140 | # 学习率退火 141 | 142 | 随着训练次数的增加,学习率会逐渐变小。 143 | 144 | 方式: 145 | 146 | 1. 随训练周期衰减。 147 | 148 | > 每进行几个周期(epoch),降低一次学习率。 149 | > 150 | > 典型做法:每5个周期学习率减少一半,或者每20个周期减少到0.1。 151 | 152 | 2. 指数衰减。 153 | 154 | > 数学公式是$a=a_0 e^{-kt}$,其中$a_0$和$k$是超参数,$t$是迭代次数。 155 | 156 | 3. 反比衰减。 157 | 158 | > 数学公式是$a=a_0/{(1+kt)}$,其中$a_0$和$k$是超参数,$t$是迭代次数。 159 | 160 | 161 | 162 | # 参数初始化 163 | 164 | * 小随机数初始化 165 | 166 | > 权重初始值接近0但不能等于0。 167 | > 168 | > 采用小的正态分布的随机数$W=0.01 \times np.random.randn(D,H)$来打破对称性。但并不是小数值一定会得到好的结果,这样会减慢收敛速度。因为在梯度反向传播的时候,会计算出非常小的梯度。 169 | > 170 | > 使用$1/sqrt(n)$来校准方差,使输出神经元的方差为1,参数初始化为$w=np.random.randn(n)/sqrt(n)$,其中n使神经元连接的输入神经元数量。 171 | 172 | * 偏置初始化 173 | 174 | > 通常将偏置初始化为0或者小常数(0.01) 175 | > 176 | > 当前推荐的初始化: 177 | > 178 | > 使用ReLU时,用$w=np.random.randn(n) \times sqrt(2.0/n)$来进行权重初始化 179 | > 180 | > ```python 181 | > in_depth = 128 182 | > out_depth = 32 183 | > std = np.sqrt(2/in_depth) 184 | > weights = std * np.random.randn(in_depth, out_depth) 185 | > bias = np.zeros((1, out_depth)) 186 | > ``` 187 | 188 | 189 | 190 | # 超参数调优 191 | 192 | 最重要的超参数:初始学习率、正则化系数(L2惩罚) 193 | 194 | 其他的:dropout 195 | 196 | -------------------------------------------------------------------------------- /Person_Detection/DETR/image/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/01.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/02.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/03.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/04.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/05.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/06.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/07.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/08.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/09.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/10.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/11.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/12.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/13.png -------------------------------------------------------------------------------- /Person_Detection/DETR/image/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Person_Detection/DETR/image/14.png -------------------------------------------------------------------------------- /Pre-Procession/Summary/Precautions.md: -------------------------------------------------------------------------------- 1 | # 数据预处理 2 | 3 | 主要针对神经网络的输入层数据进行逐属性规范化的过程。 4 | 5 | ## 中心化 6 | 7 | 使得单个属性均值为0 8 | 9 | ## 规范化 10 | 11 | 使得单个属性的值变化在范围[0,1]或[-1,1] 12 | 13 | ## PCA 14 | 15 | 数据降维,选取线性无关性最强的几个属性 16 | 17 | ## 白化 18 | 19 | PCA对数据点云进行了平移和旋转,但形状未变。 20 | 21 | 利用属性标准差进行规范化,即属性数值除以对应的标准差 22 | 23 | 几何意义:使每个属性的方差相同,数据点云完全处于高维球内。 24 | 25 | ```python 26 | X_white = X_decor/np.sqrt(S + 10 ** (-5)) 27 | ``` 28 | 29 | 30 | 31 | # BN(Batch Normalization) 32 | 33 | 对隐含层输入数据进行规范化的方法。 34 | 35 | 36 | 37 | 数据经过网络的多层变换后(其中包括非线性变换),不再使规范化的,即均值不为0,方差不为1。 38 | 39 | > 经过ReLU变换后,输出属性都大于或等于0,均值肯定会大于0,这样对隐含层来说,学习就变困难了。 40 | 41 | 42 | 43 | ## BN前向计算 44 | 45 | 操作方式与数据预处理中的中心化和规范化操作一样,都是逐属性进行的,先减去均值,再除以标准差。 46 | 47 | 公式: 48 | $$ 49 | \hat{x} = \frac{x-\mu}{\sigma} 50 | $$ 51 | 52 | > 数据预处理时:均值和标准差时整个训练集的均值和标准差 53 | > 54 | > BN:批量的均值和标准差(即在使用批量梯度下降法时,每次迭代的样本子集) 55 | 56 | 57 | 58 | 缺点: 59 | 60 | 1. 网络表达能力受限。不管网络前面的层对输入数据进行怎样的变换,最后都变为均值为0、方差为1的分布。(希望不同的层能学到不同的均值和方差) 61 | 62 | 解决方案:引入两个可学习的参数$\gamma$和$\beta$来学习标准差和均值。 63 | 64 | 结果,BN公式为如下: 65 | $$ 66 | \hat{x} = \frac{x-\mu}{\sigma} \\ 67 | y = \gamma \hat{x} + \beta 68 | $$ 69 | 70 | * $\gamma$初始化为1,$\beta$初始化为0。BN层输出数据的均值为$\beta$,标准差为$\gamma$,与网络前面的层无关,减小了网络中各层的耦合,有利于学习。 71 | * $\gamma$和$\beta$是可学习的,增加了网络的自适应性。 72 | 73 | 74 | 75 | ## BN层位置 76 | 77 | 通常位于非线性激活层之前、全连接层之后,注意必须在激活前对数据进行规范化。 78 | 79 | 加入BN层的典型网络结构如下: 80 | $$ 81 | X=UW \\ 82 | Y=BN(X; \gamma, \beta) \\ 83 | Z = f(Y) 84 | $$ 85 | 其中,U是输入数据。 86 | 87 | X是全连接层的输出,也是BN层的输入 88 | 89 | Y是BN层的输出 90 | 91 | 最后进行非线性激活,得到输出Z 92 | 93 | 94 | 95 | ## BN层的梯度反向传播 96 | 97 | 前向计算是已知输入X_batch,求输出Y 98 | 99 | 反向传播是已知dY,求dX_batch、dgamma和dbeta 100 | 101 | 102 | 103 | # 数据扩增 104 | 105 | 常见数据扩增技术包括: 106 | 107 | * 图像进行平移、旋转、左右翻转来分别实现平移、旋转和镜像不变性 108 | * 随即裁剪和缩放实现尺度不变性 109 | * 进行仿射变换和弹性变形实现形变不变性 110 | * 进行模糊、加噪、PCA Jittering和Color Jittering实现色彩不变性 111 | 112 | 113 | 114 | 如果把样本看作高维空间的点,那么对样本做数据扩增,就是在样本点的“邻域”内生成新的样本点,达到增加样本数量的目的。(“邻域”不一定是指欧氏距离近,而是“语义”距离近) 115 | 116 | 117 | 118 | PS:数据扩增技术一般只在模型参数数量巨大,而样本数量有限的情况下使用,特别是在深度学习中用来防止过拟合。 119 | 120 | 121 | 122 | 123 | 124 | # 梯度检查 125 | 126 | ​ 利用梯度下降进行优化时,需要采用链式法则计算损失函数对参数的梯度,这是一个十分容易出错的地方,所以必须对梯度计算进行检查,以确保正确。 127 | 128 | ​ 梯度检查总原则:比较数值梯度和解析梯度值是否一致,其中解析梯度值是采用链式法则计算的梯度值,数值梯度是采用梯度定义计算的梯度值。 129 | 130 | ​ 对参数$w$(标量)的梯度进行检查,损失函数$f(w)$,数值梯度定义: 131 | $$ 132 | f_n' = \frac{f(w+h)-f(w)}{h} 133 | $$ 134 | ​ 其中$h$是步长,是小常数,实践中常取$10**(-5)$。 135 | 136 | ​ 计算数值梯度时,需要进行两次前向计算,效率十分低下。实际中采用中心差分法计算梯度: 137 | $$ 138 | f_n'= \frac{f(w+h)-f(w-h)}{2h} 139 | $$ 140 | 141 | 142 | # 初始损失值检查 143 | 144 | ​ 梯度检查即使正确,也不能说明代码正确实现了模型,因为梯度检查只是验证了链式法则正确计算了损失函数的梯度而已。模型对不对,还需要进一步检查。 145 | 146 | ​ 最简单的检查办法:采用小的权重对模型进行初始化,关闭正则化,只检查数据损失,此时样本数据最好采用标准正态随机数进行模拟。 147 | 148 | 149 | 150 | # 过拟合微小数据子集 151 | 152 | 在对整个数据集训练之前,首先对微小数据子集(比如每类2到4个样本)进行训练,争取获得很小的损失值(发生过拟合),此时也要关闭正则化。 153 | 154 | * 如果没有获得很小的损失值,则最好不要对整个训练集进行训练。 155 | 156 | * 即使模型完全拟合了微小数据子集,也不能保证程序一定正确。 157 | 158 | > 因为模型相对于微小子集容量过大,所以当程序没有正确实现时,只要模型流程是正确的,梯度计算正确,模型就很容易过拟合微小子集。 159 | 160 | 161 | 162 | 典型错误有: 163 | 164 | 1. 忘了加激活层 165 | 2. 最后一个全连接层后加了激活层 166 | 3. 权重初始化不正确 167 | 4. 权重更新错误 168 | 5. 数据预处理错误 169 | 170 | 171 | 172 | # 监测学习过程 173 | 174 | 主要目的:观察超参数是否设置合理。 175 | 176 | 最重要的超参数需要监控:学习率和正则化强度。 177 | 178 | ## 损失值 179 | 180 | 监测损失值随训练周期的变化情况来判断学习率的大小是否合适。 181 | 182 | 1. 损失值突然增大,大于初始损失值,而且持续增大,这说明学习率太大了。 183 | 2. 损失值减小速度很快或者波动太大,很快就饱和了,不再减小,但最终损失值过大,说明学习率比较大。 184 | 3. 损失值减小速度很慢,说明学习率过小。 185 | 4. 损失值减小速度适中,最终损失值很小,说明学习率比较合适。 186 | 187 | 188 | 189 | ## 训练集和验证集的准确率 190 | 191 | 监测训练集和验证集的准确率差异随训练周期的变化情况,来判断正则化强度是否合适。 192 | 193 | * 验证集的准确率远差于训练集的准确率,过拟合 194 | * 验证集的准确率稍差于训练集的准确率,过拟合比较弱 195 | * 验证集的准确率和训练集的准确率一致,说明基本没有过拟合 196 | 197 | 198 | 199 | ## 参数更新比例 200 | 201 | 监测参数的更新比例,可以掌握每层参数的学习情况。 202 | 203 | 参数更新比例时计算一层中所有参数更新量和参数的比值,注意,需要每层单独监控。 204 | 205 | ```python 206 | update_param = -lr * dparam 207 | update_ratio = np.sum(np.abs(update_param))/np.sum(np.abs(param)) 208 | ``` 209 | 210 | > param是一层的权重或偏置参数 211 | > 212 | > dparam是梯度 213 | > 214 | > update_param是参数更新量 215 | > 216 | > update_ratio是更新比例 -------------------------------------------------------------------------------- /Semantic_Segmentation/FCN/FCN.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Semantic_Segmentation/FCN/FCN.docx -------------------------------------------------------------------------------- /Semantic_Segmentation/SegNet/SegNet.md: -------------------------------------------------------------------------------- 1 | # SegNet 2 | 3 | 原论文:[SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation](https://arxiv.org/pdf/1511.00561.pdf) 4 | 5 | ## Abstract 6 | 7 | 我们提出了一种新颖且实用的深度完全卷积神经网络结构用于语义分割,称之为SegNet。该核心可训练的分割网络由编码网络、相应的解码网络和像素分类层组成。编码部分的架构在拓扑上与VGG16网络中的13个卷积层相同。解码网络的作用是将低分辨率编码网络特征映射到完整的输入分辨率特征图上,以此来进行像素级分类。SegNet的新颖之处在于解码网络对较低分辨率的输入特征图进行上采样。具体来说,解码网络使用相应编码网络的最大池化步骤来计算池化索引,用其来执行非线性上采样。这就消除了学习向上采样的必要性。上采样的图是稀疏的,然后用可训练的滤波器进行卷积,从而生成密集的特征图。我们将提出的架构与广泛应用的FCN和著名的DeepLab-LargeFOV,DecovNet架构进行比较。这种比较揭示:实现良好分割性能在内存与精度之间的权衡情况。 8 | 9 | SegNet起初为了解决场景理解问题。因此,在推理过程中,它在内存和计算时间方面都是高效的。与其他架构相比,它的可训练参数数量也显著减少,并且可以只用随机梯度下降进行端到端的训练。 10 | 11 | ## 3 Architecture 12 | 13 | SegNet有一个编码网络和一个相对应的解码网络,最后跟一个像素级分类层。编码网络由13卷积层组成,它们对应于分类网络VGG16中的前13个卷积层。因此,我们可以使用从大数据集上进行分类训练得到的权重来初始化训练。我们也可以丢弃全连接层,以便在最深的编码编码输出中保留较高分辨率的特征图。与其他架构相比,SegNet编码网络中的参数量显著减少(从134M减少到14.7M)。每个编码层都有对应的解码层,因此该解码网络也有13层。最终解码层的输出被送到多类softmax分类器,以分别产生每个像素的类别概率。 14 | 15 | ![image-20210915131115386](images/image-20210915131115386.png) 16 | 17 | 在编码网络中每个编码层都用一个滤波器组进行卷积,从而产生一组特征图。接着进行批处理标准化(BN)。然后,应用元素级整流线性非线性函数(ReLU)$ \max(0,x)$。在这之后,执行窗口为2*2大小和步长为2(非重叠窗口)的最大池化操作,并对结果输出按因子2进行下采样。最大池化用于实现输入图像在小空间位移上的平移不变性。下采样为特征图中的每个像素产生一个大的空间窗口。虽然几层最大池化和子采样可以为鲁棒分类实现更多的平移不变性,但相应地会损失特征图的空间分辨率。逐渐增大的损失(边界细节)不利于图像分割,因为边界描绘是至关重要的。因此,在下采样之前,需要在编码特征图中捕获和储存边界信息。如果推理过程中的内存不受限制,则可以储存所有编码特征图(下采样之后)。但在实际应用中通常不是这样的,因此我们提出了一种更有效的方法来存储这些信息。它只存储最大池化索引,即为每个编码特征图存储每个池化窗口中最大特征值的位置。原则上,这可以通过为每个 2 × 2 池化窗口使用 2 bits 来完成,因此与以浮点精度记忆特征图相比,存储效率更高。正如我们稍后在这项工作中展示的那样,这种较低的内存存储导致精度略有下降,但仍然适用于实际应用。 18 | 19 | 适当的编码网络是用对应编码特征图中存储的最大池化索引作为输入特征图进行上采样。此步骤产生稀疏特征图。图3展示了SegNet decoding技术的过程。将这些特征图与可训练的解码滤波器组进行卷积以生成密集的特征图。然后将批量归一化应用于每个特征图。请注意,对应于第一个编码层(最接近输入图像)的解码层生成多通道特征图,尽管其编码层输入具有 3 个通道(RGB)。这与网络中的其他解码层不同,这些解码层生成的特征图的大小和通道数与其编码器输入相同。最终解码层输出的高维特征表示被馈送到可训练的 softmax 分类器。 这个 softmax 独立地对每个像素进行分类。 softmax 分类器的输出是一个 K 通道的概率图像,其中 K 是类的数量。 预测的分割结果对应于每个像素上概率最大的类别。 20 | 21 | ![image-20210915133117965](images/image-20210915133117965.png) 22 | 23 | 我们在这里添加另外两个架构,DeconvNet [53] 和 U-Net [16] 与 SegNet 共享相似的架构,但有一些差异。 DeconvNet 具有更大的参数化,需要更多的计算资源并且更难进行端到端的训练(表6),这主要是由于使用了全连接层(尽管以卷积方式)。 24 | 25 | ![image-20210915133651241](images/image-20210915133651241.png) 26 | 27 | 与 SegNet 相比,U-Net (为医学成像领域提出)不重用池化索引,而是将整个特征图(以更多内存为代价)传输到相应的解码器并将它们连接起来进行上采样(通过反卷积)。 U-Net 中没有 VGG 网络架构中的 conv5 和 max-pool 5 块。 另一方面,SegNet 使用来自 VGG 网络的所有预训练卷积层权重作为预训练权重。 28 | 29 | ### 3.2 Training 30 | 31 | 我们使用 CamVid 道路场景数据集来对解码器变体的性能进行基准测试。该数据集很小,由 367 个训练和 233 个测试 RGB 图像(白天和黄昏场景)组成,分辨率为 360×480。 面临的挑战是分割 11 个类别,例如道路、建筑物、汽车、行人、标志、电线杆、人行道等。我们对 RGB 输入执行局部对比度归一化 [54]。 32 | 33 | 编码网络和解码网络的权重均使用 He 等人中描述的技术进行初始化。为了训练所有变体,我们使用 SegNet-Basic 的 Caffe 实现,使用具有 0.1 固定学习率和 0.9 动量的随机梯度下降 (SGD)。我们训练直到损失收敛。 在每个 epoch 之前,训练集被打乱,然后按顺序挑选每个小批量(12 张图像),从而确保每个图像在一个 epoch 中只使用一次。 我们选择在验证数据集上表现最好的模型。 34 | 35 | 我们使用交叉熵损失作为训练网络的目标函数。 损失是小批量中所有像素的总和。 当训练集中每个类别的像素数量变化很大时(例如道路、天空和建筑物像素在 CamVid 数据集中占主导地位),则需要根据真实类别对损失进行不同的加权。 这称为类平衡(class balancing)。 我们使用中值频率平衡(median frequency balancing),其中分配给损失函数中的类的权重是在整个训练集上计算的类频率中值除以类频率的比率。 这意味着训练集中较大类的权重小于 1,最小类的权重最高。 我们还尝试在没有类平衡或等效地使用自然频率平衡(natural frequency balancing)的情况下训练不同的变体。 36 | 37 | ## 4 Benchmarking 38 | 39 | 为了执行受控基准测试,我们使用了相同的 SGD 求解器,其固定学习率为 $10^{-3}$,动量为 0.9。 对数据集进行了 100 多个 epoch 的优化,直到没有观察到进一步的性能提升。 在所有模型的更深卷积层的末尾添加了 0.5 的 Dropout,以防止过拟合。 对于有 11 个类的道路场景,我们使用了 mini-batch=5,对于有 37 个类的室内场景,我们使用mini-batch=4。 40 | 41 | ## 6 Conclusion 42 | 43 | 我们提出了 SegNet,这是一种用于语义分割的深度卷积网络架构。 SegNet 背后的主要动机是需要为道路和室内场景理解设计一种有效的架构,该架构在内存和计算时间方面都很有效。 我们分析了 SegNet 并将其与其他重要变体进行了比较,以揭示设计分割架构所涉及的实际权衡问题,尤其是训练时间、内存与准确性。那些能完整存储编码网络特征图的架构性能最好,但在推理期间消耗更多内存。 另一方面,SegNet 更有效,因为它只存储特征图的最大池化索引并在其解码网络中使用它们以实现良好的性能。 在大型的数据集上,SegNet 具有竞争力,在道路场景理解方面取得了高分。 深度分割架构的端到端学习是一项艰巨的挑战,我们希望看到更多人关注这个重要问题。 44 | -------------------------------------------------------------------------------- /Semantic_Segmentation/SegNet/images/image-20210915131115386.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Semantic_Segmentation/SegNet/images/image-20210915131115386.png -------------------------------------------------------------------------------- /Semantic_Segmentation/SegNet/images/image-20210915133117965.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Semantic_Segmentation/SegNet/images/image-20210915133117965.png -------------------------------------------------------------------------------- /Semantic_Segmentation/SegNet/images/image-20210915133651241.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Semantic_Segmentation/SegNet/images/image-20210915133651241.png -------------------------------------------------------------------------------- /Semantic_Segmentation/UNet/UNet.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/Semantic_Segmentation/UNet/UNet.docx -------------------------------------------------------------------------------- /images/微信公众号二维码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/images/微信公众号二维码.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/01.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/02.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/03.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/04.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/05.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/06.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/07.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/08.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/09.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/10.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/11.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/12.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/13.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/14.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/15.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/16.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/17.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/18.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/19.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/20.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/21.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/image/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/image/22.png -------------------------------------------------------------------------------- /person_Re-ID/Re-ID_survey/综述原文2001.04193.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaheel/Deep_Learning/f08f171b4dffcc31c924848d4b5fabe9e35f1abf/person_Re-ID/Re-ID_survey/综述原文2001.04193.pdf --------------------------------------------------------------------------------