【Jetson nano】darknet + YOLOv3

JetsonNanoで YOLOv3 が無事に動いた(^^)/~

YOLOの実行結果が画像出力なので、VNC を使ってメインPCのディスプレイにYOLOの結果を表示させた。

基本的には、

【物体検出】vol.2 :YOLOv3をNVIDIA Jetson Nanoで動かす|機械学習・AI|Nakasha for the Future|ナカシャクリエイテブ株式会社

を参考にして、作業した。やっていないことは

など。今後試してみたい。

 

また、Ultra96で YOLOを実行(CPUのみ)はできているので、FPGAのロジック部分PLを使って実行させ、その上でJetson Nano と比較してみたい。

【Jetson nano】始めました

先日のMaker Faire Tokyo 2019 で NVIDIA Jetson Nano を買ったので、そのセットアップをしているところ。githubWiki に記録している。

jetson_Nano · kzono/machineLearning Wiki · GitHub

今回ハマったのは以下の2点。

SDカードへのイメージファイルの書き込み

基本的には下記の記事にしたがって作業した。

qiita.com

SDカードの容量は32GB以上が推奨らしい。丁度秋月で 128GB なSDXCカードを売っているのに気がついたところだった。秋月でも Jetson Nano を売り始めていたので、それ用のものかもしれない。秋月で買ってきた。

microSDXCカード EVO Plus UHS−I U3 128GB: 雑貨 秋月電子通商-電子部品・ネット通販

Jetson Nano Developer Kit: マイコン関連 秋月電子通商-電子部品・ネット通販

 

SDカードにイメージファイルを書き込むやり方をググると、大抵の記事には「SDカードをFAT32でフォーマットすること」と書いてある。一方、SDHCのファイルフォーマットはFAT32がデフォルトだが、SDXCのファイルフォーマットは exFAT がデフォルト。試しに Ubuntu18.04LTS にそのまま接続したところ、マウントできなかった。

これが苦労の始まり。「SDXC のSDカードをFAT32でフォーマットするにはどうすればよいか?」という方向で、調査&試行錯誤してしまった。fdisk でパーティション情報をいじったり、mkfs.vfat コマンドで FAT32 フォーマットでフォーマットしてみたり。その結果、本来128GB の容量が 1.2MB しか認識しなくなってしまった。orz.

 

exFATWindows 系のファイルシステムだから、Windows で SDカードをフォーマットすればリセットできるか?とWindows 10 上で SD Card Formatter を使ってフォーマットしたりした。しかし、1.2MBしか認識できない状況は解決しなかった。

 

いろいろ調べているうちに、Ubuntu にツールをインストールすれば exFAT を読み書きできることがわかった。あとは、書き込みツール etcher が exFAT に対応しているかどうかが心配だった。実際にやってみると(これが書き込みとVerify にかなり時間がかかる、なんせ128GBだから)問題なく Jetson Nano が起動し、 ssh でログインすることができた。

USB-WiFIネットワークアダプタ

アキバのヨドバシでググって、Jetson Nano 用で動作した実績があることを確認できたので、archer T2U nano を購入した。が、記事によるとデフォルトでは対応しておらず、デバイスドライバソースコードからビルドする必要があるようだ。

現在、その作業中。

 

今日(2019/07/25)の進捗

PC上で YOLO

自宅の開発用PCで、YOLO を動かしてみた。

qiita.com

qiita.com

 

  Ultra96 用 PYNQ

ultra96-pynq.readthedocs.io

Ultra96 用PYNQ のSDカードイメージは、下記にある。

PYNQ v2.4 SD Card Image built with PetaLinux 2018.3 BSP

http://zedboard.org/support/design/24166/156

これをダウンロードして、SDカードに書き込む。

 

 

 Ultra96 で YOLO

エラー処理のサンプルコード

Wandboxで、Rust と Scala で Result/Either を使ったサンプルコードを書いてみた。

 

[Rust Result sample ](https://wandbox.org/permlink/nbwQkC94TZwY4lix)

[Scala Either sample](https://wandbox.org/permlink/ExJHa7TPKRplXSym)

 

 エラーと言っても種類がある。

 

アプリケーションの責任範囲外で正常に終了できない場合

例外処理でよい。エラー情報を記録して、アプリケーションを終了する。

 

例:

  • メモリ確保失敗(メモリ不足、メモリのCRCエラーなど)
  • ファイル書き込みエラー(ディスクフル、ディスク書き込み不良など)
  • 通信エラー(断線等のハードウェアの故障)

正常状態に復帰可能

  • ファイルオープンエラー(ファイル名間違い、パス名間違い)
  • ファイル書き込みエラー(アクセス権の設定ミス)
  • 通信エラー(電波状態不良、通信帯域が混み合っている)

失敗した処理を再度行い、正常終了するか試す。

maybe/option, Result/Either などを使う。

 

 

電子マネーの使い分け

自分の場合、どういう使い分けがお得になるのか調べた結果をここにまとめておく。

前提条件

  • 現在使っているメインのクレジットカードは楽天カード
  • クレジットカードは増やしたくない
  • リスク分散のため、スマホを使う決済方法とカードだけの決済方法の2種類を用意したい

使い分け

高額(2万円以上)の支払い

クレジットカード。

 

少額決済(2万円未満)

カードのみで決済

加盟店によって使えたり使えなかったりする。これらの電子マネーは事前にチャージしておくタイプ。ポイントの観点では、Edyが一番良い。楽天カードからEdyにチャージする際にもポイントがつくため。使用できる店舗数ではSuica/Pasmoが多い。

スマホ決済

ポイントの観点では、楽天カード利用者は楽天Payが有利。加盟店の多さでは QuicPayが有利。

オートチャージについて調べてみた

普段のコンビニでの買い物などには、Pasmoを使っている。残高が減ったら現金を駅の券売機でチャージしている。カードをなくした時のリスクを考えてプリペイド型の電子マネーを使ってきた。が。そろそろオートチャージを試してみようかと調べてみた。

 

PASMO

オートチャージにすることも可能だが、その場合は東急のクレジットカードを新たに作る必要がある。クレジットカードは増やしたくない。

 

iD/QuicPay

これらはクレジットカード決済(後払い)なので、そもそもオートチャージの必要がない。

デメリットは、カードをなくした時のリスクだが、口座を普段使い用のものにして、残高を制限すればリスクを低減できるはず。

 

現在メインで使っているカードを Apple Pay と組み合わせて使えそう。

Edy

これもオートチャージできる。クレジットカードでオートチャージできるし、ApplePay  でもオートチャージできることが判明。