Antigen Detector(新冠试剂盒检测)
转自AI Studio,原文链接:Antigen Detector(新冠试剂盒检测) - 飞桨AI Studio1、检测效果展示2、Antigener_Detector思路说明Antigener Detector通过两种方法串行,来完成检测。从而提高阳性样本的召回率。首先是使用在数据集(新冠抗原检测试剂数据集)上训练的ppyoloe-s模型进行目标检测。紧接着使用传统视觉算法对检测得到的主体进行后
转自AI Studio,原文链接:Antigen Detector(新冠试剂盒检测) - 飞桨AI Studio
1、检测效果展示
2、Antigener_Detector思路说明
Antigener Detector通过两种方法串行,来完成检测。从而提高阳性样本的召回率。
首先是使用在数据集(新冠抗原检测试剂数据集)上训练的ppyoloe-s模型进行目标检测。紧接着使用传统视觉算法对检测得到的主体进行后处理。最后由两者结果共同进行判断。
之所以这样做,有以下两方面原因:
1、数据集阳性样本量不够多。(欢迎各位开发者朋友们对上述数据集的进一步完善做出贡献。)
2、当检测试剂棒上的红杠颜色很浅时,很容易误识别成阴性。这在实际应用中是绝对不允许的。
因此,本着“宁可错检阴性样本,也绝不放过任何一个阳性样本”的原则,使用了上述思路进行检测。
3、代码结构
│ detector.py #目标检测器
│ detpreprocess.py #目标检测前图像预处理部分
│ main.py #主函数。
│ postprocess.py
│ predictor.py
│ preprocess.py
│ Readme.md
├─params
│ infer_cfg.yml #如若重新训练检测器,不要替换掉该文件,可将新训练的与之对照修改
│ model.pdiparams
│ model.pdiparams.info
│ model.pdmodel
│
├─test_images
│ detect_output.png
│ FDLOw1RXoAY6Aat.jpg
│ FEeigpzX0AEmqW-.png
│ FIHmHpwWQAcKWK3.jpg
│ positive.jpeg
├─utils
│ config.py
│ logger.py
│ init.py
4、检测模型的训练
4.1、检测模型简介
PP-YOLOE的优点:
1、性能更强。如上图所示,PP-YOLOE 的 s/m/l/x 全系列四个尺寸在精度及速度方面均超越其他同体量算法。其中 PP-YOLOE-l 在 COCO test-dev 上精度可达 51.4%,在 V100 上使用 TRT FP16 进行推理,速度可达 149FPS,相较于YOLOX-l精度提升 1.3 AP,速度提升 24.96%;相较于YOLOv5-x精度提升 0.7AP,TRT-FP16 加速 26.8%;相较于PP-YOLOv2精度提升 1.9 AP,速度提升 13.35%。
2、配置方案丰富灵活。P-YOLOE不仅提供 4 种固定尺寸,且支持开发者灵活地定制化配置更多尺寸;顺畅支持包括模型量化、剪枝和蒸馏在内丰富的模型优化策略,满足实际产业场景中速度和精度的极致追求;全面高质量支持包括 TensorRT 和 OpenVINO 在内的加速库,还提供一键转出 ONNX 格式,可顺畅对接 ONNX 生态。
3、部署支持。PP-YOLOE 在结构设计上避免使用 DCN、Matrix NMS 等不易部署的算子,使其可以方便地部署到不同的硬件当中。当前已经完备支持 NVIDIA V100、T4 这样的云端 GPU 架构以及如 Jetson 系列等边缘端 GPU 设备。
由于PP-YOLOE具有以上特点,更切合实际应用场景,因此选择该模型作为目标检测模型。
4.2、配置训练环境
In [ ]
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
In [ ]
%cd /home/aistudio/PaddleDetection/
!pip install -r requirements.txt && python setup.py install
4.3、解压数据集
In [ ]
%cd /home/aistudio/data/
!unzip -oq /home/aistudio/data/data145153/DatasetId_356209_1652018624.zip
/home/aistudio/data
In [2]
%cd /home/aistudio/data/DatasetId_356209_1652018624/
import os
f = open("train.txt", 'w')
for dir_ in os.listdir("/home/aistudio/data/DatasetId_356209_1652018624/Images"):
dir_m = dir_.split(".")
f.write("Images/{}\tAnnotations/{}\n".format(dir_, dir_m[0]+'.xml'))
m = open("label_list.txt", 'w')
m.write("{}\n".format('positive'))
m.write("{}\n".format('negative'))
m.write("{}\n".format('Invalid'))
/home/aistudio/data/DatasetId_356209_1652018624
8
4.4、配置训练文件
In [ ]
%cd /home/aistudio/PaddleDetection/configs/datasets/
!touch antigener_dataset.yml
%cd /home/aistudio/PaddleDetection/configs/ppyoloe/
!touch antigener_detection.yml
/home/aistudio/PaddleDetection/configs/datasets /home/aistudio/PaddleDetection/configs/ppyoloe
In [ ]
"""
antigener_dataset.yml添加如下内容:
"""
_BASE_: [
'../datasets/antigener_dataset.yml',
'../runtime.yml',
'./_base_/optimizer_300e.yml',
'./_base_/ppyoloe_crn.yml',
'./_base_/ppyoloe_reader.yml',
]
log_iter: 100
snapshot_epoch: 10
weights: output/ppyoloe_crn_s_300e_coco/model_final
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/CSPResNetb_s_pretrained.pdparams
depth_mult: 0.33
width_mult: 0.50
TrainReader:
batch_size: 32
LearningRate:
base_lr: 0.01
In [ ]
"""
antigener_detection.yml添加如下内容:
"""
metric: VOC
map_type: 11point
num_classes: 3
TrainDataset:
!VOCDataSet
dataset_dir: /home/aistudio/data/DatasetId_356209_1652018624
anno_path: train.txt
label_list: label_list.txt
data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']
EvalDataset:
!VOCDataSet
dataset_dir: /home/aistudio/data/DatasetId_356209_1652018624
anno_path: test.txt
label_list: label_list.txt
data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']
TestDataset:
!ImageFolder
anno_path: /home/aistudio/data/DatasetId_356209_1652018624/label_list.txt
4.5、模型训练
In [5]
%cd /home/aistudio/PaddleDetection/
!python tools/train.py -c configs/ppyoloe/antigener_detection.yml
In [ ]
!python tools/export_model.py -c configs/ppyoloe/antigener_detection.yml --output_dir=./inference_model \
-o weights=output/antigener_detection/model_final.pdparams
5、使用方法
使用时一定要注意修改main.py文件里的相关路径。
from main import antigener_classification
img = cv2.imread('test_images/positive.jpeg')
results = antigener_classification(img)
print(results)
"""
输出results的格式如下:
{'Positive':[a, b, c, ...., n], 'Negative':[a, b, c, ...., n]}
a, b, c, ...., n的格式如下:
[x1, y1, x2, y2, confidence]
左上角坐标,右下角坐标以及置信度。
"""
6、Update Codes更新日志
2022.5.11算法更新: 本次更新替换了原算法中的第二阶段。而是通过建立阴性、阳性样本的特征向量数据库。当目标检测完成之后,如果目标检测得到的目标置信度小于设置的negative_threshed和positive_threshed两个阈值,则使用训练好的分类模型对感兴趣区域进行特征提取,之后在已经构建的特征向量数据库中进行搜索,找到相似度最高的特征向量,即认为该样本标签与数据库中样本标签一直,从而提升算法的容错率。
建立数据库的方法:
python .\build_gallary.py -c .\params\build_index.yaml
使用方法:
from antigener_detector import antigener_classification_update_1、Searcher
img = cv2.imread('xxx')
searcher, id_map = Searcher()
results = antigener_classification_update_1(img, searcher, id_map)
print(results)
"""
输出results的格式如下:
{'Positive':[a, b, c, ...., n], 'Negative':[a, b, c, ...., n]}
a, b, c, ...., n的格式如下:
[x1, y1, x2, y2, confidence]
左上角
"""
7、继续改进思路
由于这是一种两个方法串行检测的方案。因此,提升任何一个的检测性能,都会对该方案的性能提升有一定帮助。而改进思路也很显然:
1、改进目标检测本身。(从模型角度以及数据集角度)
2、进一步完善传统视觉算法方案。
By Hansansui 2022.05.09
AI Studio主页:韩三岁个人主页
希望自己所做能尽绵薄之力,愿疫情早日结束!
更多推荐
所有评论(0)