词嵌入nn.embedding的解释 类似于:word2id = {‘i’ : 1, ‘like’ : 2, ‘you’ : 3, ‘want’ : 4, ‘an’ : 5, ‘apple’ : 6} 这样的形式。(3)然后再以句子为list,为每个句子建立索引结构,list [ [ sentence1 ] , [ sentence2 ] ]。以上面字典的索引来说,最终建立的就是 [ [ 1 , 2 , 3 ] , [ 1 , 4 , 5 , 6 ] ]。
windows平台下调用海康网络相机找不到PlayCtrl.dll 在代码中调用了两个dll,其中HCNetSDK.dll能够找到,第二个PlayCtrl.dll死活找不到,根据https://gitee.com/MengNiMeia/python_hkcam/issues/I6R7QR中提示,PlayCtrl.dll有相关依赖的dll在HCNetSDKCom目录下,把HCNetSDKCom中的所以dll放到和PlayCtrl.dll同级别目录解决该问题。2、将dll路径配置到环境变量中。以上两种方案都不能解决。
C++ 多线程编程和线程池 子线程和主线程同时执行,当子线程没执行完,主线程结束时,程序就会报错。lock_gurad,只在局部作用域中使用,不能复制和移动,轻量级锁。joinable,判断线程是否可以调用join和detach。3、线程安全,多线程的运行程序和单线程的运行结果都是一样的。join,主线程等待子线程执行完成后再执行,只能使用一次。unqiue_lock,重量级锁,可以手动加锁、延迟加锁。2、多线程中传递的指针可能存在被释放的问题需要注意。detach,主程序结束,子线程会在后台执行。多线程调用函数代码如下。
解决json.decoder.JSONDecodeError: Extra data: line 1 column 721 (char 720)问题 排查了以下原因应该是序列化的字符串全都在一行,json库不能一次性处理这么长的序列。python中将字符串序反列化成json格式时报错。
yolov5 损失函数 作为一款尖端、最先进的(SOTA)车型,YOLOv8在之前版本的成功基础上,引入了新的功能和改进,以增强性能、灵活性和效率。当预测边框和真是边框的中心点重合时,DIOU退化成了传统IOU,综合了IOU的面积损失 、和DIOU的中心点损失和自身宽高比损失三种优势。(2)对比IOU损失,L2和Giou具有偏离趋势度量的能力,当IOU=0时,交和不交的损失是一样的,L2和GIOU就不会这样。2、对于网络的3个头的输出匹配正样本,筛选GT和anchor符合条件的高宽比,大于就是正样本反就是负样本。
windows下使用makefile编译c++程序 安装w64devkit版本,能使用一些类linux的命令如rm等。下载完成后解压压缩包,将bin目录添加到系统环境变量的PATH中。在cmd中验证使用make --version是否安装成功。
windows下使用vccode+cmake编译cuda程序 1、在vscode中安装Nsight Visual Studio Code Edition。3、编写CMakeLists.txt。4.1 查询cmake编译器。4.2 指定编译器构建项目。4、安装cmake构建。2、编写cuda程序。5、运行编译好的程序。
c++ 构造函数 当用户自定义了其他构造函数,那么编译器则不会生成构造函数,若要使用无参数的生成对象,那么必须自定义一个无参数版本的构造函数。是一个默认构造函数,当我们既需要其他形式的构造函数,也需要默认构造函数时,就可以用=default。两种形式,第一种只有一个参数,第二种有若干参数,除了最左边的参数,都有默认值。析构函数:释放构造函数申请的内存空间,做一些内存清理工作,析构函数必须为public。每个类必须要有,若没有定义则自动提供,只有一个参数,参数的类型必须为自身类的引用。2、对象被销毁的时候,其成员被销毁。
c++中public、private和protected class A :private B :public、protected、private变成了private、private、private,其中private不能被派生类访问。public继承,基类public成员,protected成员,private成员的访问属性在派生类中分别变成:public、protected、private。private继承,基类public成员,protected成员,private成员的访问属性在派生类中分别变成:private、private、private。
c++ 虚函数 6、重写则是派生类对基类同名函数的“本地改造”,要求函数特征标完全相同。3、“重写”的要求是函数的特征标(包括参数的数目、类型和顺序)以及返回值都必须与基类中的函数一致。4、只需将基类中的成员函数声明为虚函数即可,派生类中重写的virtual函数自动成为虚函数。1、c++ virtual 函数作用:如果重写的函数中有重名的函数,那么则调用重写的函数。std::cout << “派生类方法” << std::endl;std::cout << “基类方法” << std::endl;
yolov5导出onnx模型报错:Unsupported ONNX opset version: 17 2、onnx算子文档,https://github.com/onnx/onnx/blob/main/docs/Operators.md。Win10系统下使用pytorch1.11.0、onnx1.12.0转换yolov5cls转换onnx报错如下。1、模型部署,https://zhuanlan.zhihu.com/p/498425043。查找了相关资料后是由于pytorch对onnx算子的不支持。
transformer and DETR 3、使用q1对每个k(ki)做attention得到a1,i(i={1,2,3,4}),q1、k1,q1、k2,…4、把计算的a1,i做softmax操作,得到~a1,i,然后把它a1,i和所有的vi值相乘,然后相加得到b1,依次计算后得到bi。在self-attention的第二步,分别乘以多个wq、wk、wv矩阵得到qi,j、ki,j、vi,j。2、向量a1-a4分别乘上Wq、Wk、Wv得到不同的qi、ki、vi(i={1,2,3,4})。4、用框子和GT做二分图的loss。1、用CNN去提取特征。
tensorrt基本接口 在不同的线程中使用多个构建器没有线程安全问题,构建器使用时许来确定所提供参数的最快内核,并且使用具有相同GPU的多个构建器将扰乱时序和TensorRT构建最佳引擎的能力,使用多线程在不同的GPU构建不存在这也的问题。TensorRT序列化的模型仅能用于相同的操作系统、CPU架构、GPU模型和TensorRT版本一致时才能一起使用,TensorRT检查模型的以下属性,如果环境不一致,将无法反序列化。ExecutionContext接口,用于调用推理的主要接口,推理时,必须在适当的位置设置输入和输出缓冲区。
解决显卡nvidia-smi中CUDA version:ERR问题 查找了相关的解决方案,大多数说是CUDA、cuDNN、显卡驱动版本不匹配问题,但是我的这套版本用了很长时间了,没有出现过这个问题,然后对问题进行了排查,怀疑是CUDA的动态连接库问题,查看了CUDA/lib目录下的动态链接库文件,果然多了两个文件,nvidia-smi查看显卡驱动后发现,CUDA version:ERR!把这两个文件删除后,nvidia-smi后显示正常。
tensorrt基本流程 使用tensorrt加速分为构建阶段和运行阶段两个流程,其中构建阶段主要通过onnx_Parser或tensorrt的API搭建网络序列化engine模型。运行阶段加载反序列化engine模型创建分配内存现存资源,执行网络的推理。
在win10系统下右击文件添加使用pycharm打开 再右击"pycharm"字段,选择"新建”->”字符串值“,并命名为"Icon",修改"Pycharm"数据中"默认"字段的数据为"Open PyCharm here",修改"Icon"为pycharm的exe路径,这个需要根据自己的实际情况进行更改。接着右击"PyCharm"字段右击选择"新建"->”项“,命名为"command",修改"command"字段中"默认"中字段值为"pycharm 路径" “%V”,这里的pycharm路径和上面的路径一致,后面"%V"必须要加。
yolov5中workers设置问题 在每个epoch加载数据时,dataloader一次性创建workers数量个工作进程,并且每个进行负责调度一个batch的数据,worker负责将batch加载到内存中,dataloader从RAM中找到这个epoch所需要的batch,如果找到就使用,如果没有就要继续加载batch到RAM。所以worker的设定需要根据自己的服务器设备情况和数据情况设定,如果CPU和RAM很强,就可以设置大一些,否则就需要设置小一些,如果单张图像很大,也需要设置小一些。