runtime无法执行grep_Caffe和py-faster-rcnn日常使用备忘录

这篇博客详细记录了在使用Caffe和py-faster-rcnn过程中遇到的问题及解决方案,涵盖了从训练、日志解析、绘图到调试的各个环节,包括训练loss曲线绘制、protobuf版本问题、numpy错误、caffe模型初始化一致性等,并提供了具体的代码示例和修改建议。
摘要由CSDN通过智能技术生成

罗列日常使用中遇到的问题和解决办法。包括:

{

caffe使用中的疑惑和解释;

无法正常执行 train/inference 的情况;

Caffe基础工具的微小调整,比如绘loss曲线图;

调试python代码技巧,基于vscode;

py-faster-rcnn在自己数据集上调参技巧

py-faster-rcnn因为numpy版本、自己数据集等各种原因导致的坑和解决办法

py-faster-rcnn本身细节的各种坑

调试matcaffe的技巧

protobuf版本的坑

...

}

保持更新。

last update: 2018.05.13 18:59 GTC

test/deploy阶段的Accuracy层和Softmax层

拿AlexNet举例,为什么计算Accuracy时使用fc8和label这两个blob作为输入,而deploy时fc8这个blob要经过Softmax层再作为结果输出?

解释:fc8相当于定性比较,显示了网络对各个类别上的相对置信度(“相对概率”)

经过softmax是做了归一化操作,是严格服从概率的归一化性质的。

而在Accuracy的计算过程中,只需要知道置信度最大的那个类别,用argmax求出来,所以不需要严格的概率结果(softmax产出的prob),只需要相对置信度向量(fc8)即可。

解析py-faster-rcnn训练的日志,绘制loss曲线

1. 准备文件

拷贝caffe/tools/extra目录下的:

parse_log.sh

extract_seconds.py

plot_training_log.py.example (复制后去掉.example)

到训练产生的log文件所在目录。

2.修改代码

extract_seconds.py 38行:

#if line.find('Solving') != -1:

if line.find('Initializing') != -1:

parse_log.sh 29行:

# grep '] Solving ' $1 > aux3.txt

grep 'net.cpp:' $1 > aux3.txt

修改后,能保证正常log的解析,也能用来解析py-faster-rcnn训练的日志,而不再报错提示说'Start time not found'

3.个性化定制

比如网络有多个loss,需要分开绘图。修改parse_log.sh中,利用grep和awk获取的loss等数据。默认只有training loss。我的改成这样:

# grep '] Solving ' $1 > aux.txt

grep 'Initializing solver' $1 > aux.txt

grep ', loss = ' $1 >> aux.txt

grep 'Iteration ' aux.txt | sed 's/.*Iteration \([[:digit:]]*\).*/\1/g' > aux0.txt

grep ', loss = ' $1 | awk '{print $9}' > aux1.txt

grep ', lr = ' $1 | awk '{print $9}' > aux2.txt

## 新提取4个loss

grep ' loss_bbox = ' | awk '{print $11}' > aux4.txt

grep ' loss_cls = ' | awk '{print $11}' > aux5.txt

grep ' rpn_cls_loss = ' | awk '{print $11}' > aux6.txt

grep ' rpn_loss_bbox = ' | awk '{print $11}' > aux7.txt

# Extracting elapsed seconds

$DIR/extract_seconds.py aux.txt aux3.txt

# Generating. 将新增列添加列名称

echo '#Iters Seconds TrainingLoss loss_bbox loss_cls rpn_cls_loss rpn_loss_bbox LearningRate'> $LOG.train

# paste aux0.txt aux3.txt aux1.txt aux2.txt | column -t >> $LOG.train

paste aux0.txt aux3.txt aux1.txt aux4.txt aux5.txt aux6.txt aux7.txt aux2.txt | column -t >> $LOG.train

rm aux.txt aux0.txt aux1.txt aux2.txt aux3.txt aux4.txt aux5.txt aux6.txt aux7.txt

然后修改plot_training_log.py。这个代码主要是调用parse_log.sh提取数据到xxxx.log.train中,xxxx.log是你指定的训练所得log文件;而其他代码则显得冗余,我反正忽略了,自行绘图了。改成这样:

#!/usr/bin/env python

# coding:utf-8

"""

默认的模板写的太复杂。简单点。步骤包括:

1. 调用shell脚本,利用grep等命令得到xxx.log.train文件,里面全都是整理好的各列数据

2. 利用matplotlib/ggplot/visdom等工具绘图

"""

import inspect

import os

import random

import sys

import matplotlib.cm as cmx

import matplotlib.colors as colors

import matplotlib.pyplot as plt

import matplotlib.legend as lgd

def get_parsed_data(log_fname):

"""

@description

执行shell脚本来解析xx.log到xx.log.train;从这个xx.log.train文件读取数据到变量并返回

需要保证parse_frcnn_log.sh脚本和xx.log在同一个目录下

"""

os.system('%s %s' % (get_log_parsing_script(), log_fname))

# 从xxx.log.train读取数据

data_file_name = log_fname + '.train'

fin = open(data_file_name)

lines = [_.rstrip() for _ in fin.readlines()]

fin.close()

column_names = lines[0].split(' ')

n = len(column_names)

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值