前言
这段事件跑实验,正好用到了ABCNet, 中间遇到了很多的问题,特此记录,以避免大家再遇到这样的问题
一、ABCNet的下载与demo
1.下载
ABCNet是AdelaiDet中对于BAText的一个高效的端到端场景文本定位框架
是基于Detectron2的,所以首先要下载Detectron2
我的 Requirements:
Linux with Python = 3.7.11 ,cuda = 10.1,PyTorch = 1.8.1
pip install torch==1.8.1+cu101 torchvision==0.9.1+cu101 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
其他torch版本:
# 下载 detectron2
git clone https://github.com/facebookresearch/detectron2.git
cd detectron2
git checkout -f 9eb4831
cd ..
python -m pip install -e detectron2/
# 下载 AdelaiDet
git clone https://github.com/aim-uofa/AdelaiDet.git
cd AdelaiDet
python setup.py build develop
2. demo
先使用预训练的权重模型测试一下。
下载 CTW1500 数据集,
cd AdelaiDet/datasets
wget https://drive.google.com/file/d/1ntlnlnQHZisDoS_bgDvrcrYFomw9iTZ0/view?usp=sharing -O CTW1500.zip
unzip CTW1500.zip
rm CTW1500.zip
下载model,再 demo
# Download ctw1500_attn_R_50.pth above
wget -O ctw1500_attn_R_50.pth https://universityofadelaide.box.com/shared/static/okeo5pvul5v5rxqh4yg8pcf805tzj2no.pth
python demo/demo.py \
--config-file configs/BAText/CTW1500/attn_R_50.yaml \
--input datasets/CTW1500/ctwtest_text_image/ \
--opts MODEL.WEIGHTS ctw1500_attn_R_50.pth
二、训练自己的数据集
1. 使用标注工具windows_label_tool
链接: windows_label_tool 提取码: exvx
格式如下(示例):
windows_label_tool标注格式,如下,首行是代表标注个数,下面依次是每行的标注,包含28/2 = 14个点坐标(顺序如上图),后面是文本内容
4
45,73,59,67,74,61,89,56,104,60,119,67,135,73,130,84,116,79,102,74,88,68,75,73,61,79,48,84,“DOUGLASTON”
50,119,58,119,66,119,74,119,82,119,90,119,98,119,98,137,90,137,82,137,74,137,66,137,58,137,51,137,“E-313”
41,137,48,136,56,136,64,136,71,136,79,136,87,136,89,155,81,155,73,155,65,155,57,155,49,155,41,155,“L164”
39,166,56,166,74,166,92,167,110,167,128,167,146,168,140,196,123,195,107,195,90,194,74,194,57,193,41,193,“F.D.N.Y.”
2. 转换为json (很重要,json文件错了,会出很多问题)
我的标签格式为:每个txt文件中只有一行, 所以不需要标注个数
45,73,59,67,74,61,89,56,104,60,119,67,135,73,130,84,116,79,102,74,88,68,75,73,61,79,48,84||||“DOUGLASTON”
由于后面json转换代码的问题,由14个点改为了8个点即四对点
45,73,59,67,74,61,89,56,104,60,119,67,135,73,130,84||||“DOUGLASTON”
# 四对点的顺序 0 3 4 7 为顶点, 1 2 5 6 为控制点
0--1--2--3
| |
7--6--5--4
所需classes.txt文件, 我的只有一类,所以只有 text
text
转换代码
# -*- coding: utf-8 -*-
"""
@File : convert_ann_to_json.py
@Time : 2020-8-17 16:13
@Author : yizuotian
@Description : 生成windows_label_tool工具的标注格式转换为ABCNet训练的json格式标注
"""
import argparse
import json
import os
import sys
import cv2
import numpy as np
def gen_abc_json(abc_gt_dir, abc_json_path, image_dir, classes_path):
"""
根据abcnet的gt标注生成coco格式的json标注
:param abc_gt_dir: windows_label_tool标注工具生成标注文件目录
:param abc_json_path: ABCNet训练需要json标注路径
:param image_dir:
:param classes_path: 类别文件路径
:return:
"""
# Desktop Latin_embed.
# 这是标注列表,可以根据自己的改,但是中文在训练时需要下载 simsun.ttc 字体文件(新宋体)
cV2 = [
"皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑",
"苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤",
"桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁",
"新", '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K&#