FC2カウンター FPGAの部屋 2017年08月04日

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

FPGAの部屋

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

白線追従走行用畳み込みニューラルネットワークの製作4(トレーニング・ファイルのチェック)

白線追従走行用畳み込みニューラルネットワークの製作3(トレーニング、ラベル・ファイルの作成)”の続き。

前回は、straight_dataset_bmp.cpp を作成して、直進学習用の白線の画像のMNISTフォーマットのトレーニング・ファイルとラベル・ファイルを作成した。今回は、トレーニング・ファイルを本当に画像が格納されているかどうか?をチェックする。

トレーニング・ファイルは、train_straight_run_image という名前だ。
Vivado HLS 2016.4 の straight_dataset_check プロジェクトを作成し、train_straight_run_image と、新たに作成したstraight_dataset_check.cpp とstraight_dataset_bmp.h を straight_dataset_check プロジェクトのディレクトリにコピーした。
wlt_cnn_20_170804.png

straight_dataset_check.cpp を貼っておく。なお、このアプリケーションソフトは、train_straight_run_image からIMAGE_NUMBER 番目の画像を output.bmp に変換する。現在のIMAGE_NUMBER は 0 だ。つまり最初の画像を output.bmp に変換する。

// straight_dataset_check.cpp
// 2017/08/02 by marsee
//

#include <iostream>
#include "hls_opencv.h"
#include "straight_dataset_bmp.h"

#define IMAGE_NUMBER 4

int main(){
    FILE *ftin, *ftln;
    char train_image_name[256] = "train_straight_run_image";
    uint8_t buf[600];

    if ((ftin = fopen(train_image_name, "rb")) == NULL){
        fprintf(stderr, "Can't open %s\n", train_image_name);
        exit(1);
    }

    fread(buf, sizeof(uint32_t), 4, ftin); // header read

    for(int i=0; i<=IMAGE_NUMBER; i++){
        fread(buf, sizeof(uint8_t), DATASET_HEIGHT*DATASET_WIDTH, ftin);
    }

    cv::Mat wlt_img(cv::Size(5610), CV_8UC1);

    for (int y = 0; y < wlt_img.rows; y++) {
        for (int x = 0; x < wlt_img.cols; x++) {
            wlt_img.at<uchar>(y, x) = buf[y*DATASET_WIDTH+x];
        }
    }

    cv::imwrite("output.bmp", wlt_img);

    fclose(ftin);

    return(0);
}


straight_dataset_bmp.h は前回と同じファイルを使用している。

C シミュレーションを行った。
wlt_cnn_21_170804.png

output.bmp が生成されているのが分かる。
output.bmp を見てみよう。
wlt_cnn_22_170804.png

最初の画像が抽出されたのが分かった。

それでは、IMAGE_NUMBER を 4 に変更して、もう一度、C シミュレーションを行った。なお、5 番目の画像は、一番右側の画像になる。1つの白線の画像から 5 x 5 = 25 個のトレーニング用画像を生成している。最初に1ピクセルずつ段々と右にシフトしていくので
5 個目の画像が一番右側の画像となる。
wlt_cnn_23_170804.png

生成された output.bmp を示す。
wlt_cnn_24_170804.png

IMAGE_NUMBER が 0 の画像よりも右側の白線の画像だということが分かると思う。

これで、トレーニング・ファイルも問題なさそうだということが分かった。

OpenCV を使うとソースコードが短くなって書くのが楽でよい。
  1. 2017年08月04日 04:19 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0