yolov5来打tianchi中的街景字符编码识别

1运行机器

显卡:2080ti×1
系统:ubuntu 20.04
cpu:Intel® Core™ i7-10700KF CPU @ 3.80GHz

2前期准备

1安装显卡驱动
2安装cuda
3安装cudnn
4安装vscode
5安装anaconda
6安装git

3下载数据

https://tianchi.aliyun.com/competition/entrance/531795/information

1这里数据麾下在一个csv文件,里面是下载地址

file,size,link
mchar_train.zip,345.91MB,http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_train.zip
mchar_train.json,3.16MB,http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_train.json
mchar_val.zip,200.16MB,http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_val.zip
mchar_val.json,1.03MB,http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_val.json
mchar_test_a.zip,370.6MB,http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_test_a.zip
mchar_sample_submit_A.csv,507.83KB,http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531795/mchar_sample_submit_A.csv

2利用python将文件下载

import pandas as pd
import os
from urllib.request import urlretrieve
class download(object):

    def __init__(self):
        super(download, self).__init__()

    
    def start(self):
        root=os.getcwd()
        data=pd.read_csv(root+"/steet_character_detector/data/mchar_data_list_0515.csv")
        
        

  
        for i in range(data.shape[0]):
            url=data.iloc[i,2]
            print(url)
            local=url.split("/")[-1]
            local=root+"/steet_character_detector/data/"+local

            try:
               
                urlretrieve(url, local,self.callbackfunc)  #
            except Exception as e:
                print ("Exception")


    def callbackfunc(self,blocknum, blocksize, totalsize):
        '''回调函数
        @blocknum: 已经下载的数据块
        @blocksize: 数据块的大小
        @totalsize: 远程文件的大小
        '''

        print  ("blocknum  ",blocknum,"blocksize ",blocksize,"totalsize ",totalsize)
        percent = 100.0 * blocknum * blocksize / totalsize
        if percent > 100:
            percent = 100
        print ("%.2f%%" % percent,"    ",blocknum *blocksize,"    ",totalsize)
root=os.getcwd()
data=pd.read_csv(root+"/steet_character_detector/data/mchar_data_list_0515.csv")
print(data.head())
if __name__ == '__main__':
   
    d = download()
    d.start()

4环境搭建

1anaconda新建环境

conda create -n street_yolov5 python=3.8 
conda activate street_yolov5

2下载yolov5

git clone https://github.com/ultralytics/yolov5

3根据requirement.txt安装python包

pip install -requirement.txt

5处理数据

这里要处理数据满足yolov5训练的条件

5.1教程训练coco128(可跳过)

可以先尝试一下yolov5教程中的coco128训练,这是选取了coco数据集中的前128张图像
在程序里

python train.py --img 320 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache

训练完后 先查看coco128.yaml,这里要改数据集的位置和nc识别类的数量,names类中的名字
在这里插入图片描述
训练中的参数可以看tutorial.ipynb
最后训练的权重文件保存在

Results saved to runs/train/exp3

这里可以发现数据集都是两个文件一个文件放图片,一个文件放txt文件,包括定位框和标签
在这里插入图片描述

5.2创建yaml文件

直接对着coco128进行修改
在这里插入图片描述

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ./datasets/tianchi  # dataset root dir
train: images/train  # train images (relative to 'path') 128 images
val: images/val  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 10  # number of classes
names: ['0','1','2','3','4','5','6','7','8','9']  # class names

5.3 查看coco128label格式(可跳过)

coco数据集根据标签实例化图片

5.4数据集创建

cd code/yolov5/

创建train文件夹

mkdir datasets/tianchi
mkdir datasets/tianchi/images/

创建label文件夹

mkdir datasets/tianchi/labels/
mkdir datasets/tianchi/labels/train
mkdir datasets/tianchi/labels/val

将图片数据考入文件夹中

cp -r   ../../data/mchar_test_a/mchar_test_a/ datasets/tianchi/images/ 
cp -r ../../data/mchar_train/mchar_train/ datasets/tianchi/images/train
cp -r ../../data/mchar_val/mchar_val/ datasets/tianchi/images/val

5.5数据集处理并训练

处理tianchi街景字符编码识别数据集为yolov5格式数据集并训练

6 test数据的测试

先试验一张的效果

python detect.py --weights runs/train/exp6/weights/best.pt --img 320 --conf 0.25 --source datasets/tianchi/images/test/000000.png

在这里插入图片描述
将所有的test图像都进行测试,并输出结果文本

python detect.py --weights runs/train/exp6/weights/best.pt --img 320 --conf 0.25 --source datasets/tianchi/images/test/ --save-txt

输出结果进行提交
在这里插入图片描述

import pandas as pd
import glob
import os
def takeSecond(elem):
    return elem[1]
label_path=glob.glob('runs/detect/exp8/labels/*.txt')
label_path.sort()
df_submit = pd.read_csv('../../data/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=takeSecond)
    result=''
    for j in result_list:
        result+=j[0]
    label_path=x.split('/')[-1].split('.')[0]+'.png'
    df_submit.loc[df_submit.file_name==label_path,'file_code']=result
    text.close()
df_submit.to_csv('submit.csv', index=None)

在这里插入图片描述
准确率92%,还没出排名,看了一下大概长期赛50多名

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值