class DSelect

Public Class Methods

compare(f1, f2) click to toggle source

image同士を比較して特徴量出す

# File lib/deepselect.rb, line 15
def self.compare(f1, f2)
        # 引数がRmagick imageならfeature vectorへ変換
        if f1.class == Magick::Image and f2.class == Magick::Image
                f1,f2 = f1.to_vector, f2.to_vector # さすがに他のライブラリと被りそうな気が
        end

        # cos similarity
        v1 = Vector.elements(f1)
        v2 = Vector.elements(f2)
        return v2.inner_product(v1)/(v1.norm() * v2.norm())
end
id() click to toggle source

…? modelの各layerのid

# File lib/deepselect.rb, line 53
def self.id
        conv1_id = '140326425860192'.freeze
        fc6_id = '140326200777584'.freeze
        softmax_id = '140326200803680'.freeze
        {conv1_id: conv1_id, fc6_id: fc6_id, softmax_id:softmax_id}
end
model_opt() click to toggle source

モデルの詳細

# File lib/deepselect.rb, line 61
def self.model_opt
        conv1_id, fc6_id, softmax_id = self.id.values

        input_shape = {
                channel_num: 3,
                width: 224,
                height: 224
        }
        model_opt = {
                backend: 'mkldnn',
                input_layers: [
                        {
                                name: conv1_id,
                                dims: [
                                        1, #image_list.size, # batch size
                                        input_shape[:channel_num],
                                        input_shape[:height],
                                        input_shape[:width],
                                ]
                        }
                ],
                output_layers: [fc6_id, softmax_id]
        }
end
vgg16() click to toggle source

vgg16返す

# File lib/deepselect.rb, line 28
def self.vgg16
        # 読み込み済みなら読み込んであるモデルを返す
        return @@vgg16_obj if @@vgg16_obj

        vgg16_dir = File.expand_path('./deepselect/data/VGG16.onnx', __dir__)
        if File.exist?(vgg16_dir)
                @@vgg16_obj = Menoh::Menoh.new(vgg16_dir)
        else
                # menohと同じようにモデルをダウンロードする
                # url勝手に使うのダメだったら教えてください...!
                model_parent_dir = File.expand_path('./deepselect/data', __dir__)
                FileUtils.mkdir(model_parent_dir) unless File.exist?(model_parent_dir)
                puts "model data downloading... (first time only)"
                url = 'https://www.dropbox.com/s/bjfn9kehukpbmcm/VGG16.onnx?dl=1'
                open(url) do |file|
                        File.open(vgg16_dir, "wb") do |out|
                                out.write(file.read)
                        end
                end
                @@vgg16_obj = Menoh::Menoh.new(vgg16_dir)
        end
        return  @@vgg16_obj
end