自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 模型计算量

由于并不是专门做开发,有些知识点担心自己记不住。写个文章记录下来,用的时候查一下。即便是做算法,也得熟悉数据结构及其算法,在上线时才能写出高质量的工程代码。1.关于链表

2021-08-25 15:13:23 379

原创 基于DBnet+CRNN+CTC的证件OCR任务,tensorflow2.x实现

最近完成了一项海外证件全信息识别的项目,主要有四大模块:证件定位(BISNET分割),文本检测(DBnet),文本识别(CRNN+CTC),信息抽取(规则)。目前,证件定位的准确率为99%;本检测的准确率为99.2%;识别的准确率为98%(以字段为单位)。有空整理完代码放到github上。待续。。。...

2021-02-01 16:38:45 2385 13

原创 使用自己的数据微调resnet_v1_50

还是菜鸡系列,使用自己的数据在resnet_v1_50上微调并进行了测试。时间不多,懒得在网页爬数据了,爬完还得人工清洗。直接拿slim里的代码下载了一批花的图片数据,制作训练集和测试集。一贯的风格,直接上代码和数据集。...

2020-10-26 16:47:45 777

原创 文档图像SauvolA二值化算法C++实现

这个二值化算法主要针对文档图像,原理较复杂,感兴趣的同学可以自己搜一下论文看看。下面先给出代码void NiblackSauvolaWolfJolion(Mat im, Mat output, int winx, int winy, double k, double dR)//k=0.5,dR=128;{ double m, s, max_s; double th = 0; double min_I, max_I; int wxh = winx / 2; int...

2020-10-12 11:37:38 797

原创 resnet_v2_101训练自己的数据,完成分类任务之模型推理

训练完模型肯定是要推理的啦~在这里提醒一下,训练时图像做了什么预处理推理时最好也同样做相应的预处理,否则预测结果会有意外收获。port tensorflow as tfimport numpy as npimport osimport resnet_v2 as resnet_v2import tensorflow.contrib.slim as slimimport cv2height,width=224,224X=tf.placeholder(tf.float32,[None,he..

2020-10-09 10:37:42 678

原创 resnet_v2_101训练自己的数据,完成分类任务之训练

在上一篇博客中,已经完成了tf.record数据集的制作,接下来开始训练。可以选择重头开始训练,也可以加载预训练模型再继续训练。大部分情况下,使用预训练模型会比直接重头训练效果要好。直接上代码~import tensorflow as tfimport numpy as npimport pdbimport osfrom datetime import datetimeimport resnet_v2 as resnet_v2from create_records import *im..

2020-10-09 10:05:29 698

原创 resnet_v2_101训练自己的数据,完成分类任务之数据制作

最近做了一个简单的分类任务,作一下记录,适合小白。从数据处理到推理代码都有,没错,我就是这么暖心!本次代码的框架使用了tf1.14版本,喜欢追逐梦想的童鞋可以尝试使用2.0的。主要差别是很多函数的API入口变了,一些旧的模块在2.0里不支持。关于resnet,这里主要使用slim包来实现,虽然我很喜欢造轮子,但是排期不允许。考虑到不是核心模块,直接拿来主义。到这里,可能有人会迷惑,slim包里有v1和v2版本,到底用哪个呢?我印象中,v1是原著的模型,v2在shortcut-connections上进行了改

2020-09-29 16:46:20 852

原创 CPU内存飙高,linux系统排查

前段时间一直运行的模型因为访问量激增,突然出现了CPU内存翻倍无法自己下降的情况,必须重启服务器。虽然平时负责算法研发和移植工作多,但是自己一直对高性能系统都很感兴趣。所以当时除了配合服务端的人排查问题,也去请教了公司一直做后台开发的大佬,学习了一番。对于Linux系统,程序功能执行结束而内存一直无法释放,本质的原因是该程序的进程尚未结束。但Linux系统的内存管理其实是非常复杂的一个系统,当初系统内存回收机制的设计本身就是有一定的概率会找不到无用内存的。因此,当发现CPU内存飙高无法自降时,需要从代码以及

2020-09-29 16:12:08 1780

原创 基于深度学习的表格还原

线上产品发布后会在github上公布简化的代码,整个表格还原集合了表格检测、表格线分割、OCR、字体属性和多目标检测算法。支持导出pdf,excel,json和html格式,其中pdf支持印章和单元格图片还原。在这里先上第一版的效果...

2020-08-27 18:01:18 472 5

原创 python 代码实现二值图像连通域查找

通常来说有两种方法,Two-Pass算法和Seed-Filling算法。前者是通过遍历两次图像,将图像中存在的所有联通区域找出来并标记;后者是源于计算机图形学对于某个图形进行填充,其思路是区域生长算法。想了解更具体的原理自己去搜资料吧,我懒。其实现在skimage或者opencv库都有相应的封装函数,但是一向喜欢造轮子的我喜欢手撕,最重要的,我可以根据业务需要随时进行改动源码。废话不多说,上源码,我知道这就是你们来csdn的原因。。。代码只是基本的思路实现,加速啥的自己做吧。import cv2imp

2020-08-14 10:00:39 3843 3

原创 基于python Qt5的简单的图像显示界面

可以读取文件里所有的图像,显示,评分并进行统计源码如下:# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'Test.ui'## Created by: PyQt5 UI code generator 5.9.2## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui,

2020-06-11 16:46:01 4492

转载 AI PC优化系列之RGB高效转灰度图

下面的介绍来自刘文志大佬的并行编程方法与优化实践一书,这应该是做优化的同学最好的入门书籍之一了。❝SSE/AVX是Intel公司设计的,对其X86体系的SIMD扩展指令集,它基于SIMD向量化技术,提高了X86硬件的计算能力,增强了X86多核向量处理器的图像和视频处理能力。❞❝SSE/AVX指令支持向量化数据并行,一个指令可以同时对多个数据进行操作,同时操作的数据个数由向量寄...

2020-04-19 12:26:12 1273

原创 ocr里的图像处理

1、文档图像角度倾斜矫正:1)霍夫直线检测,从直线方向的众数得到旋转角度;2)文字区域较小时可通过最小外接矩形得到旋转角度;2、打印痕迹干扰,可使用双边滤波进行降噪,但不能完全去除;3、图像退化,不清晰,可使用高反差得到文字轮廓信息,再与原图相加;以上方法在tesseract里封装完成。降噪对于OCR非常重要。...

2020-04-13 22:16:29 613

原创 深度学习知识点

最大池化和平均池化的使用:map中的信息都应该有所贡献时使用avgpool,如图像分割中尝试用于global avgpool来获取全局上下文关系。avgpool常用在网络的深层,因为网络深层的高级语义信息一般都能帮助分类器分类。而为了减少无用信息的影响时采用maxpool,常用于网络浅层,因为最开始的层包含了较多的无关信息。也有一种观点认为,最大池化可以提取特征纹理,平均池化可以保留背景信息。...

2020-02-18 17:17:32 209

原创 labelme批量转json文件

最近在做语义分割,现需要训练自己标注的数据,使用labelme工具标注图像,但是labelme自带的转换标注json文件一次只能转一个文件,现在改写labelme的源码使得可以一次转多个json文件。在自己编代码前参考了网上的一些博客,是在不得不说,真是辣鸡,各种报错。现附上自己的代码,亲测在python3.7下是可以运行的。改造的代码是在anaconda安装的虚拟环境下lableme安装的文件夹...

2020-02-15 17:35:06 861

原创 python高效编码技术点(持续更新)

1.*args和**kwargs用法:主要用于函数定义,*args相当于参数列表。如定义一个函数def test_var_args(f_arg,*argv),调用是test_var_args('yasoob','python','eggs','test'),则*argv='python','eggs','test';**kwargs允许传输不定长度的字典参数。函数调用顺序必须按照(a,*args,...

2020-02-05 23:02:09 120

原创 深度学习目标检测IoU的思考(持续更新)

这段时间在做表格还原的工作,属于版面分析的一个模块。目前已经能做到截图/扫描/拍照表格图像检测,表格信息提取和html写入。可以多平台使用,不需要微软的接口。但在结合ocr的文本检测和文本识别确定表格内容的过程中,只通过单元格坐标和文本检测的坐标设定规则去判定文本是否属于该单元格具有较大的风险。一是极大依赖文本检测和表格坐标提取的准确度,二是,表格框和文本检测框的重叠方式有多种,规则难以自适应。所...

2020-01-19 17:25:54 1033

原创 目标检测中IOU的计算,python代码

def compute_iou(gt_box,b_box): ''' 计算iou :param gt_box: ground truth gt_box = [x0,y0,x1,y1](x0,y0)为左上角的坐标(x1,y1)为右下角的坐标 :param b_box: bounding box b_box 表示形式同上 :return: '''...

2020-01-15 20:03:22 440 3

原创 深度学习训练过程loss变化问题

train_loss不断下降,val_loss不断下降,网络仍有学习空间;train_loss不断下降,val_loss趋于不变,网络过拟合;train_loss趋于不变,val_loss不断下降,数据集有问题;train_loss趋于不变,val_loss趋于不变,学习遇到瓶颈;train_loss和val_loss不断上升,网络结构设计不当,训练超参数设计不当。...

2019-11-14 15:52:19 3554 1

原创 训练神经网络注意项

一.batchsize相关1、batchsize并非越大越好,极限自然是训练样本总数。但是GD(Gradient Descent)的效果很差(建议使用SGD),容易陷入到局部极小值或鞍点。2、batchsize选取,以128作为分水岭,向下*0.5,向上*2。训练后比较测试结果,然后重复,直到效果不再提升。3、对于一阶梯度下降法,如SGD,Adagrad,Adam等,建议较小的batc...

2019-11-14 10:52:54 141

原创 图像分辨率,DPI和像素个数的关系

一、描述分辨率的单位有: dpi(点每英寸)、lpi(线每英寸)和ppi(像素每英寸)。但只有lpi是描述光学分辨率的尺度的。虽然dpi和ppi也属于分辨率范畴内的单位,但是他们的含义与lpi不同。而且lpi与dpi无法换算,只能凭经验估算。另外,ppi和dpi经常都会出现混用现象。但是他们所用的领域也存在区别。从技术角度说,“像素”只存在于电脑显示领域,而“点”只出现于打印或印刷领域...

2019-08-09 14:43:51 5177

原创 关于tensorflow1.13指定训练显卡的问题

以前1.12版本的时候直接在train 文件里加上os.environ["CUDA_VISIBLE_DEVICES"]="0"即可。今天在1.13上这样已经不行了,包括在终端加上指定指令也不行。解决方法是在train文件加入config = tf.ConfigProto(allow_soft_placement = True) sess = tf.Session(config = config),...

2019-07-10 20:07:34 258

原创 git 使用

主要指令:ll:查看所有文件属性mkdir:创建文件夹git clone 远程仓库地址:下拉远程项目文件git clone 远程仓库地址 --branch 分支名:下拉项目指定的分支内容git branch:查看当前所在映射当前分支git branch -r:查看当前所在映射所有分支git rm -r --cached xxx:远程删除xxx文件cat .git/...

2019-07-10 11:16:47 153

转载 Numpy.random中shuffle与permutation的区别

shuffle与permutation的区别函数shuffle与permutation都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序);区别在于shuffle直接在原来的数组上进行操作,改变原来数组的顺序,无返回值。而permutation不直接在原来的数组上进行操作,而是返回一个新的打乱顺序的数组,并不改变原来的数组。---------------------作者:lyy1401...

2019-07-09 15:04:51 93

原创 python 中的并发与并行(一)

python中的并发是同时发生的事情由线程,任务,进程调用(实际上还是按顺序运行的一系列指令)。宏观上看,线程,任务和进程是相同的,细节上她们代表不同的东西。事实上只有多进程在同一时间运行着多个任务,线程和异步都在单个处理器运行,即一次只能处理一个任务。先占式多工法:操作系统知道每个线程,并且可以随时中断该线程后运行别的线程,即对线程进行切换。线程的切换可以发生在单个python语句里,在任何...

2019-07-07 19:06:07 798

原创 windows系统使用yml文件进行anaconda一键配置深度学习环境

只要将开发所需要的依赖包和环境写入yml文件,并指定版本,在Anaconda prompt下一键安装所有包。yml文件可使用记事本编辑,在文件里将所需的包写上,如下:name: gluondependencies:- python=3.6- jupyter=1.0.0- matplotlib=2.2.2- pandas=0.23.4- pip: - mxnet==1.5.0...

2019-07-01 11:41:32 4086 7

原创 SVM分类器C++语言实现

为部分代码,只做参考。文中很多变量类型为自己定义的数据结构。遗憾的是,纯C实现的SVM代码找不到了,有空再写一个吧头文件:#ifndef SVM_C_H#define SVM_C_H#include"Process.h"extern void Label(std::vector<sample_type> &PSample,std::vector<sa...

2019-06-27 14:39:15 2209 2

原创 灰度图像凸包计算opencv

void DealConHull(int Threshvalue, Mat &temp,int &i,cv::Mat &ROIMG){ int pos=0; double area=0; double maxArea=0; float ratio=0.0; std::vector<double>Areas; Ma...

2019-06-27 14:32:59 241

原创 大津法进行图像二值化opencv

int Ostu(cv::Mat &temp,int &Threshvalue){ int hist_size=256; int hist_height=256; float range[]={0,255}; float *ranges[]={range}; IplImage *src=&IplImage(temp); Cv...

2019-06-27 14:30:40 722

原创 提取图像灰度共生矩阵特征

头文件:#ifndef GLMC_H#define GLMC_H#include"Datastruct.h"using namespace std;using namespace cv;class GLCM{public: GLCM(); ~GLCM(); enum { GLCM_HORIZATION=0, ...

2019-06-27 14:27:10 777

原创 Tensorflow批量读取图像数据

import tensorflow as tfimport osimport sysfrom PIL import Imagedef get_Allfiles(dir_file): Allfiles=[] list_input=os.listdir(dir_file) for i in range(0,len(list_input)): path=...

2019-06-27 11:34:54 960

转载 C++常见标准输入输出流

文章转载自https://blog.csdn.net/qq_38556370/article/details/80640845之前一直在用,但就是没在意两者到底有啥却别,今天又想到这个问题,总结下吧(以下的内容均是本人从网上查阅资料看来整理的,暂时还没有查阅官方资料,不保证准确,欢迎讨论)其实大家平常常会用的主要有三个:cout、cerr、clog,首先简单介绍下三者。这三者在C++中...

2019-06-20 15:38:05 243

原创 基于kmeans像素的聚类

struct KMEANSCENTER{ int px; //横坐标; int py; //纵坐标; int color[3]; //三通道值; KMEANSCENTER() { px = 0; py = 0; color[3] = { 0 }; } ~KMEANSCENTER(...

2019-06-20 12:11:54 669

原创 已知背景像素值情况下获取前景像素

void Get_fg_mask_New(int *bg_color, Mat &samples, Parameters Paras, Mat &k_img, vector<pair<int, int>> &UnzeroValue, bool flag){ float csaturation = 0.0; float cval...

2019-06-20 12:06:55 661

原创 图像RGB空间转HSV空间,C++

void Rgb_to_sv_New(Mat &samples, Mat &perPixelS, Mat &perPixelC){ int a = 0, b = 0, c = 0; int cmax = 0, cmin = 0; float saturation = 0.0,cvalue=0.0; assert(perPixelC.tota...

2019-06-20 12:02:54 616

原创 减少三通道图像位深

void ColorEnhance::Quantize(Mat &img, int bits_per_channel)//减少每个通道的位深;{ if (bits_per_channel == 0) { bits_per_channel = 6; } try { if (img.depth()!= 0) ...

2019-06-20 12:00:22 146

原创 vs下unistd.h文件的使用与编译

关于<unistd.h>头文件unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。该头文件由 POSIX.1 标准(可移植系统接口)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有官方版本,包括 Mac OS X、Linux 等)。对于类 Unix 系统,unistd.h 中所定义的接...

2019-06-20 11:56:39 3622

转载 Mat数据类型,opencv

float:4字节,6-7位有效数字 -3.4E-38 到 3.4E38 double: 8字节,15~16位有效数字 -1.7E-308 到 1.7E308cvCreateImage()及cvCreateMat()对应1.Unsigned 8bits(一般的图像文件格式使用的大小)IplImage数据结构参数:IPL_DEPTH_8UCvMat数据结构参数:CV_8UC1,...

2019-06-20 11:48:02 133

转载 Mat矩阵操作,C++

本文章转自https://blog.csdn.net/guoming0000/article/details/8629885一、矩阵Mat I,img,I1,I2,dst,A,B;double k,alpha;Scalar s;1.加法I=I1+I2;//等同add(I1,I2,I);add(I1,I2,dst,mask,dtype);scaleAdd(I1,scale,I2,d...

2019-06-20 11:44:28 3347

原创 Windows下读取文件夹下所有文件,C++

int FilesRead(string root, vector<string> &fileVec){ int Nums = 0; long long handle = 0; struct _finddata_t fileinfo; string temp_str; if ((handle = _findfirst(temp_str....

2019-06-04 09:54:18 1454

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除