類似画像検索エンジン詳細
今回作り直した類似画像検索エンジンの一番のポイントは特徴量ベクトルの差の絶対値の和を取る部分です。これはSSE2命令を使うとシンプルかつ高速なものを書く事が出来ます。具体的には「sad」系の命令を使って、
__m128i sad = _mm_add_epi16(_mm_sad_epu8(queryImage.v0, image.v0), _mm_sad_epu8(queryImage.v1, image.v1)); ALIGN_PREFIX short v[8] ALIGN_SURFIX; _mm_store_si128((__m128i*)v, sad); return v[0] + v[4];
としています。27次元のベクトルの差の絶対値の和を計算しているので、sad命令2回+αで計算する事が可能です。かなり早いです。これとヒープ構造を使った枝狩りを入れて、70万画像が30ms程度で検索できるようになりました。これだけの速度が出れば十分だと思います。
おまけでboost::asioを使ってみました。めちゃめちゃ便利だと感じました。
ソースコードは要望があればオープンソースで公開いたします。
pixivFinder - http://kishibe.dyndns.tv:8080/pixivFinder/