CV
herr_kun
喜欢有趣的新方向,涉猎广泛,方向专一
展开
-
Keras模型中有趣的技巧
Keras 在实际使用中除了常规的模型搭建和训练外,还有一些能加快开发效率的小技巧1、K.function 在调试的时候特别方便,直接就可以获得某一层的输出了,像是函数方法一样,直接输入就是照片 array,输出就是对应的层的向量2、Model(input, output)直接在原有模型的基础上定义新的模型,一般用于部署前的准备,改变模型的输出,或者改成多个输出3、CSVLogger 可以在训练的时候记录每个 epoch 的 LR ACC loss等等,包括训练集和验证集的,在训练的时候就可以随时.原创 2020-11-26 11:24:44 · 589 阅读 · 2 评论 -
center loss的完全理解以及实现
最近项目中需要 center loss 提升模型的效果,但是 center loss 的实现就有点不确定,看了很多的博客,基本都是臆测,还是看源码来的实在。下面就大致说下 center loss 的实现:1、原理:原理这块大家可以参考别人的博客,或者paper,这里就简单叙述下:让得到全连接层向量距离对应类别中心的距离最小2、问题类别中心是动态变化的么?如何进行变化?(1)是每个epoch结束后使用所有的样本重新聚类计算得到样本中心么?(2)在每个batch内计算动态变化得到聚类中心.原创 2020-07-29 16:29:38 · 2131 阅读 · 0 评论 -
keras model.save() OSError: Unable to create file(error message = ‘‘)
前言:最近再保存模型的时候,突然出现了上述的错误,一直以为时模型的问题,用了最简单的load,然后save的方式还是出错,最后发现是包依赖的问题很大的可能是 h5py keras的版本不一致的问题修改之前(出错) h5py==2.10修改之后的可行版本 h5py==2.7.1...原创 2020-07-27 19:07:54 · 1024 阅读 · 0 评论 -
open-set recognition(OSR)开集识别的一些思考(四)
前言:目前基于CNN方式的开集识别的方案最为经典的要数openmax方法,但是目前所能查到的资料对openmax解读的资料实在是太少,所以这里通过对openmax的实现过程进行讲解以达到理解的目的下述的观点和叙述来自个人理解和对论文的解读-Towards Open Set Deep Networks softmax是分类网络中最常见的最后一层的激活函数,用于概率值的生成,但是之前的文章说到过因为softmax的特性,导致不太适用于开集识别,所以这篇文章中提到了openmax,其可以认为是softma.原创 2020-07-15 15:06:10 · 9273 阅读 · 14 评论 -
open-set recognition(OSR)开集识别的一些思考(三)
前言:在之前的博客中提到了开集识别的一些方案,主线是基于DNN方式,但是基于ML方式的解决方案有很多是很经典的,所以这里介绍下基于ML的方式基于ML的方式 SVM based (待展开) Sparse Representation based (待展开) Distance based (待展开) Margin Distribution based (待展开)…...原创 2020-07-15 14:15:10 · 2862 阅读 · 2 评论 -
open-set recognition(OSR)开集识别的一些思考(二)
前言:在开集识别的学习中,也是进行的一步步的摸索,一开始发现模型上线后变现不是很好,后来找到原因就是因为线上的图像太复杂了,没有开集识别的模型是不可靠的,所以就进行了开集识别,接下来记录下学习的记录供大家一起学习,也供自己后续查阅1、开集识别学习路径 开始根据自己的遇到的情况进行查询,发现开放长尾识别问题中的开放问题就是目前自己遇到的问题,下面这张图很清晰的展示常见任务的划分标准,后续查询到了自己遇到的问题可以更为具体的归属为开集识别的问题,所以后续一直查询开集识别的一些问题,Google Yout.原创 2020-07-15 11:31:32 · 4719 阅读 · 6 评论 -
open-set recognition(OSR)开集识别的一些思考(一)
开集识别是一个在现实世界中很常见的一个问题,但是这个问题只有你在真正实施项目的时候才会遇到,使用公开数据集是不会遇到这个问题的。当你看到这篇文章的时候就默认你大致了解开集识别是什么了下面就是干货了开集识别 open-set recognition (OSR)1、什么是开集识别:1) 什么是闭集识别: 闭集识别:训练集中的类别和测试集中的类别是一致的,最常见的就是使用开放数据集进行训练,所有数据集中的图像的类别都是已知的,没有未知种类的图像。2) 所谓的开集识别 白话说就是 在一个开放的数.原创 2020-07-15 10:32:13 · 6169 阅读 · 0 评论 -
原理分析-CAM模型可视化(可解释)
> 前言:模型在训练的时候,你不知道模型到底学到了什么,就像是你教一个孩子学习东西,最终你给一两个示例,孩子分对了,但是孩子真的学习到你想要的区分特征了么,也就是说 get 到你的点了么?模型可视化就是做的这件事情模型有很多的可视化方案:直接可视化:最容易被想到的一种方式就是对特征图进行可视化,想法是对的,直接对 feature map 进行粗暴的 resize, 或者更为精细点的操作是进行反卷积,将 feature map 放大至和原图一样的大小,但是这样智能算是 特征图的可视化,并非模型的可视原创 2020-06-28 15:44:58 · 11539 阅读 · 2 评论 -
semi-triplet loss在线难分样本选取深入理解
> 前言:在做REID任务的时候经常会用到triplet loss,后续我们常常会进行模型的优化,其中就包括难分数据的挖掘,也就是让模型更加关注难分样本。两种方式去实现:1、离线的方式,就是在挑选样本的时候进行,一种是在线的方式,其本质上就是在训练的时候进行难分样本的挑选,离线的方式更好实现一些,但是造成的后果就是不方便,每一个epoch结束时就要单独就行计算2、在线的方式直接就在训练的过程中就进行处理了,所以现在大家都更青睐在线的训练方式使用trilet loss进行模型的搭建和数据的组织很原创 2020-06-24 10:37:13 · 1167 阅读 · 2 评论 -
REID重识别的一些思考-REID场景介绍-初探(一)
前言:该博客较为适合刚开始从事REID研究的同学,从头介绍了什么是REID,REID的应用价值是什么,并且介绍了一个Baseline,通过这篇博客你应该对REID有了一个大致的了解,避免了很多的弯路。1、什么是REID?对于行人和车辆重识别可能称之为跨境重识别更容易理解一些,即在不同的镜头下,识别同一个个体,实现某一个个体的再次识别。听起来像是多分类,但是其本质是检索,而不是分类,后续会提到他们之间的区别。2、REID的应用之一就是进行人轨迹的追踪和串联,比如在某个区域通过不同摄像头对同一个人的识.原创 2020-06-23 19:26:36 · 2580 阅读 · 0 评论 -
keras load_model 加载模型出现的错误
Keras在load_model 时,如果模型中含有自定义Layer或者损失函数的时候会报错先看下load_model 的函数定义:法一:利用 custom_objects 参数#假设模型包含一个 xxxxLayer 自定义层或者 xxxxloss自定义lossfrom keras.models import load_modelmodel = load_model('./model.h5', custom_objects={'xxxxLayer ': xxxxLayer })法二: 利用原创 2020-06-23 10:54:41 · 8041 阅读 · 1 评论 -
MAP在目标检测和图像检索中的计算(详细)
前言:该博客没有进行IOU Precision Recall等指标的计算讲解,默认这些基本知识已经掌握,这里只对 map 中比较难懂且和其他博客中存在歧义的部分进行讲解。目标检测中的 map 计算:举个栗子:Image 1:预测出了5个框(在一定的阈值下,且经过了NMS等处理),真实的标注信息只有三个框(也就是只能有3个correct 框),将5个预测框通过置信度进行排序,然后分别从上至下计算 precision 和 recall ,得到这些值就可以绘制 P-R 曲线了,计算面积就是最终的AP.原创 2020-06-22 15:56:19 · 3627 阅读 · 1 评论 -
model checkpoint保存模型出错问题分析
问题描述:model在训练的时候不断调用 checkpoint 进行模型的报错,但是在调用的时候回报错:TypeError: No conversion path for dtype: dtype(’<U49’),当设置只保存模型权重的时候又会报错:RuntimeError: Unable to create link (name already exists),综合应该是H5文件读写的问题问题分析:针对只保存模型权重时的报错:RuntimeError: Unable to create lin原创 2020-06-19 14:47:39 · 3082 阅读 · 0 评论 -
AttributeError : Layer model has multiple inbound nodes
前言:当在一个baseline上做修改(改变原有结构,增/减一些自定义网络),模型重载并获得输入输出的时候容易出一些问题,就比如这个error:AttributeError: Layer model has multiple inbound nodes,hence the notion of “layer output” is ill-defined.Use get_output_at(node_index) instead.这个问题主要由于TF的图造成的,比如下述对网络的定义,仅仅是将原有的d.原创 2020-06-09 19:07:57 · 1826 阅读 · 0 评论 -
Mobilenet_v2的参数alpha和depth_multiplier
Mobilenet_v2 是一个十分常用的轻量级网络,很多人直接使用的时候会忽略有两个参数 alpha和depth_multiplier,这两个参数也控制着网络的结构,那么这两个参数什么意思?首先看下Mobilenet_v1中提到的可分离深度卷积,该卷积可以分为两部分:depth_wise卷积 and point_wise卷积,这两个参数也就对应着这两个卷积。# 1、先进行 depth_wise 卷积 x = DepthwiseConv2D((3, 3), .原创 2020-06-01 16:46:55 · 3635 阅读 · 3 评论 -
多模型相互嵌套调用,图冲突BUG(keras/tf)
前言:在普通的任务中,我们经常使用训练好的模型进行预测推理,单模型的推理任务处理版本的问题应该不会存在其他的BUG。但是在实际的业务处理场景中,往往会使用多个模型共同来处理,一个模型的输出可能就是另一个模型的输入之一或者是另一个模型的数据处理方式。场景:模型B训练地过程中需要A模型不断地参与使用错误error: tensorflow.python.framework.errors_impl.InvalidArgument:xxxxxx1、Younger的处理方式:(适用于模型比较简单,命名较为规范.原创 2020-05-12 16:03:47 · 1046 阅读 · 0 评论 -
keras中的BN层Dropout层的小坑(方差-learning_phase)
BN层Dropout层都是为了防止模型过拟合而设计的结构,特别是BN层,在其出现之后模型的表现又上升了一个台阶,但是在实际的使用过程中会发现训练和预测的时候这两个层总是出岔子那么是什么岔子:首先来解决好解决的:1、Dropout层-问题需要先知道的是Dropout层在训练的时候是随机让一定比例的节点失活,不参与该批次的训练,但是在预测的时候,所有的节点参与预测,只是每个节点的值乘以设置...原创 2019-12-18 17:50:14 · 2722 阅读 · 1 评论 -
Resnet网络中数字的含义以及连接方式
1、Resnet18 Resnet50 Resnet101 Resnet152 网络中的数字代表什么?2、残差网络分支如何和原有主分支进行连接?1、Resnet18 Resnet50 Resnet101 Resnet152 网络中的数字代表什么?其中的数字18 50 101 等分别代表的是卷积层+全连接层的层数,并不是全部的层数,也不是单纯的卷积层的个数,其中激活层,BN层...原创 2019-11-29 16:12:52 · 6907 阅读 · 0 评论 -
图像分辨率、像素总数、文件大小搞清楚
问题来之前需要了解的基础:一张34562048的图像指的是其总像素数为(34562048),其中长边有3456个像素,宽边有2048个像素。我们所说的手机1500万像素等概念就是源于这个乘积得出来的数值。分辨率指的是每英寸中含有的像素点的个数,即像素密度单位为(dpi:dots per inch,像素点/英寸)或者也有称之为点密度(ppi),视网膜屏就是因为ppi较高才这样称之为的。那么图像...原创 2019-11-27 16:43:18 · 5796 阅读 · 0 评论 -
图像分辨率、像素总数、文件大小之间的详细区别
一张3456*2048的图像指的是其总像素数为(3456*2048),其中长边有3456个像素,宽边有2048个像素。我们所说的手机1500万像素等概念就是源于这个乘积得出来的数值。分辨率指的是每英寸中含有的像素点的个数,即像素密度单位为(dpi:dots per inch,像素点/英寸)或者也有称之为点密度(ppi),视网膜屏就是因为ppi较高才这样称之为的。那么图像的一张3456*20...原创 2020-03-04 10:25:47 · 8743 阅读 · 0 评论 -
ELA图像处理-图像篡改
前言:在做图像篡改的时候需要用到ELA图像信息,该图像的主要原理是因为篡改图像区域的图像信息和原有图像不同,将图像经过一个固定质量压缩保存后,两个不同区域表现不同,据此来得到篡改区域的位置。下面是具体的代码: # 使用 PIL 模块进行处理 im = Image.open(filename).convert('RGB') im.save(resaved_filename...原创 2019-11-26 16:21:48 · 5108 阅读 · 0 评论 -
opencv对图像进行处理的方法
一个缺陷检测数据集:德国的DAGM2007opencv中文网站(介绍详细,目录清晰,不多)图像颜色空间变换:图像在不同的颜色空间有可能会突出不同的特征,比如这里进行了RGB HSV GRAY YCRCB颜色空间的变换img_BGR = cv2.imread(img_path) # BGR plt.imshow(img_BGR);plt.axis('off');plt.title('BGR...原创 2019-09-10 15:15:35 · 2293 阅读 · 0 评论 -
注意力模型(AM)可广泛应用于CV / NLP
最近一直在研究深度语义匹配算法,搭建了个模型,跑起来效果并不是很理想,在分析原因的过程中,发现注意力模型在解决这个问题上还是很有帮助的,所以花了两天研究了一下。 此文大部分参考深度学习中的注意力机制(2017版) 张俊林的博客,不过添加了一些个人的思考与理...转载 2019-05-14 10:55:11 · 2560 阅读 · 0 评论 -
YOLOV2-源代码详细解析(逐语句进行解释)
前言:一直以来想接触下图像检测和识别,但是苦于没有机会进行练手,最近终于腾出时间看看yolo,你可以从github上找到一大堆yolo的项目,但是你难道仅仅满足于调用作者封装好的接口进行调用么,或者你想训练自己数据集,仅仅是将分好的img和annotation放到对应的文件夹就行了么?下面就拿一个github上的一个yolo v2项目的源码进行解析,大多数的yolo代码大同小异,懂了一个其余的也便...原创 2018-11-17 17:09:12 · 9522 阅读 · 9 评论 -
YOLOV3-项目解析+关键点理解
源代码GitHub地址:https://github.com/qqwweee/keras-yolo3作者使用自己数据集实现:yolo v3-训练自己的数据(step by step)项目结构思维导图:1、yolov3最后的输出为三个特征层的输出,并没有进行一个连接,分别是13*13*255(255=3*(5+80类)),26*26*255,52*52*255三种feature...原创 2019-04-15 16:05:20 · 5891 阅读 · 6 评论 -
YOLO中MAP的具体计算
转载自:ap、mAP多标签图像分类任务的评价方法多标签图像分类(Multi-label Image Classification)任务中图片的标签不止一个,因此评价不能用普通单标签图像分类的标准,即mean accuracy,该任务采用的是和信息检索中类似的方法—mAP(mean Average Precision)。mAP虽然字面意思和mean accuracy看起来差不多,但是计算方法...转载 2019-04-15 11:00:28 · 12204 阅读 · 0 评论 -
yolo v3-训练自己的数据(step by step)
平台: win10 annaconda python3.7 tensorflow 1.13 kerasGitHub地址:https://github.com/herrkun/YOLOV3-detecting-red-blood-cell最终效果:训练步骤:1、利用xml文件或者其他方式生成所用到的txt文件,文件格式为:图像地址,xmin,ymin,xmax,ymax,类别I...原创 2019-04-15 10:33:55 · 1220 阅读 · 1 评论