赞
踩
心心念念的pandas组队学习这个月没有安排,对自己一个人独自学习自觉性很是怀疑的我,有些懵逼地随大流加入了深度学习的队伍。。。
本次比赛是以数字字符识别为切入口,带领小白们粗识深度学习中的图像识别领域。由于对CV缺乏基本的概念,所以首先是查找了一些深度学习的资料。近段时间大家都在热传邱锡鹏老师的蒲公英书,但是因为懒得去看时间紧迫,只百度了一些别人的概述解说类资料飞速地看了看。
宝可梦大师(李宏毅)的《一天搞懂深度学习》对小白很是友好(宝可梦大师居然还用了“把大象放冰箱里分几步”的梗,太可爱了),看完了就明白了一件事:
那些模型啦神经网络层啦大佬们都为我们准备好了,我们也不需要弄清楚数据在这些层之间是怎样流转、模型是怎样去进行分析的,只需要根据自己的脑洞像搭积木一样把它们按照一定规则摞起来就好。
嗯,感觉如果有类似scratch的深度学习图形化模块化编程,可能小学生也可以上手深度学习了,也许比很多大人完成得更优秀,因为小孩子的脑洞更清奇。
《Deep learning for computer vision with python》据说也是一本优秀的入门教材,但是依然很厚,还是英文,看着太累。好在找到了一个清楚简洁的深度学习与计算机视觉中文学习笔记博客,从图像基础和图像分类开始后面的还没有看,进一步了解了计算机视觉方面的基本理念:
本次比赛的数据来自于公开数据集“街景房屋号码(SVHN)”,图片都来自于谷歌街景中剪切出的房屋号码。原数据集一共有63万多张图片,本次比赛选用了其中的12万张(也许还经过了一定处理?)。训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置;测试集A包括4W张照片,测试集B包括4W张照片。
和MNIST相比,SVHN有了色彩和视角的不同,背景也更杂乱,这些都会给识别造成一定障碍。然而,这些都是模型内部自行处理的事儿,我们只需要选择适合处理复杂情况的模型就好。
真正需要我们思考并解决的,是单张图片中含有多个数字,而且不同图片中包含的数字数量不等,也即学习手册中的“不定长字符识别”。
赛题给出的评测指标是正确率(Score=编码识别正确的数量/测试集图片数量),然而实际上我们在进行模型训练的时候,也经常会使用多个来评测指标来综合判断模型的训练情况,从而一定程度上减少单一评价指标可能带来的过拟合或欠拟合情况。在学习手册提供的baseline中,使用了交叉熵损失函数(nn.CrossEntropyLoss())来辅助判别模型的训练情况,
criterion = nn.CrossEntropyLoss()
val_loss = validate(val_loader, model, criterion)
并将损失值最小作为了选择训练模型的评判条件。
if val_loss < best_loss:
best_loss = val_loss
torch.save(model.state_dict(), './model.pt')
当然,评价指标和评判条件还有很多,留到后面Task03和Task04再去慢慢探讨吧。
识别不定长字符的方法大致可以分为三类:
作为一个零基础小白,还是先从转变为定长字符处理开始入手。学习手册已经明确告诉了我们,最多的字符个数为6个。这样就大大降低了我们的识别难度,直接把所有识别出的字符都在后面加上一串X,填充为6位数就好。
可是,在没有明确告诉我们最长的字符串有多少位的情况下,又非要硬凹定长字符该怎么办呢?我目前只想到了这个思路:先设一个比较长的字符串(比如20),然后对跑出的结果进行比对,若所有字符串该位上都为X则删掉该位,最后得到最长字符串长度。不知道这样是否可行,希望能有大佬进行批评指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。