FC2カウンター FPGAの部屋 Vitis
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

”実践的!FPGA開発セミナー vol.16”のスライド PDF を公開します

”実践的!FPGA開発セミナー vol.16”のスライド PDF を公開します。

今日は時間の関係上、すべてのスライドを説明できないかもしれません?もしくはさらっと流す可能性があります。
スライドには該当するFPGAの部屋のブログ記事へのリンクが張ってあるので、リンクをクリックしてより詳しい説明をご覧ください。

本日はよろしくお願いいたします。
  1. 2022年11月24日 17:00 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

”実践的!FPGA開発セミナー vol.16”で発表します

今日、”実践的!FPGA開発セミナー vol.16”が開催されますが、そこで私が発表します。
皆さん、よろしくお願いいたします。

題は、”Vitisをエッジで思う存分活用したい。。。w”です。近頃ブログで書いている Vitis のアクセラレーション・アプリケーションの話題をお話ししたいと思います。

ふるってご参加ください。まだ申し込み可能かもしれません?
なお、午後 5 時ころに今日の発表スライド PDF を公開します。
  1. 2022年11月24日 04:51 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する15

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する14”の続き。

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加してみたいということで、前回は、できあがった compiled ディレクトリを KV260 の Petalinux 2022.1 にアップロードした。アプリケーション・ソフトウエアを git clone し、ビルドした。古いモジュールをアンロードして、dpuprj をロードした。アプリケーション・ソフトウエアを実行したところ成功した。今回は、前回までで”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”のチュートリアルは成功した。そこで、kv260_median アクセラレーション・プラットフォームに含まれるメディアン・フィルタを使って、ノイズを除去してから YOLOV4 で物体を認識してみたところ成功した。

前回使用したソフトウエアは vitis_ai_dpu_yolo/demo_yolov4.cpp だが、これをベースに”kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる23”の median_pf.cpp のコードを追加して、median_demo_yolov4.cpp を作成した。

build.sh は demo_yolov4 を median_demo_yolov4 に置換して、使用する。

KV260 の Petalinux 2022.1 の ~/kv260_median/dpu ディレクトリに vitis_ai_dpu_median_yolo ディレクトリを作成した。
kv260_median_DPU_113_221123.png

vitis_ai_dpu_median_yolo ディレクトリに median_demo_yolov4.cpp と変更した build.sh を用意した。
ノイズ入りの test2.jpg をコピーした。

vitis_ai_dpu_median_yolo ディレクトリに u-dma-buf.ko を用意した。

ビルドを行った。
cd ~/kv260_median/dpu/vitis_ai_dpu_median_yolo
sh build.sh


median_demo_yolov4 実行形式ファイルが生成された。

アプリケーションを動作させるには /run/media/mmcblk0p1/ 以下にも dpu.xclbin が存在している必要があるそうなのでコピーする。
sudo mkdir -p /run/media/mmcblk0p1/
sudo cp dpu.xclbin /run/media/mmcblk0p1/


u-dma-buf をロードする。
sudo insmod u-dma-buf.ko udmabuf0=3000000

すでにロードされているハードウェアをアンロードして、dpuprj をロードする。
sudo xmutil unloadapp
sudo xmutil loadapp dpuprj


ビルドで作成された demo_yolo4 を実行した。
sudo ./median_demo_yolov4 ../compiled/yolov4_leaky_416_tf.prototxt ../compiled/yolov4_leaky_416_tf.xmodel test2.jpg image
成功して result.jpg が生成された。
kv260_median_DPU_114_221123.png

xilinx-k26-starterkit-20221:~/kv260_median/dpu/vitis_ai_dpu_median_yolo$ sudo ./median_demo_yolov4 ../compiled/yolov4_leaky_416_tf.prototxt ../compiled/yolov4_leaky_416_tf.xmodel test2.jpg image
../compiled/yolov4_leaky_416_tf.prototxt ../compiled/yolov4_leaky_416_tf.xmodel test2.jpgModel Initialize Done
phys_addr = 40000000
in_img_total_bytes = 1441792
tvmonitor 0.985391 151.825 451.825 50.2466 335.823
tvmonitor 0.599225 0.870854 197.449 150.53 287.931
mouse 0.939509 462.855 526.316 313.673 346.846
mouse 0.877212 624.63 663.122 234.817 254.938
mouse 0.318674 621.84 666.77 227.559 259.926
keyboard 0.998828 277.435 500.512 314.605 444.413
cell phone 0.332537 354.317 476.452 415.798 503.778


kv260_median_DPU_115_221123.png

result.jpg を示す。
メガネケースは cell phone として認識されているようだ。
kv260_median_DPU_116_221123.jpg

median_demo_yolov4.cpp を貼っておく。公開を許可していただいた lp6m さんに感謝いたします。

// median_demo_yolo4.cpp
// 2022/11/23
// Combined demo_yolo4.cpp and median_pf.cpp.
// https://github.com/lp6m/vitis_ai_dpu_yolo/blob/master/demo_yolov4.cpp
// https://marsee101.blog.fc2.com/blog-entry-5747.html

#include <glog/logging.h>
#include <google/protobuf/text_format.h>

#include <cmath>
#include <iostream>
#include <numeric>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <vitis/ai/dpu_task.hpp>
#include <vitis/ai/nnpp/yolov3.hpp>
#include <fstream>
#include <map>
#include <vector>
#include <math.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>

#define BLOCK_SIZE    4096
#define MIDEAIN_REG_ADDR        0x80020000
#define AXI_DMA_REG_ADDR        0x80010000
#define IMAGE_WIDTH         800
#define IMAGE_HEIGHT            600
#define MAT_IMGAGE_BUF      (IMAGE_WIDTH*IMAGE_HEIGHT*3)

#define MM2S_CONTROL_REG    0x00
#define MM2S_STATUS_REG (0x4 >> 2)
#define MM2S_START_ADDR (0x18 >> 2)
#define MM2S_LENGTH_REG (0x28 >> 2)
#define S2MM_CONTROL_REG    (0x30 >> 2)
#define S2MM_STATUS_REG (0x34 >> 2)
#define S2MM_DESTINATION_ADDR   (0x48 >> 2)
#define S2MM_LENGTH_REG (0x58 >> 2)
// bits 1 - idle
#define MM2S_IDLE_MASK  0x2
#define S2MM_IDLE_MASK  0x2

#define MEDIAN_CONTROL      0x00
#define MEDIAN_FUNCTION_R   (0x18 >> 2)
#define MEDIAN_ROW_SIZE     (0x20 >> 2)
#define MEDIAN_COL_SIZE     (0x28 >> 2)

volatile uint32_t *reg;

using namespace std;
using namespace cv;

// The parameters of yolov3_voc, each value could be set as actual needs.
// Such format could be refer to the prototxts in /etc/dpu_model_param.d.conf/.

const string readFile(const char *filename){
  ifstream ifs(filename);
  return string(istreambuf_iterator<char>(ifs),
                istreambuf_iterator<char>());
}

class YoloRunner{
  public:
    unique_ptr<vitis::ai::DpuTask> task;
    vitis::ai::proto::DpuModelParam modelconfig;
    cv::Size model_input_size;
    vector<vitis::ai::library::InputTensor> input_tensor;
    struct bbox{
      int label;
      float xmin;
      float ymin;
      float width;
      float height;
      float score;
      bbox(vitis::ai::YOLOv3Result::BoundingBox yolobbox, float img_width, float img_height){
        this->label = yolobbox.label;
        this->score = yolobbox.score;
        // does not clamp here
        this->xmin = yolobbox.x * img_width;
        this->ymin = yolobbox.y * img_height;
        this->width = yolobbox.width * img_width;
        this->height = yolobbox.height * img_height;
      }
    };

  public: YoloRunner(const char* modelconfig_path, const char* modelfile_path){
    const string config_str = readFile(modelconfig_path);
    auto ok = google::protobuf::TextFormat::ParseFromString(config_str, &(this->modelconfig));
    if (!ok) {
      cerr << "Set parameters failed!" << endl;
      abort();
    }
    this->task = vitis::ai::DpuTask::create(modelfile_path);
    this->input_tensor = task->getInputTensor(0u);
    int width = this->input_tensor[0].width;
    int height = this->input_tensor[0].height;
    this->model_input_size = cv::Size(width, height);
    this->task->setMeanScaleBGR({0.0f, 0.0f, 0.0f},
                        {0.00390625f, 0.00390625f, 0.00390625f});
  }
  private: cv::Mat Preprocess(cv::Mat img){
    cv::Mat resized_img;
    cv::resize(img, resized_img, this->model_input_size);
    return resized_img;
  }
  public: vector<bbox> Run(cv::Mat img){
    cv::Mat resized_img = this->Preprocess(img);
    vector<int> input_cols = {img.cols};
    vector<int> input_rows = {img.rows};
    vector<cv::Mat> inputs = {resized_img};
    task->setImageRGB(inputs);
    task->run(0);

    auto output_tensor = task->getOutputTensor(0u);
    auto results = vitis::ai::yolov3_post_process(
        input_tensor, output_tensor, this->modelconfig, input_cols, input_rows);
    auto result = results[0]; //batch_size is 1
    vector<bbox> bboxes;
    for(auto& yolobbox: result.bboxes){
      bboxes.push_back(bbox(yolobbox, img.cols, img.rows));
    }
    return bboxes;
  }

};

std::string get_basename(std::string& path) {
  int l = path.find_last_of('/')+1;
  int r = path.find_last_of('.');
    return path.substr(l, r-l);
}

map<string, string> bbox_to_map(YoloRunner::bbox bbox, int frame_id){
  map<string, string> res;
  res["frame_id"] = to_string(frame_id);
  res["prob"] = to_string(bbox.score);
  res["x"] = to_string(bbox.xmin);
  res["y"] = to_string(bbox.ymin);
  res["width"] = to_string(bbox.width);
  res["height"] = to_string(bbox.height);
  return res;
}

int main(int argc, char* argv[]) {
    int fd;
    volatile uint32_t *median_reg, *axi_dma_reg;
    volatile uint8_t *pict_buf;
    uint32_t phy_addr;
    uint32_t phy_addr_base;
    int addr, wd;
    uint32_t write_data;
    cv::Mat in_img, median_img;
    int fd_udmabuf;
    u_int32_t fd_paddr;
    unsigned char  attr[1024];
    unsigned long  phys_addr;

    if (argc != 5) {
    cerr << "usage ./a.out config(.prototxt) modelfile(.xmodel) image(.jpg) image" << endl;
    }
    char* configfile  = argv[1];
    char* modelfile = argv[2];
    string img_or_video_file = string(argv[3]);

    cout << configfile << " " << modelfile << " " << img_or_video_file;
    auto runner = YoloRunner(configfile, modelfile);
    cout << "Model Initialize Done" << endl;
    std::string img_or_video_mode = std::string(argv[4]);
    if (img_or_video_mode == "image") {
        in_img = cv::imread(img_or_video_file);
        median_img.create(cv::Size(in_img.cols, in_img.rows), CV_8UC3);

        fd = open("/dev/mem", O_RDWR | O_SYNC);
        if (fd == -1){
            fprintf(stderr, "/dev/mem open error\n");
            exit(-1);
        }
        
        // median_filter registers
        median_reg = (uint32_t *)mmap(NULL, BLOCK_SIZE,
                    PROT_READ | PROT_WRITE, MAP_SHARED,
                    fd, MIDEAIN_REG_ADDR );
        if ((int64_t)median_reg == -1){
            fprintf(stderr,"/dev/mem map error for median_filter registers\n");
            exit(-1);
        }

        // axi_dma registers
        axi_dma_reg = (uint32_t *)mmap(NULL, BLOCK_SIZE,
                    PROT_READ | PROT_WRITE, MAP_SHARED,
                    fd, AXI_DMA_REG_ADDR );
        if ((int64_t)axi_dma_reg == -1){
            fprintf(stderr,"/dev/mem map error for axi_dma registers\n");
            exit(-1);
        }
        
        // udmabuf0
        fd_udmabuf = open("/dev/udmabuf0", O_RDWR | O_SYNC); // frame_buffer, The chache is disabled. 
        if (fd_udmabuf == -1){
            fprintf(stderr, "/dev/udmabuf0 open errorn");
            exit(-1);
        }

        // phys_addr of udmabuf0
        fd_paddr = open("/sys/class/u-dma-buf/udmabuf0/phys_addr", O_RDONLY);
        if (fd_paddr == -1){
            fprintf(stderr, "/sys/class/u-dma-buf/udmabuf0/phys_addr open errorn");
            exit(-1);
        }
        read(fd_paddr, (void *)attr, 1024);
        sscanf((const char *)attr, "%lx", &phys_addr);  
        close(fd_paddr);
        printf("phys_addr = %x\n", (unsigned int)phys_addr);

        uint32_t total_bytes = in_img.total()*in_img.channels();
        uint32_t in_img_total_bytes = (in_img.total()*in_img.channels()+4096) & 0xfffff000; // 4k byte boundary
        printf("in_img_total_bytes = %d\n", in_img_total_bytes);

        pict_buf = (volatile uint8_t *)mmap(NULL, in_img_total_bytes*2, PROT_READ|PROT_WRITE, MAP_SHARED, fd_udmabuf, 0);
        if (pict_buf == MAP_FAILED){
            fprintf(stderr, "org_mat mmap error\n");
            exit(-1);
        }
        
        // Copy Mat data from in_img to org_mat
        uint8_t *in_img_data = in_img.data;
        for(int i=0; i<total_bytes; i++){
            pict_buf[i] = in_img_data[i];
        }
        
        // Halting Run DMA
        axi_dma_reg[MM2S_CONTROL_REG] = 1; // MM2S DMA Controll Reg. Run
        axi_dma_reg[S2MM_CONTROL_REG] = 1; // S2MM DMA Control Reg. Run
        
        uint32_t median_mat_addr = (uint32_t)phys_addr+in_img_total_bytes;
        uint32_t org_mat_addr = (uint32_t)phys_addr;
        // axi dma settings
        axi_dma_reg[S2MM_DESTINATION_ADDR] = median_mat_addr;
        axi_dma_reg[MM2S_START_ADDR] = org_mat_addr;
        axi_dma_reg[S2MM_LENGTH_REG] = total_bytes;
        axi_dma_reg[MM2S_LENGTH_REG] = total_bytes;
        
        // median filter start
        median_reg[MEDIAN_COL_SIZE] = in_img.cols;
        median_reg[MEDIAN_ROW_SIZE] = in_img.rows;
        median_reg[MEDIAN_FUNCTION_R] = 3;  // median filter for AXI DMA
        median_reg[MEDIAN_CONTROL] = 1;         // ap_start
        
        // DMA completion detection
        uint32_t mm2s_status_reg = axi_dma_reg[MM2S_STATUS_REG] & MM2S_IDLE_MASK;
        while(mm2s_status_reg != MM2S_IDLE_MASK){
            mm2s_status_reg = axi_dma_reg[MM2S_STATUS_REG] & MM2S_IDLE_MASK;
        }
        
        uint32_t s2mm_status_reg = axi_dma_reg[S2MM_STATUS_REG] & S2MM_IDLE_MASK;
        while(s2mm_status_reg != S2MM_IDLE_MASK){
            s2mm_status_reg = axi_dma_reg[S2MM_STATUS_REG] & S2MM_IDLE_MASK;
        }
        
        // Copy median image data from median_mat to megian_img
        uint8_t *median_img_data = median_img.data;
        for(int i=0; i<total_bytes; i++){
            median_img_data[i] = pict_buf[in_img_total_bytes+i];
        }
        cv::Mat img;
        resize(median_img, img, cv::Size(), 768.0/median_img.cols, 576.0/median_img.rows);

        vector<YoloRunner::bbox> bboxes = runner.Run(median_img);
        string label_names[] = {"person", "bicycle", "car", "motorbike", "aeroplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "sofa", "pottedplant", "bed", "diningtable", "toilet", "tvmonitor", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"};
        for (auto& box : bboxes) {
            int label = box.label;
            float confidence = box.score;
            float xmin = max(0.0f, box.xmin);
            float ymin = max(0.0f, box.ymin);
            float xmax = min(box.xmin + box.width, (float)img.cols-1.0f);
            float ymax = min(box.ymin + box.height, (float)img.rows-1.0f);
            cout << label_names[box.label] << " " << box.score << " " << xmin << " " << xmax << " " << ymin << " " << ymax << endl;
            rectangle(img, Point(xmin, ymin), Point(xmax, ymax),
                    Scalar(0, 255, 0), 3, 1, 0);
    }
    imwrite("result.jpg", img);
    } else {
    cerr << "unknown mode :" << img_or_video_mode << endl;
    }


    return 0;
}


変更した build.sh を貼っておく。

#
# Copyright 2019 Xilinx Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# 2022/11/23 : Changed demo_yolov4 to median_demo_yolov4. by marsee

result=0 && pkg-config --list-all | grep opencv4 && result=1
if [ $result -eq 1 ]; then
    OPENCV_FLAGS=$(pkg-config --cflags --libs-only-L opencv4)
else
    OPENCV_FLAGS=$(pkg-config --cflags --libs-only-L opencv)
fi

CXX=${CXX:-g++}
$CXX -std=c++17 -O3 -I. -o median_demo_yolov4 median_demo_yolov4.cpp -lglog -lvitis_ai_library-xnnpp -lvitis_ai_library-model_config -lprotobuf -lvitis_ai_library-dpu_task ${OPENCV_FLAGS} -lopencv_core -lopencv_video -lopencv_videoio -lopencv_imgproc -lopencv_imgcodecs -lopencv_highgui

  1. 2022年11月23日 07:08 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する14

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する13”の続き。

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加してみたいということで、前回は、コンパイルと prototxtの用意 を行った。今回は、できあがった compiled ディレクトリを KV260 の Petalinux 2022.1 にアップロードした。アプリケーション・ソフトウエアを git clone し、ビルドした。古いモジュールをアンロードして、dpuprj をロードした。アプリケーション・ソフトウエアを実行したところ成功した。

参考にさせていただくのは、”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”だ。

できあがった Vitis-AI/tf_yolov4_coco_416_416_60.3G_2.5/compiled ディレクトリごと FileZIlla で KV260 の Petalinux 2022.1 の ~/kv260_median/dpu ディレクトリに SFTP でアップロードした。
kv260_median_DPU_106_221121.png

なお、~/kv260_median/dpu ディレクトリは”kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する9”で作成済みだ。

ビルド用ツールをインストールした。
sudo dnf install -y cmake g++ g++-symlinks gcc-symlinks binutils pkgconfig git
すでにインストールしてあったモジュールも多いので、pkgconfig と git がインストールされた。
kv260_median_DPU_107_221121.png

アプリケーションを動作させるには /run/media/mmcblk0p1/ 以下にも dpu.xclbin が存在している必要があるそうなのでコピーする。
sudo mkdir -p /run/media/mmcblk0p1/
sudo cp dpu.xclbin /run/media/mmcblk0p1/

kv260_median_DPU_108_221121.png

lp6m さんのアプリケーション・ソフトウエアを git clone して、ビルドする。
git clone https://github.com/lp6m/vitis_ai_dpu_yolo
cd vitis_ai_dpu_yolo
sh build.sh

kv260_median_DPU_109_221121.png

ロードされているモジュールをアンロードして、dpuprj をロードした。
sudo xmutil unloadapp
sudo xmutil loadapp dpuprj


ビルドで作成された demo_yolo4 を実行した。
./demo_yolov4 ../compiled/yolov4_leaky_416_tf.prototxt ../compiled/yolov4_leaky_416_tf.xmodel dog.jpg image
成功して result.jpg が生成された。
kv260_median_DPU_110_221121.png

~/kv260_median/dpu/vitis_ai_dpu_yolo ディレクトリの中身を示す。
kv260_median_DPU_111_221121.png

result.jpg を示す。
kv260_median_DPU_112_221121.jpg

demo_yolo4 実行時のログを貼っておく。

xilinx-k26-starterkit-20221:~/kv260_median/dpu/vitis_ai_dpu_yolo$ ./demo_yolov4 ../compiled/yolov4_leaky_416_tf.prototxt ../compiled/yolov4_leaky_416_tf.xmodel dog.jpg image
../compiled/yolov4_leaky_416_tf.prototxt ../compiled/yolov4_leaky_416_tf.xmodel dog.jpgModel Initialize Done
bicycle 0.951898 132.472 550.138 140.873 414.652
car 0.763319 458.46 700.775 71.8596 174.588
truck 0.558414 472.915 687.069 72.4816 169.532
dog 0.988311 133.963 300.746 210 548.74

  1. 2022年11月22日 04:21 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する13

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する12”の続き。

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加してみたいということで、前回は、Tensorflowモデルの生成と量子化を行った。今回は、コンパイルと prototxtの用意 を行った。

参考にさせていただくのは、”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”だ。

kv260_median_platform/kv260_median_pkg/dpuprj_system_hw_link/Hardware/dpu.build/link/vivado/vpl/prj/prj.gen/sources_1/bd/system/ip/system_DPUCZDX8G_1_0/arch.json を
kv260_median_DPU_100_221120.png

DNN/Vitis-AI/kv260_my arch.json としてコピーした。
kv260_median_DPU_101_221120.png

Vitis-AI /workspace/tf_yolov4_coco_416_416_60.3G_2.5 ディレクトリでコンパイルを行う。
vai_c_tensorflow -f ./quantized/quantize_results_416/quantize_eval_model.pb -a /workspace/kv260_myarch.json -o ./compiled -n yolov4_leaky_416_tf
kv260_median_DPU_102_221120.png

コンパイルが成功して、Vitis-AI/tf_yolov4_coco_416_416_60.3G_2.5/compiled ディレクトリに yolov4_leaky_416_tf.xmodel が生成された。
kv260_median_DPU_103_221120.png

yolov4_leaky_416_tf.xmodel を netron で見た。
netron は Web ブラウザからテストすることができる。
kv260_median_DPU_105_221120.png

prototxt を用意する
Vitis-AI/yolov4_leaky_416_tf/yolov4_leaky_416_tf.prototxt を Vitis-AI/tf_yolov4_coco_416_416_60.3G_2.5/compiled ディレクトリにコピーして編集する。
cp ../yolov4_leaky_416_tf/yolov4_leaky_416_tf.prototxt ./compiled/yolov4_leaky_416_tf.prototxt

Vitis-AI/tf_yolov4_coco_416_416_60.3G_2.5/compiled/yolov4_leaky_416_tf.prototxt を編集した。
kv260_median_DPU_104_221120.png

name: "yolov4"
kernel {
    mean: 0.0
    mean: 0.0
    mean: 0.0
    scale: 0.00390625
    scale: 0.00390625
    scale: 0.00390625
}
model_type : YOLOv3
yolo_v3_param {
    num_classes: 80
    anchorCnt: 3
    layer_name: "109"
    layer_name: "101"
    layer_name: "93"
    conf_threshold: 0.3
    nms_threshold: 0.6
    biases: 10 
    biases: 13
    biases: 16
    biases: 30
    biases: 33
    biases: 23
    biases: 30
    biases: 61
    biases: 62
    biases: 45
    biases: 59
    biases: 119
    biases: 116
    biases: 90
    biases: 156
    biases: 198
    biases: 373
    biases: 326
    test_mAP: false
}


現在の Vitis-AI/tf_yolov4_coco_416_416_60.3G_2.5/compiled ディレクトリを示す。
kv260_median_DPU_106_221120.png
  1. 2022年11月21日 05:23 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する12

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する11”の続き。

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加してみたいということで、前回は、エラーを解消して、続きの環境の設定と量子化および評価に使用するCOCOデータセットをダウンロードして変換した。今回は、Tensorflowモデルの生成と量子化を行う。

参考にさせていただくのは、”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”だ。

Tensorflowモデルの生成を行う。
python tools/model_converter/convert.py --yolo4_reorder --fixed_input_shape yolov4-leaky-416.cfg yolov4-leaky-416.weights yolov4-leaky-416.h5
エラーが発生した。

FileNotFoundError: [Errno 2] No such file or directory: 'yolov4-leaky-416.weights'


yolov4-leaky-416.weights が何処にあるか検索したところ、Vitis-AI/tf_yolov4_coco_416_416_60.3G_2.5/float にあった。
kv260_median_DPU_90_221119.png

次に示すコマンドを実行した。
python tools/model_converter/convert.py --yolo4_reorder --fixed_input_shape ../float/yolov4-leaky-416.cfg ../float/yolov4-leaky-416.weights yolov4-leaky-416.h5
実行が成功して、Keras の yolov4-leaky-416.h5 モデルが生成された。
kv260_median_DPU_91_221119.png

python tools/model_converter/keras_to_tensorflow.py --input_model yolov4-leaky-416.h5 --output_model yolov4-leaky-416.pb
実行したところ、エラーが発生した。

AttributeError: 'str' object has no attribute 'decode'


kv260_median_DPU_92_221119.png

このエラーは”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”に対処方法が記載されていたので、対処を行った。
pip install install h5py==2.10.0
kv260_median_DPU_93_221119.png

再度、
python tools/model_converter/keras_to_tensorflow.py --input_model yolov4-leaky-416.h5 --output_model yolov4-leaky-416.pb
成功した。
kv260_median_DPU_94_221119.png

yolov4-leaky-416.pb が生成された。
kv260_median_DPU_95_221119.png

量子化を行う。
conda activate vitis-ai-tensorflow
cd quantize
bash quantize_416.sh

エラーが発生した。

ValueError: ('Fail to import input_fn, error: ', ModuleNotFoundError("No module named 'imgaug'",))


kv260_median_DPU_96_221119.png

imgaug をインストールする必要があるようだ。
pip install imgaug
kv260_median_DPU_97_221119.png

もう一度、
bash quantize_416.sh
を実行した。
11時間44分掛かって終了した。
kv260_median_DPU_98_221120.png

Vitis-AI/tf_yolov4_coco_416_416_60.3G_2.5/quantized/quantize_results_416/quantize_eval_model.pb が生成された。
kv260_median_DPU_99_221120.png
  1. 2022年11月20日 04:04 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する11

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する10”の続き。

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加してみたいということで、前回は、tf_yolov4_coco_416_416_60.3G_2.5.zip と yolov4_leaky_416_tf-zcu102_zcu104_kv260-r2.5.0.tar.gz を wget して、展開した。Vitis-AI の docker を起動して、conda を実行したところで、エラーになってしまった。今回は、エラーを解消して、続きの環境の設定と量子化および評価に使用するCOCOデータセットをダウンロードして変換した。

参考にさせていただくのは、”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”だ。

Anaconda備忘録”によると conda のコンフィグ・ファイルの .condarc があるようなのだ。
conda config --show-sources
で .condarc を見た。ログを示す。

Vitis-AI /workspace/tf_yolov4_coco_416_416_60.3G_2.5 > conda config --show-sources
==> /home/vitis-ai-user/.condarc <==
channels:
  - defaults
  - http://artifactory/artifactory/vitis-ai-conda-release


下の URL が邪魔なようなので、vi を起動して削除する。
vi /home/vitis-ai-user/.condarc
kv260_median_DPU_76_221118.png

URL を削除した。
kv260_median_DPU_77_221118.png

vi を終了した。
kv260_median_DPU_78_221118.png

もう一度
conda create -n yolov4-tf1 python=3.6
したら成功した。
kv260_median_DPU_79_221118.png

source activate yolov4-tf1
kv260_median_DPU_79_221119.png

pip install cython
kv260_median_DPU_80_221119.png

pip install -r code/requirements.txt
kv260_median_DPU_81_221119.png

code ディレクトリに行く。
cd code
bash download_data.sh

kv260_median_DPU_82_221119.png

bash convert_data.sh
エラーが発生した。

python: can't open file 'code/tools/dataset_converter/coco_annotation_val.py': [Errno 2] No such file or directory
Save result to data


kv260_median_DPU_83_221119.png

convert_data.sh を見たところ、

CODEBASE_DIR=code

がおかしいようだった。
kv260_median_DPU_85_221119.png

code/tools/dataset_converter/coco_annotation_val.py だが、すでに code ディレクトリにいるので、

CODEBASE_DIR=.

で良いのではないだろうか?
kv260_median_DPU_86_221119.png

convert_data.sh を修正した。
kv260_median_DPU_87_221119.png

もう一度、
bash convert_data.sh
今度は成功だ。
kv260_median_DPU_88_221119.png

conda create -n yolov4-tf1 python=3.6 実行時のログを示す。

Vitis-AI /workspace/tf_yolov4_coco_416_416_60.3G_2.5 > conda create -n yolov4-tf1 python=3.6
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /opt/vitis_ai/conda/envs/yolov4-tf1

  added / updated specs:
    - python=3.6


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    _libgcc_mutex-0.1          |             main           3 KB
    _openmp_mutex-5.1          |            1_gnu          21 KB
    ca-certificates-2022.10.11 |       h06a4308_0         124 KB
    certifi-2021.5.30          |   py36h06a4308_0         139 KB
    ld_impl_linux-64-2.38      |       h1181459_1         654 KB
    libffi-3.3                 |       he6710b0_2          50 KB
    libgcc-ng-11.2.0           |       h1234567_1         5.3 MB
    libgomp-11.2.0             |       h1234567_1         474 KB
    libstdcxx-ng-11.2.0        |       h1234567_1         4.7 MB
    ncurses-6.3                |       h5eee18b_3         781 KB
    openssl-1.1.1s             |       h7f8727e_0         3.6 MB
    pip-21.2.2                 |   py36h06a4308_0         1.8 MB
    python-3.6.13              |       h12debd9_1        32.5 MB
    readline-8.2               |       h5eee18b_0         357 KB
    setuptools-58.0.4          |   py36h06a4308_0         788 KB
    sqlite-3.39.3              |       h5082296_0         1.1 MB
    tk-8.6.12                  |       h1ccaba5_0         3.0 MB
    wheel-0.37.1               |     pyhd3eb1b0_0          33 KB
    xz-5.2.6                   |       h5eee18b_0         394 KB
    zlib-1.2.13                |       h5eee18b_0         103 KB
    ------------------------------------------------------------
                                           Total:        55.9 MB

The following NEW packages will be INSTALLED:

  _libgcc_mutex      pkgs/main/linux-64::_libgcc_mutex-0.1-main
  _openmp_mutex      pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu
  ca-certificates    pkgs/main/linux-64::ca-certificates-2022.10.11-h06a4308_0
  certifi            pkgs/main/linux-64::certifi-2021.5.30-py36h06a4308_0
  ld_impl_linux-64   pkgs/main/linux-64::ld_impl_linux-64-2.38-h1181459_1
  libffi             pkgs/main/linux-64::libffi-3.3-he6710b0_2
  libgcc-ng          pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1
  libgomp            pkgs/main/linux-64::libgomp-11.2.0-h1234567_1
  libstdcxx-ng       pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1
  ncurses            pkgs/main/linux-64::ncurses-6.3-h5eee18b_3
  openssl            pkgs/main/linux-64::openssl-1.1.1s-h7f8727e_0
  pip                pkgs/main/linux-64::pip-21.2.2-py36h06a4308_0
  python             pkgs/main/linux-64::python-3.6.13-h12debd9_1
  readline           pkgs/main/linux-64::readline-8.2-h5eee18b_0
  setuptools         pkgs/main/linux-64::setuptools-58.0.4-py36h06a4308_0
  sqlite             pkgs/main/linux-64::sqlite-3.39.3-h5082296_0
  tk                 pkgs/main/linux-64::tk-8.6.12-h1ccaba5_0
  wheel              pkgs/main/noarch::wheel-0.37.1-pyhd3eb1b0_0
  xz                 pkgs/main/linux-64::xz-5.2.6-h5eee18b_0
  zlib               pkgs/main/linux-64::zlib-1.2.13-h5eee18b_0


Proceed ([y]/n)? y


Downloading and Extracting Packages
wheel-0.37.1         | 33 KB     | ##################################### | 100% 
setuptools-58.0.4    | 788 KB    | ##################################### | 100% 
libgcc-ng-11.2.0     | 5.3 MB    | ##################################### | 100% 
pip-21.2.2           | 1.8 MB    | ##################################### | 100% 
sqlite-3.39.3        | 1.1 MB    | ##################################### | 100% 
ncurses-6.3          | 781 KB    | ##################################### | 100% 
libffi-3.3           | 50 KB     | ##################################### | 100% 
zlib-1.2.13          | 103 KB    | ##################################### | 100% 
openssl-1.1.1s       | 3.6 MB    | ##################################### | 100% 
_openmp_mutex-5.1    | 21 KB     | ##################################### | 100% 
readline-8.2         | 357 KB    | ##################################### | 100% 
python-3.6.13        | 32.5 MB   | ##################################### | 100% 
_libgcc_mutex-0.1    | 3 KB      | ##################################### | 100% 
ca-certificates-2022 | 124 KB    | ##################################### | 100% 
ld_impl_linux-64-2.3 | 654 KB    | ##################################### | 100% 
libgomp-11.2.0       | 474 KB    | ##################################### | 100% 
libstdcxx-ng-11.2.0  | 4.7 MB    | ##################################### | 100% 
tk-8.6.12            | 3.0 MB    | ##################################### | 100% 
certifi-2021.5.30    | 139 KB    | ##################################### | 100% 
xz-5.2.6             | 394 KB    | ##################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate yolov4-tf1
#
# To deactivate an active environment, use
#
#     $ conda deactivate


pip install -r code/requirements.txt 実行時のログを示す。

(yolov4-tf1) Vitis-AI /workspace/tf_yolov4_coco_416_416_60.3G_2.5 > pip install -r code/requirements.txt
Collecting numpy
  Downloading numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl (14.8 MB)
     |████████████████████████████████| 14.8 MB 12.1 MB/s            
Requirement already satisfied: setuptools in /home/vitis-ai-user/.local/lib/python3.6/site-packages (from -r code/requirements.txt (line 2)) (59.6.0)
Collecting scipy
  Downloading scipy-1.5.4-cp36-cp36m-manylinux1_x86_64.whl (25.9 MB)
     |████████████████████████████████| 25.9 MB 12.1 MB/s            
Collecting scikit-learn==0.20.3
  Downloading scikit_learn-0.20.3-cp36-cp36m-manylinux1_x86_64.whl (5.4 MB)
     |████████████████████████████████| 5.4 MB 11.0 MB/s            
Collecting opencv-python==4.2.0.32
  Downloading opencv_python-4.2.0.32-cp36-cp36m-manylinux1_x86_64.whl (28.2 MB)
     |████████████████████████████████| 28.2 MB 12.1 MB/s            
Collecting opencv-contrib-python==4.2.0.32
  Downloading opencv_contrib_python-4.2.0.32-cp36-cp36m-manylinux1_x86_64.whl (34.2 MB)
     |████████████████████████████████| 34.2 MB 51 kB/s              
Collecting tensorflow-gpu==1.15.2
  Downloading tensorflow_gpu-1.15.2-cp36-cp36m-manylinux2010_x86_64.whl (411.0 MB)
     |████████████████████████████████| 411.0 MB 18 kB/s              
Collecting matplotlib
  Downloading matplotlib-3.3.4-cp36-cp36m-manylinux1_x86_64.whl (11.5 MB)
     |████████████████████████████████| 11.5 MB 601 kB/s             
Collecting tqdm
  Downloading tqdm-4.64.1-py2.py3-none-any.whl (78 kB)
     |████████████████████████████████| 78 kB 955 kB/s             
Collecting pillow
  Downloading Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)
     |████████████████████████████████| 3.1 MB 14.0 MB/s            
Requirement already satisfied: Cython in /opt/vitis_ai/conda/envs/yolov4-tf1/lib/python3.6/site-packages (from -r code/requirements.txt (line 15)) (0.29.32)
Collecting pycocotools
  Downloading pycocotools-2.0.6.tar.gz (24 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting sympy
  Downloading sympy-1.9-py3-none-any.whl (6.2 MB)
     |████████████████████████████████| 6.2 MB 12.4 MB/s            
Collecting imgaug
  Downloading imgaug-0.4.0-py2.py3-none-any.whl (948 kB)
     |████████████████████████████████| 948 kB 11.3 MB/s            
Collecting imagecorruptions
  Downloading imagecorruptions-1.1.2-py3-none-any.whl (2.1 MB)
     |████████████████████████████████| 2.1 MB 11.9 MB/s            
Collecting bokeh
  Downloading bokeh-2.3.3.tar.gz (10.7 MB)
     |████████████████████████████████| 10.7 MB 20 kB/s              
  Preparing metadata (setup.py) ... done
Collecting tidecv
  Downloading tidecv-1.0.1-py3-none-any.whl (25 kB)
Collecting wrapt>=1.11.1
  Downloading wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (74 kB)
     |████████████████████████████████| 74 kB 604 kB/s             
Collecting tensorflow-estimator==1.15.1
  Downloading tensorflow_estimator-1.15.1-py2.py3-none-any.whl (503 kB)
     |████████████████████████████████| 503 kB 11.6 MB/s            
Collecting termcolor>=1.1.0
  Downloading termcolor-1.1.0.tar.gz (3.9 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: wheel>=0.26 in /home/vitis-ai-user/.local/lib/python3.6/site-packages (from tensorflow-gpu==1.15.2->-r code/requirements.txt (line 7)) (0.37.1)
Collecting opt-einsum>=2.3.2
  Downloading opt_einsum-3.3.0-py3-none-any.whl (65 kB)
     |████████████████████████████████| 65 kB 481 kB/s             
Collecting gast==0.2.2
  Downloading gast-0.2.2.tar.gz (10 kB)
  Preparing metadata (setup.py) ... done
Collecting google-pasta>=0.1.6
  Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)
     |████████████████████████████████| 57 kB 899 kB/s             
Collecting astor>=0.6.0
  Downloading astor-0.8.1-py2.py3-none-any.whl (27 kB)
Collecting absl-py>=0.7.0
  Downloading absl_py-1.3.0-py3-none-any.whl (124 kB)
     |████████████████████████████████| 124 kB 11.5 MB/s            
Collecting protobuf>=3.6.1
  Downloading protobuf-3.19.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)
     |████████████████████████████████| 1.1 MB 11.9 MB/s            
Collecting grpcio>=1.8.6
  Downloading grpcio-1.48.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB)
     |████████████████████████████████| 4.6 MB 11.2 MB/s            
Collecting keras-applications>=1.0.8
  Downloading Keras_Applications-1.0.8-py3-none-any.whl (50 kB)
     |████████████████████████████████| 50 kB 992 kB/s             
Collecting keras-preprocessing>=1.0.5
  Downloading Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
     |████████████████████████████████| 42 kB 166 kB/s             
Collecting tensorboard<1.16.0,>=1.15.0
  Downloading tensorboard-1.15.0-py3-none-any.whl (3.8 MB)
     |████████████████████████████████| 3.8 MB 12.1 MB/s            
Collecting six>=1.10.0
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3
  Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
     |████████████████████████████████| 98 kB 1.4 MB/s             
Collecting kiwisolver>=1.0.1
  Downloading kiwisolver-1.3.1-cp36-cp36m-manylinux1_x86_64.whl (1.1 MB)
     |████████████████████████████████| 1.1 MB 11.9 MB/s            
Collecting cycler>=0.10
  Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)
Collecting python-dateutil>=2.1
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     |████████████████████████████████| 247 kB 11.5 MB/s            
Collecting importlib-resources
  Downloading importlib_resources-5.4.0-py3-none-any.whl (28 kB)
Collecting mpmath>=0.19
  Downloading mpmath-1.2.1-py3-none-any.whl (532 kB)
     |████████████████████████████████| 532 kB 11.4 MB/s            
Collecting Shapely
  Downloading Shapely-1.8.5.post1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.0 MB)
     |████████████████████████████████| 2.0 MB 12.7 MB/s            
Collecting imageio
  Downloading imageio-2.15.0-py3-none-any.whl (3.3 MB)
     |████████████████████████████████| 3.3 MB 11.4 MB/s            
Collecting scikit-image>=0.14.2
  Downloading scikit_image-0.17.2-cp36-cp36m-manylinux1_x86_64.whl (12.4 MB)
     |████████████████████████████████| 12.4 MB 12.1 MB/s            
Collecting PyYAML>=3.10
  Downloading PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (603 kB)
     |████████████████████████████████| 603 kB 11.4 MB/s            
Collecting Jinja2>=2.9
  Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB)
     |████████████████████████████████| 133 kB 11.4 MB/s            
Collecting packaging>=16.8
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 1.2 MB/s             
Collecting tornado>=5.1
  Downloading tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl (427 kB)
     |████████████████████████████████| 427 kB 11.5 MB/s            
Collecting typing_extensions>=3.7.4
  Downloading typing_extensions-4.1.1-py3-none-any.whl (26 kB)
Collecting seaborn
  Downloading seaborn-0.11.2-py3-none-any.whl (292 kB)
     |████████████████████████████████| 292 kB 13.5 MB/s            
Collecting pandas
  Downloading pandas-1.1.5-cp36-cp36m-manylinux1_x86_64.whl (9.5 MB)
     |████████████████████████████████| 9.5 MB 12.8 MB/s            
Collecting appdirs
  Downloading appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (30 kB)
Collecting h5py
  Downloading h5py-3.1.0-cp36-cp36m-manylinux1_x86_64.whl (4.0 MB)
     |████████████████████████████████| 4.0 MB 13.2 MB/s            
Collecting tifffile>=2019.7.26
  Downloading tifffile-2020.9.3-py3-none-any.whl (148 kB)
     |████████████████████████████████| 148 kB 12.8 MB/s            
Collecting PyWavelets>=1.1.1
  Downloading PyWavelets-1.1.1-cp36-cp36m-manylinux1_x86_64.whl (4.4 MB)
     |████████████████████████████████| 4.4 MB 12.3 MB/s            
Collecting networkx>=2.0
  Downloading networkx-2.5.1-py3-none-any.whl (1.6 MB)
     |████████████████████████████████| 1.6 MB 11.6 MB/s            
Collecting markdown>=2.6.8
  Downloading Markdown-3.3.7-py3-none-any.whl (97 kB)
     |████████████████████████████████| 97 kB 1.2 MB/s             
Collecting werkzeug>=0.11.15
  Downloading Werkzeug-2.0.3-py3-none-any.whl (289 kB)
     |████████████████████████████████| 289 kB 11.5 MB/s            
Collecting zipp>=3.1.0
  Downloading zipp-3.6.0-py3-none-any.whl (5.3 kB)
Collecting pytz>=2017.2
  Downloading pytz-2022.6-py2.py3-none-any.whl (498 kB)
     |████████████████████████████████| 498 kB 11.9 MB/s            
Collecting importlib-metadata>=4.4
  Downloading importlib_metadata-4.8.3-py3-none-any.whl (17 kB)
Collecting decorator<5,>=4.3
  Downloading decorator-4.4.2-py2.py3-none-any.whl (9.2 kB)
Collecting dataclasses
  Downloading dataclasses-0.8-py3-none-any.whl (19 kB)
Collecting cached-property
  Downloading cached_property-1.5.2-py2.py3-none-any.whl (7.6 kB)
Building wheels for collected packages: gast, pycocotools, bokeh, termcolor
  Building wheel for gast (setup.py) ... done
  Created wheel for gast: filename=gast-0.2.2-py3-none-any.whl size=7554 sha256=efe58f6f440e04508f08fdaa0b6a65f31c2d4493b204538c3858d75434839b8c
  Stored in directory: /home/vitis-ai-user/.cache/pip/wheels/19/a7/b9/0740c7a3a7d1d348f04823339274b90de25fbcd217b2ee1fbe
  Building wheel for pycocotools (pyproject.toml) ... done
  Created wheel for pycocotools: filename=pycocotools-2.0.6-cp36-cp36m-linux_x86_64.whl size=375293 sha256=89a5d0c85b0b092a120e50a322b036f9beae0383d20b5284da97b9de5c0408ec
  Stored in directory: /home/vitis-ai-user/.cache/pip/wheels/39/5f/a6/d19eb746e1b7525795fa8910576ddc6108d0c9cf343e4155e8
  Building wheel for bokeh (setup.py) ... done
  Created wheel for bokeh: filename=bokeh-2.3.3-py3-none-any.whl size=11342785 sha256=727712d0432a8aa0300b84b907a5070c834ad1b127cda50be0c8fa12a94b6aa8
  Stored in directory: /home/vitis-ai-user/.cache/pip/wheels/8b/59/97/257265b741bab184e0cc8f5676309cb1fe6fbda22011bbb3ff
  Building wheel for termcolor (setup.py) ... done
  Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4848 sha256=552a51bb0b13ae81536e412dcd2412c4c54d2da002215f357acfcf6e67e08850
  Stored in directory: /home/vitis-ai-user/.cache/pip/wheels/93/2a/eb/e58dbcbc963549ee4f065ff80a59f274cc7210b6eab962acdc
Successfully built gast pycocotools bokeh termcolor
Installing collected packages: zipp, typing-extensions, six, pytz, python-dateutil, pyparsing, pillow, numpy, kiwisolver, importlib-metadata, decorator, dataclasses, cycler, cached-property, werkzeug, tifffile, scipy, PyWavelets, protobuf, pandas, networkx, matplotlib, MarkupSafe, markdown, imageio, h5py, grpcio, absl-py, wrapt, tornado, termcolor, tensorflow-estimator, tensorboard, Shapely, seaborn, scikit-image, PyYAML, pycocotools, packaging, opt-einsum, opencv-python, mpmath, keras-preprocessing, keras-applications, Jinja2, importlib-resources, google-pasta, gast, astor, appdirs, tqdm, tidecv, tensorflow-gpu, sympy, scikit-learn, opencv-contrib-python, imgaug, imagecorruptions, bokeh
Successfully installed Jinja2-3.0.3 MarkupSafe-2.0.1 PyWavelets-1.1.1 PyYAML-6.0 Shapely-1.8.5.post1 absl-py-1.3.0 appdirs-1.4.4 astor-0.8.1 bokeh-2.3.3 cached-property-1.5.2 cycler-0.11.0 dataclasses-0.8 decorator-4.4.2 gast-0.2.2 google-pasta-0.2.0 grpcio-1.48.2 h5py-3.1.0 imagecorruptions-1.1.2 imageio-2.15.0 imgaug-0.4.0 importlib-metadata-4.8.3 importlib-resources-5.4.0 keras-applications-1.0.8 keras-preprocessing-1.1.2 kiwisolver-1.3.1 markdown-3.3.7 matplotlib-3.3.4 mpmath-1.2.1 networkx-2.5.1 numpy-1.19.5 opencv-contrib-python-4.2.0.32 opencv-python-4.2.0.32 opt-einsum-3.3.0 packaging-21.3 pandas-1.1.5 pillow-8.4.0 protobuf-3.19.6 pycocotools-2.0.6 pyparsing-3.0.9 python-dateutil-2.8.2 pytz-2022.6 scikit-image-0.17.2 scikit-learn-0.20.3 scipy-1.5.4 seaborn-0.11.2 six-1.16.0 sympy-1.9 tensorboard-1.15.0 tensorflow-estimator-1.15.1 tensorflow-gpu-1.15.2 termcolor-1.1.0 tidecv-1.0.1 tifffile-2020.9.3 tornado-6.1 tqdm-4.64.1 typing-extensions-4.1.1 werkzeug-2.0.3 wrapt-1.14.1 zipp-3.6.0

  1. 2022年11月19日 04:43 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0
»