[ カテゴリー » 日 記 ]

Pythonでnumpy.ctypes.data_as()→C側でAccess violation

YOLOLink リポジトリに含まれるdarknet_images.pyに複数画像一括処理を行うbatch_detectionという関数があるのですが、2枚以上の画像を処理させようとするとC側関数実行中にOSError/access violation例外が発生。1枚(要素数1の配列を渡す)は正常に処理されることから、ポインタの渡し間違いという類ではなさそう。

結論

import numpy as np
from ctypes import *

def makeArray():
    arr = numpyの配列を作る
    return arr.ctypes.data_as(ctypes.POINTER(ctypes.c_float))


c_func(makeArray())

みたいに関数でnumpy配列作ってctypesのポインタだけを返している場合、arrのサイスが大きいと関数抜けた時点でarrがガベージコレクションされてしまい、data_as()で得たアドレスはc_funcが呼ばれる前に無効になる可能性がある。

今回のYOLOの件は画像1枚だとたまたまガベコレされなかっただけで、本質的には危険なのでしょう。具体的にはdarknet_images.pyのprepare_batch()関数でbatch_arrayがガベコレされてしまいます。手っ取り早い解決としては、同ファイル内で
  • prepare_batch()の返値にbatch_arrayを含めるようにし、呼び出す側のbatch_detection()はC関数darknet.network_predict_batch()を呼び終えるまでbatch_arrayを保持する
  • prepare_batch()とbatch_detection()を一つの関数にまとめ、batch_arrayがガベコレされないようにする

でしょうか。前者はコード的にあまり美しくなさそうですが。

私と同じ問題にあたる人は稀でしょうが、本質的な理由はWindows/Linux関係なく起こりそう。ctypesのいい勉強になりました。

[参考]

— posted by mu at 07:18 pm   commentComment [0]  pingTrackBack [0]

全豪オープンテニス

2年前Link 1行目と同じ。

— posted by mu at 02:49 pm   commentComment [0]  pingTrackBack [0]

Pixel4a購入

20200826-Pixel4a-1-350x263

SH-06Eからの買い替え。今まで携帯電話・タブレットはバッテリーが持たなくなり替えの入手も困難になるまで使い続けていたものですが、こいつはバッテリー交換もなく約6年半経っても丸一日持つ、2時間通話しても持つ、ということで私的には寿命判定にならない。アプリケーションを終了させましたメッセージが連発して再起動せざるを得ないという不具合があったものの、頻度は月一くらいなのでそれほどストレスも溜まらない。

がAndroidバージョンの古さから、バージョンアップできないアプリがちらほら出始め、某接触確認アプリも入れられない、ついにはLINEからも見捨てられることになったので、ようやく買い替えを決断。そんなおサイフケータイ依存症の私を狙ったかのタイミングで発売されたPixel4aが後継機となったのでした。ライトユーザーがミドルレンジ買って何に使う?

しかしさ配送予定日が27-28日だったのが26日に繰り上がり、それを前日の夜中にいきなり「発送済み」メール送ってくるのはどうかと思うの。これ用のnano SIM配達予定連絡が当日早朝だったIIJmioよりはましだけどw

— posted by mu at 10:34 pm   commentComment [0]  pingTrackBack [0]

今年のココイチスプーン

blog20200119-CocoichiSpoon2020

一発当たり、しかも金。2本目狙おうかな…と欲張ると当たらないコース。

[2020/3/2 追記] 最終結果、銀1本、金3本、打率5割。こんなの絶対におかしいよ!

— posted by mu at 12:59 pm   commentComment [0]  pingTrackBack [0]

トミカのカはCarだと思ってた

20191208-TomicaPremium_F35A
Tomica Premium #28

トミカプレミアム 28番 F-35A戦闘機。東京モーターショーのイメージもあってか、店で見かけたこれがトミカと名乗っていることに感じる所があり購入。この品質で750円程度は安いと思うのは私が大人になってしまったからでしょう。

F-16/F-2もですが単発機は胴体が厚ぼったくなってしまい、見る方向によっては不格好に感じる。ラインナップで軍用機は自衛隊機に限っているようなので望み薄ですが、ここはF-22Aを製品化していただきたい。

— posted by mu at 11:52 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0241 sec.
prev
2024.4
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30