阿里天池街景字符编码YOLO5方案

前言

最近在做OCR相关的任务,用到了阿里天池一个街景字符识别比赛的数据集,索性就分享一下相关方案,我采用YOLO5模型,最终在平台提交分数也做到了0.924,没有经过任何优化,可以看出YOLO5的效果还是非常不错的。

比赛地址链接:https://tianchi.aliyun.com/competition/entrance/531795/introduction?spm=5176.12281973.1005.7.3dd52448VtZc6t

下载YOLO5模型

YOLO5下载:https://github.com/ultralytics/yolov5
在这里插入图片描述
下载压缩包,然后放到自己文件夹进行解压。

在yolo5-master中打开命令行,键入以下命令安装相关包:

pip install -r requirements.txt

注意:安装包的时候可能会有各种各样的报错,特别是安装pycocotools的时候,不用慌,把报错复制粘贴到百度上面,都能解决!

获取数据集

YOLO已经准备好了,现在把比赛数据集拿出来,解析数据我就不自己写了,直接采用另外一位论坛上面老哥的代码,这里是训练集的处理,验证集也是一样的:

import os
import cv2
import json
train_json = json.load(open('mchar_train.json'))
for x in train_json:
    img=cv2.imread("images/train/"+x)
    width=img.shape[1]
    height=img.shape[0]
    train_label =list(map(int,train_json[x]['label']))
    train_height=list(map(int,train_json[x]['height']))
    train_left=list(map(int,train_json[x]['left']))
    train_width=list(map(int,train_json[x]['width']))
    train_top=list(map(int,train_json[x]['top']))
    loc_pic="labels/train/"+x.split('.')[0]+'.txt' 
    pic=open(loc_pic,"w")
    for i in range(len(train_label)):
        pic_label=train_label[i]
        pic_x=(train_left[i]+train_width[i]/2)/width
        pic_y=(train_top[i]+train_height[i]/2)/height
        pic_width=train_width[i]/width
        pic_height=train_height[i]/height            
        pic.write(str(pic_label)+" "+str(pic_x)+" "+str(pic_y)+" "+str(pic_width)+" "+str(pic_height))
        pic.write("\n")
    pic.close()

解析后的数据都是txt格式的,因为YOLO模型输入格式要求也是这样
在这里插入图片描述
数据处理好了以后,我们在yolo5-master中创建一个名为tianchi的文件夹,文件夹结构如下:
在这里插入图片描述
文件夹创建好后,把对应的数据拷贝进相应文件夹中就行了。

模型训练

我们把models文件夹中yolo5s.yaml文件复制一份到tianchi文件夹中,同时把data文件夹中coco128.yaml文件也复制一份到tianchi文件夹中,并且把yolo5s.yaml改名为street_yolo5s.yaml,把coco128.yaml改名为street_yolo.yaml,改好后如下图:
在这里插入图片描述
然后我们再将这两个文件中的内容进行修改,首先修改street_yolo5s.yaml:将nc的值改为10
在这里插入图片描述
然后修改street_yolo.yaml文件,只需要修改train和val的路径,还有nc和names就行了,然后把path那一行注释掉,修改后如下:
在这里插入图片描述
改完之后我们就可以进行模型训练了!!!
在yolo5-master中打开命令行,执行以下命令(这里我只设置了20个epoch作为示例,我自己是100个epoch训练后才是0.924):

python train.py --data tianchi/streat_yolo.yaml --cfg tianchi/street_yolo5s.yaml --epochs 100

在这里插入图片描述
训练会花费很多时间,我训练了21个小时,电脑太垃圾了(GTX1050)!

测试数据预测

将test图片数据放入images文件夹中:
在这里插入图片描述
然后执行如下命令即可:

python detect.py --weights runs/train/exp/weights/best.pt --source  tianchi/images/test/ --save-txt

预测完成后在runs/detect/exp中可以可以看到训练后的结果:
在这里插入图片描述

提交结果

预测出来的labels格式不是最终提交结果,我们要按照比赛要求的提交结果来,所以还要对结果进行一点处理:

import pandas as pd
import glob
import os
def get(elem):
    return elem[1]
label_path=glob.glob('labels/*.txt')
label_path.sort()
df_submit = pd.read_csv('mchar_sample_submit_A.csv')
df_submit.set_index('file_name')
for x in label_path:
    text=open(x,'r')
    result_list=[]
    for line in text.readlines():
        result_list.append((line.split(' ')[0],line.split(' ')[1]))
    result_list.sort(key=get)
    result=''
    for j in result_list:
        result+=j[0]
    label_path=x.split('\\')[-1].split('.')[0]+'.png'
    df_submit['file_code'][df_submit['file_name']==label_path]=result
    text.close()
df_submit.to_csv('content/submit.csv', index=None)

将submit.csv提交到天池平台上面:
在这里插入图片描述

写在最后

上面的成绩只是单纯的调用了模型,没有进行任何调优和融合,可以看出YOLO5的效果还是很好的,我们也可以采用不同的YOLO权重参数进行训练尝试,效果会更好。同时也感谢论坛各位大佬提供的各种想法和代码,我也是学到了很多,本人才疏学浅,如果有不对的地方希望指正!

  • 13
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
天池智能制造质量预测数据集 背景描述 半导体产业是一个信息化程度高的产业。高度的信息化给数据分析创造了可能性。基于数据的分析可以帮助半导体产业更好的利用生产信息,提高产品质量。 现有的解决方案是,生产机器生产完成后,对产品质量做非全面的抽测,进行产品质量检核。这往往会出现以下状况,一是不能即时的知道质量的好坏,当发现质量不佳的产品时,要修正通常都为时以晚,二是在没有办法全面抽测的状况下,存在很大漏检的风险。 在机器学习,人工智能快速发展的今天,我们希望着由机器生产参数去预测产品的质量,来达到生产结果即时性以及全面性。更进一步的,可基于预先知道的结果,去做对应的决策及应变,对客户负责,也对制造生产更加敏感。 痛点与挑战: 1)TFT-LCD(薄膜晶体管液晶显示器)的生产过程较为复杂,包含几百道以上的工序。每道工序都有可能会对产品的品质产生影响,故算法模型需要考虑的过程变量较多。 2)另外,这些变量的取值可能会存在异常(如测点仪表的波动导致、设备工况漂移等现象),模型需要足够稳定性和鲁棒性。 3)产线每天加工的玻璃基板数以万计,模型需要在满足较高的精准度前提下尽可能实时得到预测结果,这样才能给在实际生产中进行使用。 价值: 1)如果能够建立算法模型准确预测出特性值,便可以实现生产过程的实时监控和预警,提前发现当前工序的问题、避免问题流入到后道工序,减少生产资源浪费的同时也优化了产品良率。 2)基于预测模型得到的关键参数,工艺人员能够快速地针对那些电性表现不佳的产品进行问题溯源分析,重点分析和调整那些关键的影响因子,加快不良问题的处理、提高整体工艺水平。 3)该预测模型在部署后也可以用于减少特性检测相关的工序,能够节约检测资源并且对提升产线整体的产能有正面作用。 数据说明 每条数据包含8029列字段。 第一个字段为ID号码,最后一列为要预测的值Y。其余的数据为用于预测Y的变量X。这些变量一共由多道工序组成,字段的名字可以区分不同的工序,例如 210X1, 210X2。300X1,300X2。字段中的TOOL_ID或者Tool为每道工序使用的机台,如果是string类型,需要选手自行进行数字化转换。注意: 数据中存在缺失值。 测试集分为A/B两份,相比训练集,最后一列的value值是缺失的,研究人员可以根据训练数据做模型训练,并对测试集做预测。为了方便研究人员评测算法效果,我们提供了测试集A的答案。 问题描述 本数据集提供了生产线上的抽样数据,反应机台的温度,气体,液体流量,功率,制成时间等因子。 通过这些因子,需要研究人员设计出模型,准确的预测与之相对应的特性数值。这是一个典型的回归预测问题。
基于YOLO V8的车牌识别系统可以准确识别正面水平放置的蓝底白字车牌。然而,该系统目前还不能实现对汉字的识别,因为数据不够多[^1]。如果您有自己的图像,可以尝试使用该系统进行测试。以下是一个基于YOLO V8的车牌字符识别的示例代码: ```python # 导入所需的库 import cv2 import numpy as np # 加载YOLO V8模型 net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") # 加载车牌字符类别标签 classes = [] with open("classes.txt", "r") as f: classes = [line.strip() for line in f.readlines()] # 加载图像 image = cv2.imread("car_plate.jpg") # 对图像进行预处理 blob = cv2.dnn.blobFromImage(image, 1/255, (416, 416), (0, 0, 0), True, crop=False) # 将预处理后的图像输入到模型中进行推理 net.setInput(blob) outs = net.forward() # 解析模型输出 class_ids = [] confidences = [] boxes = [] for out in outs: for detection in out: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection * image.shape) center_y = int(detection * image.shape) width = int(detection * image.shape) height = int(detection * image.shape) left = int(center_x - width / 2) top = int(center_y - height / 2) class_ids.append(class_id) confidences.append(float(confidence)) boxes.append([left, top, width, height]) # 非最大抑制,筛选出最可能的车牌字符区域 indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) # 在图像上绘制识别结果 for i in indices: i = i box = boxes[i] left = box top = box[1] width = box height = box cv2.rectangle(image, (left, top), (left + width, top + height), (0, 255, 0), 2) cv2.putText(image, classes[class_ids[i]], (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # 显示识别结果 cv2.imshow("Car Plate Recognition", image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 请注意,上述代码中的模型权重文件(yolov3.weights)、模型配置文件(yolov3.cfg)和类别标签文件(classes.txt)需要根据实际情况进行替换。此外,您还需要将待识别的车牌图像(car_plate.jpg)放在相应的路径下。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值