ABCNet:基於自適應貝塞爾曲線的實時端到端自然場景文字檢測及識別網絡
論文鏈接 : https://arxiv.org/abs/2002.10200
官方開源代碼: https://github.com/aim-uofa/AdelaiDet
論文是2020 CVPR 收錄, 貢獻1)提出採用貝塞爾曲線來擬合任意形狀文本,2)提出貝塞爾對齊方式更準確地提取文本實例 .
環境配置和運行demo.py遇到的問題
系統配置:ubuntu16.04 + cuda10.0
因該項目基於最新的detecron2構建,需要torch>=1.3.建議隔離一個虛擬環境安裝相應的庫.
Q1 運行python setup.py build develop
編譯adet庫時出現, /usr/bin/ld: cannot find -lcudart
-
問題原因:安裝的/usr/local/cuda-10.0/lib64/中cudart庫不完整.
ls -lh /usr/local/cuda-10.0/lib64 | grep cudart
完整的lib64目錄下包含四個文件:libcudart.so
libcudart.so.10.0
libcudart.so.10.0.130
libcudart_static.a -
解決方案:重裝cuda-10.0, 或者將某個安裝完整的cuda10.0的這幾個文件拷貝到對應目錄即可.
再重新運行之前編譯命令,編譯成功後會如圖所示完成AdelaiDet安裝.
Q2 運行ABCnet的測試代碼:python -m e demo/demo.py --config-file configs/BAText/CTW1500/attn_R_50.yaml --input totaltext/Images/Test --opts MODEL.WEIGHTS test/ctw1500_attn_R_50.pth
出現如下問題
QObject::moveToThread: Current thread (0x55f48724d2a0) is not the object’s thread (0x55f485279c70
- 解決方案:未解決.可指定"–output"來將測試結果輸出到目錄,暫時避免這個問題.
基於AdelaiDet訓練自定義ABCNet
數據集
- abcnet數據標籤生成
自定義abcnet的數據集,以labelme的目標框標註爲例生成.轉換腳本百度雲提取碼: 42v4 - 數據集結構
data
└── train
├── 0001.jpg
├── 0002.jpg
└── 0003.jpg
└── test
├──1001.jpg
├── 1002.jpg
└── 1003.jpg
└── annotations
├── train.json
├── test.json
- 修改相關配置文件進行訓練
- 將製作好的data數據目錄放在"AdelaiDet/datasets"目錄
- 修改"adet/data/builtin.py"中的_PREDEFINED_SPLITS_TEXT值來指定訓練測試數據,注意這裏默認是在datasets下的,所以它們的相對路徑都是從下層目錄開始的.
_PREDEFINED_SPLITS_TEXT = { "totaltext_train": ("totaltext/train_images", "totaltext/train.json"), "totaltext_val": ("totaltext/test_images", "totaltext/test.json"), ... "abcnet_train": ("data/train", "data/annotations/train.json"), "abcnet_test": ("data/test", "data/annotations/test.json"),}
- 在需要訓練的配置文件中指定數據集即可.以
configs/BAText/CTW1500/Base-CTW1500.yaml
爲例,DATASETS: # detail cfg: AdelaiDet/adet/data/builtin.py TRAIN: ("abcnet_train",) TEST: ("abcnet_test",)
- 訓練
OMP_NUM_THREADS=1 python tools/train_net.py --config-file configs/BAText/TotalText/attn_R_50.yaml --num-gpus 1
“args”: ["–config-file",“configs/BAText/CTW1500/attn_R_50.yaml”,
“–input” ,“totaltext/Images/Test”,
“–output”,“output/total”,
// “–webcam”,
“–opts”, “MODEL.WEIGHTS”, “pretrained/ctw1500_attn_R_50.pth”, - 推理
python demo/demo.py ---config-file configs/BAText/TotalText/attn_R_50.yaml –input datasets/data/test --output res --opts “MODEL.WEIGHTS output/batext/ctw1500/attn_R_50/model_0009999.pth
樣例展示
測試圖片爲total-text測試圖
當前的不足:訓練了中文手寫和英文印刷體,比較直觀的問題是測試出現了比較多的漏檢,密集文本行間會出現預測的貝塞爾曲線交叉問題.即有密集文本粘連問題.
…