美文网首页
Task01-赛题理解

Task01-赛题理解

作者: 天秤座的机器狗 | 来源:发表于2020-05-20 21:22 被阅读0次

    一、数据类型

    训练集的数据都是带标注的图片形式,本质是一个分类问题,预测图片中的数字。

    二、赛题难点

    赛题的目的是识别图片中的字符,即input = 图片,output = 字符。但是给定的数据字符的长度是不一致的。解决的方法,暂时可以考虑三种办法:

    1. 标准化一致的长度

    也就是说取所有数据中字符长度最长为目标长度字符,比如,最长的字符长度为6,表示为123456,那么字符12则需要表示成12XXXX,这样相当于每个字符都有11种可能。模型训练的时候相当于对每张图片都以11个字符对待。
    这种处理方法比较简单,但我觉得缺陷可能在于训练的模型不能很好的处理更长的字符。

    2.不定长字符识别

    CRNN模型暂时理解不了

    3.先检测再识别

    三、理解数据

    1.先导库

    import os, sys, glob, shutil, json
    os.environ["CUDA_VISIBLE_DEVICES"] = '0'
    import cv2
    from PIL import Image
    import numpy as np
    from tqdm import tqdm, tqdm_notebook
    import torch
    import matplotlib.pyplot as plt
    torch.manual_seed(0)
    torch.backends.cudnn.deterministic = False
    torch.backends.cudnn.benchmark = True
    import torchvision.models as models
    import torchvision.transforms as transforms
    import torchvision.datasets as datasets
    import torch.nn as nn
    import torch.nn.functional as F
    import torch.optim as optim
    from torch.autograd import Variable
    from torch.utils.data.dataset import Dataset
    import json
    

    2.查看一下json文件

    json文件中存放的是训练集所有图片的标注

    train_json = json.load(open('C:\\Users\\pc\\Desktop\\tianchi\\mchar_train.json'))
    train_json["000000.png"]
    {'000000.png': {'height': [219, 219],
      'label': [1, 9],
      'left': [246, 323],
      'top': [77, 81],
      'width': [81, 96]},
     }
    

    可以看到每张图片都会存放5个标注的内容,包括“height”,“label”,“left”,“top”,“width”
    “label”很好理解,就是每张图片要识别的字符是什么,也就是数据的标签
    剩下的4个就是字符的坐标,可以用一张图很好的表示


    image.png

    3.理解一下读取图片

    img = cv2.imread('C:\\Users\\pc\\Desktop\\tianchi\\000000.png')
    
    

    图片的读取这里使用的是openCV的imread函数进行读取
    imread这个函数有两个参数,即filename和flag
    filename就是你的图片的对应的路径
    flag指的是你读取图片采用的模式,可以有很多选择
    再看看imread返回的是什么

    array([[[ 98, 112, 108],
            [ 97, 112, 108],
            [ 98, 114, 107],
            ...,
            [255, 255, 255],
            [255, 255, 255],
            [255, 255, 255]],
    
           [[100, 114, 110],
            [ 99, 114, 110],
            [ 99, 115, 108],
            ...,
            [255, 255, 255],
            [255, 255, 255],
            [255, 255, 255]],
    
           [[101, 116, 112],
            [101, 116, 112],
            [101, 117, 110],
            ...,
            [255, 255, 255],
            [255, 255, 255],
            [255, 255, 255]],
    
           ...,
    
           [[ 25,  21,  20],
            [ 24,  22,  21],
            [ 26,  24,  23],
            ...,
            [255, 255, 255],
            [255, 255, 255],
            [255, 255, 255]],
    
           [[ 24,  23,  19],
            [ 23,  24,  20],
            [ 22,  23,  19],
            ...,
            [255, 255, 255],
            [255, 255, 255],
            [255, 255, 255]],
    
           [[ 21,  22,  18],
            [ 22,  23,  19],
            [ 21,  22,  18],
            ...,
            [255, 255, 255],
            [255, 255, 255],
            [255, 255, 255]]], dtype=uint8)
    

    它返回的是一个三维数组
    这里就需要补充一点图像的相关知识了,一张图片有许多的像素点构成。我们常见的图片一般是三通道图片,即由红、绿、蓝三个通道构成,每个像素点的颜色就可以用三个数值表示了,范围在0~255。imread返回的通道顺序是BGR,因此很好理解了,imread返回的就是一个个像素点,每个像素点由三个值代表该点的颜色,这三个值可以看成是蓝、绿、红的深度的数值。

    img.shape
    (350, 741, 3)
    

    同样可以知道的是,该图片是一个长350,宽741,三通道的图片。
    我们对图片的读取核心也就是获得这些信息,这些信息进一步处理就可以转换成对应的样本的特征了。
    另外,img既然可以用一个三维数组表示,这也就意味着我们可以通过切片的方式对图片进行截取,同时根据图片对应的标注的坐标信息,我们也就可以将对应的字符截取下来。

    plt.subplot(1, 1, 1)
    plt.imshow(img[77:77+219,246:246+81])
    
    批注 2020-05-20 211619.png

    4.Task01总结
    pytorch安装以及单个数据读取都没什么问题,数据理解缺了一点基础知识,已经查阅资料理解了。第一阶段先这样,接下来进行数据的读取和扩增。

    相关文章

      网友评论

          本文标题:Task01-赛题理解

          本文链接:https://www.haomeiwen.com/subject/wmjpohtx.html