街景字符识别

赛事介绍

比赛连接:https://tianchi.aliyun.com/competition/entrance/531795/introduction
一、赛题数据
赛题来源自Google街景图像中的门牌号数据集(The Street View House Numbers Dataset, SVHN),该数据来自真实场景的门牌号。训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置;为了保证比赛的公平性,测试集A包括4W张照片,测试集B包括4W张照片。所有的数据(训练集、验证集和测试集)的标注使用JSON格式,并使用文件名进行索引。如果一个文件中包括多个字符,则使用列表将字段进行组合。
!!!需要注意的是本赛题需要选手识别图片中所有的字符。

二、评测标准
评价标准为准确率,选手提交结果与实际图片的编码进行对比,以编码整体识别准确率为评价指标,结果越大越好,具体计算公式如下:
score= 编码识别正确的数量/测试集图片数量
数据下载连接:

filelink
mchar_train.ziphttp://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_train.zip
mchar_train.jsonhttp://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_train.json
mchar_val.ziphttp://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_val.zip
mchar_val.jsonhttp://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_val.json
mchar_test_a.ziphttp://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_test_a.zip
mchar_sample_submit_A.csvhttp://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_sample_submit_A.csv

环境准备

拟使用pytorch搭建识别模型,选择docker进行环境部署,下载python3.6+pytorch镜像;同时配置对应的安装包,使用commit改变对应镜像。此次的模型中需要额外配置的包有:tqdm,torch,torchvision。

数据获取与数据扩增

数据获取,下载第一部分数据连接中数据信息,并放到对应的目录下;
数据获取与处理方式参考baseline中的数据获取方法。

数据包

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
%pylab inline
import torch
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

根据赛题数据定义好读取格式

class 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)

        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)

定义好训练集和验证集的dataloder


train_path = glob.glob('../input/train/*.png')
train_path.sort()
train_json = json.load(open('../input/train.json'))
train_label = [train_json[x]['label'] for x in train_json]
print(len(train_path), len(train_label))

train_loader = torch.utils.data.DataLoader(
    SVHNDataset(train_path, train_label,
                transforms.Compose([
                    transforms.Resize((64, 128)),
                    transforms.RandomCrop((60, 120)),
                    transforms.ColorJitter(0.3, 0.3, 0.2),
                    transforms.RandomRotation(10),
                    transforms.ToTensor(),
                    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])), 
    batch_size=40, 
    shuffle=True, 
    num_workers=10,
)

val_path = glob.glob('../input/val/*.png')
val_path.sort()
val_json = json.load(open('../input/val.json'))
val_label = [val_json[x]['label'] for x in val_json]
print(len(val_path), len(val_label))

val_loader = torch.utils.data.DataLoader(
    SVHNDataset(val_path, val_label,
                transforms.Compose([
                    transforms.Resize((60, 120)),
                    # transforms.ColorJitter(0.3, 0.3, 0.2),
                    # transforms.RandomRotation(5),
                    transforms.ToTensor(),
                    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])), 
    batch_size=40, 
    shuffle=False, 
    num_workers=10,
)

小推广:这个比赛是Datawhale与天池联合发起的零基础入门系列赛事第二场 —— 零基础入门CV赛事之街景字符识别。我是2019年接触到datawhale的,缘分来自一次错误的公众号查找,但偶然发现里面有很多但干货,而且不像其他公众号各种软广,就一直关注着。Datawhale是一个公益性的组织,会经常组织一些免费的前沿培训,分享一些数据分析、机器学习、深度学习的内容。如果有问题,里面的伙伴还会帮忙解答,,,嗯,一群很有意思的人,一起做着有意义的事情,真的很棒!微信号: Datawhale 有需要的小伙伴可以添加一下呦。
未完待续。。。

### 街景字符识别 YOLOv11 实现方法 对于街景字符识别的任务,YOLO系列算法因其高效性和准确性而被广泛采用。然而,在当前的信息中提到的是YOLOv5的配置文件设置[^1]。值得注意的是,截至最新更新,并不存在官方发布的YOLOv11版本。 如果目标是使用最新的YOLO变体来实现街景字符识别,则建议考虑使用YOLOv8或更稳定的YOLOX等开源项目作为基础框架。这些模型继承和发展了YOLO家族的优点,提供了更好的性能和支持。 为了实现街景字符识别任务,以下是基于现有最先进YOLO架构的一般流程: #### 数据准备 数据集应当按照指定路径组织训练、验证以及测试片集合。例如: ```yaml train: tianchi/images/train # 训练像(相对于'path') val: tianchi/images/val # 验证像(相对于'path') test: tianchi/images/test # 测试像(可选) ``` #### 修改配置文件 调整`nc`参数以匹配所需的类别数目,并定义相应的类名列表: ```yaml nc: 10 # 类别数 names: ['0','1','2','3','4','5','6','7','8','9'] # 类别名称 ``` #### 模型定制化 针对特定应用场景优化网络结构,比如增加特征提取层的数量或者改变骨干网的设计,从而提高检测精度和速度。 #### 训练过程 利用预处理后的数据集进行模型训练,期间可以监控损失函数变化趋势并适调整超参直至收敛稳定。 由于没有具体的YOLOv11资料可供参考,上述指导主要依据于已知有效的YOLO实践案例改编而来。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值