克隆项目HTCN
git clone git://github.com/xiangxiangtao/HTCN.git
主要环境
- python=3.6.9
- pytorch=1.0.1
- cuda=10.0
其他环境参考fasterrcnn所需环境
编译
cd lib
python setup.py build develop
准备PASCAL_VOC 07+12
参考Pascal VOC数据集使用方法
准备Clipart
参考cross-domain-detection
下载cityscapes和foggy_cityscapes
参考cityscapes和foggy_cityscapes数据集使用记录,下载数据集,并将两个数据集转成voc格式。
以PASCAL_VOC 07+12 and Clipart为例
添加lib/datasets/
将数据集对应的脚本添加到lib/datasets/中
修改lib/datasets/config_dataset.py
- 修改__D.PASCAL和__D.CLIPART为实际的数据集所在路径;
修改lib/model/utils/parser_func.py
- 对voc和clipart两个数据集,–dataset的值改为’voc_0712’,–dataset_t的值改为’clipart’,由于该脚本中set_dataset_args函数里已经有了对应的分支,不需要再进行修改;
修改lib/datasets/factory.py
根据前面的parser_func.py脚本中的args.imdb_name内容进行修改
- args.dataset为"voc_0712"时,使用默认的代码即可;
- args.dataset_t为"clipart"时,使用默认的代码即可;
下载预训练模型
点击HTCN中的链接,下载VGG16和ResNet101的预训练模型;
将预训练模型放到指定路径下,指定路径可以在lib/model/utils/config.py中进行修改;
net可以选择vgg16/resnet101
python trainval_net_HTCN.py --dataset source_dataset --dataset_t target_dataset --net vgg16
源数据集为pascal voc07+12,目标数据集为clipart,不采用论文的插值方法(cyclegan迁移);
使用论文中的res101预训练权重;
python trainval_net_HTCN.py --dataset 'voc_0712' --dataset_t 'clipart' --net res101
源数据集为cityscapes,目标数据集为foggy_cityscapes,不采用论文的插值方法(cyclegan迁移);
使用论文中的vgg16预训练权重;
python trainval_net_HTCN.py --dataset 'cs' --dataset_t 'cs_fg' --net vgg16
解决办法:
参考No module named ‘model.utils.cython_bbox’ #7
打开setup.py
gedit lib/setup.py
将里面的
ext_modules = [
extension(
"model._C",
sources,
include_dirs=include_dirs,
define_macros=define_macros,
extra_compile_args=extra_compile_args,
)
]
替换成
ext_modules = [ extension( "model._C", sources, include_dirs=include_dirs, define_macros=define_macros, extra_compile_args=extra_compile_args, ), extension( "model.utils.cython_bbox", ["model/utils/bbox.pyx"], extra_compile_args={'cxx':[],'gcc': ["-Wno-cpp", "-Wno-unused-function"]}, include_dirs=[numpy_include] ) ]
解决办法
打开setup.py
gedit lib/setup.py
在刚才的ext_modules前面添加下面几行内容
import numpy as np
try:
numpy_include = np.get_include()
except AttributeError:
numpy_include = np.get_numpy_include()
解决办法:
数据集没配置好,参考前面的内容进行配置;
解决办法:
pytorch版本问题,参考报错提示进行修改,去掉data。
原因:
网上说时由于pytorch版本大于1.3所以报错,但是我的pytorch版本时1.0.1,分析是由于我当前使用的系统cuda版本是10.2,目前不支持1.2及其以下的GPU版的pytorch,因此改为使用cuda9;
解决办法:
- 切换系统默认的cuda
因为本机装了10.2和9.0两个版本,在/usr/local中把cuda的软链接改为cuda-9.0,然后重新编译项目;
原因:
检查了一下,发现CUDA_HOME这个环境变量已经改成了cuda9,nvcc的版本也变成了cuda9,但是在虚拟环境中使用conda list和进入命令行之后使用torch.__version__两种方式查看得到的pytorch版本不同,感觉可能是当前虚拟环境装了两个pytorch,再用pip list进行查看,果然发现pip还装了一个torch。
解决办法:
两个pytorch卸载掉不需要的一个即可;
原因:
参考CUDA9.0编译nvcc报错‘/usr/include/c++/6/tuple’,gcc当前版本为gcc-7,版本过高,切换到gcc-5;
解决办法:
参考ubuntu18.04 gcc-7安装与多版本切换切换到gcc-5;
原因:
查阅网上的解决方案,不确定时cuda的问题还是gcc的版本问题,尝试更换系统cuda版本。
解决办法:
重装了一个cuda10.0,编译通过。
原因:
测试了一下,发现import torchvision会报该错误
解决办法:
无法解决,本地环境有点问题,直接pull了一个pytorch1.0,cuda10.0的docker环境,在docker环境下就没有该问题了,搭建方法参考docker搭建pytorch环境。
net根据训练时取的主干网络进行选择
python test_net_HTCN.py --dataset source_dataset --dataset_t target_dataset --net vgg16 --load_name path_to_model
python test_net_HTCN.py --dataset 'voc_0712' --dataset_t 'clipart' --net res101 --load_name 'models/res101/pascalvoc-clipart_res101_no_interpolation/target_clipart_eta_0.1_local_True_global_True_gamma_3_session_1_epoch_14_step_10000.pth'
python test_net_HTCN.py --dataset 'cs' --dataset_t 'cs_fg' --net vgg16 --load_name 'models/vgg16/cityscapes-foggycigyscapes_vgg16_no_interpolation/globallocal_target_cs_fg_eta_0.1_local_context_True_global_context_True_gamma_3_session_1_epoch_7_step_8000.pth'
解决办法:
去掉test_net_HTCN.py里132行的path_return=True参数
[1]:Pascal VOC数据集使用方法
[2]:HTCN
[3]:ubuntu安装pytorch及使用过程的报错记录
[4]:CUDA9.0编译nvcc报错‘/usr/include/c++/6/tuple’
[5]:ubuntu18.04 gcc-7安装与多版本切换
[6]:docker搭建pytorch环境
[7]:cross-domain-detection
[8]:cityscapes和foggy_cityscapes数据集使用记录