CDH29 が 2022年09月21日18時05分42秒 に編集
初版
タイトルの変更
【Spresense】でNNCを使ったカメラ撮影に挑戦した
タグの変更
IoT
spresense
カメラ
NNC
メイン画像の変更
記事種類の変更
製作品
ライセンスの変更
(GPL-3.0+) GNU General Public License, version 3
本文の変更
# 概要 自宅庭に野良猫がしばしば訪れます。 その生態を捉えるため、猫を認識したら撮影するシステムを構築しようと思い立ちました。 Spresenseで監視 ↓ AIで猫を認識し ↓ その画像を記録し ↓ SDcardに保存する 私はお気軽に趣味でarduinoを用いた電子工作をする程度の知識しか持ち合わせておらず、 AIに興味を持ちながらもpythonの敷居を高く感じておりました。 NNCであればGUIで初心者でも何とかなるのではないかと思い、今回のコンテストを機会に挑戦してみることにしました。 # 部品 - spresens メインボード - spresens 拡張ボード - spresens カメラボード - Transend 1GB micro SD ![キャプションを入力できます](https://camo.elchika.com/307610308d45747217a3e1f04eb822e5a75b9dbc/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30616461646462622d333430322d343137302d616130322d6138343064663039663538642f36343266336361302d643861392d343535392d396339372d353539333034623838663862/) # NNCをはじめる 「sony NNC」で検索すると公式チュートリアルなど出てくるので概要をつかむことができましたが、 AIについての基礎を何も持ち合わせていないので、それだけでは不十分でした。 参考図書 工学社 [はじめての「SonyNNC」改訂版](https://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%80%8CSonyNNC%E3%80%8D%E6%94%B9%E8%A8%82%E7%89%88-I-BOOKS-%E6%9F%B4%E7%94%B0-%E8%89%AF%E4%B8%80/dp/4777521397/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3NM418DQ26X9O&keywords=%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AENNC&qid=1663743277&sprefix=%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AEnnc%2Caps%2C210&sr=8-1) 柴田良一 著 これは、丁寧に練習問題を行いながらNNCの理解を深めることができ 大変参考になりました。 # NNCで猫を認識したい 参考図書の実例では NNCのサンプルプロジェクトにある、 2層Neural Networkで構成された「01_logistic_regression」で画像認識を行うよりも、多層NNのうち、畳み込みNN(CNN)で構成された「02_binary_cnn」の方が認識率が高くなることが分かりました。 今回は後者のサンプルプロジェクトを基にNNCを構成してみることにしました。 1. 画像検索で「猫」の写真を370枚集めました。対象として「犬」の画像も370枚集めた 1. それをもとにデータセットを作成し「02_binary_cnn」から新規project作成 ![キャプションを入力できます](https://camo.elchika.com/d83e738e9935f5f539538c795ec2c08c500d9b57/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30616461646462622d333430322d343137302d616130322d6138343064663039663538642f62636235373733662d376634622d343730352d613161322d303666653765393335663232/) 1. しかし accuracy0.48 に留まったため対象画像を「人間」に変更 1. 新たにデータセットを作成し直しやり直したところ、accuracy 0.9047 と好成績だった ![キャプションを入力できます](https://camo.elchika.com/6e5f4e006e7060d79fa124fab96c4663c0d78c4d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30616461646462622d333430322d343137302d616130322d6138343064663039663538642f36323232306535392d313236362d343065362d613834332d393565376134306237393165/) ![キャプションを入力できます](https://camo.elchika.com/16683e91c3f568ac4fd3742a82d466697cd6ceb4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30616461646462622d333430322d343137302d616130322d6138343064663039663538642f36643535386533652d393363652d346662332d626661622d353732383762383464383932/) 1. 試しにCNNではなく2層NNで同様のデータセットを用いて検討したところ accuracy0.7333 だった 1. さらに上記④のプロジェクトで「構造自動探索」を行って成績向上をめざした 1.10件ほど検討したが成績は向上せず時間もかかるのでそれ以上は行わなかった 1. プロジェクトを右クリック→エクスポート→NNBを選択→できた[model.nnb]をFAT32でフォーマットしておいたmicroSDの直下に保存した これで、windows版CNNでは画像認識はうまく構成されたと思います。 # しかしArduinoIDEでスケッチが組めない 残念ながらこれは私の技術不足が原因でしかありません。 arduino IDEに用意されている「camera」のサンプルスケッチをspresenseに書き込むと SDカードに写真が記録され、動作を確認することができました。 しかしこのスケッチと「number_recognition」を組み合わせて 撮影した画像から、猫を認識し、その画像をSDcardに保存する という動作まで組み上げることができません。 いつ来るのかわからない野良猫の撮影は難しいので、モニターに猫の写真を表示してSpresenseのカメラを向けても 撮影も記録もされている様子はありませんでした。 web検索すると成功例が報告されており それを参考に試行錯誤してみたのですが うまくいきませんでした。 # 考察 引き続きspresenseの学習を継続し 完成できるよう励んでまいります 参考書の買い足しをして解決を図ります。 また、今後も数多くのspresenseの作例が投稿されるでしょうから 皆様から学んでいきたいと思います。