大家還記得這張圖嗎?
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、德宏州網(wǎng)站維護(hù)、網(wǎng)站推廣。深度系統(tǒng)介紹了 52 個(gè)目標(biāo)檢測(cè)模型,縱觀 2013 年到 2020 年,從最早的 R-CNN、OverFeat 到后來(lái)的 SSD、YOLO v3 再到去年的 M2Det,新模型層出不窮,性能也越來(lái)越好!
上文聚焦于源碼和論文,對(duì)于各種卷積神經(jīng)網(wǎng)絡(luò)模型的實(shí)現(xiàn),本文將介紹它們的 PyTorch 實(shí)現(xiàn),非常有用!
這份資源已經(jīng)開(kāi)源在了 GitHub 上,鏈接如下:
https://github.com/shanglianlm0525/PyTorch-Networks
先來(lái)個(gè)總結(jié)介紹,該系列的卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)包含了 9 大主題,目錄如下:
1. 典型網(wǎng)絡(luò)
2. 輕量級(jí)網(wǎng)絡(luò)
3. 目標(biāo)檢測(cè)網(wǎng)絡(luò)
4. 語(yǔ)義分割網(wǎng)絡(luò)
5. 實(shí)例分割網(wǎng)絡(luò)
6. 人臉檢測(cè)和識(shí)別網(wǎng)絡(luò)
7. 人體姿態(tài)識(shí)別網(wǎng)絡(luò)
8. 注意力機(jī)制網(wǎng)絡(luò)
9. 人像分割網(wǎng)絡(luò)
下面具體來(lái)看一下:
1. 典型網(wǎng)絡(luò)(Classical network)
典型的卷積神經(jīng)網(wǎng)絡(luò)包括:AlexNet、VGG、ResNet、InceptionV1、InceptionV2、InceptionV3、InceptionV4、Inception-ResNet。
以 AlexNet 網(wǎng)絡(luò)為例,AlexNet 是 2012 年 ImageNet 競(jìng)賽冠軍獲得者 Hinton 和他的學(xué)生 Alex Krizhevsky 設(shè)計(jì)的。AlexNet 中包含了幾個(gè)比較新的技術(shù)點(diǎn),也首次在 CNN 中成功應(yīng)用了 ReLU、Dropout 和 LRN 等 Trick。同時(shí) AlexNet 也使用了 GPU 進(jìn)行運(yùn)算加速。
AlexNet 網(wǎng)絡(luò)結(jié)構(gòu)的 PyTorch 實(shí)現(xiàn)方式如下:
importtorchimporttorch.nnasnndefConv3x3BNReLU(in_channels,out_channels,stride,padding=1):returnnn.Sequential(nn.Conv2d(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,kernel_size=3,stridestride=stride,padding=1),nn.BatchNorm2d(out_channels),nn.ReLU6(inplace=True))defConv1x1BNReLU(in_channels,out_channels):returnnn.Sequential(nn.Conv2d(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,kernel_size=1,stride=1,padding=0),nn.BatchNorm2d(out_channels),nn.ReLU6(inplace=True))defConvBNReLU(in_channels,out_channels,kernel_size,stride,padding=1):returnnn.Sequential(nn.Conv2d(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,kernel_sizekernel_size=kernel_size,stridestride=stride,paddingpadding=padding),nn.BatchNorm2d(out_channels),nn.ReLU6(inplace=True))defConvBN(in_channels,out_channels,kernel_size,stride,padding=1):returnnn.Sequential(nn.Conv2d(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,kernel_sizekernel_size=kernel_size,stridestride=stride,paddingpadding=padding),nn.BatchNorm2d(out_channels))classResidualBlock(nn.Module):def__init__(self,in_channels,out_channels):super(ResidualBlock,self).__init__()mid_channels=out_channels//2self.bottleneck=nn.Sequential(ConvBNReLU(in_channelsin_channels=in_channels,out_channels=mid_channels,kernel_size=1,stride=1),ConvBNReLU(in_channels=mid_channels,out_channels=mid_channels,kernel_size=3,stride=1,padding=1),ConvBNReLU(in_channels=mid_channels,out_channelsout_channels=out_channels,kernel_size=1,stride=1),)self.shortcut=ConvBNReLU(in_channelsin_channels=in_channels,out_channelsout_channels=out_channels,kernel_size=1,stride=1)defforward(self,x):out=self.bottleneck(x)returnout+self.shortcut(x)
2.輕量級(jí)網(wǎng)絡(luò)(Lightweight)
輕量級(jí)網(wǎng)絡(luò)包括:GhostNet、MobileNets、MobileNetV2、MobileNetV3、ShuffleNet、ShuffleNet V2、SqueezeNet Xception MixNet GhostNet。
以 GhostNet 為例,同樣精度,速度和計(jì)算量均少于此前 SOTA 算法。GhostNet 的核心是 Ghost 模塊,與普通卷積神經(jīng)網(wǎng)絡(luò)相比,在不更改輸出特征圖大小的情況下,其所需的參數(shù)總數(shù)和計(jì)算復(fù)雜度均已降低,而且即插即用。
GhostNet 網(wǎng)絡(luò)結(jié)構(gòu)的 PyTorch 實(shí)現(xiàn)方式如下:
https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/Lightweight/GhostNet.py
3. 目標(biāo)檢測(cè)網(wǎng)絡(luò)(ObjectDetection)
目標(biāo)檢測(cè)網(wǎng)絡(luò)包括:SSD、YOLO、YOLOv2、YOLOv3、FCOS、FPN、RetinaNet Objects as Points、FSAF、CenterNet FoveaBox。
以 YOLO 系列為例,YOLO(You Only Look Once)是一種基于深度神經(jīng)網(wǎng)絡(luò)的對(duì)象識(shí)別和定位算法,其的特點(diǎn)是運(yùn)行速度很快,可以用于實(shí)時(shí)系統(tǒng)。目前 YOLOv3 應(yīng)用比較多。
YOLOV3 網(wǎng)絡(luò)結(jié)構(gòu)的 PyTorch 實(shí)現(xiàn)方式如下:
https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/ObjectDetection/YOLOv3.py
4. 語(yǔ)義分割網(wǎng)絡(luò)(SemanticSegmentation)
語(yǔ)義分割網(wǎng)絡(luò)包括:FCN、Fast-SCNN、LEDNet、LRNNet、FisheyeMODNet。
以 FCN 為例,F(xiàn)CN 誕生于 2014 的語(yǔ)義分割模型先驅(qū),主要貢獻(xiàn)為在語(yǔ)義分割問(wèn)題中推廣使用端對(duì)端卷積神經(jīng)網(wǎng)絡(luò),使用反卷積進(jìn)行上采樣。FCN 模型非常簡(jiǎn)單,里面全部是由卷積構(gòu)成的,所以被稱(chēng)為全卷積網(wǎng)絡(luò),同時(shí)由于全卷積的特殊形式,因此可以接受任意大小的輸入。
FCN 網(wǎng)絡(luò)結(jié)構(gòu)的 PyTorch 實(shí)現(xiàn)方式如下:
https://github.com/shanglianlm0525/PyTorch-Networks/blob/master/SemanticSegmentation/FCN.py
5. 實(shí)例分割網(wǎng)絡(luò)(InstanceSegmentation)
實(shí)例分割網(wǎng)絡(luò)包括:PolarMask。
6. 人臉檢測(cè)和識(shí)別網(wǎng)絡(luò)(commit VarGFaceNet)
人臉檢測(cè)和識(shí)別網(wǎng)絡(luò)包括:FaceBoxes、LFFD、VarGFaceNet。
7. 人體姿態(tài)識(shí)別網(wǎng)絡(luò)(HumanPoseEstimation)
人體姿態(tài)識(shí)別網(wǎng)絡(luò)包括:Stacked Hourglass、Networks Simple Baselines、LPN。
8. 注意力機(jī)制網(wǎng)絡(luò)
注意力機(jī)制網(wǎng)絡(luò)包括:SE Net、scSE、NL Net、GCNet、CBAM。
9. 人像分割網(wǎng)絡(luò)(PortraitSegmentation)
人像分割網(wǎng)絡(luò)包括:SINet。
綜上,該 GitHub 開(kāi)源項(xiàng)目展示了近些年來(lái)主流的 9 大類(lèi)卷積神經(jīng)網(wǎng)絡(luò),總共包含了幾十種具體的網(wǎng)絡(luò)結(jié)構(gòu)。其中每個(gè)網(wǎng)絡(luò)結(jié)構(gòu)都有 PyTorch 實(shí)現(xiàn)方式。還是很不錯(cuò)的。