defmodule Evision.Zoo.ImageClassification do
@moduledoc """
Image classfication model collection.
"""
@modules %{
"pp_resnet" => Evision.Zoo.ImageClassification.PPResNet,
"pp_resnet_quant" => Evision.Zoo.ImageClassification.PPResNet,
"mobilenet_v1" => Evision.Zoo.ImageClassification.MobileNetV1,
"mobilenet_v1_quant" => Evision.Zoo.ImageClassification.MobileNetV1,
# "mobilenet_v2" => Evision.Zoo.ImageClassification.MobileNetV2,
# "mobilenet_v2_quant" => Evision.Zoo.ImageClassification.MobileNetV2,
}
@module_list Enum.uniq(Map.values(@modules))
def modules, do: @modules
def module_list, do: @module_list
def id, do: "image_classification"
def label, do: "Image Classification"
def smartcell_tasks do
%{
id: id(),
label: label(),
variants: Enum.reduce(module_list(), [], fn module, acc -> module.smartcell_tasks() ++ acc end)
}
end
@doc """
Generate quoted code from smart cell attrs.
"""
@spec to_quoted(map()) :: list()
def to_quoted(%{"task_id" => "image_classification", "variant_id" => variant_id} = attrs) do
module = Map.get(modules(), variant_id)
if module do
module.to_quoted(attrs)
else
[]
end
end
end