ここ最近は他社のソフトを作り直す案件に携わっています。
自分の担当はPyhonで書かれた部分をC#で書き直す作業です。
書き直すコードはざっくり言うと画像に写っている人間を検出するコードで、
以下のような処理を行っています。
1. 推論エンジンに入力画像を投げる
2. 推論出力結果から検出された物体の情報を切り出す
3. 切り出した物体情報を元の入力画像上の値に変換する
物体の情報をどのようにデータ構造に格納しているかなどがわかって、書き直していて面白いです。
書き直していて思った所感は他に以下の2点です。
1. Pythonの方が多次元配列を扱いやすい
Pythonには数値計算ライブラリのnumpyがある関係で多次元配列が扱いやすいです。
機械学習を行う際の主流になるのも納得です。
C#で書き直しているコードでは1次元配列で保持し、
多次元配列のインデックスを1次元配列のものに変換してアクセスするようにしたのですが、
インデックスの計算などにミスしてしまい、修正に少し手間取ってしまいました。
…とここまで書いて、ふと調べてみましたがC#でもnumpyのライブラリがあるようでした。
書き直したコードのパフォーマンスなどに問題あれば、使用を検討しようと思います。
2. コードのコピペをする際は中身を極力解読すべき
既存Pythonのコードを調査していたところ、コアの部分がネットからコピペされていました。
ライセンスなどないコードだったのでそれ自体は問題ないかとは思いますが、
よく解読せずにコピペしたために生じたのではないかと思われる実装ミスがありました。
(コピペ内で行われている処理をコピペ外で重複して行っており、
設定次第では正常に動作しなくなっていました)
マジックナンバーなど解読できないこともあるかと思いますが、
不精せずに可能な限り解読を試みてコメントを付与して、
保守しやすい状態にする必要があると感じました。
以上です。