计算机视觉实践(街景字符编码识别)Vol1

前言

接触深度学习有一定时间了,但是一直以来还是处于学习吸收阶段,学习的知识也比较零散,没有集中做过大型项目,也没有参加过相关比赛,比较缺乏相关的应用经验。因此这是我第一次参加CV赛事,希望自己能够坚持每天学习,坚持每次打卡,积少成多,熟能生巧。

赛题背景

本次赛事的研究对象是街景字符,取自经典数据集SVHN,主要的任务就是识别街道字符图像,相比于最开始学习过的MNIST数据集上的图像识别,我认为这个数据集提供的样本具有以下特点:

  1. 字符长度不确定 ,下载数据集并浏览了训练集之后发现,街景字符以两位数字居多,也有三位,四位甚至多位的,参考baseline中的设置,可能最高有五位数字出现。赛事组织方给出的建议是用字符X或者[10]填补空位;
  2. 字符的位置不确定,即需要对原图片中的字符先进行定位,切割再实现逐个识别。不过好在比赛提供了字符的位置数据(字符距离顶部和左边的像素距离以及字符框的高度和宽度),存储在相应的json文件中,可以打开该文件直接对目标字符进行定位。
  3. 数据集比较庞大,该数据集共有训练集3w张,验证集3w张,测试集A有4w张图片,因此训练和预测会消耗相对较长的时间。

解决思路

  1. 最简单的思路是转化为定长字符。即一般的字符是0-9,在此基础上讲空位记作第11个字符,例如可以用X代替,这样需要识别的字符类型就有11种。
  2. 把该问题看做不定长的字符识别问题,比较典型的有CRNN字符识别模型,这部分尚不了解,还需要做进一步研究。
  3. 先检测再识别,即检测出字符的位置之后再进行识别。目标检测可以参考使用YOLO

潜在困难

  1. 之前有过用Tensorflow搭建神经网络完成过MNIST数据集的训练,因此对于图像识别有一定的了解,不过本次比赛提供的框架是Pytorch,因此可能需要一段时间去熟悉了解Pytorch的建模思路和常用的技巧。不过听说Pytorch把数据都封装好了,调用也非常简单。看完baseline之后觉得确实很方便。
  2. 电脑性能比较差,跑一个epoche可能需要花费数小时,关于这个问题尚不知道该如何解决比较好。不知道在GPU上训练会不会快一些,但是我这GEFORCE GT 650M估计也是很老很老了吧,可能也改善不了多少,而且我还没有配置GPU的相关模块,这个也可能需要研究一下。
  3. 尚未阅读相关的文献,之后可能还是会花一点时间来看看经典的文献,会及时关注学习群里的相关情况。

Baseline理解

以下简单记录对于赛事方提供的baseline的一些理解。

import os, sys, glob, shutil, json
os.environ["CUclass SVHNDataset(Dataset):
    def __init__(self, img_path, img_label, transform=None):
        self.img_path = img_path
        self.img_label = img_label 
        if transform is not None:
            self.transform = transform
        else:
            self.transform = None

    def __getitem__(self, index):
        img = Image.open(self.img_path[index]).convert('RGB')

        if self.transform is not None:
            img = self.transform(img)
        
        # 设置最长的字符长度为5个
        lbl = np.array(self.img_label[index], dtype=np.int)
        lbl = list(lbl)  + (5 - len(lbl)) * [10]
        return img, torch.from_numpy(np.array(lbl[:5]))

    def __len__(self):
        return len(self.img_path)

这一块设置了定长字符是5个字符,其中空位用10代替。SVHNDataset通过PIL读入图片之后,通过transform做一定的图像处理。通过后文可以知道这些处理包括:

  • resize:重置图像分辨率
  • RandomCrop:依据给定的size随机裁剪
  • ColorJitter:修改修改亮度、对比度和饱和度,前三个参数是brightness, contrast, saturation;
  • RandomRotation:随机旋转一定角度
  • ToTensor:将PIL Image或者 ndarray 转换为tensor,并且归一化至[0-1] ;
  • Normalize:对数据按通道进行标准化,即先减均值,再除以标准差。
train_path = glob.glob
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天池是一个著名的数据科学竞赛平台,而datawhale是一家致力于数据科学教育和社群建设的组织。街景字符编码识别是指通过计算机视觉技术,对街道场景中的字符进行自动识别和分类。 街景字符编码识别是一项重要的研究领域,对于提高交通安全、城市管理和智能驾驶技术都具有重要意义。街道场景中的字符包括道路标志、车牌号码、店铺招牌等。通过对这些字符进行准确的识别,可以辅助交通管理人员进行交通监管、道路规划和交通流量分析。同时,在智能驾驶领域,街景字符编码识别也是一项关键技术,可以帮助自动驾驶系统准确地识别和理解道路上的各种标志和标识,为自动驾驶提供可靠的环境感知能力。 天池和datawhale联合举办街景字符编码识别竞赛,旨在吸引全球数据科学和计算机视觉领域的优秀人才,集思广益,共同推动该领域的研究和发展。通过这个竞赛,参赛选手可以使用各种机器学习和深度学习算法,基于提供的街景字符数据集,设计和训练模型,实现准确的字符编码识别。这个竞赛不仅有助于促进算法研发和技术创新,也为各参赛选手提供了一个学习、交流和展示自己技能的平台。 总之,天池datawhale街景字符编码识别是一个具有挑战性和实际应用需求的竞赛项目,旨在推动计算机视觉和智能交通领域的技术发展,同时也为数据科学爱好者提供了一个学习和展示自己能力的机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值