non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

2018年版pytorchによるcycleGANの実装をWindowsで動かした

こんばんは、先日長男が卒園式直前に熱を出し、式当日までハラハラしてましたが、卒園式には無事出席できました。@kjunichiです。

背景

去年書いた記事の

abrakatabura.hatenablog.com

が今年になってけっこう参照されてるが、その直後にGPUを有効したモノをいれる 方法が変更になっていることを知ったので、2018年3月現在のインストール方法を書くことに

WindowsGPUを有効にしたPyTorchを入れるには

下準備

CUDAとcuDNNを入れる。 CUDAのバージョンはWindows向けのPyTorchでは最新の9.1系は対応していないようなので、ダウンロードページの Legacy Releaseボタンをクリックして9.0系を入れ、cuDNNは最新版のCUDA9.0系を入れた。 8.0系も

github.com

によるとサポートされている模様

と、まさにこの記事を書くさいに確認したら、CUDA8.0系は 直前までは明示的に「cuda80」の指定が必要だったが、 直近の最新版は、この指定が不要で、デフォルトがCUDA8.0向けのPyTorchがインストールされる ようになっていたw。

conda install -c peterjc123 pytorch cuda90

ちなみに、去年自分がPyTorchを入れた際はCUDAは8.0系の当時最新版を入れて実施していた。

以降の手順

以降は

abrakatabura.hatenablog.com

で多分大丈夫そう。

関連記事

11年前の記事

8年前の記事

1年前の記事

Raspberry Pi 3が届いた!

おはようございます。花粉症が今年もひどく、休日の朝はゴロゴロしていたのですが、電車の ペーパークラフトに最近また凝りだした次男に、新しい車両を印刷してくれ!とたたき起こされる パターンの@kjunichiです。

陸マイラー始めるならECナビ! 500ポイントプレゼント!

背景

初代Raspberry Piを持っており、会社の社内勉強会で、iOSで課金されずにテザリングするシステムを Rasbperry Piで動かすデモをやったりと、そこそこ活躍してましたが、 SDカードのメモリがよく飛ぶのと、圧倒的な速度の遅さで最近は使わなくなっていた。

子供たちも少し成長し、当初部品の誤飲等が心配で出来なかった電子工作ができるようになり、ブレッドボードがついている Rasbperry Pi用のキットを買ったら、端子が初代Raspbeery Piと現行のPi 3では異なっていた。イマドキ初心者が便利に なんちゃってIoTを楽しむにはPi 3が便利そうなことを体験した。

Raspberry Pi 3の購入費の捻出

ポイントサイトでカードを作るとポイントがもらえるらしいことを知った。 が、よくよく調べたら、作ったカードで5000円ほど利用しないといけなかった。

この基準を達成するのに、ちょうどRaspberry Pi 3がちょうどよかった。

今回利用したのがECナビさんでもう終了してしまいましたが、アメックスのキャンペーンでした。 このカードも年会費が入会年度無料で次年度以降もカードの利用があれば費用が掛からないという、 維持費の心配が少ないお得なカードでした。

毎日楽しくお得にポイント貯めるなら、ECナビ!いますぐ無料登録!

自分の作ったカードのキャンペーンはすでに終了していますが、ほかにも、 お得なカードがたくさんあるようでした。このテクニックで奥さんに怒られないガジェットの購入が 出来るかも!?

Rapberry Pi 3がやって来た

Raspberry Pi 3本体は日本製が評判良かったので、日本製のものを探して購入した。

f:id:kjw_junichi:20180305210212j:plain

関連記事

11年前の記事

8年前の記事

1年前の記事

mruby-mrmagickをGraphicsMagickに対応させた

こんにちは、今週も奥さんが出張です。しかも、長男がまた発熱というおまけつきです。不幸中の幸いというか、長男はインフルは陰性でした。@kjunichiです。

背景

Ubuntu 16.04LTSで素の状態ではGraphicsMagickが使われることを先日の記事で学んだ。

CIはTravis-CIでLinux上で回してるからてっきりGraphicsMagickでも動くものと思い込んでいた。 しかし、実際には先日のUbuntu 16.04LTSのGraphicsMagick環境ではmruby-mrmagickは動かなかった。。

github.com

GraphicsMagickに対応する為に必要だった2点

  • InitializeMagickを初期化時にちゃんと呼ぶ
  • 有無の分からないEXIF情報取得にImage#profileを使わない

InitializeMagickを初期化時にちゃんと呼ぶ

これまでのコードは、もう書いてからずいぶん時間が経過しており、記憶に内が、 なんとなく、レイトバインディングな考えで、必要になるまで余計なことをやらない方針だったと思う。

その為、ImageMgaickの初期化も、必要な個所まで引き延ばそうとした作り出ったし、 必要なところ(動かすと落ちる)の直前で初期化を実施するつくりにしていた模様。

今回GraphicsMagickに対応するに当たり、これをmrbgemの初期化時に行うように変更した。

有無の分からないEXIF情報取得にImage#profileを使わない

GraphicsMagickのMagick++ APIではImage#profileをJPEGでもEXIFが無い画像に対して行うと、落ちる。

'Magick::ErrorCoder'
what(): Magick: No APP1 data is available () reported by coders/meta.c:2369 (WriteMETAImage)

当初、この箇所が分からず、回転操作関連のテストで落ちるだけしか分からなかったが、 なんとか、再現コードまで辿り着け、問題解決につながった。

再現コード

#include <iostream>
#include <Magick++.h>

using namespace std;
using namespace Magick;

int main(int argc, char **argv) {
InitializeMagick(*argv);
Image img;
img.read("output.png");

Blob blob = img.profile("EXIF");

if (blob.data() == NULL) {
  cout << "exif == NULL"<<endl;
  static unsigned char dexifData[] = {
    69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 9, 1, 15, 0, 2, 0};
  Blob exifdata(dexifData, 3);

  img.profile("exif", exifdata);
}
return 0;
}

ビルド

g++ -o test05 test05.cpp `GraphicsMagick++-config --cppflags --libs --ldflags`
convert -size "640x480" -background "#C0C0C0" -fill "#FFFF00" caption:"ABC" output.jpg
./test05

幸い、EXIFのカメラの回転情報といったより、具体的な項目を指定するImage#orientationメソッドではGraphicsMagickでも落ちずに0が返される 動きだったので、こちらを使う事で対応出来た。

-    Blob blob = img->profile("exif");
-    if (blob.data() == NULL) {
-      // we generate dummy exif data.
+    if(img->orientation() == 0) {
       Blob exifdata(dexifData, dexifDataLength);
       img->profile("exif", exifdata);
-      // make own exif data.
     }

関連記事

13年前の記事

7年前の記事

4年前の記事

2年前の記事