dataset // 读取数据
|--barcode_dataset.py // 将数据封装为 pytorch 可读取格式
|--preprocess.py // 数据预处理
|--transforms.py // 数据预处理
models // 训练权重文件存储
config.py // SSD 的 priors 设置,anchors 设置
eval.py // 评估模型准确率
model.py // 模型(network)定义
run_example.py // 测试脚本
run_train.ipynb // 训练命令
train.py // 训练
utils.py // 工具模块
Hint: 详细注解见实际代码
labelImg
(链接)
检测使用 SSD
算法。
识别使用 pyzbar
(python 的 zbar 库)。
识别示例:
使用标注工具标注后,将数据(jpg + xml)放置到 barcode_dat/{train, val}
即可。
代码部分不需要进行特别的调整。
对于新增类别,加入新增类别为另一个二维码码制:pdf417
。
反映到标注文件 xml 上的变化为:object 中的 name。同样将新增的图片和标注(jpg + xml)移动到相应的位置 barcode_dat/{train, val}
即可。
<object>
<name>pdf417</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>956</xmin>
<ymin>280</ymin>
<xmax>1443</xmax>
<ymax>750</ymax>
</bndbox>
</object>
新增类别后代码层面的修改:
config.py
class_names = ['background', 'bar_code', 'qr_code']
# 添加新增类别
class_names = ['background', 'bar_code', 'qr_code', 'pdf417']
dataset/barcode_dataset.py
# class BarCodeDataset 中
self.class_names = ('background', 'bar_code', 'qr_code', 'pdf417')
注意上述两处调整,类别对应顺序要一致。
python train.py -d ../barcode_dat \
-v ../barcode_dat \
--batch_size 32 \
--num_epochs 200 \
--debug_steps 30 \
--scheduler "multi-step" \
--lr 0.01 \
--milestones "120,160"
上述参数中:
另一种学习率调整策略,可作为尝试:
python train.py -d ../barcode_dat \
-v ../barcode_dat \
--batch_size 32 \
--num_epochs 200 \
--scheduler cosine \
--lr 0.01 \
--t_max 200
评估模型准确率:
python eval.py -m models/tiny-Epoch-199-Loss-1.0858.pth \
--dataset ../barcode_dat
参数说明:
实际使用部分,输入图片,输出检测框坐标。
python run_example.py tiny \
models/tiny-Epoch-199-Loss-1.0858.pth \
images/qr_6.jpg