飞道的博客

PaddlePaddle深度学习7日入门CV篇Summaries

479人阅读  评论(0)

PaddlePaddle深度学习7日入门CV篇|Summaries

一、什么是PaddleX?

依托飞桨开源深度学习框架和丰富的工具组件,PaddleX进行全流程的整合打通,为开发者提供飞桨全流程开发的最佳实践。它集飞桨核心框架、模型库、工具及组件等深度学习开发所需全部能力于一身,提供简明易懂的Python API,方便用户根据实际生产需求进行直接调用或二次开发,是提升深度学习项目开发效率的最佳辅助工具。

二、为什么要参加训练营

  1. 由于一只蝙蝠,带来了漫长的网课,老师布置的任务时多时少,而自己在完成老师规定的任务后时间还比较充裕,想着不如来打卡营学习,提升一下自己
  2. 由于自己前期有在学习python,训练营的内容与所学也挺配,算是一种在python编程上的进阶吧
  3. 为以后参加人工智能比赛做准备,同时也对自己玩树莓派比较有帮助

三、训练营都学些什么

Day01 丁香园数据可视化

Day02 手势识别

Day03 车牌识别

Day04 口罩识别

Day05 Paddle hub 初体验

利用Paddle hub进行口罩识别



(改了好久,最后准确率还是崩了😭😭)

以及

人流密度检测比赛!!!

数据种类来源多样,采用框选和头部标点进行数据统计

采用使用高斯滤波变换生成密度图

# 使用高斯滤波变换生成密度图
def gaussian_filter_density(gt):
    #Generates a density map using Gaussian filter transformation
    # 初始化密度图
    density = np.zeros(gt.shape, dtype=np.float32)
    
    # 获取gt中不为0的元素的个数
    gt_count = np.count_nonzero(gt)
    
    # 如果gt全为0,就返回全0的密度图
    if gt_count == 0:
        return density

    # FInd out the K nearest neighbours using a KDTree
    
    pts = np.array(list(zip(np.nonzero(gt)[1].ravel(), np.nonzero(gt)[0].ravel())))
    
    # if gt_count > 0 and gt_count < 20: 
    
    # leafsize = 2048

    # # build kdtree
    # tree = scipy.spatial.KDTree(pts.copy(), leafsize=leafsize)

    # query kdtree
    # distances, locations = tree.query(pts, k=4)

    for i, pt in enumerate(pts):
        pt2d = np.zeros(gt.shape, dtype=np.float32)
        pt2d[pt[1],pt[0]] = 1.
        if gt_count > 1:
            # sigma = (distances[i][1]+distances[i][2]+distances[i][3])*0.1
            sigma = 25
        else:
            sigma = np.average(np.array(gt.shape))/2./2. #case: 1 point
        
        #Convolve with the gaussian filter
        
        density += scipy.ndimage.filters.gaussian_filter(pt2d, sigma, mode='constant')

    return density

进行网络配置(可以采用VGG-16 卷积神经网络)

def crowd_deconv_without_bn(img):
    x = img

    x = fluid.layers.conv2d(input=x, num_filters=64, filter_size=3, padding=1, act='relu')
    x = fluid.layers.batch_norm(input=x, act='relu')
    x = fluid.layers.conv2d(input=x, num_filters=64, filter_size=3, padding=1, act='relu')  
    print('3-64-2',x.shape)
    x = fluid.layers.pool2d(input=x, pool_size=2, pool_stride=2)  
    x = fluid.layers.dropout(x=x, dropout_prob=0.25)
    print('pool',x.shape)

    x = fluid.layers.conv2d(input=x, num_filters=128, filter_size=3, padding=1, act=None)  
    x = fluid.layers.batch_norm(input=x, act='relu')
    x = fluid.layers.conv2d(input=x, num_filters=128, filter_size=3, padding=1, act='relu') 
    print('3-128-2',x.shape)
    x = fluid.layers.pool2d(input=x, pool_size=2, pool_stride=2) 
    x = fluid.layers.dropout(x=x, dropout_prob=0.25)
    
    x = fluid.layers.conv2d(input=x, num_filters=256, filter_size=3, padding=1, act='relu') 
    x = fluid.layers.batch_norm(input=x, act='relu')
    x = fluid.layers.conv2d(input=x, num_filters=256, filter_size=3, padding=1, act=None) 
    x = fluid.layers.batch_norm(input=x, act='relu')
    x = fluid.layers.conv2d(input=x, num_filters=256, filter_size=3, padding=1, act='relu')  
    print('3-256-3',x.shape)
    x = fluid.layers.pool2d(input=x, pool_size=2, pool_stride=2)  
    x = fluid.layers.dropout(x=x, dropout_prob=0.5)
    
    # x = fluid.layers.conv2d(input=x, num_filters=512, filter_size=3, padding=1, act='relu')  
    # x = fluid.layers.conv2d(input=x, num_filters=512, filter_size=3, padding=1, act='relu')  
    # x = fluid.layers.conv2d(input=x, num_filters=512, filter_size=3, padding=1,act='relu' )  
    
    # x = fluid.layers.pool2d(input=x, pool_size=3, pool_stride=1, pool_padding=1) 
    # x = fluid.layers.pool2d(input=x, pool_size=2, pool_stride=2) 
    # x = fluid.layers.dropout(x=x, dropout_prob=0.5)

    x = fluid.layers.conv2d(input=x, num_filters=512, filter_size=3, padding=1, act='relu') 
    x = fluid.layers.dropout(x=x, dropout_prob=0.5)
    x = fluid.layers.conv2d(input=x, num_filters=512, filter_size=3, padding=1, act='relu') 
    x = fluid.layers.dropout(x=x, dropout_prob=0.5)
    x = fluid.layers.conv2d(input=x, num_filters=512, filter_size=3, padding=1)  
    x = fluid.layers.batch_norm(input=x, act=None)
    print('3-512-3',x.shape)
    # x = fluid.layers.pool2d(input=x, pool_size=3, pool_stride=2, pool_padding=1)  
    # x = fluid.layers.dropout(x=x, dropout_prob=0.5) 
    print('clowd_net output shape:',x.shape)

    return x

后面就是模型训练(基本上耗时最长的部分)、模型校验、参数调整(对于笔者这个小白来说最重要的)

俗话说,调参错,出出错(一个卷积核shape错误,或者一组权重错误,都可能导致你训练一上午的模型面临过拟合,甚至“瘫痪”)

Day06 paddleslim模型压缩

Day07 结营,公布比赛获奖名单,看大佬讲解模型

四、在训练营打卡的感受

  1. 群里的小伙伴(有部分也不能称作小伙伴,毕竟都工作了😂)超级积极,学习氛围浓厚。有一位跟笔者经常讨论的大佬(前30名,笔者菜鸡0.2的错误率从78被挤到100开外)有一次通宵跑模型训练,一连工作15个小时
  2. 另一方面来说,也是蛮累的,毕竟是在挤时间来调参、训练模型,gpu环境得要算力卡才能用,只有在晚上22:00后才可能抢得到gpu环境,不少老哥都是早上5点起床抢(有一说一,gpu上跑起来真的比cpu环境块多了,飞一般的感觉😍😍)
  3. 群主和老师真的也很负责,批改作业,回答问题,不厌其烦,有时候班班也会用微信机器人的脚本
  4. 难度有点大,对于小白来说不容易,各种vgg、cnn模型,全连接网络、神经卷积网络、各种优化模型。对于信心不足的同学来说,分分钟劝退✋✋✋😂
  5. paddle平台上的api太多,短时间内不容易弄懂
  6. 就七日的实践来看,内容确实有点多,涉及图像识别、物品分类、数据可视化、数据爬取等多个方面,七天学习只能算是开了个头,后面还需要慢慢消化
  7. 感谢这段时间群里学习负责人

五、未来规划

  1. 继续利用paddle平台学习
  2. 强化自己的专业能力
  3. 仅仅7天的学习只能是一种了解,后面还需要时间来消化这些模型,为自己所用
  4. 读论文,复现论文模型

最后放上paddle平台链接,加油呀:

PaddleX官网地址:

点击这里进入



转载:https://blog.csdn.net/qq_45828448/article/details/105453280
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场