Briswell Tech Blog

ブリスウェルのテックブログです

【無料ウェビナー開催!】AI導入のための3つのポイント【お知らせ】

こんにちは。id:yukitakaiです。
いよいよ本日となりました、AIウェビナーのご案内です。

f:id:yukitakai:20201027110812p:plain

参加受付をお済みでない方は、ぜひお申し込みください!

<開催日時>

10/27(火)19:00 ~20:30
youtube liveにて

チャンネル登録をしていただけますと嬉しいです!
Briswell AI Team - YouTube

<こんな方におすすめ>

  • AIを導入したいが、何から手を付けたらいいのかわからない
  • AIをビジネスに活用したいが、何に活用できるのかわからない
  • そもそもAIがどのようなものかわからない
  • AI開発を検討しているが、どのように進めたらいいのかわからない

上記に1つでも当てはまれば、是非とも参加をお勧めします!

<セミナー概要>

セミナーでは、

  • AIとは何か
  • AIが何に活用できるのか
  • どのようにAIを導入・開発すればいいのか

などについて、具体例を通してご紹介いたします。

セミナーのゴールは、「AI導入、利用の勘所」を理解していただくことで、
ウィズ&アフターコロナ時代に必要とされる、企業のAI活用にお役立ていただければと思います。


ブリスウェル一同、皆様のご参加を心よりお待ちしております。

何卒よろしくお願い申し上げます。

DX デジタルトランスフォーメーション ー ブリスウェルの視点

こんにちは、ブリスウェルの山口です。

今週水曜日から3日間、幕張メッセでJapanITWeekが開催されます。

ブリスウェルは業務アプリ、WEBアプリ、スマホタブレットアプリなどのシステム構築を主力事業としてきましたが、 2−3年前からはIoTやAIなどの新しい技術領域でのプロジェクトも経験してきており、今回はAI自動化展に出展致します。

最近のバズワードともいえるDX(デジタルトランスフォーメーション)とは何なのか、ブリスウェルがどのように関わってくるのかを考察してみました。
ということで、今回はブリスウェルの視点で捉えたDX(デジタルトランスフォーメーション)というテーマで書いていこうと思います。

DXとは?

そもそもDXとかデジタルトランスフォーメーションとは何なのか調べてみました。
経済産業省が中心となって推進しているデジタルトランスフォーメーションに向けた研究会では以下のように定義されています。

「企業が外部エコシステム(顧客、市場)の破壊的な変化に対応しつつ、内部エコシステム(組織、文化、従業員)の変革を牽引しながら、第3のプラットフォーム(クラウド、モビリティ、ビッグデータ/アナリティクス、ソーシャル技術)を利用して、 新しい製品やサービス、新しいビジネス・モデルを通して、ネットとリアルの両面での顧客エクスペリエンスの変革を図ることで価値を創出し、競争上の優位性を確立すること」

また、企業が生き残るための鍵として、以下のようなポイントを挙げられています。

「DXを実装する第3のプラットフォーム上のデジタルイノベーションプラットフォームの構築において、開発者とイノベーターのコミュニティを創生し、分散化や特化が進むクラウド2.0、あらゆるエンタープライズアプリケーションでAIが使用されるパーペイシブAI、マイクロサービスやイベント駆動型のクラウドファンクションズを使ったハイパーアジャイルアプリケーション、大規模で分散した信頼性基盤としてのブロックチェーン、音声やAR/VRなど多様なヒューマンデジタルインタフェースといったITを強力に生かせるかにかかっています。」

なるほど、そういうことですね。とても幅広い領域を一言のキーワードで表現していますね。
色々な企業の文脈で使用されるため、フワっとしてとらえどころが難しい言葉だったんですね。

でも、まだ一つ疑問が残ります。
何で「X」やねん?
トランスフォーメーション Transformation どこに「X」があんねん?

英語の接頭辞「trans-」が「交差する、横切る」のような意味を持ち、視覚的に「X」と表現されたということのようです。
英語がネイティブではない日本人としては、なかなか頭の中に定着しにくい一つの原因かもしれません。
せっかく調べたので、展示会でセールストークの一環で使っちゃいます!

DXを進める上での課題

企業がDXを推進していく上で大きな障害となるのが、レガシーシステムです。
社歴が長ければ長いほどレガシーシステム問題は大きなものになっていると思います。

ブリスウェルの関わったプロジェクトでも様々なレガシーシステムがありました。

大手企業様の場合は、特に基幹系システムがレガシーシステム化していて、予算的にもスピード的にもそこに手を入れずらいということで、クラウド技術を使ってスピーディにサブシステムを構築したケース。
中堅企業様の場合は、業務データを非オープン系のソフトやAccessExcelで管理していたが、リアルタイムに取引先とデータを共有したりできないため、クラウド基盤をベースに基幹システムを再構築したケース。
などなど
ベンチャー企業様の場合は・・・レガシーシステムはほとんどありませんでした。

ブリスウェルではお客様から特に指定が無い場合は、クラウド上にシステム構築をすることがほとんどです。
AWS、Azure、GCPなど様々なクラウドプラットフォームを活用しています。
AWSに関してはテクノロジーパートナーであり、専門技術者も在籍しています。
そういう意味では創業以来ずっとお客様の「DX」をシステム面でサポートしてきたことになり、特段新しいことではないのかもしれません。

デジタルトランスフォーメーションに向けた研究会のレポートでは、レガシーシステムの問題として以下のような問題が取り上げられています。

・ドキュメント未整備のため調査に時間がかかる
 → ブラックボックス化が問題の本質
レガシーシステムとのデータ連携が困難   
 → 事業部ごとの最適化を優先し、データが全社最適化されていない
・影響が多岐に渡るため試験に時間がかかる  
 → IT関連費用のうり8割以上が既存システムの運用保守に充てられている

これらの問題は以下のような調査結果からも確認ができます。

レガシーシステムがDXの足かせになっている
レガシーシステムがDXの足かせになっている

レガシーシステムが足かせと感じる理由
レガシーシステムが足かせと感じる理由

レガシーシステムが存在することによるリスク・課題
レガシーシステムが存在することによるリスク・課題

ランザビジネス予算とバリューアップ予算の割合
ランザビジネス予算とバリューアップ予算の割合

DXの実現方法

デジタルトランスフォーメーションに向けた研究会のレポートにとてもわかりやすい考え方がありましたので、ご紹介します。

情報資産の分類
情報資産の分類
情報資産の分類
A.頻繁に変更が発生し、ビジネス・モデルの変化に活用すべき機能は、クラウド上で再構築
B.変更されたり、新たに必要な機能は、クラウドへ追加
C.肥大化したシステムの中に不要な機能があれば、廃棄
D.今後、更新があまり発生しないと見込まれる機能は、その範囲を明らかにして、塩漬け

AとBがまさにお客様と共にブリスウェルが実施してきたプロジェクトそのものです。
場合によっては、今後のビジネスの拡大や拡張性を見据えて、共通API化するコア機能を検討するなど、構想策定や要件定義など上流フェーズでは様々な議論を重ねてきています。

ビジネスとシステムの融合が進み、世の中のスピードが加速する中で、差別化するために経営資源を投入すべき対象を絞り込み、一気にDXを進めるという決断が求められているのだと感じています。

ブリスウェルのDX

私たちブリスウェルもお客様と共にDXを実現するため、新技術に挑戦しながらお客様へのサービス提供の付加価値を高める努力を続けています。
そのチャレンジの一環として、中小企業向けクラウドERPソリューションをリリースしました。
https://ai-cata.com/

自社でクラウドサービスを提供することで、受託開発事業の範囲ではチャレンジしきれなかった技術投資を行い、DXの担い手としての知見を広げていくつもりです。

ITサービス産業の規模の中に占めるパブリッククラウド関連市場はまだまだ小さい状況ですが、この波が増大することは間違いありません。

パブリッククラウドの拡大傾向
パブリッククラウドの拡大傾向

受託開発事業ではお客様のDXを実現し、自社サービス事業で自らのDXを実現する。 この2つの事業をクロスオーバーさせながらブリスウェルのDXを進めていこう!というイメージです。

今回はDXをブリスウェルの視点で書かせていただきました。
皆様のお役に少しでも立つことができたら幸いです!

タグをつける 4301文字

今更ですが、ZOZOMAT使ってみた

f:id:T_Hyo:20200714181305j:plain

はじめまして、Tashiroです。

今更ではありますがZOZOMATを使用してみたので、申込〜計測完了までのフローを簡単に紹介していきます。

私自身ZOZOTOWNのユーザーアカウントはすでに持っていましたが、 最近はZOZOTOWNで買い物しておらず、 久しぶりにログインしたところZOZOMATの無料申込のPRを見て興味本位に申し込んでみました。

ZOZOMAT申込方法

f:id:T_Hyo:20200714183758p:plain

まずはZOZOTOWNのTOPページより「メニューバー」->「ZOZOMAT」を選択します。遷移した画面上の青字ボタン「ログインして無料で申し込む」ボタンを押します。(画像はPC版です)

※ZOZOMATの申込には会員登録が必須となっていますのでご注意を。

f:id:T_Hyo:20200714184515p:plain

会員情報でログインすると簡単な項目入力があるので記入していき「OK」を押します。 その後登録されているあなた住所情報が表示されますので、問題なければ表示されている住所を選択します。

”これで申込完了です!”

なんだ、こんとんじょのいこ!!

ZOZOMAT到着、商品レビュー

待つこと10日ほど... ついに届きましたZOZOMAT! 想像していたものとは異なり、意外と簡素な感じて届きました。

f:id:T_Hyo:20200714192817j:plainf:id:T_Hyo:20200714193443j:plain f:id:T_Hyo:20200714193430j:plain

それもそのはず、素材は紙質のものでした。(もっと機械的なパーツが埋め込まれていて格好いい感じを想像していました...)

縦横40×40cmくらいでしょうか、学校の保健室の壁に貼ってありそうなデザインですねー

ちなみに封入物はこのシートのみでした。

計測開始

ではでは早速計測していきましょう! ...といきたいとこですが、

ZOZOTOWNのアプリを使用しないと計測できませんので、まずはアプリをダウンロードしましょう!

※ダウンロードリンクは記事の最後に添付してあります

ダウンロードが完了したらアプリを起動します。

f:id:T_Hyo:20200721190719p:plain

アプリを起動後、右下の「計測・その他」を押して「計測開始する」を押します。 利用規約を承諾すると、遂に計測が始まります。

f:id:T_Hyo:20200715211922p:plain f:id:T_Hyo:20200715211932p:plain

画面で1分30秒ほどの測定フロー動画が流れますので、動画上のイケメンを自分だと思い込みながら流し見程度でOKです。

(このあとの計測時にも都度音声案内が入りますので、ご安心を。)

f:id:T_Hyo:20200721194759p:plain f:id:T_Hyo:20200721194833p:plain

さて測定開始です。 まずは左足を足型の絵に合わせて立ち、音声の指示通りにZOZOMAT記載の6つのカラーの角度から足を撮影していきます。

※ゆっくり動かさないと怒られちゃうので焦らずいきましょう

左足が完了したら、同じ流れで右足も測定していきます。

f:id:T_Hyo:20200721193025p:plain

問題なく測定できましたら「計測結果を見る」を押して、いよいよ結果発表です!! 0゚・∀・) ワクテカ

計測結果

f:id:T_Hyo:20200715212131p:plain f:id:T_Hyo:20200721192815p:plain f:id:T_Hyo:20200721193355p:plain

おー、なんか3D!! 足の詳細な計測データがたくさんでてきました。

この3Dモデルはあんな角度やこんな角度から見れちゃいます。

わかりやすく例えるならガンダムの全天周囲モニターですね。

「足型について詳しく見る」を押すと詳細な分析データが見れます。

f:id:T_Hyo:20200715212109p:plain f:id:T_Hyo:20200715212121p:plain

なるほど私の足は親指よりも人差し指が長い”ギリシャ型”らしいです。

(ケヴィン・デ・ブライネのスルーパス並にズバリ当たっています)

ちなみにここでは、ZOZO集計による約100万人の足データを元にした平均値と自身の足を比較した分析結果がでているようです。すごい!!

計測結果はZOZOTOWN商品とどのように連携できるのか

さて、この計測結果はどのようにZOZOTOWNでのショッピングに活かせるかといいますと...

上記の計測結果画面で「相性のいいシューズを見る」を押すと自身の足に合ったシューズ商品を提案してくれます。

が、ここで1つ大きな落とし穴が!!

どうやらZOZOTOWNで扱っているシューズ全てと自身のサイズの相性度を比べることはできないようです。

f:id:T_Hyo:20200721195200p:plain

上記画像のように「ZOZOMAT対応」のアイコンがついていない商品はサイズ相性度が測れないのです... まあ商品の総数がすごいですし、今後少しずつ対応していくの感じなのでしょうか?

ZOZOMAT感想

最後にZOZOMATを使用してみた感想ですが、 思っていたよりも複雑な手順はなく本当に簡単に足を計測することができました!

個人的には全シューズがサイズ相性度を比較できないところが少し残念なところでした。

ただ、ZOZOTOWNに限らず他のオンラインストアでシューズを買う際にもZOZOMATでの測定値はかなり参考になりそうです。

次のZOZO○○シリーズある際には注目したいところですね。

以上になります、最後まで読んでいただきありがとうございました。

ZOZOTOWN

zozo.jp

・ZOZOアプリ(iOS)

ZOZOTOWN ファッション通販

ZOZOTOWN ファッション通販

  • ZOZO, Inc.
  • ショッピング
  • 無料
apps.apple.com

・ZOZOアプリ(Android)

play.google.com

MacのOSをアップデートしたらsvn が使えなくなったお話

こんにちは。
としです。

最近のおすすめの音楽はBiSH の スーパーヒーローミュージック です。

www.youtube.com

可愛いです。

さて、私は常日頃からインストールしているアプリケーションやPCのOS、iPhoneのOSは新しいバージョンが配信されたらすぐに更新するように心掛けております。
そんな中、かなり前にMacのOSをCatalina に更新したところSVNが使えなくなってしまいました。

様々な情報を調べ、やってみたのですがなかなかうまくいかなかったので、社内備忘録としても残しておこうと思います。


...最近まで放置しておりました。
しかし、プロジェクトの都合によりSVNがどうしても必要になってしまったので、使えるようにしました。

  • うまくいかなかったお話
    少し調べてみると、 xcode-select をインストールするといけるよ!
    という声がちらほらあったので、やってみることに...
    ※個人の備忘録なので、やってみて環境が壊れた!等責任は追えないので何卒ご了承ください。

    xcode-select --install
    xcode-select: error: command line tools are already installed, use "Software Update" to install updates

    既にあるよ、と怒られた。
    それならば一回消してみようか。

    sudo rm -Rf /Library/Developer/CommandLineTools

    xcode-select --install
    これを実行するとGUIでインストールしますか?と聞かれます。
    が、「このソフトウェアは、現在ソフトウェア・アップデート・サーバから入手できないため、インストールできません。」
    と怒られました。
    なので、

https://developer.apple.com/download/more/


ここで、 [command line tools] を検索し、自身の Xcode versionに適した command line tools を落とします。
Done. 完了しました。
これで叩けるぞ!

svn --version
svn: error: The subversion command line tools are no longer provided by Xcode.

残念ながら状況は変わってない...

  • うまくいったお話
    というか普通に brew で install したらどうなるんだろう...
    brew install svn

...はい、これでうまく行きました。
無事にsvnが使えるようになりました。

OSを更新したりすると、今まで行っていたことができなくなるということもあるかと思いますが、
セキュリティ上、古いOSのまま放置するのはよくないので、適切なタイミングで更新をかけていきましょう。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

MySQL クエリの小技集

こんにちは、naoyaです。
10月に入り一気に涼しくなり、ここ数年では早く思える秋の訪れを感じます。
僕は春は花粉症で薬が手放せず、夏は暑さが苦手でエアコンに頼りっきりなので涼しい秋の気候が一番好きです。

はじめに

今回のお題はMySQLにおけるクエリについてとなります。
先日、新たにテスターとして参画した社員向けにMySQLのSELECT文などの説明をする機会がありました。
そんな中、普段何気なく使っている関数などが意外と知られていなかったりするのかな、と感じたものがあり今回は改めて応用的なテクニックをまとめてみました。

CASE句

条件に応じて指定の文字列や異なるカラムを1つの列に出力したい時は
CASE WHEN "条件A" THEN '"条件Aの場合の結果"' ELSE '"条件を満たさない場合の結果"' END
で条件に応じた結果を表示することが出来ます。
(WHEN ~ THEN ~ は複数記述可能)
イメージとしてはJavaScriptExcelの関数でも使われるIF文のようなものです。

例、注文(order)テーブルの情報から、「納品状態」を納品日(deliveryDate)が過去なら"納品済"、納品日が未来なら"納品予定"、それ以外(≠日付が入っていない状態)は"納品日未定"と出力する

SELECT id,deliveryDate,
CASE 
WHEN deliveryDate <= CURDATE() THEN '納品済' 
WHEN deliveryDate > CURDATE() THEN '納品予定' 
ELSE '納品日未定' END AS `納品状況` 
FROM `order`


四則演算や四捨五入

カラム同士を+ - * / で繋げることで四則演算が出来ます。

例、注文の明細(orderDetail)の価格(price)と数量(amount)から金額の計算を行う

SELECT price * amount AS `金額` FROM `orderDetail`


TRUNCATE("数値","桁数")
で切り捨てが出来ます。
これを応用することで切り上げ/四捨五入も可能です。
(四捨五入はROUND関数でも近い挙動をするが、厳密には処理内容が異なる)

例、単価 * 数量の金額計算で小数点以下を
切り捨ての場合

SELECT price,amount,TRUNCATE(price * amount,0) AS `金額` FROM `orderDetail`;


切り上げの場合

SELECT price,amount,TRUNCATE(price * amount + 0.9,0) AS `金額` FROM `orderDetail`;

対象の数値に0.9 ※1 を足すことで1の位が繰り上がり、
TRUNCATEで切り捨てることで結果が切り上げと同様の結果になります。※2

※1 対象の数値の小数点以下が1桁までの場合は+0.9、
2桁までの場合は+0.99...と切り上げ処理を行う前の桁数に応じて可変させる

※2 処理前の数値 = 1.2 → 1.2+0.9 = 2.1 → 切り捨てを行い結果は2
処理前の数値 = 1.9 → 1.9+0.9 = 2.8 → 切り捨てを行い結果は2
でどちらも結果は切り上げとなる

四捨五入の場合

SELECT price,amount,TRUNCATE(price * amount + 0.5,0) AS `金額` FROM `orderDetail`;

切り上げとほぼ同じ理屈で0.5を足して1の位が繰り上がるかどうかで四捨五入と同様の結果になります。

LIMIT,OFFSET

LIMITとOFFSETを利用して表示する結果の件数を変更できます。
主に検索結果のページングなどで利用します。

例、注文(order)情報を日付(orderDate)が古い順に50件づつ表示する
1ページ目、100件の内の1~50件目

SELECT * FROM `order`
ORDER BY orderDate
LIMIT 50;


2ページ目、100件の内の51~100件目

SELECT * FROM `order`
ORDER BY orderDate
LIMIT 50
OFFSET 50;

検索結果の"OFFSET+1"件目から"LIMIT"件のレコードを表示する形になります。
(OFFSETは検索結果の先頭から除外する件数、というイメージ)

1:Nの関係から最大値(最小値)と紐づくデータの取得

テーブル同士の連結を行うLEFT JOINを利用して、1:Nで紐づくデータからN側のテーブルの特定のカラムが最大値(最小値)のデータを抽出することが出来ます。

例、顧客(customer)に紐づく注文(order)の中で、最新(order.createdAtが最も未来日の1件)の注文情報を抽出する

SELECT c.id,c.name,o1.id,o1.createdAt FROM `customer` AS c
LEFT JOIN `order` AS o1 ON c.id = o1.customerId
LEFT JOIN `order` AS o2 ON c.id = o2.customerId AND o1.createdAt < o2.createdAt
WHERE
o2.id is null;

o2はo1のレコードより新しいcreatedAtのレコードを探すため、o2に該当するレコードが見つからない(o2.id is nullの)o1のレコードが最新の注文という考え方です。
日付や金額など、比較可能なデータであれば同様に取得可能です。
(比較演算子を逆にすれば最小値も取得可能)

条件付きのUPDATE文

こちらは非常に限定的な使い方をしたので実例に沿って説明します
本番運用中のプロジェクトで一部画面のリスト値に更新が入り、お客さんの要望もあって下記のようなリスト値の変更が発生しました
(変更前の値は残っているが、対応する数値が変わった)

変更前

1:B
2:D
3:H


変更後

1:A
2:B
3:C
4:D
5:E
6:F
7:G
8:H


該当のカラムを 1:B → 2:B、2:D → 4:D、3:H → 8:H にそれぞれ変更したいが、
順番にUPDATE文を実行すると元が1 or 2だったデータが全て4になってしまう
3→8、2→4、1→2の順に1つづつUPDATE文を実行でも良いですが、CASE文を使用すれば複数のUPDATEを一括で実行出来ます。

UPDATE `table`
SET `column` = CASE WHEN `coumn` = ‘1’ THEN ‘2’ WHEN `column` = ‘2’ THEN ‘4’ WHEN `column` = ‘3’ THEN ‘8’ ELSE NULL END;

例は限定的ではありますが、WEHN ~の条件に応じて更新が出来るので一括更新が必要な場面では使い所がありそうです。

UPDATE/INSER文

既に存在しているレコードに対して一括で任意の項目を更新したい場合、
INSERT文の後ろにON DUPLICATE KEY UPDATE を付けることでPRIMARY KEYの項目がDBに存在していなければ新規行のINSERT、存在していれば指定の項目のUPDATEを行う

INSERT INTO `table`(`id` , `column1` , `column2`)
VALUES
('1' , 'aaa' , 'あああ'),
('2' , 'bbb' , 'いいい'),
('3' , 'ccc' , 'ううう')
ON DUPLICATE KEY UPDATE
column1 = VALUES(`column1`);

id がPRIMARY KEYであり
id = 1と2が存在するレコードで3は存在しないレコードである場合、
id = 1と2の行はcolumn1のみUPDATEされ、
3はcolumn2も含めて全ての項目がINSERTされます。

対象データ全件をCSVなどで出力しExcelなどでデータを更新し、
INSERT文を生成すれば更新したい項目のみをUPDATE出来ます。

おわりに

普段プログラムを書かない人間なので、システムの内部で具体的にどういった事をしているのかまでそこまで詳しく把握しておらず、これらをテスト時に都度調べながら使っていた頃は「こんな事が出来るのか」程度の認識でした。
DBを扱う処理は実際には今回挙げたようなクエリを実行して検索や更新が行われているので出来て当たり前といえば当たり前でしたね。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

この10年で最も面白いAI技術【GAN】について

こんにちは大澤です.

今回は機械学習の研究分野でとても盛り上がっている「GAN」というAI技術をご紹介したいと思います.(ちょっと今更感ありますが…)

GANとは

2014年にイアン・J・グッドフェロー(Ian J. Goodfellow)らによって発表された,機械学習の新しいアルゴリズムです.

ちゃんとした名前は「Generative Adversarial Networks(敵対的生成ネットワーク)」と言います.

これの頭文字を取って「GAN」ということなのですね.

敵対的"生成"ネットワークというだけあって,何かを生成することができる技術です.

2014年発表から現在に至るまで,毎日のようにGANに関する新しい研究論文が発表されており,AI研究の分野ではとても盛り上がっています.

そしてこのGANはヤン・ルカンというAI研究者からこのように評されています.

"This, and the variations that are now being proposed is the most interesting idea in the last 10 years in ML, in my opinion."

機械学習において,この10年で最も興味深いアイディアだと思う

このGANは何がそんなに面白いのでしょうか.

GANでできること

GANのアルゴリズムなどの難しい説明はさておき,とりあえずどんなことができるのかをご紹介します.

まずはこちらの画像を見てみましょう.

f:id:kyoshi0000:20201002151344p:plain

カバンの線画ですね.

このカバンに色を付けてリアルなカバンを描きあげたいと思います.例えばこんなものはどうでしょうか.

f:id:kyoshi0000:20201002151136p:plain

すてきなカバンですね.使い込まれた革製品のような風合いを見事に表現していますが…実はこれ,GANによって着色がされています.

f:id:kyoshi0000:20201002152327p:plain
引用[Image-to-Image Translation with Conditional Adversarial Networks]

つまりINPUTとして線画を与えると,それに対応したカラー画像を自動で生成してくれるわけです.

これはpix2pixと呼ばれており,これ以外にも様々なことができます.論文の中でいろいろな生成パターンを見せてくれています.論文の中身は英語なのですが,画像がたくさんあるのでそれを見るだけでも割と楽しいです.

また,上記のように2つの対応した画像から学習するタイプではなく,「教師なし」つまり人が正解データを直接与えずとも2つのドメインの特徴を入れ替えることができるcycleGANというものもあります.

f:id:kyoshi0000:20201007095444p:plain
引用[Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks]

こちらのすごいところは「とりあえずシマウマの写真をたくさん集めてくる」「とりあえず馬の写真をたくさん集めてくる」それだけで上記の入れ替えが可能となるところです.

なんとなく「GANってすごいな」というのが伝われば幸いです.ちなみにpix2pixに関しては,こちらのサイトで簡単に試すことができます.

Image-to-Image Demo

線画から「猫」を生成できるとのことだったので,こんなクリーチャーを生み出して遊んでました.

f:id:kyoshi0000:20201002155445p:plain

毛ガニです.ちゃんと目の部分も認識してるところがホラーですね.

ともあれ,数年前までは「単純作業はAIに任せ,人は創造的な作業を担当するべきだ」などと言われていましたが,このGANというアルゴリズムが誕生したことで,AIでも創造的な作業が可能になったわけです.

GANの仕組み(簡単ver.)

GANの面白いところは上記のように絵が書けるだけではありません.学習方法もちょっと変わっています.

以前瓜生さんが少しGANに触れた記事を書いていましたが,GANの学習方法は「絵画の贋作作家と鑑定士」に例えられることが多いです.

贋作作家が本物を真似た絵を複数描き,本物に混ぜて鑑定士に渡す

 ↓

鑑定士は複数の絵の中から贋作と本物を見極める

 ↓

その結果を元に贋作作家はより本物に近い贋作を複数作り上げ,本物に混ぜて鑑定士に渡す

 ↓

鑑定士はより見分けづらくなった中から贋作と本物を見分ける

 ↓

以下ループ

これがGANの簡単な仕組みです.つまりGANでは「生成モデル(贋作作家)」と「分類モデル(鑑定士)」の異なる2つのモデルを交互に,しかも競い合うように学習させているわけです.これが”敵対的”と言われる所以なのですね.

ただ,この学習はとても繊細なパラメータチューニングが必要になってきます.なぜなら「贋作作家と鑑定士のどちらか一方がとても優秀(劣っている)」という状況を作ってはいけないからです.

例えば鑑定士が節穴で贋作作家の作った偽物をなかなか見抜けない場合,駄作であった場合でも本物と判定してしまうので,贋作作家の技術は向上せずに駄作ばかりを生み出します.

逆に鑑定士が優秀すぎる場合,贋作作家がどんな作品を作っても偽物と見破られてしまうため,贋作作家としてはどのように改善すれば本物に近くなるのかがわからないままになってしまいます.

つまり2つのモデルのパワーバランスが大切になってくるということなのです.

GANの活用

さて,これまでは「絵描き」としてのGANを紹介してきました.それだけでも十分なインパクトでしたが,GANの技術を「面白かった」だけで終わらせてしまうのはもったいないので,どんな活用方法があるのか?という点を最後にすこしご紹介します.

SRGAN(超解像化)

例えば96✕96pxの画像から4倍の384✕384pxに変換することを想定します.

通常であればBicubic補間あるいはBilinear補間を利用して画像を大きくしますが,これでは画像がボケてしまいます.しかしその補間したい部分をSRGANで生成してあげると,ボケない拡大画像(超解像)を実現することができるのです.(論文)

f:id:kyoshi0000:20201009145028p:plain
引用[Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network]

AnoGAN

こちらはGANを異常検知に応用したものです.正常データのみ学習させ,与えた画像から正常な画像を生成するようなモデルを作ります.すると,異常な画像(下図1段目)を与えたときも,そこから正常な画像(下図2段目)を作り出そうとします.

その差分をとってあげることで異常箇所を浮かび上がらせることができるのです.

f:id:kyoshi0000:20201009151913p:plain
引用[Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery]

さいごに

いかがでしょうか.GANの面白さや可能性が伝われば幸いです.アイディア次第で面白いことが色々とできそうですので,これからの動向にも注目していきたい技術です.

また,弊社ではAI導入セミナー(オンライン)も実施予定です.

"AIを導入したいけど,何から手を付けたらいいかわからない"

"AIをビジネスに活用したいけど,何に利用できるのかわからない"

"そもそもAIがどんなものかわかっていない"

といった方々を対象にしており,AIをどのように活用し,どのように導入するかという内容になる予定です.

ご興味のある方は弊社までお問い合わせいただけますと幸いです.

DockerでnginxとAPIを動かす

どうも、こんにちは。としと申します。
いかがお過ごしでしょうか。

真夏のピークが去りましたね。
若者の全てが染みるこの頃です。(下書き期間が長すぎて、ちょっと今じゃない感は無視してください(´Д`;))

さて、今までElastic Beanstalk の記事を数本書かせていただきました。
その後、ローカルでDockerを動かすことが出てきたので、Dockerの設定と、どうせローカルで使うならまずはElasticBeanstalk on Docker を使ってみようじゃないか! と思い、色々調べながらやってみております。

(以下、Docker Desktop がインストールされている前提です。)
まずはDockerfile...

# ベースイメージを指定
FROM node:latest

# 作業ディレクトリ作成して設定します
WORKDIR /usr/share/nginx/html/

# 必要な環境変数をここに記載します
ENV JWT_SECRET=""
ENV JWT_EXPIRATION=""
ENV MYSQL_DATABASE=""
ENV MYSQL_READ_HOST=""
ENV MYSQL_READ_PASSWORD=""
ENV MYSQL_READ_PORT=""
ENV MYSQL_READ_USERNAME=""

# package.jsonをこぴります
COPY package*.json ./

RUN npm i

# アプリケーションのソースをバンドルします
COPY . .

# PORT
EXPOSE 8081

CMD ["node", "dst/server.js"]

とりあえずこれで

docker build -t userName/api .

↑build

docker run --name api -p 8081:8081 -d userName/api

↑これで起動

で動いてくれました。

docker ps

↑これで動いている一覧がみれます。

docker ps -a

↑ -a をつけると停止しているものもみえます。

docker stop api

↑一回止めましょう。

続いて docker-compose を使っていきます。 先ほどのDockerfileはアプリケーションのDockerfileなので、ファイル名をDockerfile-appに変更します。

新しくDockerfile-web を作ります。

# ベースイメージを指定
FROM nginx:latest

# default.conf 書き換え
COPY ./default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

default.conf

server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://api:8081/;
    }
}

続いて docker-compose.yml を作ります。

version: '3'
services:
  web:
    build:
      context: docker      # Dockerfile保存場所
      dockerfile: Dockerfile-web    # Dockerfileファイル名
    image: nginx      # docker image name
    container_name: nginx       # docker container name
    expose:
      - 80
    ports:
      - 80:80

  app:
    build:
      context: ./      # Dockerfile保存場所
      dockerfile: Dockerfile-app   # Dockerfileファイル名
    image: api                  # イメージ名
    container_name: api         # コンテナ名
    expose:
      - 8081
    ports:                          # ポート接続
      - 8081:8081
    volumes:                        # mount workdir
      - .:/usr/share/nginx/html/
    command: ["node", "dst/server.js"]

今回のフォルダ構成
PJ/Dockerfile-app
PJ/docker-compose.yml
PJ/docker/Dockerfile-web
PJ/docker/default.conf

その後

docker-compose up --build

↑を実行すると動いてくれます。

f:id:Toshi_bw:20200630122310p:plain

このような感じになれば成功です!

調べながらなので、中々時間がかかりました...

次回はAWS ECR にDocker imageをあげてみるとこら編を記載しようかなと思います。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

Airtableを試していたらGoogleからTablesも発表された

kintoneの類似サービスのAirtableを少し試してみました。

Airtableとは

Airtableの特徴

  • 画面の操作感がExcelやSpreadSheetに近い
    • kintoneだと画面遷移が必要で静的なページが多いです。

f:id:usami-t:20201002141631g:plain
Airtable操作イメージ

  • ルックアップが即時反映

    • kintoneだとデフォルトの動作はルックアップの項目を更新しても、参照しているデータは更新されません。実現するにはプラグインなど必要です。
    • Airtableはデータベースで外部キー参照している感覚です。
    • また、1つのフィールドに複数の値を持つことが可能です。

      https://support.airtable.com/hc/article_attachments/360024030014/linked_records_2.gif

  • 日本語の情報が少ない

    • 日本語での情報量はkintoneの圧勝です。
  • 無料プランがある Pricing - Airtable

    • kintoneは基本的に有料です。
  • FormのURL共有

    • レコードを追加可能なフォームのURLが即時共有できます。
    • プランによってはパスワード制限も可能です。
  • 1つのアプリ内に複数テーブル保持

    • kintoneでは1テーブルごとにアプリと呼びます。Airtableはbaseと呼ばれるアプリの概念があり、その配下に複数テーブル持つことが可能です。
  • Airtableとkintoneの共通点

以下の機能はどちらのサービスでも対応してます。

Tables

Airtableを試しているうちにGoogleがベータ版を公開しました。(現在使用可能なのはアメリカのみ)

blog.google

Googleの紹介動画を観ると、Airtableと似た操作感なのではないかなと思います。

  • データサマリの通知機能が強そうです。

所感

弊社ではユーザ向けWeb画面と管理画面の両方を開発する案件が多いのですが、 下記のような案件があってもいいなと感じました。

  • バックエンドはkintoneまたはAirtableで構築し、管理画面扱いとする。
  • フロント画面はAPIでアクセスを行う。
  • その他SaaSなどの外部サービスとのデータ連携を行う。
  • 基本機能で出来ない部分だけ弊社で開発 など...

kintoneやAirtableにREST APIが用意されているというのは結構強みなのかなと思います。

サービス内の標準機能でどこまで出来るのかといった点がシステム発注側の方も詳しいと、 実装難易度、工数、費用など認識が共有しやすくなるんじゃないかなと感じます。

SaaS導入などお考えでしたら是非弊社へお問い合わせください!

CSVファイルからExcel開いて困った世にも奇妙な話

どうもおはこんばんにちは。
まだまだ駆け出し中の社員kobaです。
もう気付けば9月も終わってしまいますね・・・
年々時の流れの速さに困惑してしまいます ´д` ;

前回は7月にExcelファイルからPDFファイルの変換で右往左往した話を
ご紹介させていただきました。

tech.briswell.com

今回は第2弾ということで
CSVファイルからExcelファイルを開いたら困った世にも奇妙な話を
ご紹介したいと思います(※ご存知の方がいらっしゃったらすみません)

当社では数々のシステムを扱ってますので
システムデータをCSVファイルに落として
CSVファイルからExcelを開いて
CSV内容とシステムデータが一致しているか確認する作業を行っております。
今回はその作業で起こった現象が2つあるので備忘録の意味でも
書かせていただきたいと思います。
ちなみに私が使っているPCはMacです。

CSVからExcelに変換したファイルデータ文字化けした

CSVファイルからExcelファイルへ変換したらファイルデータの一部が文字化けしました

f:id:briswellyuki:20200926163939j:plain
変換したExcelファイル文字化けした例
当初なにかやらかしてしまったかと思いましたが、
調べてみると文字コードが対応していないのが原因でした。
文字コードは簡単に言ってしまうと、
文字の種類に番号を割り振ったもののことをいうみたいです。
コンピューターはテキストの文字をその番号で判断しており、
対応されていない番号のファイルは正しく変換されず、
上の写真のような文字化けの状態になってしまいます。

・文字化けになったときの解決方法

CSVファイルをテキストエディットで開いて複製→保存すると
下記写真のような画面になります。

f:id:briswellyuki:20200926162808j:plain
CSVファイルをテキストエディットで開いて複製→保存時の画面

標準テキストのエンコーディングの部分が文字コード変換の設定になります。
どうやら元のCSVファイルはUTF-8になっていたようです。

f:id:briswellyuki:20200926162811j:plain こちらをShift-JISにして保存すれば
f:id:briswellyuki:20200926164244j:plain 正しく変換できました〜
かなり初歩的ではありますが、
文字コードの変換を忘れてCSVExcelに変換することは多い気がします。

1つのセルに複数の数値があるCSVを変換したら

1つのセルに複数の数値がある項目のCSVExcelに変換した場合、
Excelが勝手に1つの数値に変換してしまうことがありました。

f:id:briswellyuki:20200926171251j:plain
1つの数値に変換されてしまう例

別プロジェクトで複数の数値がある項目のCSVは正しく変換されている・・・
比べてみると最初以降の数値の前に半角スペースが入っているみたいでした。

f:id:briswellyuki:20200926174239j:plain
テキストエディターツールmiで開いた通常のCSV
半角スペース入れて変換してみたら
f:id:briswellyuki:20200926174010j:plain
テキストエディターツールmiで開いた半角スペース入力したCSV
f:id:briswellyuki:20200926174017j:plain
半角スペース入れたCSVを変換したExcel
正しく複数の値が1つのセルに表示されるようになりました〜
内容が薄いですが、なにか少しでも上記の情報がお役に立てたら幸いです。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

江戸屋敷がすぐそばに

f:id:KenjiU:20200927203521j:plain
Kazutripさんによる写真ACからの写真

夜な夜な江戸の古地図を眺めてタイムスリップを楽しんでおります。

現代の地図と見比べながら、当時あったが今はないもの、今もまだあるものと、違いを見つけながら歴史を紐解いていくと、とても楽しいです。

さて、弊社株式会社ブリスウェルですが、2019年2月に「渋谷区広尾1丁目」→「港区芝大門1丁目」に移転しました。

https://www.edomap.jp/
こちらのいつもお世話になっております「大江戸今昔めぐり」アプリで、それぞれの場所の地図を眺めてみましょう。

f:id:KenjiU:20200927203958p:plain
移転前:渋谷区広尾1丁目

f:id:KenjiU:20200927204031p:plain
移転後:港区芝大門1丁目

なんと
移転前の広尾(恵比寿)オフィスは、赤穂藩森家の下屋敷が目の前にあり、
移転後の大門オフィスは、赤穂藩森家の上屋敷が目の前にありました。
オフィスの窓から見ていた外の風景に、お屋敷があったことと、それも同じ藩主家の屋敷だったことには驚きです。両方の場所は、現在、平地で区画もきれいに四方に仕切られており、当時大きな建物があったような雰囲気はあります。

ちなみに
大門の地図の①には「赤穂藩森家上屋敷跡出土の石垣石」の遺跡があります。

f:id:KenjiU:20200927204605j:plain
赤穂藩森家上屋敷跡出土の石垣石

大門の地図の②には「芝神明町町屋敷跡」の遺跡があります。

f:id:KenjiU:20200927204654j:plain
神明町町屋敷跡

江戸時代の暮らしの息吹を感じますね!

と、ここで江戸ブログではなくテックブログなので一つAI技術をご紹介いたします。

弊社の大門オフィスから徒歩18分ほどの場所にある愛宕山。江戸市中において最も高い山(標高26メートル)で、江戸湾まで一望できた観光名所でした。以下の写真はその愛宕山から撮影した江戸の町です。

f:id:KenjiU:20200927204915j:plain
引用:愛宕山から見た江戸の町 : 江戸時代(幕末) | https://pin.it/5yfx90Z

この白黒写真をディープラーニングを使って色付けしてみます。

f:id:KenjiU:20200927205032j:plain
愛宕山から見た江戸の町

江戸時代がぐっと身近に感じられますね!
弊社オフィスの前にもこのような屋敷が連なっていたのでしょう。
では、拙者はこれにて失礼致す、御免。