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