caffe分類器test通用python程式

2021-10-13 15:00:29 字數 3438 閱讀 4608

caffe分類器test,在pycaffe中提供有示例程式,並且它自己也封裝了乙個類,但感覺不是太友好,在我在原始基礎上做了一些改動,方便以後測試用,在此整理如下:

首先展示一下caffe官方提供的分類器test指令碼大致如下:

print(top_k[i],probs[top_k[i]],labels[top_k[i]])上述**具有普適性,但不方便批量測試和其他地方呼叫,為此分裝了模組化如下:

#

#import numpy as np

import sys,os,json

caffe_root='/data/caffe/'

sys.path.insert(0, caffe_root + 'python')

os.chdir(caffe_root)

import caffe

class classify:

def __init__(self,net_file,caffe_model,meanvals,labels):

net = caffe.net(net_file, caffe_model, caffe.test)

transformer = caffe.io.transformer()

transformer.set_transpose('data', (2, 0, 1))## 將 高x寬x通道,轉化為,通道x高x寬的格式

if meanvals is not none:

transformer.set_mean('data', meanvals)

transformer.set_raw_scale('data', 255)#畫素數值恢復[0-255] ,rescale from [0,1] to [0,255]

transformer.set_channel_swap('data', (2, 1, 0))# swap channels from rgb to bgr

self.net=net

self.transformer=transformer

self.labels=labels

def predict(self,impath,top_k_num=1):

im = caffe.io.load_image(impath)

self.net.blobs['data'].data[...] = self.transformer.preprocess('data', im)

out = self.net.forward()

probs = self.net.blobs['prob'].data[0].flatten()

probsortids = self.net.blobs['prob'].data[0].flatten().argsort()

top_k = probsortids[-1:-(len(self.labels)):-1]

return self.labels[top_k[0:top_k_num]], probs[top_k[0:top_k_num]]

def get_classify_acc(self, immaindir):

classify_acc = {}

for label in labels:

imdir = os.path.join(immaindir, label)

if not os.path.isdir(imdir):

continue

imnames = os.listdir(imdir)

imnum = len(imnames)

i, k = 0, 0

for imname in imnames:

impath = os.path.join(imdir, imname)

predlabel, prob = self.predict(impath)

i += 1

print(predlabel, prob, imname)

if label == predlabel:

k += 1

print(imnum, k, float(k) / imnum)

classify_acc[label] = round(float(k) / imnum, 3)

return classify_acc

現在整理及模組化封裝後,感覺是不是整潔多了,也方便其他地方呼叫

python 編寫通用裝飾器

需求 假如我們需要將一些方法加入日誌,在python這時候就需要裝飾器,而每個方法的引數,返回值各不相同,這時候,我們就需要編寫乙個通用的裝飾器來將日誌引入進來 測試版 通用裝飾器 def func functionname def func in args,kwargs print 記錄日誌 re...

Python實現貝葉斯分類器

使用樸素貝葉斯分類器,對一片文章進行分類處理 對中文進行分詞處理 jieba分詞 對分開的詞語進行處理,去除重複詞彙,去除標點和單個虛擬詞彙如 你,我,他。選擇特徵詞,很重要,要總結出符合某一型別的關鍵特徵詞對分類器進行訓練,即傳入一些已經分好類的文章,讓分類器可以知道其中的一些特徵詞。計算出特徵詞...

softmax分類器 python實現

演算法這裡為了防止大家看不懂我的程式,我在這裡做一些定義 jj x i 1 p y i j x i j 1 p y i j x i e tjx i kl 1e tlx i 2 e tlx i 3 資料集 特徵將整個圖作為特徵 已上傳github 這次的 是python3的。encoding utf8...