⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 violakernel.m.svn-base

📁 a function inside machine learning
💻 SVN-BASE
字号:
function violaK = violaKernel(X1, X2, kernelParams)
%Compute the a linear kernel using the viola features on a set of images 
%This is going to be a bit slow 

if exist(kernelParams.kernelFunctionName, 'file') ~= 2
    error('Kernel function %s does not exist\n', kernelParams.kernelFunctionName); 
end

numX1Examples = size(X1, 1); 
numX2Examples = size(X2, 1); 

%We want X1 to be smaller to improve efficiency 
if numX1Examples > numX2Examples 
    tempX = X1; 
    X1 = X2; 
    X2 = tempX;
    numX1Examples = size(X1, 1);
    numX2Examples = size(X2, 1);
    clear tempX;
    pack;
    swap = 1;
else
    swap = 0;
end

kernelFunctionName = kernelParams.kernelFunctionName;
width = kernelParams.width;
height = kernelParams.height; 
X1cacheSize = min(kernelParams.kernelCacheSize, numX1Examples);
X2cacheSize = min(kernelParams.kernelCacheSize, numX2Examples);

numX1Chunks = ceil(numX1Examples/X1cacheSize);
numX2Chunks = ceil(numX2Examples/X2cacheSize);

%Free up some memory 
pack; 
violaK = zeros(numX1Examples, numX2Examples); 
ex1 = violaFeatures(reshape(X1(1, :), width, height));
%ex1 = X1(1, :); 
numFeatures = length(ex1);

for i=1:numX1Chunks
    fprintf('Calculating kernel chunk %d of %d\n', i, numX1Chunks);
    
    startX1Index = (i-1)*X1cacheSize + 1;
    endX1Index = min(i*X1cacheSize, numX1Examples);

    X1Cache = zeros(endX1Index-startX1Index, numFeatures); 
    
    %First fill up X1Cache
    for k=1:(endX1Index-startX1Index)+1
        %X1Cache(k, :) = X1(startX1Index+k-1, :);
        X1Cache(k, :) = violaFeatures(reshape(X1(startX1Index+k-1, :), width, height));
        X1Cache(k, :) = X1Cache(k, :)/norm(X1Cache(k, :)); 
    end 
   
    
    for j=1:numX2Chunks
        startX2Index = (j-1)*X2cacheSize + 1;
        endX2Index = min(j*X2cacheSize, numX2Examples);

        X2Cache = zeros(endX2Index-startX2Index, numFeatures); 
        
        %Fill up the X2Cache 
        for k=1:(endX2Index-startX2Index)+1
            %X2Cache(k, :) = X2(startX2Index+k-1, :);
            X2Cache(k, :) = violaFeatures(reshape(X2(startX2Index+k-1, :), width, height));
            X2Cache(k, :) = X2Cache(k, :)/norm(X2Cache(k, :)); 
        end
        
        violaK(startX1Index:endX1Index, startX2Index:endX2Index) = feval(kernelFunctionName, X1Cache, X2Cache, kernelParams);
    end
end

clear X1Cache X2Cache; 
pack; 

if swap == 1 
    violaK = violaK'; 
end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -