飞桨PaddlePaddle——百度架构师手把手带你零基础实践深度学习

飞桨PaddlePaddle——百度架构师手把手带你零基础实践深度学习

首先,在CSDN注册账号很久了,一直以来都是看各位大佬的blog,也没有发表过自己的想法。在学习上出现了疑惑,第一件事就是来CSDN上寻找帮助,非常感谢各位大佬的无私分享。
最近我在百度AI Studio课程中参加了21天的百度架构师手把手带你零基础实践深度学习课程,课程即将结束,于是就课程的整体给大家分享下我的感受与课程中的一些想法。

课程整体感受

在历经21天之后,回顾这段时间,收获颇多。首先对自己感到骄傲,能够每天坚持学习完当天的课程任务,并且按时完成了打卡,要知道这可是暑假,我居然每天都在学习,还学习了21天,有点不真实,就像是一场梦,醒来还是很感动,淡黄的。。。。。。咳咳,言归正传,再者也确实是真的学到了东西的,百度的课程干货很多,并且免费提供GPU算力,只要每天运行下项目即可赠送12小时的算力,这对于我们这种既没钱买高昂的设备,又是新手小白来说,真的是非常友好,给各位想学深度学习的小白们强烈安利。
接下来我将大致总结下这门课。

深度学习的基本流程

深度学习是用来实现人工智能的一种方式,它相比机器学习而言,我觉得更加简单,更加容易上手,因为它基本上都有一套流程,只要你掌握了这套流程,基本上你也可以设计出一个模型,至于结果的好坏,就是个不断优化调整的过程。
深度学习基本流程
如图所示(图片来自于百度架构师手把手带你零基础实践深度学习课程),从纵向看,深度学习一般都遵循数据处理、模型设计、训练配置、训练过程、以及模型保存这五个基本步骤;从横向看,每一步都可以进行优化调整,如数据的处理可以优化使得读取更快,训练配置中的学习率的调整能使得模型更好的收敛等等。

“Roman wasn’t built in a day”,一个好的深度学习模型也是经过不变的优化得到的。百度飞桨开设的这门课正是从这五个步骤出发,从最开始的房价预测模型到最后的YoLoV3算法,由浅入深,层层递进,使人学起来很轻松。

关于锚框的理解

将原始图片划分成m×n个区域,原始图片高度H=640,宽度W=480,如果我们选择小块区域的尺寸为32×32,则m和n分别为:
m=640/32=20
n=480/32​=15
如下图所示(图片来自于百度架构师手把手带你零基础实践深度学习课程),将原始图像分成了20行15列小方块区域。
将图片划分成多个32x32的小方块
然后在YoLoV3中,以基本小方块为中心取不同的尺寸,就变成了预测框,课程中的代码是输入指定anchor的尺寸大小的,我们其实也可以固定anchor的基本长度,然后在此基础上进行形状调整也可以,代码如下(来自SiamRPN论文的代码):

def generate_anchors(total_stride, base_size, scales, ratios, score_size):    # 其中base_size为anchor的基本大小,scales为放缩大小,ratios为宽高比例
    anchor_num = len(ratios) * len(scales)   
    anchor = np.zeros((anchor_num, 4), dtype=np.float32)
    size = base_size * base_size 
    count = 0
    for ratio in ratios:
        # ws = int(np.sqrt(size * 1.0 / ratio))
        # ratio = h / w, s = w * h = w * w * ratio, w = sqrt(s / ratio), h = w * ratio
        ws = int(np.sqrt(size / ratio))  
        hs = int(ws * ratio)   
        for scale in scales:
            wws = ws * scale 
            hhs = hs * scale 
            anchor[count, 0] = 0
            anchor[count, 1] = 0
            anchor[count, 2] = wws
            anchor[count, 3] = hhs
            count += 1

    anchor = np.tile(anchor, score_size * score_size).reshape((-1, 4))
    ori = - (score_size // 2) * total_stride    
    x, yy = np.meshgrid([ori + total_stride * dx for dx in range(score_size)],
                         [ori + total_stride * dy for dy in range(score_size)])

    xx, yy = np.tile(xx.flatten(), (anchor_num, 1)).flatten(), \
             np.tile(yy.flatten(), (anchor_num, 1)).flatten()
 
    anchor[:, 0], anchor[:, 1] = xx.astype(np.float32), yy.astype(np.float32)
    return anchor
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值