File size: 3,787 Bytes
c18b721
 
9d4d402
 
 
 
c18b721
 
 
 
 
 
60603bc
 
c18b721
 
4f5567f
 
c18b721
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d4d402
c18b721
 
 
 
 
 
 
60603bc
 
 
 
 
720d5d2
456e794
 
 
720d5d2
 
 
c18b721
 
 
 
 
 
 
08633e0
 
c18b721
 
 
 
9d4d402
c18b721
 
 
 
 
 
 
 
 
 
eb26a46
c18b721
9d4d402
c18b721
 
 
 
 
3b27ab8
 
c18b721
 
 
 
 
08633e0
c18b721
 
513b119
 
c18b721
 
 
845b45b
c18b721
 
 
845b45b
 
9d4d402
c18b721
513b119
 
c18b721
 
 
 
3b27ab8
 
c18b721
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#! /usr/bin/env bash

function image_classifier() {
    abcli_image_classifier $@
}

function abcli_image_classifier() {
    local task=$(abcli_unpack_keyword "$1" help)

    if [ "$task" == "help" ] ; then
        abcli_help_line "$abcli_cli_name image_classifier describe object_1" \
            "describe model object_1."
        abcli_help_line "$abcli_cli_name image_classifier install" \
            "install image_classifier."
        abcli_help_line "$abcli_cli_name image_classifier predict object_1 object_2" \
            "run image_classifier model object_1 predict on data object_2."
        abcli_help_line "$abcli_cli_name image_classifier save name_1 object_1 [force]" \
            "[force] save image_classifier in object_1 as name_1."
        abcli_help_line "$abcli_cli_name image_classifier train object_1" \
            "train image_classifier on data object_1."

        if [ "$(abcli_keyword_is $2 verbose)" == true ] ; then
            python3 -m fashion_mnist.image_classifier --help
        fi
        return
    fi

    if [[ $(type -t abcli_image_classifier_$task) == "function" ]] ; then
        abcli_image_classifier_$task ${@:2}
        return
    fi

    if [ "$task" == "describe" ] ; then
        local model_object_name="$2"

        abcli_download $model_object_name

        python3 -m image_classifier \
            describe \
            --model_path $abcli_object_root/$model_object_name \
            ${@:3}

        return
    fi

    if [ "$task" == "install" ] ; then
        conda install -y -c anaconda seaborn
        return
    fi

    if [ "$task" == "release" ] ; then
        local model_name=$(abcli_clarify_arg "$2" image-classifier)

        abcli_huggingface release image-classifier $model_name ${@:3}
        return
    fi

    abcli_log_error "-fashion_mnist: image-classifier: $task: command not found."
}

function abcli_image_classifier_predict() {
    local model_object=$(abcli_clarify_object "$1")
    local data_object=$(abcli_clarify_object "$2")

    abcli_download object $model_object
    abcli_download object $data_object

    abcli_log "image_classifier($model_object).predict($data_object)"

    if [ ! -f "$abcli_object_root/$data_object/test_images.pyndarray" ] ; then
        python3 -m image_classifier \
            preprocess \
            --infer_annotation 0 \
            --model_path $abcli_object_root/$model_object \
            --objects $abcli_object_root/$data_object \
            --output_path $abcli_object_root/$data_object \
            --purpose predict \
            ${@:3}
    fi

    cp -v ../$data_object/*.pyndarray .
    cp -v ../$model_object/image_classifier/model/class_names.json .

    python3 -m image_classifier \
        predict \
        --data_path $abcli_object_root/$data_object \
        --model_path $abcli_object_root/$model_object \
        --output_path $abcli_object_path \
        ${@:4}

        abcli_tag set . image_classifier,predict
}

function abcli_image_classifier_train() {
    local data_object=$(abcli_clarify_object "$1" $abcli_object_name)

    abcli_download object $data_object

    local options=$2
    local do_color=$(abcli_option_int "$options" "color" 0)
    local do_convnet=$(abcli_option_int "$options" "convnet" 0)
    local do_validate=$(abcli_option_int "$options" "validate" 0)

    local extra_args=""
    if [ "$do_validate" == 1 ] ; then
        local extra_args="--epochs 2"
    fi

    abcli_log "image_classifier.train($data_object): $options"

    python3 -m image_classifier \
        train \
        --color $do_color \
        --convnet $do_convnet \
        --data_path $abcli_object_root/$data_object \
        --model_path $abcli_object_path \
        $extra_args \
        ${@:3}

    abcli_tag set . image_classifier,train
}