利用dbnet分割条形码与文字(代码+模型)+知识蒸馏+tensorrt推理+利用pyzbar和zxing进行条形码解析

一.DBnet

1.代码链接

分割条形码与文字代码:github链接:GitHub - zonghaofan/dbnet_torch: you can use dbnet to detect word or bar code,Knowledge Distillation is provided,also python tensorrt inference is provided.(提供模型)

2.论文阅读

model:

                                            model图

可微分二值化

一般的分割模型都是对最终的输出结果取一个固定阈值进行二值化,本文创新点在于将二值化的阈值进行学习,如上图的(a)所示

加入可微分模块,就可以把阈值进行训练,能够更好区分前后景与粘连文本.

P:probability map

T:threshold map

B^:approximate binary map

Loss函数:
 

loss主要三部分:Ls是收缩之后文本实例的loss, Lb是二值化之后的收缩文本实例loss, Lt是二值化阈值map的loss, Ls和Lb都使用带OHEM的bceloss, Lt使用L1loss。

注意的是论文给的速度只是包含前向传播和后处理,所以实际上包含预处理,速度没这么快的.

一些结果展示

   

二.知识蒸馏

其中T是温度,直接使用softmax层的输出值作为soft target, 当softmax输出的概率分布熵相对较小时,负标签的值都很接近0,对损失函数的贡献非常小,小到可以忽略不计。因此"温度"这个变量就派上了用场。T很大时就能软化softmax的输出概率, 分布越趋于平滑,其分布的熵越大,负标签携带的信息会被相对地放大,模型训练将更加关注负标签。也就是从有部分信息量的负标签中学习 --> 温度要高一些,防止受负标签中噪声的影响 -->温度要低一些。

思路:采用resnet50(teacher)先训练,在利用训练好的resnet50(teacher)对resnet18(student)小模型进行联合训练,实验证明f1score比单独训练resnet18涨一个点

代码见github.

python train_word_industry_res50.py 训练teacher模型;

python train_word_industry_res18_kd.py 训练student模型.

三.torch模型->onnx->tensorrt

思路:采用torch.onnx将.pth转成.onnx格式,在用tensorrt推理。代码见github中的model_to_onnx.py.

四.解析条形码c++版与python版

1.c++版的zxing,见该链接

python调用形式为:

#coding:utf-8
"""用c++编译的zxing进行解析条形码"""
import subprocess
import os
import time
import sysos.path.join(os.path.dirname(__file__)))def zxing_parse_code(imgpath):zxing_bin_path = os.path.join(os.path.dirname(__file__), "zxing")assert os.path.exists(zxing_bin_path), "zxing bin file not exist!"command = '{} --test-mode {}'.format(zxing_bin_path, imgpath)process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)process.wait()output = process.communicate()[0].decode("utf-8").replace(' ', '').split('\n')# print(output)try:if 'Detected:' in output[1]:return output[1][9:]else:return Noneexcept:return None

2.安装环境:

ubuntu:
apt-get install zbar-tools

apt-get install python-jpype

centos:

yum install zbar-devel

pip install pyzbar

pip install zxing

3.代码案例 

#coding:utf-8
import pyzbar.pyzbar as pyzbar
import time
import shutil
import zxing
import cv2def parse_code(codeimg, reader):"""输入矫正过的条形码图片输出解析结果:param codeimg: 矫正过的条形码图片:return: 条形码解析结果"""gray = cv2.cvtColor(codeimg, cv2.COLOR_BGR2GRAY)gray_h, gray_w = gray.shapebarcodes1 = pyzbar.decode(gray)# barcodes2 = pyzbar.decode(np.rot90(np.rot90(gray)))# print('==barcodes2:', barcodes2)def parse_results(barcode):# for barcode in barcodes:# 提取条形码的位置# (x, y, w, h) = barcode.rect# 字符串转换barcodeData = barcode.data.decode("utf-8")return barcodeDataif len(barcodes1):barcodeData = parse_results(barcodes1[0])if len(barcodeData) >= 10:#条形码位数大于10位return barcodeDataelse:if gray_h>gray_w:cv2.imwrite('./out_clip.jpg', np.rot90(codeimg)[...,::-1])else:cv2.imwrite('./out_clip.jpg', codeimg[...,::-1])barcode = reader.decode('./out_clip.jpg')# print('==barcode:', barcode)try:return barcode.rawexcept:return Nonedef debug_parse_code():reader = zxing.BarCodeReader()path = './5.png'img = cv2.imread(path)code_res = parse_code(img, reader)print('==code_res:', code_res)if __name__ == '__main__':debug_parse_code()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球值得关注的11家人脸识别公司与机构

来源:资本实验室根据美国国家标准与技术研究院(NIST)的2018年全球人脸识别算法测试(FRVT)最新结果,今年共有来自全球的39家企业和机构参与本次竞赛。在最新排名中,前五名算法被中国公司包揽&…

图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)

一.基础知识 有向图 无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间成本最低的通讯网&#x…

算法偏见侦探

来源:AI 科技评论摘要:随着越来越多的算法不断渗透入社会的层层面面,如医疗机构、政府部门,对算法偏见的讨论越来越多。这个月,Nature 杂志评选出 2018 年最受欢迎的十大科学长篇专题报道,其中,…

pytorch实现常用的一些即插即用模块(长期更新)

1.可分离卷积 #coding:utf-8 import torch.nn as nnclass DWConv(nn.Module):def __init__(self, in_plane, out_plane):super(DWConv, self).__init__()self.depth_conv nn.Conv2d(in_channelsin_plane,out_channelsin_plane,kernel_size3,stride1,padding1,groupsin_plane)…

硅片行业:过剩背景下的寡头市场

来源:乐晴智库精选▌竞争格局:过剩背景下的寡头市场,规模壁垒初步形成光伏产业总体处于产能过剩的状态,硅片环节的过剩尤为突出。根据PVInfolink的统计数据,截至2018年2季度末,全球硅片总产能超过160GW,年化…

从attention到Transformer+CV中的self-attention

一.总体结构 由于rnn等循环神经网络有时序依赖,导致无法并行计算,而Transformer主体框架是一个encoder-decoder结构,去掉了RNN序列结构,完全基于attention和全连接。同时为了弥补词与词之间时序信息,将词位置embedding…

12年后,人工智能和人类会是什么样?这是900位专家的看法|报告

来源:机器之能摘要:有分析师预计,到2030年,在复杂的数字系统中,人们将更加依赖于网络人工智能。 有人说,随着对这些网络工具的广泛使用,我们将继续沿着历史的轨迹生活地更好。也有一些人说&…

水印去除(基于nosie2noise优化 代码+模型)

github链接 1.感受野计算: :本层感受野; :上层感受野; :第i层卷积或池化的步长 k:本层卷积核大小 2.空洞卷积卷积核计算:Kk(k-1)(r-1),k为原始卷积核大小,r为空洞卷积参数空洞率,带入上式即可计算空洞卷积感受野; 3.针对noi…

广度深度都要,亚马逊是如何推动 Alexa 内生成长的?

来源:雷锋网摘要:发展到今天,Alexa 已经成为亚马逊旗下最重要的几个业务支柱之一,尤其是在人工智能语音助手层面,它和 Google Assistant、Apple Siri、Microsoft Cortana 并驾齐驱,甚至在应用场景上有领先之…

剖析云平台中的“共享型数据库”

剖析云计 算中的“共享型数据库” 摘要: 随着云计算的出现,出现了很多新的名词,像云数据库、云存储、弹性扩容,资源隔离等词汇。下面就大家炒的比较热的“共享型数据库”做一下解释,给大家剖析什么叫“共享型数据库”。…

FCOS: A Simple and Strong Anchor-free Object Detector

论文链接 一.背景 1.anchor-base缺点          (1).anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定,难度较大. (2).anchor太过密集,其中很多是负样本&#xff…

大数据有十大应用领域,看看你用到了哪个?

来源:网络大数据摘要:如果提到“大数据”时,你会想到什么?也许大部分人会联想到庞大的服务器集群;或者联想到销售商提供的一些个性化的推荐和建议。如今大数据的深度和广度远不止这些,大数据已经在人类社会实践中发挥着巨大的优势…

2018年《环球科学》十大科学新闻出炉:霍金逝世、贺建奎事件位列前二

来源:量子位如果要用两个词来定义2018年的话,我们可能会选择“进步”与“反思”。中国科学在持续进步,克隆猴“中中”与“华华”、单条染色体的酵母,都是世界级的研究成果。“火星快车”在火星上发现大面积的液态湖泊,…

CornerNet: Detecting Objects as Paired Keypoints

CornerNet论文链接 Hourglass Network论文链接 一.背景 1.anchor-base缺点          (1).anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定,难度较大. (2).anchor太过密集&…

详细解读什么是自适应巡航?

来源:智车科技摘要:自适应巡航设计初衷是减轻驾驶员长途驾驶的疲劳,极为复杂的城市路况并不是它发挥作用的地方。虽然现在的自适应巡航系统具备了根据前车情况、根据路况减速,甚至是刹停的功能,不过其开发之初便是为了…

CenterNet:Objects as Points

CenterNet论文链接 一.背景 1.anchor-base缺点          (1).anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定,难度较大. (2).anchor太过密集,其中很多是负样本…

美国正在衰落的24个行业:“猝不及防”还是“温水煮青蛙”?

来源:资本实验室摘要:技术发展一日千里,外部环境日新月异。在这个变化无处不在的世界,许多行业都在不可避免地经历着或是猝不及防,或是“温水煮青蛙”般的冲击。近期,美国财经网站24/7 Wallst根据过去十年的…

距离与相似度计算

一.余弦相似度 加速计算参考这篇文章 from math import *def square_rooted(x):return round(sqrt(sum([a*a for a in x])), 3)def cosine_similarity(x,y):numerator sum(a*b for a, b in zip(x,y))denominator square_rooted(x)*square_rooted(y)return round(numerator/f…

5G 产业链重要细分投资领域

来源:乐晴智库精选▌2019年全球电子产业将保持增长ICInsights预计2018年全球电子产品销售额16220亿美元,同比增长5.1%,2019年将达到16800亿美元,同比增长3.5%,2017~2021年CAGR4.6%。预计2019年通信市场销售额5350亿美元…

CPNDet:Corner Proposal Network for Anchor-free, Two-stage Object Detection

CPNDet论文链接 一.背景 anchor-based方法将大量框密集分布在feature map上,在推理时,由于预设的anchor与目标差异大,召回率会偏低。而anchor-free不受anchor大小限制,在任意形状上会更加灵活,但是像CornerNet这种,先…