オープンソースライセンスについてメモ

OSSのライセンスとは

ウィキペディアの説明

オープンソースライセンス(英: open source license)は、ソフトウェアやそのソースコード、ブループリント、設計書の利用、修正、頒布を認めるソフトウェアライセンスの総称である[1][2]。「広義のオープンソースソフトウェア」に課せられる「ソフトウェアライセンス」を指し、オープンソースのライセンス、フリーソフトウェアのライセンスを包括する。 オープンソースライセンスは、オープンソースソフトウェアの性質上、ソフトウェアやその二次著作物は元の作者でも制御しきれない形で頒布されるため、ソフトウェアは「有用であるとは思うが無保証である」のような但し書きを基本的な誓約として含んでいる[3]。ライセンスによっては、作者名や著作権名を表示する誓約(著作権表示条項)や、ソースコードを改変して再頒布する場合は同じライセンスで配布する誓約(コピーレフト条項)が存在する[4][5]。

オープンソースライセンスの要件

無保証

作者はソフトウェアが予期した動作をするか保証しないし、何らかの損害を被っても責任を負わない

著作権表示条項

ソースコードや文書に利用元の著作権を記載することを求めるもの。ライセンスによって何に記載しないといけないのかやエンドユーザーが閲覧可能かなどが決まっている。

コピーレフト条項

コピーレフトがあるライセンスを使う場合は、そのライセンスを引き継ぐか同等の利用条件を設定しなければいけない。代表的なのはGPL

原作者特権条項

著作者が利用する分には適応されない事項。

主なライセンスの種類

MIT

  • 著作権表示および本許諾表示をソフトウェアのすべての複製または重要な部分に記載する
  • コピーレフト
  • 緩めのライセンス

BSD

  • 無保証であることを明記する
  • 著作権およびライセンス条文自身を表示する
  • コピーレフト
  • 条項の数によって派生がいくつかある

Apache

GPL

参考

オープンソースライセンス - Wikipedia

OSSのライセンス - Qiita

OSSのライセンスを理解する(「使用」と「利用」の違い、知っていますか?) - Qiita

Apache License v2.0の特許条項を解説するよ - It's Not About the IP

正しく知れば怖くない GPL ライセンスの特徴 | yamory Blog

初めてKaggleに参加したので振り返り【Cassavaコンペ】

Kaggleは前々からやってみたいと思いつつハードルの高さからなかなか手が出なかったのですが、CassavaコンペでKaggleデビューしたのでやったことや今後の課題など振り返りたいと思います。

自己紹介

社会人2年目で、SIerの先端技術部署で画像系の機械学習/深層学習の研究開発みたいなことをしています。自分でモデルを作ったりするわけではなく、既存の手法が実際に使えるのかやどのような実装になっているかの調査などを行っています。そのため機械学習/深層学習の基本的な知識はありますが、データ分析の経験はほぼないです。
なのでデータ分析の知識・経験を得るため、1からモデルを構築する練習としてKaggleを始めてみました。

結果

f:id:Ktkt:20210222220855j:plain
Cassavaコンペ結果

255/3900 位で銅メダルでした。
最終提出時点で934位でメダルのことを何も考えていなかったので、これがShake芸というやつか・・・と結構謎でした。ただメダルを獲得できたことは素直にうれしいです。

やったこと

基本的には小さめの実装から初めて徐々に機能を追加していく作戦。それでも最初の提出をするまでが一番時間がかかりました。 参考にpublic scoreがいくつになったのかも書いておきます。

  • 「Kaggleのチュートリアル」を読む
    Kaggleについて右も左もわからなかったので@currypurinさんの「Kaggleのチュートリアル」でサイトの使い方、Notebookの提出方法などを確認しました。この本がなかったら始められてないと思うので大感謝です。
  • ベースのNotebookを作る(public score:0.7298)
    今回は勉強もかねてPytorchで実装を行いました。最初はPytorchのチュートリアルや公開されているNotebookを頼りに、resnetで学習~推論を行うNotebookを作成しました。
  • Efficientnetを試す(0.8806)
    公開されているNotebookではEfficientnet-b4を使用しているものが多く、自分も使おうと思ったらどうしてもout of memoryになるのでEfficientnet-b3にしました。resnetと比べて15%ほどスコアが上がってモデル選び大事だなと。
    timmをインストールしてEfficientnetを使っていたら、提出時にはネット接続ができないことを知らずエラーになり、どういうこっちゃとなりました。*1
  • CVの実装(0.8898)
    Scikit-learnを用いてk-fold CVを行いました。
  • TTAをする(0.8935)
    TTAが何なのか知らなかったのですが、推論時にaugmentationする手法でKaggleではおなじみらしいです。*2TTAの回数はいくつか試してみて最終的には6回にしました。
  • アンサンブルをする(0.8971)
    Resnext50_32x4dとEfficientnet-b3で学習を行って、各推論結果の加重平均を使用しました。

反省

  • データ分析まで手が回らず工夫という工夫ができなかった
  • 全体的に実装を優先してあまり理論を追えなかった
  • 進めていくにつれてコードがごちゃごちゃになってしまった

今後の課題

  • データの分析を行う
  • ロス関数、オーギュメンテーション、オプティマイザーなど触れなかったところを触る
  • Colab、GCP等で実行できる環境を作る

感想

始めるまではKaggleはハードル高いなと思っていましたが、初心者向けのNotebookやDiscussionも多くとても楽しめました。いろいろな手法を試してスコアが上がるのを体験して"Kaggleはネトゲ"の意味が少しわかった気がします。
初めてのコンペでメダルを獲得できたのは素直にうれしかったですが、これといって自分で考えて試したことは少なかったので、次はデータ分析をしつつモデルの細部まで手を入れられるようになりたいです。
拙い文章でしたが最後まで読んでいただきありがとうございました。ご意見ご質問等ありましたらコメントかツイッターにいただけるとうれしいです!

*1:回避するには公開データセットからtimmをダウンロードしないといけない

*2:いまだにギャンブルぽい手法に感じて有用なのか半信半疑