#![allow(clippy::upper_case_acronyms)]
use crate::download::ModelUrl;
#[derive(Debug, Clone)]
pub enum ImageClassification {
MobileNet,
ResNet(ResNet),
SqueezeNet,
Vgg(Vgg),
AlexNet,
GoogleNet,
CaffeNet,
RcnnIlsvrc13,
DenseNet121,
Inception(InceptionVersion),
ShuffleNet(ShuffleNetVersion),
ZFNet512,
EfficientNetLite4
}
#[derive(Debug, Clone)]
pub enum InceptionVersion {
V1,
V2
}
#[derive(Debug, Clone)]
pub enum ResNet {
V1(ResNetV1),
V2(ResNetV2)
}
#[derive(Debug, Clone)]
pub enum ResNetV1 {
ResNet18,
ResNet34,
ResNet50,
ResNet101,
ResNet152
}
#[derive(Debug, Clone)]
pub enum ResNetV2 {
ResNet18,
ResNet34,
ResNet50,
ResNet101,
ResNet152
}
#[derive(Debug, Clone)]
pub enum Vgg {
Vgg16,
Vgg16Bn,
Vgg19,
Vgg19Bn
}
#[derive(Debug, Clone)]
pub enum ShuffleNetVersion {
V1,
V2
}
impl ModelUrl for ImageClassification {
fn fetch_url(&self) -> &'static str {
match self {
ImageClassification::MobileNet => "https://github.com/onnx/models/raw/main/vision/classification/mobilenet/model/mobilenetv2-7.onnx",
ImageClassification::SqueezeNet => "https://github.com/onnx/models/raw/main/vision/classification/squeezenet/model/squeezenet1.1-7.onnx",
ImageClassification::Inception(version) => version.fetch_url(),
ImageClassification::ResNet(version) => version.fetch_url(),
ImageClassification::Vgg(variant) => variant.fetch_url(),
ImageClassification::AlexNet => "https://github.com/onnx/models/raw/main/vision/classification/alexnet/model/bvlcalexnet-9.onnx",
ImageClassification::GoogleNet => {
"https://github.com/onnx/models/raw/main/vision/classification/inception_and_googlenet/googlenet/model/googlenet-9.onnx"
}
ImageClassification::CaffeNet => "https://github.com/onnx/models/raw/main/vision/classification/caffenet/model/caffenet-9.onnx",
ImageClassification::RcnnIlsvrc13 => "https://github.com/onnx/models/raw/main/vision/classification/rcnn_ilsvrc13/model/rcnn-ilsvrc13-9.onnx",
ImageClassification::DenseNet121 => "https://github.com/onnx/models/raw/main/vision/classification/densenet-121/model/densenet-9.onnx",
ImageClassification::ShuffleNet(version) => version.fetch_url(),
ImageClassification::ZFNet512 => "https://github.com/onnx/models/raw/main/vision/classification/zfnet-512/model/zfnet512-9.onnx",
ImageClassification::EfficientNetLite4 => {
"https://github.com/onnx/models/raw/main/vision/classification/efficientnet-lite4/model/efficientnet-lite4.onnx"
}
}
}
}
impl ModelUrl for InceptionVersion {
fn fetch_url(&self) -> &'static str {
match self {
InceptionVersion::V1 => {
"https://github.com/onnx/models/raw/main/vision/classification/inception_and_googlenet/inception_v1/model/inception-v1-9.onnx"
}
InceptionVersion::V2 => {
"https://github.com/onnx/models/raw/main/vision/classification/inception_and_googlenet/inception_v2/model/inception-v2-9.onnx"
}
}
}
}
impl ModelUrl for ResNet {
fn fetch_url(&self) -> &'static str {
match self {
ResNet::V1(variant) => variant.fetch_url(),
ResNet::V2(variant) => variant.fetch_url()
}
}
}
impl ModelUrl for ResNetV1 {
fn fetch_url(&self) -> &'static str {
match self {
ResNetV1::ResNet18 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet18-v1-7.onnx",
ResNetV1::ResNet34 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet34-v1-7.onnx",
ResNetV1::ResNet50 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet50-v1-7.onnx",
ResNetV1::ResNet101 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet101-v1-7.onnx",
ResNetV1::ResNet152 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet152-v1-7.onnx"
}
}
}
impl ModelUrl for ResNetV2 {
fn fetch_url(&self) -> &'static str {
match self {
ResNetV2::ResNet18 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet18-v2-7.onnx",
ResNetV2::ResNet34 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet34-v2-7.onnx",
ResNetV2::ResNet50 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet50-v2-7.onnx",
ResNetV2::ResNet101 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet101-v2-7.onnx",
ResNetV2::ResNet152 => "https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet152-v2-7.onnx"
}
}
}
impl ModelUrl for Vgg {
fn fetch_url(&self) -> &'static str {
match self {
Vgg::Vgg16 => "https://github.com/onnx/models/raw/main/vision/classification/vgg/model/vgg16-7.onnx",
Vgg::Vgg16Bn => "https://github.com/onnx/models/raw/main/vision/classification/vgg/model/vgg16-bn-7.onnx",
Vgg::Vgg19 => "https://github.com/onnx/models/raw/main/vision/classification/vgg/model/vgg19-7.onnx",
Vgg::Vgg19Bn => "https://github.com/onnx/models/raw/main/vision/classification/vgg/model/vgg19-bn-7.onnx"
}
}
}
impl ModelUrl for ShuffleNetVersion {
fn fetch_url(&self) -> &'static str {
match self {
ShuffleNetVersion::V1 => "https://github.com/onnx/models/raw/main/vision/classification/shufflenet/model/shufflenet-9.onnx",
ShuffleNetVersion::V2 => "https://github.com/onnx/models/raw/main/vision/classification/shufflenet/model/shufflenet-v2-10.onnx"
}
}
}