謝罪致します。
昨年、M5SticVとUnitVを購入し、うかれて多くのtweetをしていますが、以下の一連の投稿に間以外が有りました。Twitterでは訂正、修正が難しいため、こちらの記事で訂正をさせていただいたうえでツイ消しを行いたいと思います。
このtweetを読んだ方には誤った情報を提供してしまいました。申し訳ありませんでした。
間違いのあったtweet
間違いが有ったのはこちらの一連のスレッドです。
カメラ換装の結果、face detectのデモがov2640使用時30fps、ov7740使用時には45fpsと効果有りだった。
— AIRPOCKET@rastaman vibration (@AirpocketRobot) January 2, 2020
rovercの制御にどの程度の効果があるかは明日検証しよう。
間違い内容
一連のフレームレート測定は、Sipeedより提供されているface detectionのデモコードを利用して測定していました。画像取得及び顔認識の推論にかかる時間を測定していたつもりでしたが、実際には画像取得の時間しか測定できていませんでした。
測定間違い時に使用していたコード
import sensor
import image
import lcd
import KPU as kpu
import time
from Maix import GPIO
from fpioa_manager import fm
from board import board_info
clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.set_vflip(0) #UnitVはvflip(1),hmirror(1)で正方向。上下反転時は(0)(0)
sensor.set_hmirror(0)
sensor.skip_frames(30)
lcd.rotation(2) #m5stickで有効、unitVでは不要
task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000
fm.register(36, fm.fpioa.GPIO1) #UnitV 19/m5stickv 36
but_a = GPIO(GPIO.GPIO1, GPIO.IN, GPIO.PULL_UP)
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
j=000
while(True):
clock.tick()
img = sensor.snapshot()
fps = clock.fps() # ←ココが間違い。画像取得時間しか測定できていない。
img.draw_string(2,2, ("%2.1ffps" %(fps)), color=(128,0,0), scale=2)
code = kpu.run_yolo2(task, img) # ←推論時間まで測定するのであれば、この行の後で時間測定しないといけないはず。
if code:
for i in code:
print(i)
a = img.draw_rectangle(i.rect())
a = lcd.display(img)
if but_a.value() == 0:
filename = "/sd/{0:0=8}.jpg".format(j)
img.save(filename)
j += 1
print(filename)
a = kpu.deinit(task)
誤ったグラフ表記と訂正
一連のtweetで記載した誤ったグラフ及び評価は次の通りです。
UnitVにOV2640とOV7740を載せた際の比較
face detectionを行った際のフレームレートを測定したつもりでしたが、画像取得の時間のみ測定していました。よってここではカメラの違いのみを見ている事になります。
UにtVとM5StickにどちらもOV7740を載せた際の比較
どちらもsnapshot()のみの時間を比較しています。同じカメラを載せているため、結果もほぼ等しくなっています。オンボードフラッシュメモリからのブート時の差はよくわかりません。
UnitVとMaix M1 DockにどちらもOV2640を載せた際の比較
こちらもsnapshot()のみの時間を比較しています。
このデータから得られる、Maix M1 Dockの方が早く画像取得出来ると言う評価には変更ありません。
Maix M1 Dockでface detectionとfind blobsを使った際の処理時間の比較
この数値比較では、face detecitonしていたとするデータは、snapshotのみ、find blobsしていたするデータはsnapshot + find blobsの時間の合計となっています。
よって、ここで示しているのは、find blobsによりおよそ約40fpsから約30fpsへおよそ10fps低下する=処理サイクルが25msecから33msecへ8msec処理時間がかかっていると言うことでしょうか。
Maix IDEを使うと差が無いのは、PCへのシリアル通信でこの差が見かけ上隠されているのかもしれませんが、どういう理屈なのかはよくわかりません。
まとめ
過去のtweetに誤記が見つかりましたので、取り急ぎ訂正謝罪記事としてまとめました。もしご迷惑をかけた方がいらっしゃいましたら申し訳御座いませんでした。
初心者の記事ですので、ほかにも間違いが有るかもしれませんが、ご指摘いただけましたら幸いです。