- 博客(104)
- 资源 (5)
- 收藏
- 关注
原创 opencv.framework使用时报错:Expected identifier
最近想在iOSdemo中测试OpenCV中的目标跟踪模块,由于之前工程中使用的opencv.framework不包含tracking部分,所以需要使用包含opencv_contrib模块的opencv.framework。开始在网上找的时候,没有找到现成的,就按照官方文档下载编译,操作说明在这个连接:https://docs.opencv.org/master/d5/da3/tutorial_ios_install.html下载的速度还行,就是编译的时间非常长,我编译了一个小时还没编译完。在等待的过程
2021-06-23 15:14:11
1129
原创 TypeError: __init__() got an unexpected keyword argument ‘is_valid_file‘
应该是torchvision的版本较低,换了一个高版本的虚拟环境,就可以了。
2021-06-15 10:34:05
388
原创 OSError: image file is truncated (71 bytes not processed)
在加载训练图像数据,准备训练模型的时候,报错如下:OSError: image file is truncated (71 bytes not processed)
2021-06-10 22:36:03
1232
转载 unsigned char*格式的bgr转rgb
// @param:// input: {bgr_image:"读取图像为BGR格式的uchar字符数组", image_width:"图像的宽度", image_height:"图像的高度"}// output: {rgb_image:"转化为RGB格式图像的uchar字符数组"}// return: {0:"成功", 1:"输入或输出uchar数组错误"}int BGR2RGB(const unsigned char* bgr_image , const int image_width , c.
2021-06-03 21:45:13
629
原创 Python 计算欧氏距离
mport math len = math.hypot(x1-x2, y1-y2) #(x1, y1)与(x2, y2)间的欧氏距离
2021-05-31 18:21:54
890
转载 request.post()
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json。常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;而在最新爬虫的过程中遇到了一种payload报文,是一种json格式的报文,因此传入的报文对象也应该是格式的;这里有两种方法进行报文提交...
2021-05-31 06:49:56
6006
转载 Python中json格式的数据与dict格式的数据相互转化方式
import json<json> = json.dumps(<dict>)<dict> = json.loads(<json>)
2021-05-31 06:46:57
568
原创 统计图像mask占比
##统计占比output[output<128]=0output[output>=128]=1area_ratio = np.sum(output)/(im_h*im_w)
2021-05-28 10:35:21
449
原创 Python OpenCV获取图像矩阵mask对应的矩形区域
最近在项目中需要对分割模型得到的mask区域进行矩形裁切,就是截取包含mask的矩形区域。中间需要获取最左最右的x,最上最下的y,然后根据这个进行裁切。index = np.nonzero(output)if len(index[0])!=0 and len(index[1])!=0: minx = np.min(index[1]) maxx = np.max(index[1]) miny = np.min(index[0]) maxy = np.max(index[
2021-05-28 10:21:49
2076
2
原创 C++结构体与IOS NSArray之间转换使用
#define GetNSValueFromCType(cValue) ([NSValue value:&cValue withObjCType:@encode(typeof(cValue))])#define SetCValueFromNSValue(ocValue, cValue) [ocValue getValue:&cValue]使用方法如下:int count = 10;NSValue *value = GetNSValueFromCType(count);.
2021-05-27 16:32:28
435
原创 将字典结构数据写入json文件
import jsondata ={ 'name': liangliang, 'age': 30, 'gender': male, 'address:', beijing}json_str = json.dumps(data, ensure_ascii=False, indent=4) #字符缩进4json_path = './xxx.json'with open(json_path, 'w') as json_file: json_file.write(json_str)..
2021-04-28 06:46:48
667
原创 python3 UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in ordinal not in range(128)
1.设置环境变量在linux或Mac上设置环境变量,编辑~/.bash_profile文件(’~’指的是用户登录后的默认目录),添加一行:export LANG="en_US.UTF-8"然后执行source .bash_profile,让上面的设置生效。2.使用PYTHONIOENCODING在运行python命令前添加参数 PYTHONIOENCODING=utf-8 python xxx_xxx.py...
2021-04-19 16:26:52
252
原创 YOLO中letterbox_image相关解释
pytorch实现YOLO中对输入图像尺寸进行调整,满足输入的尺寸要求,比如412*412或者320*320def letterbox_image(img, inp_dim): """ lteerbox_image()将图片按照纵横比进行缩放,将空白部分用(128,128,128)填充,使图像尺寸满足输入要求 具体操作就是,某个边正好可以等于目标长度,另一边小于等于目标长度 将缩放后的数据拷贝到画布中心,即可完成输入变换 """ img_w, img_h
2021-04-11 18:20:28
2527
1
原创 非极大值抑制-NMS
在目标检测任务中,滑动窗口经过特征提取和分类器识别后,每个窗口会得到一个分数,但滑动窗口胡导致很多窗口之间存在较大交叉重叠的情况,使用NMS可以选取在相邻区域相互交叉但得分最高的候选框,剔除那些得分低的候选框。检测之后的候选框集合用B表示,每个候选框的置信度用S表示,IOU阈值设置为T,NMS的实现步骤可以总结为:1.在候选框集合B中选择具有最大置信度S的候选框M2.将M从候选框集合B中移除,并加入到最终的检测结果D中3.将B中剩余候选框和M进行IOU计算,从B中剔除IOU值大于阈值T的候选
2021-04-08 06:53:46
158
原创 yolo fastest中get_actual_detections函数作用及thresh的意义
测试YOLO fastest训练模型命令的时候,有个参数是-thresh,所以需要查看适用这个参数的地方// Creates array of detections with prob > thresh and fills best_class for themdetection_with_class* get_actual_detections(detection *dets, int dets_num, float thresh, int* selected_detections_num,
2021-04-06 14:40:42
426
原创 FPN相关理解
不同尺寸的特征图对应的感受野不同,进而特征图所能表达的信息抽象程度也有所区别。浅层的特征图(对应大尺寸的特征图)感受野小,比较适合检测小目标(要检测大目标,则其只“看”到了大目标的一部分,有效信息不够);深层的特征图(对应小尺寸的特征图)感受野大,适合检测大目标(要检测小目标,则其”看“到了太多的背景噪音,冗余噪音太多,学不到小目标的有效信息)。所以,有文章就提出了将不同尺寸的特征图,融合之后进行预测,来提升目标检测的性能,特征金字塔网络[FPN]的主要思想就是这个。...
2021-03-27 07:48:46
396
原创 yolo fastest模型网络结构魔改
在将训练的yolo fastest模型部署移动端测试的时候,发现其中一个分支基本没有起作用,在训练的时候从日志也看出来了,打印的指标都是0,所以打算将网络的这个分支剥离掉。修改的方式就是将cfg文件中对应的分支去掉,只保留有用的那个分支。虽然减少了一个分支,但是计算量并没有减少太多,在移动端提升大概1ms+。...
2021-03-23 17:31:10
1116
原创 darknet提取主干网络权重或者指定层数的权重
在YOLO fastest的readme里面,有下面一个这样的命令,开始运行这个:./darknet partial yolo-fastest.cfg yolo-fastest.weights yolo-fastest.conv.109 109开始没太在意,就照着流程做,后面在看代码的时候对这个地方有了更多认识。这个地方是提取yolo-fastest.weights中0-108层的权重,并保存为文件。void partial(char *cfgfile, char *weightfile,
2021-03-22 17:25:22
870
1
原创 YOLO fastest cfg文件理解及注释
YOLO fastest cfg文件注释分析,大体上跟其他版本的YOLO配置文件一致,此处主要是记录一下,针对自己不熟悉的地方额外添加一点说明。1.[net]层[net]batch=64subdivisions=1width=320height=320channels=3momentum=0.949 #动量参数影响着梯度下降到最优值的速度。decay=0.0005 #权重衰减正则项,防止过拟合。angle=0 #数据增强,设置旋转角度。saturation=1.5 #饱和度ex
2021-03-22 16:41:58
1306
原创 C实现去除字符串中的指定字符
//将非法字符去除,重新链接字符串,并以'\0'作为结尾void strip(char *s){ size_t i; size_t len = strlen(s); size_t offset = 0; for(i = 0; i < len; ++i){ char c = s[i]; if(c==' '||c=='\t'||c=='\n') ++offset; else s[i-offset] = c; }.
2021-03-19 17:56:26
1316
原创 C语言实现的获取文件夹内文件名
今天想在darknet实现的yolofastest中添加一些测试代码,需要实现用C实现获取文件夹内文件名字,并转换为完整路径的功能。太久没写C了,都忘了,记录一下:#include<dirent.h>DIR *dp;struct dirent *dirp;char filedir[] = "/home/xxx/images/";if((dp = opendir(filedir)) == NULL) printf("Can't open %s\n", filedir);
2021-03-19 17:52:22
8081
1
原创 char*指针的使用
最近在看darknet的源码的时候,发现有些C的知识,记不清楚了,调试的时候有些不理解,查询后原来是之前的语言都模糊了,记录一下。char *p1 = "a bc d e";char p2[] = "a bc d e";其中p2中的值可以改变(例:p2[1] = 'f'),但如果想改变p1中的值(例:p1[1] = 'f')就无法编译通过。原因:char * 实际上定义了指向字符串的指针,由于指向的内容由编译器分配在文字常量区(存放常量字符串,程序结束后由系统释放)中,无法改变其值。ch
2021-03-18 12:34:43
791
原创 UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position xxx: ordinal not in range(128)
在Python3环境中执行代码的时候,遇到如下错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 412-413: ordinal not in range(128)前段时间解决过这个问题,忘了怎么解决了,下面记录下,在虚拟环境终端执行如下命令即可:export PYTHONIOENCODING=utf-8...
2021-03-17 16:33:47
478
原创 yolo fastest中输出结果解析
//预测输出中置信度超过阈值的 box 个数int yolo_num_detections(layer l, float thresh){ int i, n; int count = 0; for (i = 0; i < l.w*l.h; ++i){ for(n = 0; n < l.n; ++n){ ////获得置信度偏移位置 int obj_index = entry_index(l, 0, n*l.w*l.h +.
2021-03-17 14:12:54
657
原创 YOLO fastest输出日志的理解
在用自己的数据训练YOLO fastest的过程中,对保存的训练日志数据看着有点不理解,下面粘贴一段日志数据,然后稍微解释一下,以免理解不牢,容易搞混。199996: 1.257923, 1.345533 avg loss, 0.000010 rate, 0.330016 seconds, 12799744 images, 0.008982 hours leftv3 (iou loss, Normalizer: (iou: 0.07, cls: 1.00) Region 115 Avg (IOU:
2021-03-16 22:32:05
1575
原创 darknet源码学习(一) 入口及测试总体流程
最近在使用YOLO fastest训练检测模型,之前听过很多次YOLO这个系列,跑过相关测试demo及现成的训练代码,但对里面的细节几乎一无所知。这次在对自己的数据格式进行转换调整后,进行训练,发现检测效果及性能都很好,在iPhone6s及以上机型可以轻松做到实时。但在训练的过程中,日志的输出却存在一些异常的地方。后来跟一些技术群里面的同学讨论过,应该是代码部分存在点小问题,所以需要研究下代码的细节。 darknet的主函数在darknet.c文件中,入口main函数根据命...
2021-03-12 15:41:27
4789
原创 Python2环境 安装cv2/opencv-python出错
由于转换模型需要py2.7环境,使用Anaconda 创建了python2.7 环境,安装 opencv:pip install opencv-python。出现TypeError: 'NoneType' object is not iterable错误。原因: Opencv 最新版不再支持 Python 2.7,而pip install opencv-python命令会下载最新版本Opencv。因此需要安装时指定opencv的老版本,最后一个支持 Python 2.7 的 Opencv 版...
2021-03-10 18:51:37
696
原创 nvidia-smi输出内容介绍
第一栏的Fan:风扇转速,从0到100%之间变动,这个速度是计算机期望的风扇转速不是实际转速。有的设备不会返回转速,因为它不依赖风扇冷却。第二栏的Temp:是温度。第三栏的Perf:是性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能。第四栏下方的Pwr:是能耗,上方的Persistence-M:是持续模式的状态,持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少,这里显示的是off的状态。第五栏的Bus-Id是涉及GPU总线的东西,domain:bus:device.
2021-03-09 14:01:57
177
原创 Docker 容器内安装Python3环境
apt-get updateapt-get upgradeapt install build-essential -yapt install libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev -yapt install zlib1g-devapt install wgetapt install opensslapt install curlapt install libsqlite3-.
2021-03-07 07:52:57
4869
2
原创 ubuntu下安装新版本cmake
sudo apt-get install build-essential#http://www.cmake.org/files 这个网站里面有cmake的所有版本的列表,根据需要下载对应的cmake版本wget http://www.cmake.org/files/v3.15/cmake-3.15.1.tar.gztar xf cmake-3.15.1.tar.gzcd cmake-3.15.1./configuremake接下来:sudo apt-get install chec.
2021-03-07 07:09:10
866
原创 下列签名无效: EXPKEYSIG 6ED91CA3AC1160CD NVIDIA CORPORATION (Open Source Projects) <cudatools@nvidia.com>
最近需要在Ubuntu系统配置一个环境,在跟新软件的时候apt-get install,提示如下错误:W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64 InRelease: 下列签名无效: EXPKEYSIG 6ED91CA3AC1160CD NVIDIA CORPORATION (Open Source Projects) <cudatools@
2021-03-06 09:29:25
826
原创 python使用中跳出双层for循环
在二维数组的遍历中,经常使用双层for循环。但是在某些时候,并不需要遍历整个二维数组。当条件满足时就应该终止for循环。但是,直接在内层循环中break并不会让外层循环也终止。可以使用for...else...解决。for i in range(5): for j in range(5): print(i, j) if i == 3 and j == 3: break else: continue break当内循环正常结束的时候才会执行else
2021-02-24 16:27:18
1612
原创 分割-检测数据格式转换中cv2.connectedComponentsWithStats()使用
在将用于分割任务的标注数据转换为检测格式数据的时候,用到了这个函数。cv2.connectedComponentsWithStats()这个函数输入为一个二值化图像,输出为一个长为4的tuple,第一个返回值是连通区域的个数,第二个返回值是一整张图的label,第三个返回值是(x, y, width, height, area),即每个区域的左上角坐标,宽和高,面积,此处注意,最后一个元素是(0, 0, 图像width, 图像height, 图像area),需要剔除,第四个是每个连通区域的中心点。
2021-02-24 10:38:13
668
原创 pytorch 获取参数量代码片段
# Find total parameters and trainable parameterstotal_params = sum(p.numel() for p in model.parameters())print(f'{total_params:,} total parameters.')total_trainable_params = sum( p.numel() for p in model.parameters() if p.requires_grad)print(f'{to.
2021-02-13 08:13:43
201
原创 pytorch 通过torchvision获取模型
最近在看一个开源的代码,在代码开头,获取模型的地方,使用了一个简洁的方式获取网络模型,看着非常好,记录一下。import torchfrom torchvision import modelsfrom .repvgg import func_dict as repvggdef build_model(net, num_classes=10): if net in ["resnet18", "resnet34", "resnet50"]: model = getattr
2021-02-10 08:21:02
588
1
原创 pytorch导出onnx格式模型时,不固定输入输出维度
Pytorch模型转换为onnx格式模型后,模型的输入、输出维度跟转换模型时,用的dummy_input的维度有关系,属于固定尺寸的输入与输出。可以采用以下代码修改onnx模型的输入输出维度:import onnx model = onnx.load('xxx.onnx')# 此处可以理解为获得了一个维度 “引用”,通过该 “引用“可以修改其对应的维度
2021-02-02 16:48:11
4808
原创 RuntimeError: Failed to export an ONNX attribute ‘onnx::Gather‘, since it‘s not constant, please try
最近在把pytorch模型转换onnx格式模型的时候,遇到了如下错误:RuntimeError: Failed to export an ONNX attribute 'onnx::Gather', since it's not constant, please try to make things (e.g., kernel size) static if possible在网上查了下,这个连接是跟我的问题相关的:https://github.com/onnx/tutorials/issue
2021-01-22 11:30:45
3065
原创 pytorch semantic segmentation using torchvision
一些有用的小的代码片段。# use the following function to convert this 2D image to an RGB image where each label is mapped to its # corresponding color.# Define the helper functiondef decode_segmap(image, nc=21): label_colors = np.array([(0, 0, 0), # 0=bac
2021-01-21 11:49:30
243
原创 pytorch squeeze and excitation模块
可以自适应的调整各通道的特征响应值,对通道间的内部依赖关系进行建模,主要为下面三个步骤: Squeeze: 沿着空间维度进行特征压缩,将每个二维的特征通道变成一个数,是具有全局的感受野。对进行global average pooling,得到大小的特征图,这个特征图可以理解为具有全局感受野。 Excitation: 每个特征通道生成一个权重,用来代表该特征通道的重要程度。使用一个全连接神经网络,对Sequeeze之后的结果做一个非线性变换。 Reweight:将Excitation
2021-01-15 11:20:41
973
原创 pytorch optimizer, scheduler使用
import torchdef get_optimizer(network, args): optimizer = torch.optim.SGD(network.parameters(), lr=args.lr, momentum=args.momentum, weight_decay=args.w.
2021-01-14 11:35:53
859
openglbible中需要的gltools.h及.a文件
2019-03-26
光照预处理方法---伽马校正
2012-04-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人