Maskrcnn/Faster-rcnn依赖项安装过程中THC.h: No such file or directory/THCeilDiv Undefined/分配内存空间等问题的解决方案

这篇具有很好参考价值的文章主要介绍了Maskrcnn/Faster-rcnn依赖项安装过程中THC.h: No such file or directory/THCeilDiv Undefined/分配内存空间等问题的解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在论文复现安装maskrcnn-benchmark依赖项的过程中,遇见了pytorch版本不匹配导致的无法安装的问题,现存的大多数内容都建议安装低版本的pytorch以解决问题,但也不能总是这么干,不然自己这兼容性也太差了,顺便也吐槽一下pytorch的兼容性问题。在此总结一下,方便遇到相似问题进行参考。

主要遇到的问题在于与THC相关的包很多都在pytorch更新的过程中被抛弃了,导致很多.cu文件在安装依赖项时出现了不匹配的问题。

本文中使用ubuntu-16.04.1操作系统,pytorch版本为1.13.1,cuda版本为11.6,如pytorch更新后有更多的修改,请参阅其他文章。(以下问题基本是由于pytorch由10.x更新为11.x后产生的不兼容问题。)

Q1 fatal error: THC/THC.h: No such file or directory

开始时首先遇到了头文件无法引用的问题,这个问题参考了博客(138条消息) fatal error: THC/THC.h: No such file or directory_thc/thc.h: 没有那个文件或目录_o0stinger0o的博客-CSDN博客的内容,时间在22年3月-4月之间,以及博客中提到的github代码中更新的内容。

可以看到,在/maskrcnn_benchmark/csrc/cuda文件夹中的所有以.cu结尾的代码文件中删除了下述头文件:

#include <THC/THC.h>

并且把所有的

THCudaCheck(cudaGetLastError());

替换成了

AT_CUDA_CHECK(cudaGetLastError());

Q2 "THCCeilDiv" is undefined

之后又找到出现了这个问题,再调查一番,发现pytorch后来没有对这个函数的定义了,因此需要进行更换。

基于这样的想法,查阅资料找到Faster RCNN pytorch 1.0版调试(踩坑)过程记录 | 码农家园 (codenong.com)中这样的一段代码:


//dim3 grid(std::min(THCCeilDiv(**, 512L), 4096L));
dim3 grid(std::min(((int)** + 512 -1) / 512, 4096));

可以用这样的方式进行替换:即对每个.cu文件中调用THCCeilDiv(x,y)的地方,都把这个函数换成 (x+y-1)/y的形式,即可完成变换。

--2023.10.5--

在翻看的过程中找到了官方对此函数不再支持使用的文档。

Migrate remainder of THCDeviceUtils.cuh to ATen by peterbell10 · Pull Request #65472 · pytorch/pytorch · GitHub

在所有使用此函数的文件中加入头文件:

#include<ATen/ceil_div.h>

随后进行代码替换:


//dim3 grid(std::min(THCCeilDiv(**, 512L), 4096L));
dim3 grid(std::min(at::ceil_div(**, 512), 4096));

即可实现与上面方法相同的修改。

--2023.10.5--

Q3 THCudaMalloc、THCudaFree THCState undefined

这三个问题本质是一个问题,就是在更新过程中pytorch不再需要malloc和free,也自然不需要state用于帮助申请空间。这里参考了PyTorch 1.11 发布,带来 TorchData 和 functorch 两个新库_支持_linalg_Tensor (sohu.com)和(138条消息) 项目环境由pytorch1.10升级1.11中间要改的东西_pytorch1.11和1.10_小随风_hi的博客-CSDN博客两个文档,其中后一个文档的2成功帮助我解决了Q3这个问题。其实就是库废掉了,需要换一下使用的函数。

首先在用到Malloc和Free函数的文件中加入头文件

(有可能需要将THCThrustAllocator.cuh替换为该文件或直接include)


#include <ATen/cuda/ThrustAllocator.h>

与之相关的共有三个语句,分别为用THCState构建一个state,再将state输入Malloc函数生成空间,随后通过free释放掉上述空间。

此处我们注释掉THCState这句话,因为在新的pytorch中不需要使用该数据类型来生成Malloc所需空间。


THCState *state = at::globalContext().lazyInitCUDA(); // TODO replace with getTHCState

之后我们将THCudaMalloc按照下文的形式修改(旧函数第二个参数作为新函数的唯一参数)


//mask_dev = (unsigned long long*) THCudaMalloc(state, boxes_num * col_blocks * sizeof(unsigned long long));
mask_dev = (unsigned long long*) c10::cuda::CUDACachingAllocator::raw_alloc(boxes_num * col_blocks * sizeof(unsigned long long));

THCudaFree的替换方式如下:


// THCudaFree(state, mask_dev);
c10::cuda::CUDACachingAllocator::raw_delete(mask_dev);

注意一定要在最前面include一下ThrustAllocator.h头文件,否则会报错!

至此,上述问题全部解决,没有降低pytorch版本即可解决问题。我需要的内容也成功编译。

对于THC本身,在这个过程中我也了解了一下,可移步参考(138条消息) PyTorch源码浅析(2):THC_邵政道的博客-CSDN博客_thcstate。不过这个也是过去式了,了解下就好了。还是要向前看的。

若后续还有什么新的相关内容再更新一下子吧。文章来源地址https://www.toymoban.com/news/detail-715255.html

到了这里,关于Maskrcnn/Faster-rcnn依赖项安装过程中THC.h: No such file or directory/THCeilDiv Undefined/分配内存空间等问题的解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)

    我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时代已然来临。随着小

    2024年02月22日
    浏览(51)
  • 基于Pytorch构建Faster-RCNN网络进行目标检测(二)——预训练模型和预测

    CoCo的全称是Common Objects in Context,是微软团队提供的一个可以用来进行图像识别的数据集,包括检测、分割、关键点估计等任务,目前用的比较多的是Coco2017数据集。 Coco2017数据集是一个包含有大量图像和标注数据的开放数据集,它是微软公司在COCO项目基础上发展而来。这个

    2024年02月09日
    浏览(44)
  • 从R-CNN到Faster-RCNN再到YOLOV5,目标检测网络发展概述

     R-CNN由Ross Girshick于2014年提出,R-CNN首先通过 选择性搜索算法Selective Search 从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到 CNN模型 (经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将

    2024年02月05日
    浏览(63)
  • 目标检测前言,RCNN,Fast RCNN,Faster RCNN

    找到概率最高的目标之后,与其他目标进行IOU交并比计算,若高于一定值,则说明这两张图片预测的是同一个目标,则把概率低的目标删掉 因为是直接得到特征图之后进行映射,所以不限制输入图像尺寸 Gx,Gy是调整中心点,Dx(P)是回归参数,exp就是e的多少次方 从提取到的

    2024年02月07日
    浏览(53)
  • 目标检测——Faster RCNN

    Faster RCNN是由 R-CNN、Fast R-CNN 改进而来,是非常经典的目标检测的两阶段网络。 此篇博客是我通过学习以下优秀博客归纳整理而得: 一文读懂Faster RCNN - 知乎 Faster R-CNN详解和网络模型搭建 - 知乎 Faster R-CNN:详解目标检测的实现过程 - 郭耀华 - 博客园 yolov5与Faster-RCNN 训练过程

    2024年02月06日
    浏览(61)
  • Faster RCNN在pycharm中运行

    参考B站up主:霹雳吧啦Wz git clone https://github.com/WZMIAOMIAO/deep-learning-for-image-processing 首先找到faster_rcnn ├── backbone: 特征提取网络,可以根据自己的要求选择 ├── network_files: Faster R-CNN网络(包括Fast R-CNN以及RPN等模块) ├── train_utils: 训练验证相关模块(包括cocotools) ├

    2024年02月03日
    浏览(50)
  • Faster RCNN模型如何自定义损失函数

    /lib/model/faster_rcnn/faster_rcnn.py /lib/model/faster_rcnn/resnet.py 与1.2同理 1.4.1 模型代码:/lib/model/faster_rcnn/faster_rcnn.py,/lib/model/faster_rcnn/resnet.py,/lib/model/faster_rcnn/vgg16.py 1.4.2 训练代码:trainval_net.py 1.4.3 测试代码:test_net.py 1.4.4 运行参数代码:libmodelutilsparser_func.py 修改/lib/model/fa

    2023年04月17日
    浏览(41)
  • 基于Faster rcnn pytorch的遥感图像检测

    代码:https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0 使用RSOD遥感数据集,VOC的数据格式如下: RSOD是一个开放的目标检测数据集,用于遥感图像中的目标检测。数据集包含飞机,油箱,运动场和立交桥,以PASCAL VOC数据集的格式进行标注。 数据集包括4个文件夹,每个文件夹

    2024年02月06日
    浏览(47)
  • Faster RCNN训练自己的数据集【傻瓜式教程】

    本文采用的源码是:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3 由于本文是小白教程,光写几个环境怕有人配置不好或者配置版本搞乱。Faster RCNN配置环境比较复杂。我在这直接贴图我的环境版本图: 先安装tensorflow-gpu,然后依次安装cython、opencv-python、easydict、Pillow、matplot

    2024年02月02日
    浏览(44)
  • GIS之深度学习10:运行Faster RCNN算法

    (未完成,待补充) 获取Faster RCNN源码 (开源的很多,论文里也有,在这里不多赘述) 替换自己的数据集(图片+标签文件) (需要使用labeling生成标签文件) 打开终端,进入gpupytorch环境 运行voc_annotation.py文件生成与训练文件  结果所示: 运行:train.py文件  终端/编码器运

    2024年03月13日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包