Ubuntu16.04+CUDA8.0+cudnn v5.1+opencv3.1(2.4.10)+caffe+GTX 1080Ti 机器配置记录

caffe 专栏收录该内容
1 篇文章 0 订阅

从暑假就开始装环境,一路踩坑,终于忍不了了决定在博客上记录一下,方便自己查看,也希望能帮到遇到同样问题的朋友。 

2017.11.23:

  1. caffe又不能训练了,怀疑是之前为了提取光流把opencv版本从3.1降到了2.4导致的,于是重新下载并编译了opencv3.1,但是仍然报错:

    E1123 09:29:26.794917 4138 common.cpp:114]Cannot create Cublas handle. Cublas won't be available.

    和F112311:12:25.336674 15624 cudnn_conv_layer.cpp:53] Check failed: status== CUDNN_STATUS_SUCCESS (4 vs. 0)CUDNN_STATUS_INTERNAL_ERROR

    百度说是显卡驱动的问题应该重装(http://blog.csdn.net/TaylorMei/article/details/77968197?locationNum=10&fps=1),但鉴于和驱动有关的东西更改以后系统会崩,而且之前可以测试mnist和fasterrcnn的时候就是这个驱动版本,于是打算把caffe删掉重新下载重新编译,重新下载的压缩文件同时保存在mypassport

  2. 但是删掉caffe用github新下载的重新编译,到mnist测试时还是报一样的错误。

  3. 用系统自带的软件和更新把显卡驱动改成了381.22,之前是384.98,结果cuda也不能用了

  4. 卸载了驱动和cuda(http://blog.csdn.net/u012436149/article/details/53163346),重新安装了一遍,版本和之前一样384和8.0,结果编译caffe还是runtest能过但一测试mnist就报错,错误同上

  5. 采用tsn(https://github.com/yjxiong/temporal-segment-networks#start-training)下的caffeaction编译(才知道这也是个caffe),把系统默认的opencv改成了2.4.10,编译通过,但run test 出现了如下错误:

    E1124 09:02:54.143685 3694 common.cpp:138]Cannot create Cublas handle. Cublas won't be available.

    F1124 09:02:54.165396 3694 common.cpp:201] Checkfailed: status == CUBLAS_STATUS_SUCCESS (1 vs. 0)CUBLAS_STATUS_NOT_INITIALIZED

  6. 这回test都不通过了,同样还是cublas的问题,此时光流还可以提取,于是计划先提取一些光流。

 

2017.11.24

采用http://blog.csdn.net/lenbow/article/details/51683783的方法卸载掉384.98,重装375.66(下载参考这篇https://zhuanlan.zhihu.com/p/27917556最后),安装驱动的.run文件时需要把系统默认语言改成英文,否则中文会显示成实心的菱形。按照此方法成功安装了375.66,直接用apt-get安装不知道为什么还会是384

然后卸载掉cuda再重装,重新按照教程走一遍直到编译,最后训练mnist数据集也终于能成功了!看来果然是显卡驱动版本的问题!

 

但是在训练tsn网络时还是有[libprotobuf ERRORgoogle/protobuf/text_format.cc:274] Error parsing text-formatcaffe.NetParameter: 19:12: Message type "caffe.LayerParameter" hasno field named "bn_param".

F1124 19:10:18.841284 32660upgrade_proto.cpp:88] Check failed:ReadProtoFromTextFile(param_file, param) Failed to parseNetParameter file:models/ucf101/tsn_bn_inception_rgb_deploy.prototxt这样的问题,已经更改了~/.bashrc中Python的路径,但还是有这个问题

 

重启电脑以后发现可以测试了!第二天过来看发现测试split1 rgb准确率是86.02%竟然比作者论文里的还要高一些!后来看作者说是因为单个模式的测试不够稳定,需要把rgb,flow,warpedflow结合在一起看

 

2017.11.29测试split1 flow结果:

Accuracy 87.63%

 

real 44m22.896s

user 38m20.592s

sys 4m4.524s

 

 

2017.12.12

开机以后在登录界面显示分辨率不正常,输密码以后显示系统出现问题,闪了一下又到了登录界面,nvidia-smi看了一下发现果然又是显卡的问题,于是按照之前的操作重新装了一遍375.66,现在又能用了,真的太不稳定了!ctrl+alt+F1的时候因为我系统语言是中文,好多提示又显示成了菱形图案,于是还更改了一下系统语言,决定以后就用英文版了,想想可能过阵子又得重装驱动吧。。。还好我安装包一直放在home期间重装驱动的时候也报了一个错“you appear to be running an X server”上一次安装驱动出现这个问题我记得是因为我没进tyy1,但这次进了依然有,解决办法:http://blog.csdn.net/eclipse_c/article/details/23302061。然后安装好驱动再sudo service start lightdm以后就回到了图形桌面,但关机的时候出现了“failed to start load kernel modules”,上一次装完也有这个问题,但因为没有影响使用所以就忽略了,现在想想估计就是这个原因导致我用着用着突然又崩了,于是用http://blog.csdn.net/hello_java_android/article/details/54091293的方法试了一下,目前还没有再次看到那个failed提示。

 

2017.12.15

昨天关机的时候发现还是有那个failed的提示,大概是之前的设置没有用吧,这个问题暂时还没解决,不是每次关机都出现,只有用的时间长一点再关机才会出现。

昨天想用手上ntu的数据微调kinetic预训练的网络,结果失败了,loss一直在4.6不收敛,后来试了一下微调ImageNet预训练的网络就成功了,前面不成功的原因可能是prototxt不匹配的缘故,应该要按照给出的deploy文件添加输入输出层自己写一个。附图训练的结果:

今天用这个训练好的模型在做测试,结果出来以后再来贴上。

结果出现了F1215 10:05:11.961401  9572 blob.cpp:481] Check failed: ShapeEquals(proto) shape mismatch (reshape not set)的错误,目前还在找原因。

查看了很多博客的解决方法,大部分情况都是在fine tune也就是训练的时候就报错了,而我这个有些不同,是训练没问题,测试才报错,于是用UCF101按照作者的步骤按部就班了一遍,发现也还在这个错误,无法测试,抱着试一试的心态,把训练的prototxt最后和动作类别有关的层重新命名了,训练的结果比之前差一点,如图:

然后相应的deploy的prototxt最后的层也重新命名,再测试就真的不报错了!

我这个训练速度也很快,作者训练UCF101都要40分钟,他还是4个GPU,应该是因为我把batch_size从32改成了128的缘故。但现在来看测试好像有些费时,还没有测完。

结果到后面就报了一个这样的错误:

video S017C001P020R002A054_rgb done
video S017C001P007R002A020_rgb done
video S017C001P009R002A004_rgb done
video S017C001P016R001A049_rgb done
video S017C001P020R001A033_rgb done
Traceback (most recent call last):
  File "tools/eval_net.py", line 125, in <module>
    cf = confusion_matrix(video_labels, video_pred).astype(float)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/metrics/classification.py", line 255, in confusion_matrix
    labels = unique_labels(y_true, y_pred)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/multiclass.py", line 103, in unique_labels
    raise ValueError("Mix of label input types (string and number)")
ValueError: Mix of label input types (string and number)
dl526@dl526:~/temporal-segment-networks$ python tools/eval_net.py ntu 1 rgb /media/dl526/BE4AAB8D4AAB414F/nturgbd_rgb-extract/ models/ntu/tsn_bn_inception_rgb_deploy.prototxt models/ntu_split1_tsn_rgb_bn_inception_iter_3500.caffemodel --num_worker 1 --save_scores SCORE_FILE_ntu_rgb

说是label的类型混合了字符和数字,这就很奇怪了

搞了一整天终于发现了错误,原来是我自己写的parse_ntu_splits()函数里面返回的label类型是str,而作者写的UCF101和HMDB51的都是返回int,怪不得我测试单个视频,正确率几乎为零,应该是训练网络的时候就训练错了,那个0.83的accuracy也不知道咋来的,现在把label类型改成了int以后又重新训练了的结果:

好吧貌似和之前区别不大,又测试了一下单个视频,发现五个里就没有一个识别对的(笑哭)

还是进行整个测试集的测试吧

整个测试集的测试也很醉,正确率才百分之一点多,肯定是哪里出问题了,继续查错

先把prototxt和deploy中最后几层改过layername的top也改成了相应的名称,然后再训练:

准确率比之前训练的0.83还高了一点,然后再拿五个测试集视频去测试,发现还是一个都认不出来。。。再拿训练集的五个视频测试,还是一个都认不出来,这是deploy文件的问题吗。。?

为了找问题又用UCF101训练再测试,发现是正常的,同样是改了层名称

训练:

测试:

发现测试的准确率和训练阶段验证的准确率是差不多的,但都比作者给的训练好的reference要低,可能还是因为后两个层改了名字没有用到ImageNet预训练的数据?

刚刚试了一下UCF不更改曾名称也可以测试了?不知道之前为啥不能,难道是把rgb的文件写成flow了吗

由于之前没改layername时候的训练log被覆盖了,于是刚刚重新训练了一下:

也是0.84,正常的应该就是一样的,因为训练阶段的验证集和测试时的测试集本来就是同一个。

再重新用ntu训练一下不改layername的网络,max_iter从3500改成了4000,batchsize从128改成了32

结果不知道为什么准确率降到0.82了,可能是batchsize?然后测试的时候就又报错了

也就是说用ucf可以不改layer名称,但是用ntu就需要改,改了以后虽然能测试,但结果完全不对,还是没有找到原因,心好累——2017.12.19

 

2017.12.20今天早上来打算再调调参数试试,结果看solver文件的时候,猛然发现上面一行字:net: "models/ucf101/tsn_bn_inception_rgb_train_val.prototxt"我天居然还是ucf101???这个可是ntu的solver啊!我居然没有改??这下终于找到问题所在了,太不容易了,赶紧改成ntu以后再训练,发现速度慢了好多,38分钟了才iteration=120(刚刚为了复制这个按了个Ctrl+C!!傻叉了,训练被我中断了,只好再来一遍)

2017.12.21训练了十多个小时才出来的结果:

这回才是真正的训练啊,之前才不到二十分钟的那个都是假的。。。

然后用这回的模型测试了一下测试集的前五个视频:

结果还不错,五个里面对了四个。但是训练完的那个accuracy只有0.57,太低了一些,接下来需要研究下怎么提高。

另外这两天测试的时候发现做video parsed这一步的速度比以前慢了很多,暂时不知道什么原因。刚刚删了几个home下面没什么用的大文件以后又变快了,现在打算用这个模型先做一遍整个数据集的测试看看。

结果还是和训练的时候差不多,有点低,现在打算先不调这个网络的参数,改用kinetic预训练的模型来训练看看会不会好些。

由于kinetic只给出了deploy,需要自己写train_val和solver,我就把之前ImageNet的输入输出层直接粘贴到kinetic的deploy首尾了,然后solver直接复制改了一下net的地址,但运行的时候报错了:

I1222 11:11:04.523223  7409 layer_factory.hpp:74] Creating layer reshape_fc
I1222 11:11:04.523229  7409 net.cpp:99] Creating Layer reshape_fc
I1222 11:11:04.523232  7409 net.cpp:479] reshape_fc <- fc
I1222 11:11:04.523238  7409 net.cpp:435] reshape_fc -> reshape_fc
I1222 11:11:04.523246  7409 net.cpp:163] Setting up reshape_fc

F1222 11:11:04.523259  7409 reshape_layer.cpp:79] Check failed: 0 == bottom[0]->count() % explicit_count (0 vs. 120) bottom count (1920) must be divisible by the product of the specified dimensions (180)

在输出部分有个reshape层的bottom个数是1920,不能被我设置的[-1, 1, 3,60]计算出的180整除,我查了一遍还看了源代码,目前还是不知道这个1920是怎么来的,按理说都是bn-inception,维数应该不会不同,之前都不出错,现在不知道为何出错了。

一边找错一边用ntu训练ImageNet预训练的光流网络,发现特别特别慢,这回不知道得几十个小时,看来一个显卡还是太吃力了。

然后对照着之前的train_val文件从头开始查,查到第一个卷积层就发现错误了,输入应该是reshape_data ,而我还保持着deploy文件的data。。。不过改过以后能不能奏效还得之后再检验了,先训练完光流,现在显卡被占用着。

 

2017.12.25

22号15点左右开始训练的,今天早上来看发现log卡在了23号凌晨3点,当时iteration=1000,忘记保存snapshot了,只好关机,结果关机也卡住了,只好按主机上的重启按钮,成功重启了,估计是大量数据在内存没有写入完毕,现在打算先不训练flow网络了,先用rgb微调kinetics预训练的网络,改了reshape_data那个错误以后,又出现了shape mismatch的错误,这回是在训练阶段,改了全连接层的名称为fc-action1以后就可以训练了。

2017.12.26

训练的结果:

只比ImageNet高了1%的样子

接下来是用这个模型测试

上60%了还不错。记一下分数:

[ 0.26898734  0.43987342  0.56962025  0.38924051  0.51898734  0.76582278
  0.68037975  0.50316456  0.58860759  0.4556962   0.2721519   0.21518987
  0.53481013  0.88924051  0.81329114  0.52531646  0.37974684  0.44620253
  0.35759494  0.66139241  0.58227848  0.88924051  0.57278481  0.7278481
  0.4556962   0.88291139  0.54746835  0.4335443   0.47151899  0.64240506
  0.5221519   0.46518987  0.58544304  0.2278481   0.72151899  0.75
  0.58227848  0.53797468  0.49050633  0.59810127  0.53797468  0.76265823
  0.88924051  0.43987342  0.37658228  0.61392405  0.59177215  0.68670886
  0.36392405  0.60126582  0.92721519  0.82594937  0.81329114  0.78797468
  0.92721519  0.75632911  0.81012658  0.82278481  0.9778481   0.98734177]
Accuracy 60.77%


real 273m27.622s
user 186m7.672s
sys 19m14.172s

下一步计划用光流微调kinetics预训练的flow网络

2018.1.3从2017训练到2018,花了七天多的时间,终于训练完了,好在结果令人惊喜,最后准确率有0.83!

让电脑先休息一天,明天再做测试,感觉训练rgb的时候可能是迭代次数少了,下回加一些重新训练吧!

2018.1.4测试了光流网络!结果出乎意料!居然有90%!!!不枉我训练了一星期。。。

[ 0.96518987  0.93037975  0.87974684  0.96518987  0.9778481   0.99683544
  0.96518987  0.99683544  0.98101266  0.88291139  0.84810127  
0.37341772(writing)
  0.9335443   0.99683544  0.98417722  0.87341772  0.86392405  0.86075949
  0.87025316  0.99683544  0.97468354  0.98734177  0.86075949  0.99050633
  0.87341772  0.99683544  0.99683544  0.87974684  0.75316456  0.7943038
  0.77531646  0.90189873  0.9335443   0.73417722  0.90189873  0.99683544
  0.89873418  0.92088608  0.73101266  0.92405063  0.7943038   0.99683544
  0.99683544  0.82278481  0.83544304  0.86075949  0.86075949  0.93670886
  0.96835443  0.86075949  0.96835443  0.93987342  0.87658228  0.95253165
  1.        0.97468354  0.96202532  0.94303797  1.          1.        ]
Accuracy 90.86%


real710m42.230s
user282m41.612s
sys24m53.972s

把之前测试的rgb分数和今天得到的flow分数按照1:1.5融合,得到的准确率是Final accuracy 91.434599%;按照1:2是Final accuracy 91.566456%;1:3是Final accuracy 91.703586%;1:3.5是Final accuracy 91.666667%,所以最高是1:3的时候,91.7%左右

 

2018.1.15用差不多一个星期的时间重新训练了一下rgb网络,把学习率改成和光流差不多的模式,分了三个阶段,iteration0-5000: 0.005;5000-16000: 0.0005;12000-18000: 0.00005,最后得到的测试准确率:

[ 0.72151899  0.80063291  0.64873418  0.91455696  0.95253165  0.99367089
  0.9556962   0.69620253  0.75316456  0.73417722  
0.49050633(reading)  0.73101266
  0.90189873  0.99367089  0.9556962   0.75        
0.59177215(take off a shoe)  0.56329114(wear on glasses)
  0.42721519(take off glasses)  0.72151899  0.73734177  0.90506329  0.73101266  0.91139241
  0.73734177  0.80063291  0.90822785  0.59177215  0.44303797(playing with phone/tablet)  0.86075949
  0.60126582  0.78481013  0.69936709  0.21518987(rub two hands together)  0.68987342  0.60759494
  0.75949367  0.4778481(salute)   0.30379747(put the palms together)  0.58227848(cross hands in front (say stop))  0.59810127(sneeze/cough)  0.88291139
  0.85759494  0.51898734(touch head (headache))  0.63291139  0.76898734  0.73101266  0.87341772
  0.68670886  0.93037975  0.95253165  0.93987342  0.9556962   0.80696203
  0.95253165  0.94303797  0.92088608  0.89240506  1.          0.99050633]
Accuracy 75.80%


real285m41.857s
user187m4.032s
sys18m32.228s

 

再把两个分数融合,rgb:flow=1:4的时候最高Final accuracy 93.934599%

上面标红的准确率都是比较低的类别,等后面再对照看看具体是什么动作类别会比较低。

针对骨架数据,已经用作者提供的读取数据的matlab代码批量保存了数据到与视频名称相同的.mat文件中

 

2018.1.23

发现从Python直接导入mat文件会很乱,不知道哪个数据对应哪个,所以自己重新写了Python版本的read skeleton file,然后在https://github.com/LisaAnne/lisa-caffe-public/tree/lstm_video_deploy/examples/LRCN_activity_recognition基础上改写了sequence input layer,龟速写代码花了不少时间。然后因为tsn版本的caffe没有lstm层,所以想自己添加一个,结果报了一些错,决定还是用原始版本的caffe。

然后现在的错误是:[libprotobuf FATAL google/protobuf/stubs/common.cc:61] This program requires version 3.4.0 of the Protocol Buffer runtime library, but the installed version is 2.6.1.  Please update your library.  If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library.  (Version verification failed in "google/protobuf/descriptor.pb.cc".)因为我用了Pythonlayer,出现了ProtoBuffer的版本的问题,解决方法参考:http://blog.csdn.net/m0_37477175/article/details/78233983

重新安装了2.6.1版本以后再运行训练命令,又报错:from google.protobuf.internal import enum_type_wrapper
ImportError: No module named google.protobuf.internal

再用sudo pip install protobuf==2.6.1安装一次,没有importerror了。另外自己写的Pythonlayer需要放到caffe下的Python文件夹下才行。

2018.9.28更新:

昨天为了安装pytorch,更新了一下pip,结果今天电脑开机的时候又卡在循环输密码那里了,毫无疑问又是显卡驱动出问题了,就找到这篇记录开头处重装375.66的步骤,做了一遍发现一直安装失败,building kernel module是时出现error,查资料发现是因为kernel自己升级了,但是驱动没有变,于是不匹配了,建议是安装最新的驱动。抱着试一试的心态按照https://blog.csdn.net/weixin_40294256/article/details/79157838这篇文章照做了,装了384,暂时是能进系统了,但关机的时候还是有failed to start load kernel modules的问题。先凑合用吧

2018.10.4更新,今天想用pytorch跑一遍测试,结果报错:RuntimeError: CUDNN_STATUS_INTERNAL_ERROR,一开始以为又是显卡驱动的问题就又重装成了390.87,结果还报一样的错,最后是用https://www.jianshu.com/p/bf183355f0e7这个方法解决的,所以现在显卡驱动的版本是390了,然后关机的时候还有一个failed,之前384的时候是有两个failed,375正常的时候是一个failed,和现在一样。

  • 0
    点赞
  • 4
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

icepasserby

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值