第一天打卡是乙個新冠疫情視覺化的專案,主要是爬取丁香園的統計資料並使用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...