Jetson Nanoを使って物体検出(YOLO) -①Jetson Nanoの設定編-

#はじめに
会社の同僚とJetson Nanoを使用して、YOLOによる物体検出にチャレンジしてみました。

①【基本】Jetson Nanoの設定
[②【基本】Jetson Nano上で物体検出YOLOの実行](https://qiita.com/Kim_Burton/items/455d21c8eb9da687aecc)
③【発展】オリジナルモデルを作成して実行

今回は①Jetson Nanoの設定編となります。
実際に購入したもののリンクも貼り付けますので、参考にしてみてください。

#1. 用意するもの
- NVIDIA Jetson nano開発者kit
- Wifi 無線LAN 子機 <br>
→無線LANを使用するなら必要。[こちら](https://www.amazon.co.jp/TP-Link-WIFI-%E7%84%A1%E7%B7%9ALAN-%E3%83%87%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89%E5%AF%BE%E5%BF%9C%E3%83%A2%E3%83%87%E3%83%AB-TL-WN725N/dp/B008IFXQFU)を購入しました。<br>
- microSDカード <br>
→64GBのものを使用
- USBカメラ <br>
→Amazonで1,000円くらいのものを購入しました。 <br>
　解像度が高すぎると、処理が重くなりますので、[こんな感じ](https://www.amazon.co.jp/gp/product/B00GZAF72U/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&psc=1)の低いものでいいです。 <br>
- HDMIケーブル、HDMI接続可能なモニター <br>
→モニターについては、TVがHDMI接続可能であれば、TVでも大丈夫です。 <br>
- 電源アダプター <br>
→USB給電もできますが、物体検出を行うなら電力不足になります。<br>　4A-5VのJ25電源アダプターが必要となります。
- USBマウス、USBキーボード



#2. ジャンパーピンのセッティング
電源アダプターからの給電を行うために、J48ヘッダーに2.54mmピッチのジャンパーピンを取り付ける必要があります。
ジャンパーピンは開発者キットに付属していました。
付属していないときもあるみたいなので、なければ購入が必要です。

#3.microSDへOSのインストール
Windowsパソコンを使用してmicroSDにOSをインストールしましょう。
##OS「JetPack」のダウンロード
NVIDIA公式サイトから「JetPack」をダウンロードします。NVIDIA社のJetPackページにパソコンでアクセスし、公式サイトから最新版のOSイメージをダウンロードします。下記画像のJETSON NANO DEVELOPER KITSのDownload the SD Card Imageをクリックを選択します。
zipファイルがダウンロードされますので、展開しておきましょう。
拡張子が.imgとなっているファイルがあるはずです。この後使用します。
https://developer.nvidia.com/embedded/jetpack
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697702/3bd5eb32-5b50-bd64-e293-9a27b55c0d1b.png)
##SDカードのフォーマット
microSDカードを初期化（フォーマット）します。SD Associationが提供する「SDカードフォーマッター」をダウンロードしてインストール後、クイックフォーマットでフォーマットします。
https://www.sdcard.org/jp/downloads/formatter/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697702/87edafe0-71d8-7d57-79ee-bca91eca930d.png)
##SDカードに書き込む
balenaEtcherというソフトを使用するため、下記サイトからインストールをしてください。
balenaEtcherを起動後、Select imageをクリックして、先ほどダウンロードした「～.img」ファイルを選択します。
Select targetでは、先ほどのSDカードを選択します。
最後にFlash!を選択すれば、書き込みが開始されます。時間がかかるので、気長に待ちます。
https://www.balena.io/etcher/

#4. Jetson Nanoの初期設定
microSDカードを挿入し、USBポートにWifi無線LAN子機/キーボード/マウス、HDMIでディスプレイを接続した状態で電源アダプターを差し込むと電源が入ります。
あとは表示内容に従って、設定を行いましょう。
注意事項ですが、言語選択についてはEnglishを選択しましょう。
日本語にすると、ディレクトリが日本語になってしまい、余計なことで悩まされることになります。


#5. Swapの設定
Jetson Nanoには4GBのメモリが積まれていますが、物体検出を行うためには、不十分な容量となります。microSDを仮想メモリとして利用するために、Swapファイルを作成しましょう。
以下のコマンドを実行すれば、4GBのSwapファイルを作成することができます。

```bash
# Swapファイルの作成
sudo dd if=/dev/zero of=/var/swapfile bs=1G count=4 #4GB
sudo mkswap /var/swapfile #Swapファイルの初期化
sudo chmod 600 /var/swapfile #ファイル権限の変更(rootユーザーのみがアクセス可能)
```
countの値を変更することで、Swapファイルの大きさを変更することができます。

また、Jetson Nano起動時に、自動的にSwapファイルをマウントするためには/etc/fstabファイルを開き、末尾に下記の一行追加します。
`/var/swapfile none swap swap 0 0`
ここで再起動するか、再起動せずにSwapファイルを有効化するためには下記コマンドを実行してください。

```bash
# Swapファイルの有効化
sudo swapon /var/swapfile
```

`free -m`コマンドを実行すれば割り当てられているSwap領域のサイズを確認することができます。（初期状態で2GBのSwap領域が割り当てられているので、6GBになるはずです。）

※参考:[【Linux】スワップ領域の作成](https://qiita.com/azusanakano/items/96e7c490c285d9ec1b1a)

#6. パフォーマンス最大化
最大パフォーマンスを発揮するために、パワーモードを変更しましょう。
下記を実行するだけでパフォーマンスを最大化することができます。

```bash
sudo nvpmodel -m 0
sudo jetson_clocks
```

#まとめ
以上でJetson Nanoの設定は完了です。
次回はJetson Nano上で物体検出を実行してみます。
⇒https://qiita.com/Kim_Burton/items/455d21c8eb9da687aecc

##参考文献
- [Jetson Nano 超入門](https://www.amazon.co.jp/Jason-Nano-%E8%B6%85%E5%85%A5%E9%96%80-%E3%81%8B%E3%82%89%E3%81%82%E3%81%92-ebook/dp/B082SN87QP)
- [はじめてみよう！NVIDIA Jetson nano まずは知識と最初の起動！](https://www.fabshop.jp/firstsetpjetson/)


##謝辞
本内容については、会社の同僚の三原さんと一緒に検証した内容になります。
また、コネクタ周りは元同僚の崔さんに確認いたしました。
この場をお借りして御礼申し上げます。