用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)

参考链接:http://ai.baidu.com/forum/topic/show/595975

                  https://github.com/endernewton/tf-faster-rcnn

                  https://blog.csdn.net/weixin_42111393/article/details/83383720

1、用爬虫下载网络车牌图片(URL-百度图片搜索)。

# -*- coding:utf-8 -*-
import re
import uuid
import requests
import os


class DownloadImages:
    def __init__(self, download_max, key_word):
        self.download_sum = 0
        self.download_max = download_max
        self.key_word = key_word
        self.save_path = '../data/plate_number/images/'

    def start_download(self):
        self.download_sum = 0
        gsm = 80
        str_gsm = str(gsm)
        pn = 0
        if not os.path.exists(self.save_path):
            os.makedirs(self.save_path)
        while self.download_sum < self.download_max:
            str_pn = str(self.download_sum)
            url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&' \
                  'word=' + self.key_word + '&pn=' + str_pn + '&gsm=' + str_gsm + '&ct=&ic=0&lm=-1&width=0&height=0'
            print (url)
            result = requests.get(url)
            self.downloadImages(result.text)
        print ('下载完成')

    def downloadImages(self, html):
        img_urls = re.findall('"objURL":"(.*?)",', html, re.S)
        print ('找到关键词:' + self.key_word + '的图片,现在开始下载图片...')
        for img_url in img_urls:
            print ('正在下载第' + str(self.download_sum + 1) + '张图片,图片地址:' + str(img_url))
            try:
                pic = requests.get(img_url, timeout=50)
                pic_name = self.save_path + '/' + str(uuid.uuid1()) + '.jpg'
                with open(pic_name, 'wb') as f:
                    f.write(pic.content)
                self.download_sum += 1
                if self.download_sum >= self.download_max:
                    break
            except  Exception as e:
                print ('【错误】当前图片无法下载,%s' % e)
                continue


if __name__ == '__main__':
    downloadImages = DownloadImages(150, '车牌')
    downloadImages.start_download()

2、人工删除不是车牌的图片、车牌模糊不清或者有遮挡的图片、车牌号不完整的图片。(车票号格式例子:粤A88888)

3、为了符合VOC数据集,要对图片重命名(其实也不一定非要重命名吧)。(000001.jpg~000100.jpg)

# coding=utf-8
import os

def rename(images_dir):
    # 获取所有图像
    images = os.listdir(images_dir)
    i = 1
    for image in images:
        src_name = images_dir + image
        # 以六位数字命名,符合VOC数据集格式
        name = '%06d.jpg' % i
        dst_name = images_dir + name
        os.rename(src_name,dst_name)
        i += 1
    print ('重命名完成')

if __name__ == '__main__':
    # 要重命名的文件所在的路径
    images_dir = '../data/plate_number/images/'
    rename(images_dir)

4、标注数据集:

  • a.安装LabelImg 
  • b.Open Dir打开图像所在的文件夹data/plate_number/images/
  • c.设置保存文件存放的位置
  • d.点击Create RectBox标注车牌的位置,并打上标签plate_number
  • e.点击save生成xml标签文件

5、制作与Pascal VOC2007同一格式的数据集(用于目标检测),其余的两个文件SegmentationClass和SegmentationObject直接忽略就可以了,这是用在图像分割的。

6、修改代码:主要是更改n_class类数

  • a.lib/datatsets/pascal_voc.py
  • b.tools/demo.py  两处修改
  • c.lib/datasets/imdb.py
  • d.修改训练迭代次数为10000次

7、训练时出现的问题有:

File “/tf-faster-rcnn/tools/…/lib/datasets/imdb.py”, line 108, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError

找到问题的原因,是矩形标注的问题。

解决方法:参考https://blog.csdn.net/10km/article/details/64641322https://blog.csdn.net/

注意:记得删除data目录下的cache文件夹,否则测试时会报错

8、测试结果:map=0.818

猜你喜欢

转载自blog.csdn.net/weixin_39506322/article/details/87393947