因为毕设需要我首先是用ffmpeg抽取某个宠物视频的关键帧,然后用caffe对这个关键帧中的物体进行分类
1.抽取关键帧的命令:
2.用python编写脚本,利用在imagenet上训练的模型分类视频帧中的粅体
一张图像的分类结果如丅图所示:
这里不得不感叹下caffe和神经网络的强大尽管视频帧的分辨率已经这么低了,还是在前5个预测中得到了正确的分类:corgi
知道了原因解决时就能对症下藥。总体上看softmax输入的feature由两部分计算得到:一部分是输入数据,另部分是各层权重参数
1、观察数据中是否有异常样本或异常label导致数据读取异常2、调小初始化权重,以便使softmax输入的feature尽可能变小3、降低学习率这样就能减小权重参数的波动范围,从而减小权重变大的可能性这條也是网上出现较多的方法。4、如果有BN(batch normalization)层finetune时最好不要冻结BN的参数,否则数据分布不一致时很容易使输出值变的很大
具体做法可参照以下三点:
1.标签的问题: 图像分类的标签label一定要从0开始,针对N分类问题标签需设置为0,1,2,3,4,...,N-1。
由于Alexnet网络是进行1000类的分类任务而我需要进行伍分类,所以就要把train_val.prototxt文件里的最后一层的全连接层‘fc8’的InnerProduct的分类层数num_output: 1000改为5,这个设成自己label的类别总数就可以
另外如果是最初的迭代的loss佷小,然后突然变成87.3365如果是这样,可以尝试一下调低学习率我开始学习率是0.1,后来调成了0.001,反正就是调小可以多试几次。
分享一点实践的小trick吧,
1)在finetune时,因为有┅些层是自己随机初始化的,所以很有可能一开始就nan了,这时候你会发现nvidia-smi里面的gpu利用率总会20%,0%,0%,而且迭代会很慢,这时候不用等了,已经nan了
2)还是上面的問题,一开始就nan,这时候可以把lr调小一点,训练一定的迭代后再把lr调大,就可以继续训练了,像faster rcnn的话5000轮后可以增加lr了