深度学习7日入门-CV疫情特辑结营心得-alading


2020/03/16 - 2020/08/31

使用PaddlePaddle进行深度学习

为期一周的深度学习训练营结束了,对每一个从头到尾参加了训练营的同学们收获肯定都是很多的。这次我就从以下几个方面总结一下心得和体会。
PaddlePaddle官网地址
百度AIStudio官网网址 现在有送GPU算力卡哦,比在我的小笔记本上跑速度真的快很多!
7日打卡营地址 课程可以长期反复学习的哦,因为是纯干货,如果是小白入门的话,听一遍肯定是不够的。

深度学习的方法

1、 基础不牢,地动山摇。 这是我最大的体会。深度学习并不是传统的C,C++以及其他一些语言的学习,跑通代码基本就知道大概什么意思的,而是一定要先搞懂原理,然后再进入模型代码进行理解,不然直接上代码,会叫你一头雾水,前期准备很重要。

2、必须要python语法和numpy库要很熟练,熟练的标准就是代码要多敲,多练习,python的列表,字典,元组出来一个就要立马能知道数据长什么样子,矩阵是几维的,每一维分别是什么东西等等(否则一些接口都调不起来,因为你不知道接口需要传入的参数长什么样子,返回的数据又要用什么数据去接等等),我是从C++转到Python来学习的,一开始认为应该没多大难度,毕竟C++这把屠龙刀都能耍的动,Python这种脚本语言应该没多大问题,但是看懂了和熟练了中间还是有很大差距。

3、理论和实践相结合。 我一开始先看的是吴恩达的视频,感觉外国人的课程重点都是最后抛出,前面一直给你不断不断的铺垫,我听吴恩达的课程最大的感受就是,他的每一句话我都能理解,听明白,但是视频看完了,我似乎又什么都不知道。(吴恩达的课还是很不错的,很多老师都推荐自己的学生看,我舍友看了一个学期。)后来陆陆续续看了百度的一些深度学习的课程。一下子就深入理解了深度学习中处理问题的流程和重点,我很喜欢做技术的人讲理论,很容易就能听到重点和痛点,最喜欢直接讲代码感觉自己就跟着大神一起在走,平时自己看半天都看不懂的代码,老师讲的过程中就感觉好像没有那么难了。整个学习完成后,理解了最简单的感知机,DNN,CNN,入门了简单地CV,会简单地调试代码。

4、不断的练习 我记得我的C++的老师说过,你的水平的高低在于你在这个领域坚持的长度,而不是看个人有多聪明,坚持比聪明往往要重要很多。在深度学习中,坚持无疑也是很重要的,不断的看一些论文,看一些模型,算参数,加强概率论知识,长期的坚持,能力才能一步一步的提上来。(话说从打卡营开始都今天结束,我整整一周没下楼了,每天虽然在家里,但却跟打仗一样,不得不说训练营里面的学习氛围真的很浓厚,这种氛围下人的进步速度是非常快的。就跟期末考试前一周的复习效率一样—一飞冲天。)

主要学习内容

day1: 新冠疫情可视化
day2: 手势识别
day3: 车牌识别
day4: 口罩分类
day5: 人流检测分类比赛
day6: paddlehub和paddleslim介绍与使用

每日学习总结

day1:新冠疫情可视化

请根据课上所学内容,爬取3月31日当天丁香园公开的统计数据,根据累计确诊数,使用pyecharts绘制疫情分布图,如下图所示,提交截图。Pycharts api可参考:https://pyecharts.org/#/zh-cn/

主要学习使用数据来画图,将数据表示在图上。

import json
import datetime
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.charts import Pie

# 读原始数据文件
today = datetime.date.today().strftime('%Y%m%d')   #20200331
datafile = 'data/'+ today + '.json'
with open(datafile, 'r', encoding='UTF-8') as file:
    json_array = json.loads(file.read())

# 分析全国实时确诊数据:'confirmedCount'字段
china_data = []
for province in json_array:
    china_data.append((province['provinceShortName'], province['confirmedCount']))
china_data = sorted(china_data, key=lambda x: x[1], reverse=True)                 #reverse=True,表示降序,反之升序

print(china_data)
# 全国疫情地图
# 自定义的每一段的范围,以及每一段的特别的样式。
pieces = [
    {'min': 10000, 'color': '#540d0d'},
    {'max': 9999, 'min': 1000, 'color': '#9c1414'},
    {'max': 999, 'min': 500, 'color': '#d92727'},
    {'max': 499, 'min': 100, 'color': '#ed3232'},
    {'max': 99, 'min': 10, 'color': '#f27777'},
    {'max': 9, 'min': 1, 'color': '#f7adad'},
    {'max': 0, 'color': '#f7e4e4'},
]
labels = [data[0] for data in china_data]
counts = [data[1] for data in china_data]

m = Pie()
m.add("累计确诊", [list(z) for z in zip(labels, counts)])

# 系列配置项,可配置图元样式、文字样式、标签样式、点线样式等
m.set_series_opts(label_opts=opts.LabelOpts(font_size=12),is_show=False)

# #全局配置项,可配置标题、动画、坐标轴、图例等
m.set_global_opts(title_opts=opts.TitleOpts(title='全国实时确诊数据',
                                            subtitle='数据来源:丁香园'),
                  legend_opts=opts.LegendOpts(is_show=False),
                  visualmap_opts=opts.VisualMapOpts(pieces=pieces,
                                                    is_piecewise=True,   #是否为分段型
                                                    is_show=True))       #是否显示视觉映射配置
# #render()会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 m.render("mycharts.html")
m.render(path='data/全国实时确诊数据.html')

在这里插入图片描述
day2 手势识别(全连接神经网络学习+练习)

1、补全代码并成功运行 2、调参数、优化,提高测试集准备率

最主要的部分是,定义DNN网络模型,每一层神经元的个数的计算以及调优。

# 定义DNN网络
class MyDNN(fluid.dygraph.Layer):
    def __init__(self,name_scope):
        super(MyDNN, self).__init__(name_scope)
        # 定义4层全连接隐含层,输出维度是10,激活函数为sigmoid
        self.fc1 = Linear(input_dim=30000, output_dim=100, act='sigmoid')  # 隐含层节点为10,可根据任务调整
        self.fc2 = Linear(input_dim=100, output_dim=100, act='sigmoid')
        self.fc3 = Linear(input_dim=100, output_dim=100, act='sigmoid')
        # 定义一层全连接输出层,输出维度是1,不使用激活函数
        self.fc4 = Linear(input_dim=100, output_dim=10, act='softmax')
    def forward(self,inputs,label=None):
        inputs = fluid.layers.reshape(inputs, [inputs.shape[0], 30000])
        outputs1 = self.fc1(inputs)
        outputs2 = self.fc2(outputs1)
        outputs3 = self.fc3(outputs2)
        y = self.fc4(outputs3)
        return y

day 3 车牌识别(卷积神经网络学习+练习)

1、补全代码并成功运行 2、调参数、优化,提高测试集准确率

最主要的部分是,定义CNN网络模型,每一层神经元的个数的计算以及调优。

#定义网络
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):
        # print(input.shape)
        x = self.hidden1_1(input)
        # print(x.shape)
        x = self.hidden1_2(x)
        # print(x.shape)
        x = self.hidden2_1(x)
        # print(x.shape)
        x = self.hidden2_2(x)
        # print(x.shape)
        x = self.hidden3(x)
        # print(x.shape)
        x = fluid.layers.reshape(x, shape=[-1, 32 * 10 * 10])
        y = self.hidden4(x)
        return y

Day4 口罩识别(VGG模型的使用)

1、代码跑通,请大家根据课上所学内容,在 VGGNet类中补全代码,构造VGG网络,保证程序跑通。在VGG构造成功的基础上,可尝试构造其他网络。
2、调优 思考并动手进行调优,以在验证集上的准确率为评价指标,验证集上准确率越高,得分越高!

# VGG网络模型定义

class VGGNet(fluid.dygraph.Layer):
    def __init__(self):
        super(VGGNet, self).__init__()
        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)
        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(inputs=out, label=label)
            return out, acc
        else:
            return out

Day5 人流密度检测(比赛)

要求参赛者给出一个算法或模型,对于给定的图片,统计图片中的总人数。给定图片数据,选手据此训练模型,为每张测试数据预测出最准确的人数。
基础版本参考 https://aistudio.baidu.com/aistudio/projectdetail/382039(也可以点链接)

调优重点:学习率,训练轮数,丢弃率,换模型等等。

资源使用心得

1、GPU算力卡使用心得:GPU比CPU香太多了。尤其是速度,训练的轮数越多,模型越复杂,这种优势体现的就越明显。但是这次训练营人数实在太多了,GPU资源白天总是抢不上。为了使用GPU,我有一天凌晨4点起来调代码,也是付出了所有…

2、AI studio上开源了很多项目,有的是同学们自己公开的,有的是老师大牛们公开的,但都是可以fork到自己的文件夹中,运行和调试。AI Studio项目传送门 https://aistudio.baidu.com/aistudio/projectoverview/public(也可以点链接)

3、API文档一定要多看,及时看不懂里面的每一个参数的含义,也要知道这个接口主要是做什么的。专业的文档看起来就是很痛苦,但是看一次就有一次的收获,还是要坚持看。
快速上手传送门 https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/index_cn.html(也可以点链接)

4、安装到本地使用,我自己的习惯是比较喜欢本地编程(很传统的思维),jupyter notebook不是很常用,如果想要把环境安装到本地,可以选择自己本地匹配的环境,然后按照安装教程提示一步一步安装。TIPS:最好不要把 tensorflow caffe paddle 安装在一起,这些库中有些接口的名字是一样的,调用时有时会有歧义。比如没有导入库时,直接调用接口会提示你选一个库,选错就尴尬了。
快速安装教程 https://www.paddlepaddle.org.cn/install/quick(也可以点链接)
在这里插入图片描述添加清华源下载会很快(会很有效的提升速度):

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
conda config --set show_channel_urls yes

验证安装成功

使用 python3 进入python解释器,输入import paddle.fluid ,再输入 paddle.fluid.install_check.run_check()。
如果出现 Your Paddle Fluid is installed successfully!,说明您已成功安装。

感谢

1、集训营的班主任(恋上蒲公英)和助教小哥哥们真的很NICE,我甚至感觉她们比上课的学员更拼。佩服百度的员工真的很厉害。
2、每天讲实践课的小哥哥和小姐姐们,技术好,超级低调,讲课很清楚,对零基础入门的同学很干货。不讲段子,不推销,唯一的希望就是想让我们在github上点亮一下star,这算什么大事,安排~~
3、最后我真的想对孙高峰老师说一句:我真的是您的粉丝~

后续

1、听说有Python基础营,论文复现营、手把手CV技术营,后面陆续就会推出。
2、如果有想加入助教团队的同学,可以找班主任小姐姐报名。
3、每年都会有3天的线下集训营,到时候会有通知发布,今年保守估计要到下半年了。(我很期待呢~)
4、这里有很多的微信群和QQ群可以加入,里面有很多大神,技术氛围很浓厚,班主任也会在每个群里发布最新的通知,加一个就好了。我在集训期间就在群里和讨论区里发了很多问题,每次都能得到有效的回复,内心真的很满足,很喜欢跟大家在一起的感觉。

发布了1 篇原创文章 · 获赞 0 · 访问量 7

猜你喜欢

转载自blog.csdn.net/qq_38395721/article/details/105362986
今日推荐