Class: DSelect

Inherits:
Object
  • Object
show all
Defined in:
lib/deepselect.rb

Constant Summary collapse

@@vgg16_obj =
nil

Class Method Summary collapse

Class Method Details

.compare(f1, f2) ⇒ Object

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



15
16
17
18
19
20
21
22
23
24
25
# 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

.idObject

…? modelの各layerのid



53
54
55
56
57
58
# 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_optObject

モデルの詳細



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 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

.vgg16Object

vgg16返す



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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