【Jetson nano】darknet + YOLOv3
JetsonNanoで YOLOv3 が無事に動いた(^^)/~
YOLOの実行結果が画像出力なので、VNC を使ってメインPCのディスプレイにYOLOの結果を表示させた。
基本的には、
【物体検出】vol.2 :YOLOv3をNVIDIA Jetson Nanoで動かす|機械学習・AI|Nakasha for the Future|ナカシャクリエイテブ株式会社
を参考にして、作業した。やっていないことは
-
オーバークロック設定とSwapファイル作成
-
USBカメラを接続して動作確認
など。今後試してみたい。
また、Ultra96で YOLOを実行(CPUのみ)はできているので、FPGAのロジック部分PLを使って実行させ、その上でJetson Nano と比較してみたい。
【Jetson nano】始めました
先日のMaker Faire Tokyo 2019 で NVIDIA Jetson Nano を買ったので、そのセットアップをしているところ。github の Wiki に記録している。
jetson_Nano · kzono/machineLearning Wiki · GitHub
今回ハマったのは以下の2点。
- SDカードへのイメージファイルの書き込み
- USB-WiFIネットワークアダプタ
SDカードへのイメージファイルの書き込み
基本的には下記の記事にしたがって作業した。
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.
exFAT は Windows 系のファイルシステムだから、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 を購入した。が、記事によるとデフォルトでは対応しておらず、デバイスドライバをソースコードからビルドする必要があるようだ。
現在、その作業中。
【Haskell】Either の入れ子
Eitherを返すような関数を入れ子で呼ぶようなサンプルコードを書こうとしたが、
書き方がわからなかった。。。orz
今日(2019/07/25)の進捗
PC上で YOLO
自宅の開発用PCで、YOLO を動かしてみた。
Ultra96 用 PYNQ
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 などを使う。
オートチャージについて調べてみた
普段のコンビニでの買い物などには、Pasmoを使っている。残高が減ったら現金を駅の券売機でチャージしている。カードをなくした時のリスクを考えてプリペイド型の電子マネーを使ってきた。が。そろそろオートチャージを試してみようかと調べてみた。
PASMO
オートチャージにすることも可能だが、その場合は東急のクレジットカードを新たに作る必要がある。クレジットカードは増やしたくない。
iD/QuicPay
これらはクレジットカード決済(後払い)なので、そもそもオートチャージの必要がない。
デメリットは、カードをなくした時のリスクだが、口座を普段使い用のものにして、残高を制限すればリスクを低減できるはず。
現在メインで使っているカードを Apple Pay と組み合わせて使えそう。
Edy
これもオートチャージできる。クレジットカードでオートチャージできるし、ApplePay でもオートチャージできることが判明。