モデルの精度テスト - 2.5 日本語

Vitis AI ライブラリ ユーザー ガイド (UG1354)

Document ID
UG1354
Release Date
2022-06-15
Version
2.5 日本語

モデルの精度をボード上でテストするには、次の要因を考慮する必要があります。

  • 画像データセット
  • モデル
  • 精度テスト プログラム
  • 画像データセットのグランド トゥルース
  • 精度の抽出比較スクリプト

ResNet50 の例

ここでは、resnet50 の例を示します。

  1. 画像データセットと、データセットのグランド トゥルースを入手します。

    画像データセットの情報は、https://github.com/Xilinx/Vitis-AI/tree/master/model_zoo から入手できます。resnet50 は ImageNet データセットを使用します。

  2. モデルを入手します。
    wget https://www.xilinx.com/bin/public/openDownload?filename=resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz -O resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz
  3. モデルをボードにコピーします。
    scp resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz root@IP_OF_BOARD:~/

    これには、resnet50 および resnet50_acc モデルが含まれます。

  4. ボード上で解凍します。
    tar -xzvf resnet50-zcu102_zcu104_kv260-r2.5.0.tar.gz -C /usr/share/vitis-ai-library/models
  5. 画像データセットのパスと画像名を image.list.txt などのファイルで設定します。

  6. ボード上で精度テスト プログラムを実行します。
    cd ~/Vitis-AI/examples/Vitis-AI-Library/samples/classification/
    ./test_accuracy_classification_mt resnet50 image.list.txt resnet50.image.list.result
    注記: 精度テストは resnet50 モデル以外に resnet50_acc モデルもロードします。これら 2 つのモデルの違いは、モデルの prototxt ファイルの違いのみです。

    精度テスト プログラムの実行が完了すると、結果ファイル resnet50.image.list.result が生成されます。

  7. resnet50.image.list.result をホストにコピーします。
  8. 対応する精度抽出比較スクリプトを実行し、最終的な精度を得ます。
    python evaluation.py image.list.gt resnet50.image.list.result


    次に、evaluation.py のコードを示します。

    
    #!/usr/bin/env python
    
    
    import sys
    # argv[1] must groundtruth
    readfile=open(sys.argv[1], 'r')
    readfile1=open(sys.argv[2], 'r')
    
    
    dic_val={}
    
    
    m = 0
    for line in readfile:
        temp = line.strip('/').split()
        key = temp[0]
        value = int(temp[1])
        dic_val[key] = value
        m = m + 1
    
    
    n = 0
    for line1 in readfile1:
        temp = line1.strip('/').split()
        if temp[0] in dic_val and int(temp[1]) == dic_val[temp[0]]:
            # print int(temp[1]), dic_val[temp[0]]
            n = n + 1
    
    
    #print m
    #print n
    readfile1.close()
    readfile2=open(sys.argv[2], 'r')
    rate = float(n)/float(m)
    print("accuracy of top-5: ", rate)
    
    
    l = 0
    a = 0
    for line2 in readfile2:
        a = a + 1
        if (a%5 != 1) : continue
        temp = line2.strip('/').split()
        if temp[0] in dic_val and int(temp[1]) == dic_val[temp[0]]:
            l = l + 1
    rate1 = float(l)/float(m)
    
    注記: 精度抽出比較スクリプトは、https://github.com/Xilinx/Vitis-AI/tree/master/model_zoo を参照してください。