Caffe簡單例程,影像處理,Netscope視覺化方法

嵌入式領域發表於2020-10-07

一個簡單的caffe網路

name: "convolution"
input: "data"
input_dim: 1
input_dim: 1
input_dim: 100
input_dim: 100
layer {
name: "conv"
type: "Convolution"
bottom: "data"
top: "conv"
convolution_param {
num_output: 2
kernel_size: 5
stride: 1
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
name: "conv2"
type: "Convolution"
bottom: "conv"
top: "conv2"
convolution_param {
num_output: 3
kernel_size: 5
stride: 1
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

執行程式

net =caffe. Net('conv.prototxt', caffe.TEST) #載入剛剛定義的網路
print(net.inputs) # 列印網路的輸入
print('\n')
# net有兩個重要的輸出。blobs和params
# net.blobs['data'] 指輸入資料,在該例子中,它是大小為 (1,1,100,100)的4維矩陣
# net.blobs['conv'] 指第一個卷積層的計算值,它是大小為(1,3,96,96)的4為矩陣
# net.blobs['conv2'] 指第一個卷積層的計算值,它是大小為(1,3,92,92)的4為矩陣
for k, v in net.blobs.items():
   print(k, v.data.shape)
print(net.blobs['conv'].data.shape) # shape指資料的維度或大小
print(net.blobs['conv'].data[0][0].shape)
print('\n')
for k, v in net.params.items():
   print (k, v[0].data.shape, v[1].data.shape)
print('\n')
print(net.params['conv'][0].data.shape)
print(net.params['conv'][1].data.shape)

上面五行為網路層和資料維數,第二個為輸出通道數,也就是卷積核數
下面四行為卷積核,第一個為核數,第二個為輸入通道數
在這裡插入圖片描述

Caffe讀取顯示影像

1、cv2.imread()介面讀影像,讀進來直接是BGR 格式資料格式在 0~255,通道格式為(W,H,C)
2、caffe.io.load_image()讀進來是RGB格式和 0~1(float)

因此,cv2.imread()讀取的資料,需要進過轉換後,才和caffe.io.load_image()相同,例如:

image = caffe.io.load_image(caffe_root + 'examples/images/cat.jpg')  
 
image1=cv2.imread(caffe_root + 'examples/images/cat.jpg')  
image1=cv2.cvtColor(image1,cv2.COLOR_BGR2RGB)  
image1=image1/255.  

Caffe視覺化方法

可以將prototxt檔案貼在下面網頁上,直接在遠端視覺化
https://cwlacewe.github.io/netscope/#/gist/e65799e70358c6782b1b

亦可以使用下面的方法本機安裝

https://github.com/cwlacewe/netscope
下載後解壓到netscope

Installation

sudo apt install npm
sudo apt install http-server
sudo npm install http-server -g
#start server, 進入到netscope資料夾
cd netscope -- http-server
#open in the browser
http://localhost:8080

在這裡插入圖片描述
[print(k, v.data.shape) for k, v in net.blobs.items()]
[print(k, v[0].data.shape) for k, v in net.params.items()]

圖片卷積後的尺寸計算公式

竹如海 2018-08-10 19:36:31 11636 收藏 4
分類專欄: 影像處理 數學概念
輸入圖片大小 W×W
Filter大小 F×F
步長 S
padding的畫素數 P
N = (W − F + 2P )/S+1
輸出圖片大小為 N×N

data (1, 3, 512, 1024)
data_data_0_split_0 (1, 3, 512, 1024)
data_data_0_split_1 (1, 3, 512, 1024)
ConvNd_1 (1, 13, 256, 512)
MaxPool2d_1 (1, 3, 256, 512)
Concat_1 (1, 16, 256, 512)
BatchNorm_1 (1, 16, 256, 512)
BatchNorm_1_Threshold_1_0_split_0 (1, 16, 256, 512)
BatchNorm_1_Threshold_1_0_split_1 (1, 16, 256, 512)

ConvNd_1 (13, 3, 3, 3)
BatchNorm_1 (1, 16, 1, 1)

layer {
name: “ConvNd_1”
type: “Convolution”
bottom: “data”
top: “ConvNd_1”
convolution_param {
num_output: 13
bias_term: false
pad: 1
kernel_size: 3
group: 1
stride: 2
dilation: 1
}
}

layer {
name: “MaxPool2d_1”
type: “Pooling”
bottom: “data”
top: “MaxPool2d_1”
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
pad: 0
}

(512-3+21)/2+1 = 256
(1024-3+2
1)/2+1 = 512

相關文章