<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[blgpb的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/blgpb</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; blgpb]]></copyright><item><title><![CDATA[ValueError: optimizer got an empty parameter list]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/136352004</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/136352004</guid><author>blgpb</author><pubDate>Wed, 28 Feb 2024 17:38:31 +0800</pubDate><description><![CDATA[出现这个情况是不正常的，因为我定义了alpha和beta两个可学习变量。在我仔细排查后发现，在定义那2个变量时不能加.cuda()我通过询问GPT4.0, chatGPT，检查了。这个也许是pytorch的隐藏bug吧。然而，在我定义如下的优化器时，等一系列，但还是没能解决问题。改为以下代码后就正常了。]]></description><category></category></item><item><title><![CDATA[RuntimeError: CUDA error: an illegal memory access was encountered]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/131455952</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/131455952</guid><author>blgpb</author><pubDate>Thu, 29 Jun 2023 14:39:28 +0800</pubDate><description><![CDATA[在跑一个Transformer的代码时，出现了这个错误。这个错误信息非常奇怪，通过Debug发现，模型的前向传播是正常的，损失也能计算出来，但是一开始反向传播就出问题了。经过尝试，发现是batch_size过大，把它改小就可以了。]]></description><category></category></item><item><title><![CDATA[Windows10安装rdkit]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/126120329</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/126120329</guid><author>blgpb</author><pubDate>Tue, 02 Aug 2022 13:22:08 +0800</pubDate><description><![CDATA[之前我尝试使用WIndows10从源码编译安装rdkit，但是尝试了很久都失败了。于是，我又重新尝试使用conda安装。最终，我换了个思路，终于顺利安装成功rdkit和pyg了。我的python版本是3.8.13，亲测可以成功安装。最后，我们再安装PyG。参考下面的命令就可以顺利安装。安装torch后测试，可以使用GPU运算。安装完之后，再安装torch，可以参考。创建一个新的conda环境，然后运行。...]]></description><category></category></item><item><title><![CDATA[Windows10源码编译安装RDKit]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/126110790</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/126110790</guid><author>blgpb</author><pubDate>Mon, 01 Aug 2022 23:06:31 +0800</pubDate><description><![CDATA[RDKit是一个非常重要的库，可是它的安装却非常不友好。我尝试了使用conda安装，但是按照博客上写的方法，都无法安装。因此，我只好硬着头皮按照RDKit官网上提供的方法安装。RDKit是由C++语言编写的，因此在WIndows下的安装需要从源代码进行编译，困难重重。下面是我的安装教程。......]]></description><category></category></item><item><title><![CDATA[docker更换为国内的镜像源]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/111823725</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/111823725</guid><author>blgpb</author><pubDate>Sun, 27 Dec 2020 18:11:04 +0800</pubDate><description><![CDATA[为了提高镜像的下载速度，我们需要将docker的镜像更换为国内的源，方法很简单


cat &gt; /etc/docker/daemon.json &lt;&lt; EOF
{
 "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

然后


systemctl restart docker


可以通过docker info查看是否成功更换源
...]]></description><category></category></item><item><title><![CDATA[对python的package进行修改]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109565461</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109565461</guid><author>blgpb</author><pubDate>Sun, 08 Nov 2020 21:38:51 +0800</pubDate><description><![CDATA[很多时候，python提供的大量的package极大地方便了我们的编程。但是，当我们想要修改部分代码的时候，该怎么办呢？

本文以mmcv为例，介绍修改代码的过程。

# 找到package所在的路径

在此之前，我是通过
...]]></description><category></category></item><item><title><![CDATA[unable to access device Ubuntu下无法打开硬盘]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109522651</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109522651</guid><author>blgpb</author><pubDate>Thu, 05 Nov 2020 23:20:23 +0800</pubDate><description><![CDATA[我的4TB希捷移动硬盘在Windows下能够正常读写，虽然比平时稍显卡顿一些，但是在Ubuntu下无法打开，提示“unable to access Seagate device”。硬盘没有被晒过，可以排除物理损坏。出现这个问题的原因可能是我几次，没有退出硬盘就直接拔掉了USB接口有关。
一开始我用了Windows自带的硬盘修复工具，非常慢，而且没啥用。后来，我在网上看到了一个命令，非常简单，非常好用。
在Windows操作系统下，打开cmd，进入命令行，输入
CHKDSK /F *:

*为移动磁盘盘符
例]]></description><category></category></item><item><title><![CDATA[Pytorch nn.Linear() 使用示例]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109484075</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109484075</guid><author>blgpb</author><pubDate>Wed, 04 Nov 2020 09:51:45 +0800</pubDate><description><![CDATA[由于我之前一直用Keras，感觉Keras中的Dense()层非常好用，可以非常方便地进行全连接操作。这次需要用到Pytorch中的全连接层，一开始还不太会用，但是仔细研究后发现，其实两者殊途同归，方法很相似。
当我们需要将形如[batch_size, 18, 1, 1]的张量全连接操作后分别得到[batch_size, 18, 16]和[batch_size,1]的张量，该如何操作呢？
[batch_size, 18, 16]
class my_network(nn.Module):
    def __]]></description><category></category></item><item><title><![CDATA[调用mmdetection框架代码进行COCO数据集加载]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109480564</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109480564</guid><author>blgpb</author><pubDate>Tue, 03 Nov 2020 22:24:38 +0800</pubDate><description><![CDATA[mmdetection目标检测框架提供了非常方便的数据集加载接口，只需要简单地修改几个参数，就可以配置不同的数据预处理方式。如果我们需要用COCO数据集进行除目标检测之外其他的计算机视觉方法研究，需要使用到COCO数据集，如何进行数据集加载呢？为了避免重复造轮子，本文提供了一种利用mmdetection框架代码的方法，只需要简单几行代码就可以实现数据加载。
from mmdet.datasets.coco import CocoDataset
from functools import partial
fr]]></description><category></category></item><item><title><![CDATA[COCO数据集的加载过程]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109405487</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109405487</guid><author>blgpb</author><pubDate>Sat, 31 Oct 2020 22:43:26 +0800</pubDate><description><![CDATA[在mmdetection框架中，数据集的加载是一个非常重要的过程。 在之前的博客中，我主要讲解了pipeline，本文将更进一步，向更底层深入，讲解COCO数据集在进行pipeline处理之前的加载过程。
在mmdet/datasets/coco.py中，定义了CocoDataset这个类，这个类是继承自CustomDataset（我的博客中介绍分析了这个类）。我将这个类的部分代码展示在下面
@DATASETS.register_module
class CocoDataset(CustomDataset)]]></description><category></category></item><item><title><![CDATA[pycocotools的COCOeval的stats实例属性]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109337825</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109337825</guid><author>blgpb</author><pubDate>Wed, 28 Oct 2020 17:53:40 +0800</pubDate><description><![CDATA[pycocotools提供的COCOeval非常方便，可以让我们计算目标检测结果的mAP.一般常见的代码是


cocoEval.evaluate()
cocoEval.accumulate()
cocoEval.summarize()

会将最终的计算结果在终端输出，如下图所示



如果我们想将最终的结果返回，该怎么做呢？

我在认真阅读了pycocotools/cocoeval.py的源代码，发现在COCOeval类中定义了stats实例属性，cocoEval.summarize()函数中给stats]]></description><category></category></item><item><title><![CDATA[在python程序被终止的“弥留之际”再执行最后一段代码]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109336091</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109336091</guid><author>blgpb</author><pubDate>Wed, 28 Oct 2020 16:22:35 +0800</pubDate><description><![CDATA[对于深度学习训练或者验证过程，由于数据太多，很多时候我们等不及程序执行完毕就直接“Control+C”终止了程序运行。但是，我们还想程序在结束运行之前，清理一下环境，删除一些文件。于是，我们可以用下面的方法完成，非常简单。无论按了多少次“Control+C”，都不用担心，下面的代码都能成功执行。


import atexit
import glob

@atexit.register
def clean():
    print('-'*100)
    print('clean up the envir]]></description><category></category></item><item><title><![CDATA[COCOeval 计算一张图像的mAP 目标检测]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109321847</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109321847</guid><author>blgpb</author><pubDate>Tue, 27 Oct 2020 22:15:20 +0800</pubDate><description><![CDATA[pycocotools提供了COCOeval，可以让我们方便地计算coco数据集的mAP。然而，如果我们只想计算少量图像的mAP，该如何做呢？
coco2017数据集由训练集、验证集、测试集组成。训练集中一共拥有118287张图像，验证集中有5000张图像，测试集中有40670张图像。训练集的annotations文件的大小为469.8MB，验证集的annotations文件的大小为20MB，测试集的annotations文件没有提供。如果我们手动分割训练集或者验证集，需要额外的处理，很不方便。因此，本文提]]></description><category></category></item><item><title><![CDATA[mmdetection中的pipeline]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109263099</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109263099</guid><author>blgpb</author><pubDate>Sat, 24 Oct 2020 17:47:19 +0800</pubDate><description><![CDATA[首先，我们要明确2个不同的对象。在train.py中，先进行的是build_dataset然后是build_dataloader。需要注意的是输入图像resize等图像预处理工作和pipeline
都是在build_dataset阶段完成的，相反build_dataloader阶段做的事儿很少(mmdet/datasets/loader/build_loader.py)\
在研究pipeline之前，需要先研究mmdet/datasets/coco.py，我之前就是漏了这一个部分，直接去研究pipeline]]></description><category></category></item><item><title><![CDATA[mmdetection遇到ValueError: ctypes objects containing pointers cannot be pickled]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109211414</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109211414</guid><author>blgpb</author><pubDate>Wed, 21 Oct 2020 22:51:34 +0800</pubDate><description><![CDATA[问题描述：

在使用mmdetection进行训练时，使用单个GPU可以正常训练，当我尝试使用2个GPU分布式训练，产生了奇怪的报错：

ValueError: ctypes objects containing pointers cannot be pickled

运行环境

mmcv (0.2.16)
mmdet (1.0rc0+unknown, /home/DCTNet/segmentation)

torch (1.4.0)
torchvision (0.5.0)

CUDA 10.1

问题解决]]></description><category></category></item><item><title><![CDATA[Ubuntu18.04 黑屏闪烁无法开机 解决办法 清理根目录]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109186042</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109186042</guid><author>blgpb</author><pubDate>Tue, 20 Oct 2020 21:50:19 +0800</pubDate><description><![CDATA[问题描述：

我的电脑是双系统，在前一次Ubuntu关机后再次开机无法进入，一直卡在下图的地方，画面一直闪烁，显卡温度很高，温度飙升。



第一次遇到这么诡异的问题，我手足无措，不知道哪里出了问题。一开始看到显卡的异常表现，以为是显卡驱动出现了问题，网上找了很多资料也没有用。

在我冷静分析之后，我突然想到了上一次关机前的系统提升。系统提示我的空间不足，我当时手动删除了一两个大的文件，就没有放在心上，直接就关机了。我突然想到，Ubuntu无法正常开机或许就与硬盘空间不足有关。

1.进入Ubuntu的re]]></description><category></category></item><item><title><![CDATA[DCTNet目标检测环境配置]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/109101208</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/109101208</guid><author>blgpb</author><pubDate>Thu, 15 Oct 2020 19:35:29 +0800</pubDate><description><![CDATA[最近我在研究CVPR2020的一篇论文：《Learning in the Frequency Domain》，这篇文章的创新点在于将RGB图像进行DCT变换，然后只用其中一部分通道送入图像分类和目标检测网络，在大大降低网络计算量的情况下，仍能够保持原有的性能。作者提供了源代码，我想复现一下目标检测部分的内容。

DCTNet中的目标检测使用的是mmdetection框架，本文主要介绍的是如何搭建这个环境并成功运行测试代码，包括了我在搭建过程中遇到的报错以及解决方法。

第一步 下载docker镜像

随着容]]></description><category></category></item><item><title><![CDATA[model.fit 无法输入生成器的数据]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/104247780</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/104247780</guid><author>blgpb</author><pubDate>Mon, 10 Feb 2020 14:08:47 +0800</pubDate><description><![CDATA[history = model.fit(x=next(batch_generator_X), y=[next(batch_generator_y), domain_labels], epochs=epochs, callbacks=callbacks)

对于Tensorflow2.0+Keras，使用Keras函数式API可以非常高效便捷地搭建网络，但是会丧失一些灵活性。比如输入训练数据，只能...]]></description><category></category></item><item><title><![CDATA[路由器桥接设置 信号扩展]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/104234365</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/104234365</guid><author>blgpb</author><pubDate>Sun, 09 Feb 2020 14:38:33 +0800</pubDate><description><![CDATA[老家的房子比较大，一个无线路由器很难做到全覆盖。为了解决这个问题，我尝试了以下几种方法。

第一 使用WiFi扩展器

优点：简单方便，哪里信号弱就插在哪里。由于是USB供电，而且体积小巧，所以非常方便。不过需要注意的是，扩展器使用的位置不能距离原无线路由器太远，也不能太近。太远，扩展器把信号是增强了，但是网速还是很慢；太近，扩展器和原来的路由器会相互干扰。只有在一个恰当的位置才能发挥出最大的作用...]]></description><category></category></item><item><title><![CDATA[TensorFlow2.0 TypeError: 'list' object is not callable]]></title><link>https://blog.youkuaiyun.com/blgpb/article/details/104228151</link><guid>https://blog.youkuaiyun.com/blgpb/article/details/104228151</guid><author>blgpb</author><pubDate>Sat, 08 Feb 2020 20:51:03 +0800</pubDate><description><![CDATA[在写TensorFlow2.0的程序时，采用Keras函数式API搭建模型，model.summary()可以正确生成模型表格，可是训练了一个epoch后就提示TypeError: 'list' object is not callable，也没有别的报错。

一开始，我以为是我训练数据提供model.fit()有问题，主要精力都用在了排查数据集是否有问题。经过漫长时间的研究，还是报错。

最后，...]]></description><category></category></item></channel></rss>