百度paddlepaddle - 深度学习7日入门-CV疫情特辑:
1.day01 新冠疫情可视化
2.day02 手势识别
class MyDNN(fluid.dygraph.Layer):
def __init__(self):
super(MyDNN, self).__init__()
self.hidden1 = Linear(100, 100, act="relu")
self.hidden2 = Linear(100, 100, act="relu")
self.hidden3 = Linear(100, 100, act="relu")
self.hidden4 = Linear(100, 100, act="relu")
self.out = Linear(3*100*100, 10, act='softmax')
def forward(self, input):
x = self.hidden1(input)
# print("hidden1", x.shape)
x = self.hidden2(x)
# print("hidden2", x.shape)
x = self.hidden3(x)
# print("hidden3", x.shape)
x = self.hidden4(x)
x = fluid.layers.dropout(x, dropout_prob=0.4)
x = fluid.layers.reshape(x, shape=[-1, 3*100*100])
y = self.out(x)
return y
3.day03 车牌识别
#定义网络
class MyLeNet(fluid.dygraph.Layer):
def __init__(self):
super(MyLeNet,self).__init__()
self.hidden1_1 = Conv2D(1, 28 , 5 , 1)
self.hidden1_2 = Pool2D(pool_size=2, pool_type='max', pool_stride=1)
self.hidden2_1 = Conv2D(28, 32, 3, 1)
self.hidden2_2 = Pool2D(pool_size=2, pool_type='max', pool_stride=1)
self.hidden3 = Conv2D(32, 32, 3, 1)
self.hidden4 = Linear(32*10*10, 65, act='softmax')
def forward(self,input):
x = self.hidden1_1(input)
x = self.hidden1_2(x)
x = self.hidden2_1(x)
x = self.hidden2_2(x)
x = self.hidden3(x)
x = fluid.layers.dropout(x, dropout_prob=0.1)
x = fluid.layers.reshape(x, shape=[-1, 32*10*10])
y = self.hidden4(x)
return y
4.day04 口罩分类
class VGGNet(fluid.dygraph.Layer):
'''
VGG网络
'''
def __init__(self):
super(VGGNet, self).__init__()
# 224 + 2 - 3 / 1 + 1
# 224 + 2 - 2 / 2 + 1
self.convpool01 = ConvPool(3, 64, 3, 2, 2, 2, act="relu")
self.convpool02 = ConvPool(64, 128, 3, 2, 2, 2, act="relu")
self.convpool03 = ConvPool(128, 256, 3, 2, 2, 3, act="relu")
self.convpool04 = ConvPool(256, 512, 3, 2, 2, 3, act="relu")
self.convpool05 = ConvPool(512, 512, 3, 2, 2, 3, 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)
# print(out.shape)
out = self.convpool02(out)
out = self.convpool03(out)
out = self.convpool04(out)
out = self.convpool05(out)
out = fluid.layers.reshape(out, shape=[-1, 512 * 7 * 7])
out = self.fc01(out)
out = self.fc02(out)
out = self.fc03(out)
if label is not None:
acc = fluid.layers.accuracy(input=out, label=label)
return out, acc
else:
return out
唯一一个做到100%(因为测试集比较小+运气好)
5.day05 人流密度检测
6.day06 PaddleSlim模型压缩
几天的学习,以前在学校的时候间断的学习,到工作后,没机会接触相关内容的我来说,是一个很好的机会,现在回想起咋学校的时候,当时自己一个人在MOOC上埋头学习机器学习和深度学习的相关算法,(当时在学校的时候,身边也是没有一起在这方面学习的伙伴),但是这次的飞桨的课程, 有很多人,大家都非常积极的探讨着问题,我们经常调参调到深夜到快黎明,(虽然自己调参的效果比不上运气,调参真的很看运气)这次的课程也算是让我之前从没有接触过深度学习实践,只接在学校的时候接触过一些算法理论,以及工作的时候,看看API(但是工作中没有使用的机会,所以基本学完就忘了),但是这次是真正的把模型跑起来了, 参数调起来了。
从过程来看,深度学习基本包括几个过程,数据的收集和预处理。
1.数据的收集和预处理
这次我们的数据集都是已经提供好的了,但是在实际工作中, 我们数据集都还是要慢慢去收集、积累、标注的。
在跑模型之前需要把数据进行预处理,一般讲要分出训练集和测试集。
2.搭建模型
从手势识别的DNN,到车帕识别CNN
3.训练模型
设置epochs和batch_size,学习率、优化函数等来进行模型的训练(经常出现过拟合,然后设置dropout的时候,有时候发现还没有自己跑出来的好。这点感觉有点坑。(或许是用的不好))
这个过程有点漫长,最好使用GPU来跑, 所以在本地建议还是把GPU的环境搭建起来,因为AIStudio上的GPU很难抢到的,但是有时候会发现自己本地的GPU内存会不够,我在跑day5 人流密度检测的时候,内存就不够了, (显卡RTX2060),但是GPU真的比CPU快很多。AIStudio也会有一些免费的算力卡可以使用。说起AIStudio(老是一直转圈圈,GPU难抢,data里面的数据集有时候总是没了,吐个槽)
4.测试训练集
会输出一个acc,acc越高,心里越兴奋。
5.模型调用
暂时还没有 demo,可以让我通过输入一张图片,获取结果的。如果可以像自己写的utils一样可以直接调用多好。
需要代码的可以查看 github: https://github.com/ArseneLupinhb
精细!