PaddlePaddle深度學習七天打卡營學習心得

2021-10-23 04:37:07 字數 3720 閱讀 1206

第一天打卡是乙個新冠疫情視覺化的專案,主要是爬取丁香園的統計資料並使用pyecharts繪製疫情分布圖。這個python的小專案讓我學習到了pyecharts這個強大的視覺化工具,可以將各種圖表優雅地呈現出來。pycharts api可參考:

接下來三天都是影象識別相關的專案,分別是手勢識別,車牌識別和口罩識別。這幾個專案都是練習paddlepaddle搭建cnn網路以及進行模型訓練**,可以說paddlepaddle搭建訓練pipeline還是比較方便的。基於動態圖實現的vgg**如下,感覺比較類似pytorch。

class convpool(fluid.dygraph.layer):

'''卷積+池化'''

def __init__(self,

num_channels,

num_filters,

filter_size,

pool_size,

pool_stride,

groups,

pool_padding=0,

pool_type='max',

conv_stride=1,

conv_padding=0,

act=none):

super(convpool, self).__init__()

self._conv2d_list =

for i in range(groups):

conv2d = self.add_sublayer( #返回乙個由所有子層組成的列表。

'bb_%d' % i,

fluid.dygraph.conv2d(

num_channels=num_channels, #通道數

num_filters=num_filters, #卷積核個數

filter_size=filter_size, #卷積核大小

stride=conv_stride, #步長

padding=conv_padding, #padding大小,預設為0

act=act)

)self._pool2d = fluid.dygraph.pool2d(

pool_size=pool_size, #池化核大小

pool_type=pool_type, #池化型別,預設是最大池化

pool_stride=pool_stride, #池化步長

pool_padding=pool_padding #填充大小

)def forward(self, inputs):

x = inputs

for conv in self._conv2d_list:

x = conv(x)

x = self._pool2d(x)

return x

基於fluid.dygraph.layer這個類先定義基本的模組,然後定義網路部分,其中forward函式中的**就代表了前向傳播過程。

通過這種方式可以很快地搭建各種網路。

class vggnet(fluid.dygraph.layer):

'''vgg網路

'''def __init__(self):

super(vggnet, self).__init__()

self.convpool01 = convpool(3, 64, 3, 2, 2, 2, conv_padding=1, act="relu")

self.convpool02 = convpool(64, 128, 3, 2, 2, 2, conv_padding=1, act="relu")

self.convpool03 = convpool(128, 256, 3, 2, 2, 3, conv_padding=1, act="relu")

self.convpool04 = convpool(256, 512, 3, 2, 2, 3, conv_padding=1, act="relu")

self.convpool05 = convpool(512, 512, 3, 2, 2, 3, conv_padding=1, act="relu")

self.pool_5_shape = 512 * 7 * 7

self.fc01 = fluid.dygraph.linear(self.pool_5_shape, 4096, act="relu")

self.fc02 = fluid.dygraph.linear(4096, 4096, act="relu")

self.fc03 = fluid.dygraph.linear(4096, 2, act="softmax")

def forward(self, inputs, label=none):

"""前向計算"""

out = self.convpool01(inputs)

out = self.convpool02(out)

out = self.convpool03(out)

out = self.convpool04(out)

out = self.convpool05(out)

out = fluid.layers.reshape(out, shape=[-1, self.pool_5_shape])

out = self.fc01(out)

out = self.fc02(out)

out = self.fc03(out)

if label is not none:

acc = fluid.layers.accuracy(out, label)

return out, acc

return out

影象分類任務是cv的基礎,在時間過程中通過改進**調參讓測試準確率從baseline一點點提公升到較高的水平是最有價值的過程。paddlepaddle有豐富的api可以實現各種調參trick,像dropout,batchnormalization,groupnormalization,l2regularization, lr decay等等都可以很輕鬆地實現。另外資料增強則推薦使用pil庫,嘗試各種技巧不一定每次都能讓模型準確度提公升,畢竟訓練神經網路是乙個多引數配合的過程,只有練得多了才更容易找到最佳的方向。

除了影象分類任務外,還有乙個**密度檢測的比賽專案。這個稍微難一些,baseline方案是用cnn生成乙個熱點圖進行統計來**出人的數量。這個任務需要對groundtruth進行處理,得到用於計算損失函式的熱力圖,我做這個任務時立刻聯想到了centernet,於是嘗試用了類似的反卷積思想。不過比賽發布後大家積極性很高,我幾乎也搶不到gpu,只能草草地提交了幾次結果,後面有空再繼續調一下模型。

最後還有乙個paddleslim模型壓縮,真心覺得paddlepaddle在工業部署上優勢明顯。paddleslim包含了模型裁減/量化/蒸餾/nas這些主流的模型壓縮方法,經過模型壓縮推理速度顯著提高,甚至精度還可能不減反公升,意外吧。

paddleslim相關api文件可以看

除了paddleslim,像paddledetection,paddleseg也是paddlepaddle的精品大作,對cv感興趣的小夥伴們也不要錯過。也期待paddlepaddle繼續帶來更多的驚喜。

基於PaddlePaddle框架的深度學習初接觸

pip install paddlepaddle i為了驗證是否安裝成功,輸入 import paddle.fluid paddle.fluid.install check.run check 出現your paddle fluid is installed successfully 說明安裝成功。...

PaddlePaddle深度學習體會

飛槳使用的體驗和感受 對深度學習有哪些新的認識?之前只知道深層的神經網路叫深度學習,通過這個課程 飛槳深度學習7日打卡營 我知道深度學習應用分為cv nlp rec和speech等幾個領域。並且了解了各個領域的歷史和一些已有的模型。深度學習可以實現一些複雜的功能,在生活中有廣泛應用。學到了哪些硬核技...

深度學習框架之paddlepaddle

碼雲倉庫 簡介那麼,paddlepaddle 有什麼特點?支援多種深度學習模型 dnn 深度神經網路 cnn 卷積神經網路 rnn 遞迴神經網路 以及 ntm 這樣的複雜記憶模型。基於 spark,與它的整合程度很高。支援 python 和 c 語言。支援分布式計算。作為它的設計初衷,這使得 pad...