目录
Day01 新冠疫情可视化
第一天的任务主要有两个,第一个是飞桨的本地安装,以及新冠疫情可视化。
作业1:飞桨本地安装
这门课程我感觉首先是可以给大家普及cv方面的知识,另一方面也是为了普及飞桨这个框架的使用,所以安装飞桨也必不可少。
飞桨的官网:https://www.paddlepaddle.org.cn/documentation/docs/zh/install/index_cn.html
作业2:新冠疫情可视化
作业2的话是 新冠疫情的可视化。这个作业的主要任务是 利用python的request模块和re正则化模块,爬取丁香园当天的新冠疫情数据,然后利用Echarts进行对数据可视化操作。Echarts 是一个由百度开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。pyecharts api参考链接:https://pyecharts.org/#/zh-cn/chart_api
然后我们需要做的就是将面的可视化图片利用百度的pycharts 转为扇形可视化出来。
利用爬取到的数据转为扇形对的代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/3/31 22:17
# @Author : caius
# @Site :
# @File : test2.py
# @Software: PyCharm
import json
import datetime
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
# 读原始数据文件
today = datetime.date.today().strftime('%Y%m%d') #20200315
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 = Map()
# m.add("累计确诊", [list(z) for z in zip(labels, counts)], 'china')
c = Pie()
c.add("", [list(z) for z in zip(labels, counts)] ,center=["50%", "70%"],radius=["2%", "40%"])
["50%", "50%"]
c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
c.set_global_opts(title_opts=opts.TitleOpts(title='全国实时确诊数据 -caius',
subtitle='数据来源:丁香园'),
legend_opts=opts.LegendOpts(is_show=False)
) #是否显示视觉映射配置
# c = (
# Pie()
# .add("",[list(z) for z in zip(labels, counts)])
# # .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
# .set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色"))
# .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
# .render("pie_set_color.html")
# )
#系列配置项,可配置图元样式、文字样式、标签样式、点线样式等
# m.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}"),is_show=False)#
# 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.test2.pytest2.py(pieces=pieces,
# is_piecewise=True, #是否为分段型
# is_show=True)) #是否显示视觉映射配置
# #render()会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 m.render("mycharts.html")
c.render(path='./data/全国实时确诊数据.html')
Day02 手势识别
第二天的任务是手势识别任务,其实也就是一个多分类的任务。课程要求是用DNN来做,然后我使用的是Alexnet来进行多分类的任务,但是效果不是很好。在此过程中我学到了课程中的小伙伴的一个图像增强的一个技巧mixup。它一般是用在图像分类上面的,我想把它用在语义分割或者目标检测上面,但是我并没有找到相关的代码。
def mixup(X, y):
'''
功能:图像增强,mixup
参数:
X:batch imgs
y: batch labels
超参:
beta: beta分布的alpha和beta参数,这个可以自己设置,并观察结果
引用:
mixup: Beyond Empirical Risk Minimization(https://arxiv.org/abs/1710.09412)
'''
mixup_alpha = 0.1
seed = np.random.beta(mixup_alpha, mixup_alpha)
index = np.arange(X.shape[0])
np.random.shuffle(index)
images_a, images_b = X, X[index]
labels_a, labels_b = y, y[index]
mixed_images = seed * images_a + (1 - seed) * images_b
return mixed_images, labels_a, labels_b, seed
他的github链接如下:https://github.com/mmmmmmiracle/paddle_seven_days
完整的代码如下:
import os
import time
import random
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import paddle
import paddle.fluid as fluid
import paddle.fluid.layers as layers
from multiprocessing import cpu_count
from paddle.fluid.dygraph import Pool2D,Conv2D,CosineDecay,BatchNorm,CosineDecay
from paddle.fluid.dygraph import Linear
# 生成图像列表
data_path = '/home/aistudio/data/data23668/Dataset'
character_folders = os.listdir(data_path)
# print(character_folders)
if(os.path.exists('./train_data.list')):
os.remove('./train_data.list')
if(os.path.exists('./test_data.list')):
os.remove('./test_data.list')
for character_folder in character_folders:
with open('./train_data.list', 'a') as f_train:
with open('./test_data.list', 'a') as f_test:
if character_folder == '.DS_Store':
continue
character_imgs = os.listdir(os.path.join(data_path,character_folder))
count =