---
# System prepended metadata

title: '研究ノート（辻尚吾）創成課題,卒業研究'

---

# 研究ノート（辻尚吾）創成課題,卒業研究

---
## 10/5
<details>
宿題：興味のある対象とその課題orニーズを考えてくる。
・テニス
・バドミントン
・カードゲーム
・ポケモン（ゲーム含む）
・発声
・カラオケ
・ストレス発散
</details>

---
## 10/12
<details>
課題：論文調べる

・大学生におけるカラオケの心理的効果―ヒトカラは気分にどのように影響するか
https://ncn.repo.nii.ac.jp/record/337/files/02_%E6%9D%BE%E6%9C%AC.pdf

・テニスにおけるプレースタイルとその特徴に関する調査研究
https://tsukuba.repo.nii.ac.jp/record/2636/files/5.pdf

・「ポケットモンスター」が小学生に好まれる理由の心理学的考察 : 好きなキャラクターに関する質問紙調査から
https://repository.kulib.kyoto-u.ac.jp/dspace/handle/2433/139640
</details>

---
## 10/19
<details>
課題

テニスにおけるプレースタイルとその特徴に関する調査研究
を選択

who:
山田幸雄、徳田潤子、筑波大学体育科学系

when,where:
1989年

why:
テニスの指導の際に、その選手の特徴に合ったプレースタイルを把握できる分類表があれば、効率的な指導が行えるのではないか。

how:
・大学選手男女合計440人に自分のプレースタイルに関する
39項目の心理的、体力的検査のアンケートを行った。
・大まかにネット型、ベースライン型、併用型の3種類の位置型分類と
別で攻撃型、守備型、中間型の3種類の攻守型分類に分けた。

・結果
ネット型116人、ベース型166人、併用型158人
攻撃129人、中間140人、守備129人
具体的には
ネット+攻撃=約60%,ネット+守備=12.1%
ベース+守備=約60%,ベース+攻撃=12.6%
併用+中間or守備=約37%,併用+攻撃=24.7%
ネットと攻撃、ベースと守備、併用と中間型がそれぞれ
類似した結果になっていることからもこの組み合わせの相性がいいと思われる。

・細かい結果
ネット型はテニス全般的に自信がある。
だがネット＋守備はそこまでネットプレーに自信が見られないよう
ベース型は守備型と攻撃型でゲームの進め方と心理面がかなり違う
→守備は忍耐力、攻撃は積極性のあるプレーに自信があるよう
併用は2つの中間

感想
・具体的な項目を織り交ぜてプレースタイル別で特徴を算出しているところが納得させてくる
・自分のプレースタイルによって強化すべきものが見えやすくなっている
・明らかに選手レベル向けすぎてアマチュアからしてみれば結局何を重点的に練習すればいいのか分からない
・初心者はどのプレースタイルから入るべきか書いておいてほしかった
・勝率や選手の強さでプレースタイルを見比べたかった
</details>

---
## 10/26
<details>
課題


・テニスの初心者指導について
https://eprints.lib.hokudai.ac.jp/dspace/bitstream/2115/28894/1/89_P1-30.pdf

・テニスのダブルスにおける戦術獲得に関する研究
https://www.jstage.jst.go.jp/article/itej/65/7/65_7_983/_article/-char/ja/

・テニスの競技力向上とテニスにおける生涯スポーツと健康について
https://core.ac.uk/download/pdf/223200132.pdf

</details>

---
## 11/3
<details>
課題

読んだ論文:批判的思考力を育成する大学初年次教育の実践と評価
https://www.jstage.jst.go.jp/article/jcss/19/1/19_69/_article/-char/ja/

who:楠見孝， 田中優子， 平山るみ

when:2012年

where:どこかの国立大学

why:批判的思考は大学生として学問を学ぶために必要。
　　また社会に出て市民として生活するために必要なスキルや態度として位置づけることができる。
  
how:2つの研究をした（授業）
研究1：
研究１の教材と評価ツールとして、批判的思考のスキルの獲得と転移を促進するワークシート、
そして討論に関わるスキルや参加態度の振り返りシートを作成。そして学習者の発表とグループ討論に基づく授業を実施し、
討論参加態度などに向上が見られることを明らかにした。

研究2:
研究1の反省を踏まえて教材、授業方法、評価方法の改善。
批判的思考スキルを明示的に教示し、転移を促進し内省を促すテキストを新たに導入
授業方法としてテキストをペアで相互に説明する方法を取り入れた。
その方法への肯定的評価が授業満足度や事後の批判的思考得点に関わることが示唆された。

考察:研究 1 と研究 2 では、効果が得られた指標が異なっていたり効果が得られなかった指標もあった。
これらは学習活動や参加者の相違、指標の精度、その他の統制されていない要因が考えられる。
したがってこうした研究手法の限界を踏まえて、本実践の効果の解釈は慎重になるべきである。

感想:
・小中学生向けのプログラムが欲しい、
小さい頃から身についていた方が算数数学などで役立つため。

・母数が少ないので個人差による結果の可能性もあり得るのでは。


読んでみようと思ってる
https://eprints.lib.hokudai.ac.jp/dspace/bitstream/2115/28625/1/14_P89-97.pdf
</details>

---
## 11/10
<details>
### 研究テーマ（暫定）
テーマ：
分野　：
データ：
手法　：

全然決まりません…
テニスは捨てます
研究室にあるデータから考えようと思ってます
→メルカリがいいかも

</details>

---
## 　11/23
<details>
### 真似実験
・そもそも研究内容をどうするか
→メルカリでかつNLPにする
→メルカリデータ仕様書を見せてもらったコメントにあった、
　マルチモーダル学習を使おうかと
→画像や値段、商品の状態などから適切な商品説明を提示してくれるもの
→メルカリ内で売れやすい本または家電・生活用品のどちらかに絞る予定

メルカリ関連の真似実験は探した限りなかったので
真似実験はマルチモーダルを利用したものが良いのでは
→見たところめっちゃ大変そうな実験が多い

</details>

---
## 12/14
<details>
### 真似実験

#### 研究内容(現状)：
・**メルカリに出品するときの画像と商品状態などの細かい設定から、
　商品詳細の欄を自動で生成する研究。**
・それの実現のため、マルチモーダル学習を使用する予定。
・マルチモーダル学習とは、
　複数種類のデータを入力とし、統合的に処理する深層学習の手法のこと。


#### 真似実験について：
・マルチモーダル又はそれに類似したものを使ってみたいと考えた。
・その中でOpenAIによって公開された，CLIPというものを使いました。

#### 環境、ライブラリ：
・リオン
・docker
・VScode
・Ubuntu
・python
など

#### 実験結果：
・使用した真似実験
https://qiita.com/yukihigasi/items/22a781c476ae6f9fbdb3
・打ち込んだ英文と読み取った画像がどれだけ合っているかを数値で教えてくれるコードです。0から1未満で1に近いほど共通している判定。
・実行はできましたが、かなり納得のいかない結果になってしまいました。そもそも画像の読み取りが明確にできていないと思っています。
・真似実験を行う環境が良くないようで、かなり時間がかかってしまいました。
・nkjm先輩にとても手伝ってもらいました、ありがとうございました。

#### これから：
・研究を進める前にもう少しclipについて勉強するべきだと思いました。
・nkjm先輩からもらったコードが実行できていないので、それを実行させる。
・調べて一番使い勝手がよさそうなものを使用する。今のところはclipしか見れていないのでそれが指標となっていく。

#### 提案手法のアイデア：
・商品詳細用の定型文に画像と入力情報によって、単語や数値を当てはめていくなどが妥当だと考えている。
・似たような研究がないか調べる。


### ポスター資料
背景・目的：メルカリを多用している自分にとっては商品詳細の文章を考えるのが面倒に感じてしまう。そもそも何を書くべきか分からない時すらある。
提案：マルチモーダルを使用した商品の画像だけで商品詳細の適切な文章を書き込んでくれるシステム。だがそれだけでは定型文に画像に対応する単語を挿入してしまうだけなので、その商品の値段や発送場所、発送方法などの細かい情報からも記述内容を変えられるようにしたい。
期待：メルカリの使い勝手が高くなる。と思ってる。
</details>

---
# 卒業課題
## 環境
* ssh c0b2111203@10.204.227.47
* jyupyter Lab
* python3
* pytorth
など
## そもそも、研究のやりたいこと
* フリマサイトの説明文の自動化
* 項目は衣服に絞った
* テンプレートを作成して、穴埋め方式で説明文を作成する？それもまだ不透明

## 研究目標
* 目的：商品写真から商品の詳細な特徴を抽出し，説明文を生成する
* 研究の目標：商品の詳細な特徴を抽出する


### その他
* [伏見メモ](https://hackmd.io/Rq5SuGH9QuilkNj4HDN-ZA)

---
## 4/12
<details>
調べ

ECサイトにおける視覚障がい者向け商品説明のための画像認識に基づく説明文自動生成（工科大MSの先輩）
https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=221833&file_id=1&file_no=1
・田中駿哉、寺澤卓也
・情報処理学会第84回全国大会（2022年2/17）
・商品を服装ブロック、色彩ブロック、性別ブロック、デザインブロックで分けている
色彩ブロック：google cloud vision APIでRGBを出力
性別ブロック：MS　face API
服装ブロック/デザインブロック：畳み込みニューラルネットワークの　　　　　
　　　　　　　　　　　　　　　　ResNet110[3]
                

EC サイト掲載商品の紹介文作成支援
https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=203752&file_id=1&file_no=1
・情報処理学会研究報告（2020-03-07）
・阿部 涼介、横山 想一郎、山下 倫央、川村 秀憲
・北海道大学
手法
・マルコフ連鎖
・テキストの自動要約（別の論文頼り）
・深層学習（LSTM、RNN、CNN,GAN）
・テンプレートを用いた文章生成 → 自分が想像してたもの


アパレルECサイトにおける説明文自動生成
https://www.jstage.jst.go.jp/article/jasmin/2018t10/0/2018t10_125/_pdf/-char/ja
・園田 亜斗夢、新名 玄
・株式会社Business Hub,株式会社GAUSS
・経営情報学会2018年秋季全国研究発表大会
　2018年10月20日（土）～10月21日（日）
　近畿大学　東大阪キャンパス
出品者の労力軽減のため，既存のアパレル業者が保有するテンプレートを活用し，画像の特徴量からテンプレートを選択し，カテゴリ推定等を行い説明文を生成する．


今のところ
・商品説明文生成という研究という軸は変わらないが、
　商品全般ではなく何かしらの商品（本、アパレルなど）に絞るべき
 何に絞る？　　　　　　　　　　　　　　　　　　　　　　　　　（０）
 →絞るならテンプレートの中身の質が上がる
 →楽天などで使われている説明文を集めてきてテンプレートを生成（１）　
・GANはしっかり調べる余地あり
・メルカリだけにとどまらなくても
・画像からテンプレに埋めるための情報を抽出　　　　　　　　　（２）
・より魅力的な文章にしていく　　　　　　　　　　　　　　　　（３）
・画像などの情報で読み取れないことはユーザーにゆだねるしかない

１，２は今後の行っていくこと
1はNLP
2はCV

### 次週までにやること
・何に絞るか
→一旦服で
・楽天データをしっかり確認,取り出す、共通項目を見繕う

</details>

---
## 4/17
<details>
### 次週までにやること
・何に絞るか
→一旦服で
・楽天データをしっかり確認,取り出す、共通項目を見繕う。
・既にあるメルカリの自動商品説明文について調べてくる。
→すでに出品テンプレートが存在している

現状のメルカリ
・本、服、鞄などの取引が多いもののみテンプレートが存在する
・自分でテンプレートを作成し、保存して使いまわせる
・ものの種類によっては出品物の特徴を選択し、その情報がそのまま説明文の中に入力される

課題
・現在あるものより優れたもの、または現状のものにはない特徴が必要になる
→ゴールは既存のものと同じでも過程を変えてみる
・画像と組み合わせた文章の特徴がどうなるか
→
・画像では持ち主の視点よりも情報が明らかに少ない
→それは仕方ないので売主の手打ち
・売値関係の研究

</details>

---
## メルカリの出品テンプレ
<details>
### 服

〇〇(ブランド名)のロゴ入りホワイトTシャツです。似たようなTシャツを先日購入した為出品します。カジュアルなシーンで着回しやすいデザインです。

●サイズ：タグ表記 Ｍサイズ
肩幅 〇〇cm
身幅 〇〇cm
着丈 〇〇cm
素人の採寸ですので若干の誤差はご了承ください。
●素材：
表地 ナイロン100%
裏地 ポリエステル100%
●状態：
2～3回着用しましたが汚れ、ほつれなどはありません。中古品ということをご理解いただいた上でご購入をお願いします。
●その他、注意事項：
自宅マンションにて保管していました。細かいデザインなどは写真にてご確認ください。


### 本

定価〇〇円

●状態：
数日前に書店で購入し、カバーを外さずに一度だけ読みました。
●カバー：あり・帯あり
●ヤケ：なし
●ヨレ：なし
●スレ：なし
●折り目：なし
●書き込み：なし
●その他、注意事項：
こちらの商品は即購入していただいて構いません。中古品ということをご理解の上ご検討ください。


### おもちゃ

〇〇シリーズ(作品名)の〇〇(キャラクター名)のぬいぐるみです。

●サイズ：
縦 〇〇cm
横 〇〇cm
奥行き 〇〇cm
●付属品：タグ
●状態：
2017年の秋頃購入し、飾らずに室内にて袋に入れて保管していました。新品未開封の公式商品です。引っ越しに伴い出品することにしました。日焼けや汚れなどはありませんが、1箇所のみほつれがあります。美品ですが、使用感が気になる方は写真でご確認ください。
●その他、注意事項：なし


### 鞄

〇〇(ブランド名)のハンドバッグでカラーは〇〇です。2018年の1月頃購入し、〇〇円でした。2回使用したのみですので美品です。

●サイズ：
縦幅 〇〇cm
横幅 〇〇cm
マチ 〇〇cm
●素材：牛革
●付属品：
箱をお付けしますが、不要の場合はお値引き出来ますのでコメントください。
●その他、注意事項：
傷や汚れなどありませんが写真をご確認の上、中古品であるということをご理解いただきご購入をお願いします。

</details>

---
## 4/26(4/23の振り替え)
### 報告
・特にしてない…
・やることは特に変わらず
・商品同士の類似度を測る

### to do
課題１：楽天商品説明文において，共通項目（属性）を抜き出す
手順１：説明文をトークン（単語，句，文）に分ける
手順２：トークンをベクトル（TFIDF，BERT，Doc2Vec）表現する
手順３：トークン間の類似度を測り，閾値（例：0.8）以上のトークンを類似項目（共通項目）として抜き出す

スケジュールおよびToDo
NLPコンテナ環境の構築
5月中旬：課題１（共通属性抽出）
5月8日（水）：課題１手順２
5月15日（水）：課題１手順３
6月中旬：課題２（画像からの属性値抽出）

---
## 5/10(5/7の振り替え)
### やったこと
* 楽天から商品説明のデータを取ってきた
* 取ってきた説明文を一文ずつで分ける作業は途中
* それらの文をベクトル表現する手法を調べてDoc2Vecを使うことを決めた

### その他文献など
* [「説明のテンプレート」を自動で学習すれば文生成を自在に操れる](https://ai-scholar.tech/articles/treatise/text-generation-ai-190)
* [ja_sentence_segmenterで文章を句点区切りする（Python）](https:////qiita.com/heimaru1231/items/b6ed09d4787e4e28175a)

### 意見
* tsv,csv,jsonファイルのほうが管理しやすい

### to do 
* 前回からの継続

---
## 5/15まで
### やったこと

* 正直全然やってないという事に今日気が付いた
* 研究ノートをある程度見やすく改良（StkyとIzmiを参考）
* [「説明のテンプレート」を自動で学習すれば文生成を自在に操れる](https://ai-scholar.tech/articles/treatise/text-generation-ai-190)を一通り読んだ

    題名：[Learning Neural Templates for Text Generation](https://www.aclweb.org/anthology/D18-1356)


    著者：Sam Wiseman Stuart、M. Shieber Alexander、M. Rush

    時間：2018年10月31日～11月4日 

    場所：計算言語学協会

    内容：
    主流な手法であるエンコーダー・デコーダーモデルを使わずに[neuralHSMM（ニューラル隠れセミマルコフモデル）](https://qiita.com/yamahagi/items/e73217264e397a54a422)という技術を使い、文生成のテンプレートを自動学習させることで、どのような情報を盛り込むかを指定できる文生成手法を提案
    ※[エンコーダーデコーダーモデルについてのサイト](https://gri.jp/media/entry/390)

    結果：
    ![image](https://hackmd.io/_uploads/ryyfq4WQ0.png)
    * BLEU,NISTが高ければ正解に近い文章を生成している
    * D&Jは従来のエンコーダー・デコーダーモデル
    * SUBはテンプレートを用いたシンプルなモデル
    * NTempとNTemp+ARは提案モデル
    * 提案手法はエンコーダー・デコーダーモデル（D&J）に数値面で劣っているが、文生成を制御できるという点から十分戦えている数値であると著者は話している

    感想：
    * ニューラル隠れセミマルコフモデルが分からん過ぎる。
    * 文生成の方法を2つ知ることが出来た
      →特にエンコーダーデコーダーモデルは興味を持てた


### 困りごと
* 研究しやすいようにデータのフォーマットをtxtより見やすいものにしたい
　　→tsvやcsvの返還をしてみたいが出来てないところ
* Doc2vecの使い方が分からない
　　→[Doc2Vecについてまとめる #Python](https://qiita.com/g-k/items/5ea94c13281f675302ca)を参考にしようと思っている
  
### 意見
* パンダスを使ってみる
* 後に[ja_sentence_segmenterで文章を句点区切りする（Python）](https:////qiita.com/heimaru1231/items/b6ed09d4787e4e28175a)
で文を区切る
* pip gensim　3.8.1が必要


---


## 5/22まで
### やったこと
* 先生からもらったpandasのコードを使ってみた
* Doc2vecを使ってみた

### pandas使った
#### 結果
![image](https://hackmd.io/_uploads/Sy-s0O57A.png)
* printやテキストファイルで中身がどうなっているのかを確認しようとするとこうなった
* pandasのdataframeに読み込むコードと先生が言っていたので使い方が違うかも
* csvファイルに直してみようと調べてみたがよくわからなかった
* 下の写真より文章はdf["商品説明文"]に入っている

![image](https://hackmd.io/_uploads/r1x60O9mA.png)


### Doc2vecを試した
#### 参考文献
[Doc2Vecについてまとめる #Python](https://qiita.com/g-k/items/5ea94c13281f675302ca)

#### コード
*     sentences = []
      for text in df["商品説明文"]:
      sentences.append(text)
      
*     from gensim.models.doc2vec import Doc2Vec, TaggedDocument
      documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(sentences)]
      model = Doc2Vec(documents, vector_size=2, window=3, min_count=1, workers=3)
      
#### エラー
長いので下の部分のみ
![image](https://hackmd.io/_uploads/HkkSbF97R.png)
* エラーをはいている部分が、importで持ってきている部分なので解決策が分からない

### to do
* pandasはとりあえず使えそうなので、取りたい情報を別のリストにまとめて使う
* doc2vecの他のコードもあさってみる



---

## 5/29まで
### doc2vecの他のコードも試してみる
* [【Doc2Vec：その２】gensimでの実装方法](https://tech.jsa.co.jp/%E3%80%90doc2vec%EF%BC%9A%E3%81%9D%E3%81%AE%EF%BC%92%E3%80%91gensim%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95/)というサイトのコードを使った
  元のコード![image](https://hackmd.io/_uploads/B1Sn67EER.png)

* その他にもいくつかのサイトを確認したところ、どのサイトにも大体下のコードがある


*     trainings = [TaggedDocument(words = data[i].split(),tags = [str(i)]) for i in range(len(data))]
      model = Doc2Vec(documents= trainings, dm = 1, vector_size=100, window=8, min_count=10, workers=4, epochs=100)

* doc2vecの引数の意味![image](https://hackmd.io/_uploads/B1Jh3Q4NA.png)
### 結果
* 指定の文章と類似度が高い順で上から3つ出してくれるが、類似度が低い ![image](https://hackmd.io/_uploads/SJumwEVEA.png)

* 指定の文章
*     ←この画像をクリックすると大きな画像が見られます♪       ■アイテム    イタリア・トスカブルー レザーショルダーバッグ　         ■素材（外側）    牛革　*ふんわり柔らかなスムースレザーです。         ■素材（内側）    布張り         ■色    ブラック、ピンク、ホワイト(全3色)         ■サイズ（縦×横×マチ）    ２０×３１×９cm         ■持ち手の長さ    ５２cm         ■重さ    ６００g         ■ポケット    内側：ファスナー式×1、ポケット×1、携帯用×1         ■開閉は？    マグネット付きのフラップ開閉です。           ★スタッフのコメント★    仕事はバリバリこなすキャリアだけど、おしゃれも諦めたくない！そんな、シティ派レディをキャロンは応援します♪シンプルで、Ｂ５サイズも入るショルダーバッグ！スーツにも似合う、美しい色合いのイタリアンレザーで、サイドのデザインが凝ってます。こんな素敵なバッグから、スマートに名刺を取り出せば、ビジネスシーンで、貴女の印象がグッとアップするはず。もちろん、オフの日には、カジュアルなスタイルで決めて♪  この商品は交換及び返品はお受けできません。なおラッピング希望はご遠慮願います。予めご了承くださいませ。（ｍ＿ｍ）

* 92の文章
*                     商品概要ヴィトンから、ストーンウォッシュ加工でヴィンテージな風合いを表現したモノグラム・アップリケラインの『ネヴァーフル ＭＭ』です♪使い勝手抜群の大人気のトートバッグ。キュートなローズカラーも魅力的です。普段使いから通勤・通学まで幅広いシーンで活躍してくれます。商品詳細管理番号90074940/B603ブランドルイ ヴィトン （ＬＯＵＩＳ ＶＵＩＴＴＯＮ）商品ランク外側：８点 内側：８．５点（下記の状態ランク表をご覧ください）商品名モノグラム・アップリケ ネヴァーフル ＭＭ型番/刻印Ｍ４０８３４（製造番号ＳＲ４１９２）サイズＷ上部４６/下部３２×Ｈ２８×Ｄ１６ｃｍハンドル：５１ｃｍ重さ：５８５ｇ内側：ファスナーポケット×１若干の誤差はご了承ください   &gt;&gt;サイズ表記についてはコチラ 素材モノグラム・アップリケ キャンバスカラー本体：ローズ金具：ゴールド付属品なし商品詳細外側：全体的にスレ・汚れ、ヌメ革にヤケ・汚れなどの使用感があります。内側：若干のスレや汚れなどがあります。通常使用による使用感はありますが、これからも長くご愛用いただけるお品です。参考定価-※こちらの商品は鑑定済みの本物の商品となります。画像では伝わりにくい色、お客様のパソコンの設定によっては色の違いが生じることがありますのでご注意ください。※プレゼント用の ギフト ラッピング にも対応しています。信頼の[★４.５]以上！当店へ寄せられたお客様の声はこちら  ブランド館TOPページへ 

* 別の文章でも行ってみた。これは類似度が高い![image](https://hackmd.io/_uploads/rk_oOE4N0.png)

* 指定の文章
*                 ロンシャン LONGCHAMP バッグ ル プリアージュ オプアート LE PLIAGE OP ART L カバン 鞄                    カーキ  292 "65650140"                     横 47.5cm  高さ 30cm  マチ 19cm  取り出し口 47.5cm  持ち手 57cm ※実際の商品を採寸したサイズです。 ▼サイズについて▼上記サイズは、同一の商品を数点採寸した平均値です。商品によっては個体差がありますので誤差がでることが御座います。また、測定方法によっても誤差が生じますので、予めご了承いただいた上お求め下さい。                          パリジェンヌから愛され続けるLONGCHAMP(ロンシャン)は、1948年にジャン・キャスグランによって創設されました。当初は革巻きパイプをはじめとした喫煙器具を製造していましたが、1955年より財布など高級革小物のコレクションを展開。1988年にサントノーレにブティックをオープンし、一流ブランドの仲間入りをしました。程よく時代のトレンドを取り入れた、機能的でリーズナブルなバッグは「手の届くラグジュアリー」として世界中の女性から支持されています。       LONGCHAMPより「LE PLIAGE OP ART L」です。軽くて丈夫なナイロン生地にエナメルレザーの組み合わせがエレガントなデザインです。トップはレザーフラップと、ロゴマーク入りのファスナーチャームがとってもお洒落なファスナー開閉。内側には小物を収納するのに便利なオープンポケットが1箇所あります。      Made in  France、Tunisia、Chinaほか       ▼商品特性1▼こちらの商品は天然皮革を使用しています。その為、シワ・キズ・色むら・個体差(革の質感の違いなど)が散見されますが、不良品ではございません。 天然素材特有の質感、味わいをお楽しみいただければ幸いです。 ▼商品特性2▼商品の画像につきましては、極力実物に近くなるよう撮影を心掛けておりますが、お客様がご利用になられるモニタによっては実際の色と異なって見える場合がございます。何卒ご了承ください。

* 416の文章
*     商品名：コットンキャンバスバッグ　エコバッグ　イニシャルバッグ　H ホワイト品　番：231z-5515-61-hサイズ：約W430×D200×H270(mm) ハンドル330ｍｍ素　材：厚手キャンバス　コットン100％ Made in China重　量：約250ｇ詳　細：※メール便（送料無料）でのお届けとなります。

    
### todo
* 形態素解析
* ユニグラム単語ごとに
* バイグラム連続する2語
* カテゴリーごとに
* TFIDF
* 伏見メモ![image](https://hackmd.io/_uploads/HyF0VL5NC.png)

---
## 6/5まで

### やったこと
* MeCabによる形態素解析の実行

### MeCab
* [【Python】形態素解析エンジンMeCabをPythonでやってみた。](https://note.com/smkt_interview/n/nafebd60ae6bc)というサイトを参考に
* [結果](http://10.204.227.47:18161/lab/tree/wordcount.txt)
* 特徴として、指定の単語がどれだけ入っているか見てわかるが、余計なかっこなどを除去しないと見にくい。データの前処理が必要。

### その他
* Doc2vecの状況
* TFIDFの検討

### todo
* どの手法で商品説明のテンプレートを作成するか決め、その手法を実際に実用性の高い状態にする
* 英語の論文のgithubを使ってみる

### 意見
* MeCabで変な場所で区切られている可能性を考慮（辞書による）
* ネオログD
* ニューラルテンプレート（英語の論文）

## 6/6個別MTG
* [「説明のテンプレート」を自動で学習すれば文生成を自在に操れる](https://www.aclweb.org/anthology/D18-1356)のコードを実際に試してみた
  * 訓練データ
    * [E2E NLG Challenge data](https://github.com/tuetschek/e2e-dataset.git)
    * [wikipedia biography data](https://github.com/DavidGrangier/wikipedia-biography-dataset.git)

### 課題
* エラーの解決
* generationの実行
* 英語のテキスト生成しかできないようなので、日本語でも可能にさせる



---

## 6/12まで
### やったこと
* 個別MTGの続き
* generationの実行

### 実行結果
* コマンド
 `python chsmm.py -data data/labee2e/ -emb_size 300 -hid_size 300 -layers 1 -dropout 0.3 -K 60 -L 4 -log_interval 100 -thresh 9 -lr 0.5 -sep_attn -unif_lenps -emb_drop -mlpinp -onmt_decay -one_rnn -max_pool -gen_from_fi data/labee2e/src_uniq_valid.txt -load models/e2e-60-1-far.pt -tagged_fi segs/seg-e2e-60-1-far.txt -beamsz 5 -ntemplates 100 -gen_wts '1,1' -cuda -min_gen_tokes 0 > gens/gen-e2e-60-1-far.txt`
 
* gensの中身
```
Namespace(data='data/labee2e/', epochs=40, bsz=16, seed=1111, cuda=True, log_interval=100, save='', load='models/e2e-60-1-far.pt', test=False, thresh=9, max_mbs_per_epoch=35000, emb_size=300, hid_size=300, layers=1, A_dim=64, cond_A_dim=32, smaller_cond_dim=64, yes_self_trans=False, mlpinp=True, mlp_sz_mult=2, max_pool=True, constr_tr_epochs=100, no_ar_epochs=100, word_ar=False, ar_after_decay=False, no_ar_for_vit=False, fine_tune=False, dropout=0.3, emb_drop=True, lse_obj=False, sep_attn=True, max_seqlen=70, K=60, Kmul=1, L=4, unif_lenps=True, one_rnn=True, initrange=0.1, lr=0.5, lr_decay=0.5, optim='sgd', onmt_decay=True, clip=5, interactive=False, label_train=False, gen_from_fi='data/labee2e/src_uniq_valid.txt', verbose=False, prev_loss=None, best_loss=None, tagged_fi='segs/seg-e2e-60-1-far.txt', ntemplates=100, beamsz=5, gen_wts='1,1', min_gen_tokes=0, min_gen_states=0, gen_on_valid=False, align=False, wid_workers='')
using vocabulary of size: 872
780 gen word types
using vocabulary of size: 872
780 gen word types
assuming we start on line 1 of train
```
* エラー
![image](https://hackmd.io/_uploads/HJVlEYUrR.png)
```
IndexError: tensors used as indices must be long, byte or bool tensors
```

### todo
* 同じような研究で日本語に対応させている形跡を探す
* トレーニングの中身をそのまま和訳してみる

---
## 6/15
* エラーの解消の試み
  * 連鎖的にエラーが出ているようなので、python2の環境で試す
* [顕著性マップを用いた画像の説明文自動生成](https://www.ai-gakkai.or.jp/jsai2016/webprogram/2016/pdf/707.pdf)
  * 今週中に目を通す


---

## 6/17
* [顕著性マップを用いた画像の説明文自動生成](https://www.ai-gakkai.or.jp/jsai2016/webprogram/2016/pdf/707.pdf)を読む
* 関連記事：[CLIPを用いて顕著性マップを可視化するレシピ](https://axross-recipe.com/recipes/525)
* おそらく今日だけでは読み切れない

---

## 顕著性マップを用いた画像の説明文自動生成
### 著者
  * 吉井和輝
  * エリック・ニコルズ
  * 船越孝太郎
  * 中野幹生
  * 青野雅樹
  * 豊橋技術科学大学
  * ホンダ・リサーチ・インスティテュート・ジャパン
### 時期
  * 2016年
### 場所
  * 第30回人工知能学会全国大会
### 内容
  * 画像の説明文生成における顕著性の情報の有用性を検証するために、顕著性マップの情報を説明文生成に適用する手法を提案、顕著性マップが説明文生成に与える影響を調査
### 手法
  * 説明文生成モデル(図1)![image](https://hackmd.io/_uploads/HJQSGRJI0.png)
  * 顕著領域の特徴量作成(図2)![image](https://hackmd.io/_uploads/SyA6DDTS0.png)
  * 顕著領域の抽出手順(図3)![image](https://hackmd.io/_uploads/HJUdBCkLR.png)

### 実験
  * 実験には Microsoft COCOのデータと評価指標を使う
  * 顕著性マップの抽出にはSALICONのデータを使う
  * [どこを見るべきか、何を伝えるべきかを調整する：地域ベースの注意とシーンを含む画像キャプション](https://arxiv.org/pdf/1506.06272)を用いてベースライン手法を実装(図1の黄色の部分)
  * ベースライン手法とそれに顕著性の情報を組み込んだ提案手法(図1の右側部分)を比較

### 結果
![image](https://hackmd.io/_uploads/HycuyxqU0.png)
* 表1がベースライン手法と他の手法の比較実験の結果、表2がベースライン手法と顕著性の有無の比較結果
* Jin2015=[どこを見るべきか、何を伝えるべきかを調整する：地域ベースの注意とシーンを含む画像キャプション](https://arxiv.org/pdf/1506.06272)
* Karpathy 2015=[深い画像を生成するための視覚的意味論的調整](https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Karpathy_Deep_Visual-Semantic_Alignments_2015_CVPR_paper.pdf)
* 表の横軸はMSCOCO の評価指標として定義されている BLEU-1, BLEU-2, BLEU-3, BLEU-4, METEOR, ROUGE-L, CIDEr
* 表2のaverage poolingは各特徴量の平均を取る方法、max poolingは各特徴量の各次元の最大値を取る方法。
![image](https://hackmd.io/_uploads/B1514e58A.png)
* 図4の翻訳
```
正解の説明文
wiiリモコンを持って椅子に座っている男性
ビデオゲームをしている人
ひげを生やした男性がコントローラーを持って椅子に座っている
男は茶色のリクライニングチェアに座っている
長い髪の男性がリクライニングチェアに座ってビデオゲームをしている

ベースライン手法
ラップトップを持ってソファに座っている男性

提案手法
男性がソファに座りながらwiiリモコンを持っている
```
### 結果と考察
* 表1と表2でベースラインの制度が違うのは訓練の枚数が違うから。
* 表1よりベースライン手法はKarpathy2015より高く、Jin2015より低い。原因として、ベースライン手法はJin2015を用いていながら、その一部が未実装であったためと考えられる。とはいえ元のJin2015と大差はないため、ベースライン手法のシステムとして十分な制度と著者は評価している。
* 表2ではすべての指標で提案手法が上回っている。図4の具体例を見ても、提案手法の文章のみ手に持っているコントローラーを言及している。
* ベースライン手法では網羅出来ない顕著性の高いオブジェクトの情報を多く取り入れられることが、精度の高い要因となったと考えている。

### 自分の意見
* 画像の細かい部分にも多くの情報を取り入れられる
* ~~具体的な商品名を出すことはできないが~~バッグの特徴を捉えてくれる文章を作りやすそうだなと感じた。→「こういう特徴のバッグが見たい」などの検索
* 鞄に対してどこまで細かく文章を作ってくれるか→「黒い鞄」とかでは不十分



---

## 6/18
* python2で[「説明のテンプレー行うト」を自動で学習すれば文生成を自在に操れる](https://www.aclweb.org/anthology/D18-1356)のコードを行う
* [python2の環境構築の参考記事](https://www.server-world.info/query?os=Ubuntu_20.04&p=python&f=1)
### エラー
![image](https://hackmd.io/_uploads/ry10ba0BA.png)
* そもそもpython2が入らない事態
---

## 6/19MTG
* 読んだ論文の説明（読み途中…）
* githubのコードをpython2で実行しよう
  * python2がdockerで使えなかったので別の場所で次回までに行ってくる

### todo
* 論文を読み切り、そこから使えそうな技術を検討する
  * 明日の木曜日にやる
* githubのコードを別の環境で実行（やらない寄り）
  * 明後日の金曜日にやる
* いい加減、テンプレ作成の手法を決める
  * 今読んでる論文に寄せる形になりそう
* 青野教授が論文を更新しているかもしれないので探ってみる
* [CLIPのブログ](https://axross-recipe.com/recipes/525)もしっかり確認
### 伏見メモ
![image](https://hackmd.io/_uploads/BysfkxlIA.png)


---
## 6/24(月)
* やっと今週のtodoをやり始めました
* ごろごろしてました
* これだから研究がいつまでたっても先に進まないんでしょうね

### 類似する論文の探索(青野雅樹教授)
* 完全な続編は見つからなかったので、参考になるかもしれない論文を見繕ってきた
* [Image-Text Re-Matching Using Swin Transformer and DistilBERT ](https://ceur-ws.org/Vol-3181/paper26.pdf)
(Swin Transformer と DistilBERT を使用した画像とテキストの再マッチング)
* [Image-Text Re-Matching with Zero-shot and Fine- tuning of CLIP](https://ceur-ws.org/Vol-3583/paper12.pdf)
(CLIP のゼロショットと微調整による画像とテキストの再マッチング)

### ブログの中身の確認
* [CLIPを用いて顕著性マップを可視化するレシピ](https://axross-recipe.com/recipes/525)
* 途中から有料のため見れる部分のみ確認
* 基本的にCLIPと顕著性マップの説明のみだった
* ![image](https://hackmd.io/_uploads/SkpU-o8LR.png)
* ![image](https://hackmd.io/_uploads/SJ_9biLUA.png)
* 上の2つを見る限り自分の研究に生かせるか分からない
* ↓CLIPの感覚を知るためにキータのコードを軽く真似実験しようかと思う
* [【日本語CLIP基礎】画像とテキストの類似度計算](https://qiita.com/sonoisa/items/d6db2f130fa9a4ce0c2c)

---
## 6/25(火)
* CLIPの真似実験で遊んでました…
* 論文

---

## CLIPの真似実験遊び
* 史上初、特に何事もなく真似実験出来た。（歓喜）
* 参考記事[【日本語CLIP基礎】画像とテキストの類似度計算](https://qiita.com/sonoisa/items/d6db2f130fa9a4ce0c2c)
（コードも記事のものをそのまま使いました）
* 使用した画像
![image](https://hackmd.io/_uploads/HyqDG1_UC.png)
* 写真ごとの題名
  * 1:猫
  * 2:ロゼッタストーン
  * 3:恐竜と子供
  * 4:考えるスティーブ・ジョブズの人形
  * 5:レゴでできたマリオやルイージなど
  * 6:レゴで出来た時計
  * 7:魔女ランダと聖獣バロン
  * 8:彫刻「考える人」
  * 9:水槽の中のアンモナイト
  * 10:鶏とヒヨコのおもちゃ
  * 11:水槽の中の犬
  * 12:お菓子が4個
  * 13:彫刻「午後の日」
  * 14:眠るコアラ
  * 15:Apple
  * 16:りんご

* デフォルトのテキスト
```
texts = ["猫",
         "ロゼッタストーン",
         "恐竜と子供", "恐竜", "子供",  # 複数の物体が写っているとき、全体を見て類似性を判定するか？
         "考えるスティーブ・ジョブズの人形",  # 考える人との混同が起きないか？
         "レゴでできたマリオやルイージなど",  # レゴやマリオといった固有名詞を認識できるか？
         "レゴでできた時計",  # 時計に見えるかギリギリのものを認識できるか？
         "魔女ランダと聖獣バロン", "特殊合体するとシヴァ神",  # あまりメジャーではなさそうな存在を認識できるか？
         "彫刻「考える人」",  # 考えるスティーブ・ジョブズとの混同が起きないか？
         "水槽の中のアンモナイト",  # コクテンフグと見分けがつくか？
         "鶏とヒヨコのおもちゃ",  # 抽象的な造形表現を認識できるか？
         "水槽の中の犬", "水槽の中のコクテンフグ",  # 犬と錯覚するか？
         "お菓子が1個", "お菓子が2個", "お菓子が3個", "お菓子が4個", "お菓子が5個",  # 数勘定できるか？
         "彫刻「午後の日」", "芸術作品",  # 日本の芸術作品を認識できるか？
         "眠るコアラ", "木登りするコアラ",  # 行動を識別できるか？
         "Apple", "Pineapple",  # アルファベットを認識できるか？（英語版CLIPではできるため、できなくなっていないかの確認）
         "りんご", "パイナップル",  # ひらがなを認識できるか？
        ]

```
* デフォルト結果
* 題名と同じテキストの部分に赤い丸があります
![image](https://hackmd.io/_uploads/S1rYQJ_IC.png)

* 考察（参考文献から）
  * 画像に写っている物体とテキストの単語の一個一個の近さではなく、画像とテキストが総合的に表している意味の近さで、類似性が評価される。構成要素の組み合わせによって生まれる総合的意味や、抽象的な造形表現、物が行なっている動作など。
  * 固有名詞（固有な物体）も問題なく認識できているが、BERTの事前学習において出現頻度が低かったであろうカタカナ固有名詞（例：ランダやバロン、シヴァ、コクテンフグ、岡本太郎の「午後の日」）は苦手な傾向がありそうである。
  * 個数を数えることができる。ただし、±1の範囲内で。
  * 画像中の英語文字を認識できる。日本語文字は認識できない。

### 個人的な遊び
* 変更したテキスト
  * 猫→DISH
  * ロゼッタストーン→ロゼッタ
  * 恐竜と子供→怪獣と子供
  * 考えるスティーブジョブズの人形→考えるスティーブジョブズ
  * レゴで出来たマリオやルイージなど→レゴで出来たピノキオやピーチ姫など
  * レゴでできた時計→レゴでできたclock
  * 彫刻「考える人」→彫刻「トイレする人」
  * 水槽の中のアンモナイト→水槽の中のカタツムリ
  * 鶏とヒヨコのおもちゃ→鶏とヒヨコ
  * お菓子が4個→お菓子が44個
  * 芸術作品→仮面
  * 木登りするコアラ→コアラ
* 画像の変更や追加は無し
* 結果
![image](https://hackmd.io/_uploads/SJ6bwJuUC.png)
* 類似度の変化
  * DISH：0.97→0.11
  * ロゼッタ：0.75→0.55
  * 怪獣と子供：0.99→0.67
  * 考えるスティーブ・ジョブズ：0.97→0.92
  * キノピオやピーチ姫：0.77→0.97（⁉）
  * clock：0.99→0.98
  * 「トイレする人」：0.95→0.82
  * カタツムリ：0.85→0.97（草）
  * 鶏とひよこ：0.93→0.02
  * お菓子が44個：0.43→0.04
  * 仮面：0.26(彫刻「午後の日」は0.03)
  * コアラ：0.07→0.29（眠るコアラは0.71）

---
## 6/27(木)MTG(6/26の振り替え)
* 論文読んでて知らない単語多すぎ問題
### ご意見
* ブルースコア＝翻訳スコア
* 論文の内容を真似実験してみる
* 論文の真似実験のままではいけないので、どこかしらの変更は必須
* 具体的にどういったことを出力したいかを整理しておく（１）
* 類似論文は目を通してほしいが優先順位は低い
* 課金してくれる
* 顕著性マップで調べて今のブログより善いものを見つけられるか
### todo
* 
### 伏見メモ
![image](https://hackmd.io/_uploads/SyukmNyP0.png)


---
## 7/2
* すんません、今週ほんとに何もしてないっす
### 小言
* Q:特徴抽出でどのような内容を抽出すれば唯一性が高くなるか
  * 見た目の話であれば形やどのようなバッグなのかはできそうか（リュックサックやトートバッグなどの種類分け）
  * 形を判別できるのか
  * そもそも鞄1つの写真で顕著性マップでいくつも特徴点が見つかるものなのか
  * もっと適切な商品はないのか（服は鞄と変わらなさそう）

### ブログの確認（課金枠）
[CLIPを用いて顕著性マップを可視化するレシピ](https://drive.google.com/file/d/1FyBFVGJ-sRsM8ucpQCq_0v2djjOvwYMR/view?usp=sharing)
* 一読しただけ

---
## 7/3MTG
* サブカテゴリーの分類
* 他の手法とも組み合わせる（中間後）
* Grad CAM

### 伏見メモ
![image](https://hackmd.io/_uploads/SkGf-YIDC.png)

---
## 7/6
* なんかリオンサーバーが使えないので調べものします
* [Grad-CAMだけじゃない画像認識におけるCAM手法を徹底解説](https://tech-blog.abeja.asia/entry/cam-202203)
* [transformer](https://qiita.com/omiita/items/07e69aef6c156d23c538)
など
* 分からん単語多すぎ問題


### 小言
* 自分の研究の柱がしっかりしていないと先が見えにくく辛い
* なんでも切り捨てられるというマインドは良くない
* Q：私の研究の柱って何？
  * 画像からの説明文生成
  * フリマアプリで応用
  * 顕著性マップは何とも言えないがそろそろ引き下がれない
  * どの分類の商品を扱うかは変えてもよい

---

## 7/8
* リオンサーバーが治らないので、伏見サーバーに逃げました
* まだできてないので明日は絶対やりたい

---
## 7/9
* 伏見サーバーでの環境で作業可能になったが結局使わず終い
* [CLIPを用いて顕著性マップを可視化するレシピ](https://drive.google.com/file/d/1FyBFVGJ-sRsM8ucpQCq_0v2djjOvwYMR/view?usp=sharing)の真似実験がやっと始められる
### 真似実験
* やれること
  * 画像とテキスト同士の類似度を図る（以前もやった）
  ![image](https://hackmd.io/_uploads/HycJZSswR.png)
  * 顕著性マップの可視化
  ![image](https://hackmd.io/_uploads/B1IoeHiDA.png)

#### 課題
* 日本語に対応させられないのか
  * [日本語対応のCLIP](https://github.com/sonoisa/clip-japanese)を導入中（以前の真似実験で使ったCLIP）
* GPUの接続が途中で切れてしまう
  ![image](https://hackmd.io/_uploads/Bk7Q3Biv0.png)
  * [CPUとGPUの違い](https://www.intel.co.jp/content/www/jp/ja/products/docs/processors/cpu-vs-gpu.html)

---
## 7/10 朝
* 日本語版CLIPを導入
  * 比較１
  ![image](https://hackmd.io/_uploads/BJUFcLsw0.png)
  ![image](https://hackmd.io/_uploads/ry2q8IiD0.png)
  * 比較２
  ![image](https://hackmd.io/_uploads/r1OawIov0.png)
  ![image](https://hackmd.io/_uploads/rkvLw8oPA.png)
  * 類似度にあまり差はないように見える
* GPUが上限に達してからまだ回復していなかったのでとりあえず顕著性マップの可視化は無し

---
## 7/10 MTG

### 意見
* FT（ファインチューニング）を使う
* LSTM（文章の出力）
* vit

### todo
* 基本的に毎日作業！（GPUを使う頻度を多くするため）
* 火曜日の泊まり込みは結構あり（寝心地は良くない、寒い）
* 今回の真似実験の画像を楽天やメルカリの鞄の画像で行ってみる（１）
* 楽天データから商品画像と商品説明文を類似度と顕著性マップを確認

### 中間までのやること
* （１）をどのように今後使用するのか、それについての課題の説明が必要
* 最終的なゴールの説明も必要
* 論文をあと４つ読む。
  * [Learning Neural Templates for Text Generation(テキスト生成のためのニューラルテンプレートの学習)](https://www.aclweb.org/anthology/D18-1356)
  * 青野先生の論文2つ
  * あと一つは探す

### 伏見メモ
![image](https://hackmd.io/_uploads/By3gIMavR.png)

---
## 7/11
* パワポ作成

### todo
* 鞄の画像を適当に持ってきて事前学習のCLIPに照らし合わせる
* [Image-Text Re-Matching with Zero-shot and Fine- tuning of CLIP](https://ceur-ws.org/Vol-3583/paper12.pdf)(CLIP のゼロショットと微調整による画像とテキストの再マッチング)この論文をある程度理解しパワポに概要を書く
* パワポの穴埋め

### 伏見メモ
![image](https://hackmd.io/_uploads/ByV0HVTw0.png)
![image](https://hackmd.io/_uploads/HyukLNaw0.png)

---
## 7/15
* fsmにもらったパワポの修正を確認し、知らない内容や単語を確認
  * 多クラス分類、階層構造など
* 論文[Image-Text Re-Matching with Zero-shot and Fine- tuning of CLIP](https://ceur-ws.org/Vol-3583/paper12.pdf)(CLIP のゼロショットと微調整による画像とテキストの再マッチング)の内容の把握

---
# 後期　卒業研究

---

## 9/16

### 宿題（中間発表の整理）
* 質問された内容
  * 根本的に何がしたいのかが分からない
  
* 返答
  * あまり覚えていない
  * 混乱してて、パワポに書いてある言葉を並べて返答していたので、納得してもらえなかった
  
* 後に考えて適切だと思う返答
  * 特になし

* 振り返ってみて
  * 自分の中で、研究の具体的な道が定まっていないように感じている。
  * ゴールがあやふや
    * 結果で出力する類似度を測って具体的に何に役立てていきたいのか
    * そもそも人間の感覚的なことを類似度だけで判断していいのか
    * 研究の道が定まり始めたのが直近だったこともあり、自分の理解が足りておらず研究に自信が持てていなかった

    
### 論文置いとく
・[自然言語処理と画像処理の融合](https://data-analytics.fun/2021/03/24/understanding-openai-clip/)
・[英語の論文CLIP](https://cdn.openai.com/papers/Learning_Transferable_Visual_Models_From_Natural_Language_Supervision.pdf)
 
 ### Todo
 ![image](https://hackmd.io/_uploads/rJOlRXs0R.png)

---
## 10/03 MTG

### やったこと
* Excelのカテゴリ階層のデータを見やすくといらなそうなものの確認
![image](https://hackmd.io/_uploads/B1nylNiRA.png)

* 楽天データから画像を持ってくる
  * 現在試行中
  * まさかの楽天データの中身の詳細資料がないらしい…
  * チャットGPTでコードを作成してもらったがうまくいってない
 ![image](https://hackmd.io/_uploads/SkHCzEiC0.png)
![image](https://hackmd.io/_uploads/HJ3e7Ej0A.png)

### Todo
* 来週までにFTできる段階までは持っていきたい



---

## 10/05
### 報告
* 楽天の画像は使えないことが判明…
→メルカリに移行
* 商品データにカテゴリが存在しているのでメルカリでの実験が可能
    * カテゴリ分類の表
![image](https://hackmd.io/_uploads/HJ6oZRVJJe.png)
* [Rintがくれた資料](https://hackmd.io/@3kXF80RNSGujtM_bJHj1hg/rJq68IdXC)がFTに使えそう

---
## 10/10 MTG
### Todo
* Rintのコードを参考にFTしていく
* 



---
## 10/17 MTG
* 現状のコード(作り途中)

```import os
from PIL import Image
import pandas as pd



net= models.vit_b_16(weights=models.ViT_B_16_Weights.DEFAULT).to(device)



# 画像が保存されているディレクトリ
image_dir = "/home/share/data/mercari/main_data/picture/image/images/00/00"

x = []
y = []

# 画像を読み込む
for label in os.listdir(image_dir):
    label_dir = os.path.join(image_dir, label)
    if os.path.isdir(label_dir):
        for filename in os.listdir(label_dir):
            if filename.endswith(('.png', '.jpg', '.jpeg')):
                img_path = os.path.join(label_dir, filename)
                img = Image.open(img_path).convert('RGB')
                x.append(np.array(img))
                y.append(label)  # ラベルとしてディレクトリ名を使用

# NumPy配列に変換
x = np.array(x)
y = np.array(y)




# CSVファイルを読み込む
data = pd.read_csv('/home/share/data/mercari/main_data/supplement/item_categories.csv')

# 'name1'（または他のラベル列）をクラスラベルとして使用する
y = data['name0'].values  # 必要に応じて列名を変更



#x = #画像データ
#y = #クラスラベルのデータ

from sklearn.modelselection import train_test_split
x_train, x_valid, y_train, y_valid = train_test_split(torch.tensor(np.array(x), dtype=torch.float32), y, shuffle=True, train_size=0.8)

from torch.utils.data import TensorDataset
train_dataset = TensorDataset(x_train, y_train)
valid_dataset = TensorDataset(x_valid, y_valid)

from torch.utils.data import DataLoader
batch_size = 128
train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
valid_dataloader = DataLoader(valid_dataset, batch_size=batch_size, shuffle=False)


# loss function
criterion = nn.CrossEntropyLoss()
# optimizer
optimizer = optim.Adam(net.parameters(), lr=3e-5)


# エポック数
num_epochs = 30

for epoch in range(num_epochs):
    print('Epoch {}/{}'.format(epoch + 1, num_epochs))
    print('-------------')
    
    for phase in ['train', 'valid']:
        if phase == 'train':
            # 学習モードに設定
            net.train()
        else:
            # 訓練モードに設定
            net.eval()
            
        # epochの損失和
        epoch_loss = 0.0
        # epochの正解数
        epoch_corrects = 0
        
        for inputs, labels in dataloaders_dict[phase]:
            inputs=inputs.to(device)
            labels=labels.to(device)
            # optimizerを初期化
            optimizer.zero_grad()
            
            # 学習時のみ勾配を計算させる設定にする
            with torch.set_grad_enabled(phase == 'train'):
                outputs = net(inputs)
                
                # 損失を計算
                loss = criterion(outputs, labels)
                
                # ラベルを予測
                _, preds = torch.max(outputs, 1)
                
                # 訓練時は逆伝搬の計算
                if phase == 'train':
                    # 逆伝搬の計算
                    loss.backward()
                    
                    # パラメータ更新
                    optimizer.step()
                    
                # イテレーション結果の計算
                # lossの合計を更新
                # PyTorchの仕様上各バッチ内での平均のlossが計算される。
                # データ数を掛けることで平均から合計に変換をしている。
                # 損失和は「全データの損失/データ数」で計算されるため、
                # 平均のままだと損失和を求めることができないため。
                epoch_loss += loss.item() * inputs.size(0)
                
                # 正解数の合計を更新
                epoch_corrects += torch.sum(preds == labels.data)

        # epochごとのlossと正解率を表示
        epoch_loss = epoch_loss / len(dataloaders_dict[phase].dataset)
        epoch_acc = epoch_corrects.double() / len(dataloaders_dict[phase].dataset)

        print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))


#モデル保存
state_dict = net.state_dict()
print(state_dict)
torch.save(state_dict, f"work/{pref}/model/{cnn}_f.model")
```
### Todo
* FTする
* 論文読む


---
## 10/22
FTコード第1号

```
import os
import pandas as pd
import numpy as np
from PIL import Image
import torch
from torch.utils.data import Dataset, DataLoader, Subset
from torchvision import transforms
from sklearn.model_selection import train_test_split
from transformers import ViTForImageClassification
import torch.optim as optim
from torch.nn import CrossEntropyLoss

# === ステップ1: CSVファイルを連番で読み込み、データを結合 ===
base_name = "mercari_items_202208_"
file_dir = "/home/share/data/mercari/main_data/item/items/"  # CSVファイルが保存されているディレクトリ
all_dataframes = []

CSVファイルをループで読み込む
for i in range(516):  # 000000000000 から 000000000515 までのファイルを読み込む
    file_number = f"{i:012d}"  # 12桁のゼロパディング
    file_name = f"{base_name}{file_number}.csv"
    file_path = os.path.join(file_dir, file_name)
    
    if os.path.exists(file_path):
        df = pd.read_csv(file_path, usecols=['anon_item_id', 'category_id'])  # 必要な列のみ読み込む
        all_dataframes.append(df)
    else:
        print(f"File {file_name} not found.")

# すべてのデータフレームを結合
full_data = pd.concat(all_dataframes, ignore_index=True)
print(f"Total rows: {len(full_data)}")  # 読み込んだデータの行数を確認

# === ステップ2: 画像とラベルをデータセットとして扱う ===
image_dir = '/home/share/data/mercari/main_data/picture/image/images/00/00'

# カスタムデータセットクラス
class ImageDataset(Dataset):
    def __init__(self, dataframe, image_dir, transform=None):
        self.dataframe = dataframe
        self.image_dir = image_dir
        self.transform = transform
    
    def __len__(self):
        return len(self.dataframe)
    
    def __getitem__(self, idx):
        img_name = self.dataframe.iloc[idx]['anon_item_id']
        label = self.dataframe.iloc[idx]['category_id']
        
        img_path = os.path.join(self.image_dir, img_name)
        image = Image.open(img_path).convert('RGB')
        
        if self.transform:
            image = self.transform(image)
        
        return image, label

# 画像の前処理
transform = transforms.Compose([
    transforms.Resize((224, 224)),  # ViTの入力サイズに合わせる
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# データセットの作成
dataset = ImageDataset(full_data, image_dir, transform=transform)

# === ステップ3: データをトレーニングとバリデーションに分割 ===
train_idx, valid_idx = train_test_split(np.arange(len(dataset)), test_size=0.2, shuffle=True)

train_dataset = Subset(dataset, train_idx)
valid_dataset = Subset(dataset, valid_idx)

batch_size = 32
train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
valid_dataloader = DataLoader(valid_dataset, batch_size=batch_size, shuffle=False)

# === ステップ4: ViTモデルのファインチューニング ===
model = ViTForImageClassification.from_pretrained(
    'google/vit-base-patch16-224-in21k',
    num_labels=len(set(full_data['category_id']))  # カテゴリ数に合わせて出力層を設定
)

# モデルをGPUに移動
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# ロス関数とオプティマイザ
criterion = CrossEntropyLoss()
optimizer = optim.AdamW(model.parameters(), lr=1e-4)

# === 学習ループ ===
num_epochs = 5
for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0
    correct = 0
    total = 0
    
    for images, labels in train_dataloader:
        images = images.to(device)
        labels = labels.to(device)
        
        optimizer.zero_grad()
        outputs = model(images).logits
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
        _, predicted = torch.max(outputs, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
    
    print(f"Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(train_dataloader)}, Accuracy: {100 * correct / total}%")

    # バリデーション
    model.eval()
    val_correct = 0
    val_total = 0
    with torch.no_grad():
        for images, labels in valid_dataloader:
            images = images.to(device)
            labels = labels.to(device)
            outputs = model(images).logits
            _, predicted = torch.max(outputs, 1)
            val_total += labels.size(0)
            val_correct += (predicted == labels).sum().item()
    
    print(f"Validation Accuracy: {100 * val_correct / val_total}%")

# モデルの保存
torch.save(model.state_dict(), 'finetuned_vit_model.pth')

```

* カテゴリ分類のcsvファイルを読み込む場所が足りなかった
→修正中…


---
## 10/24 MTG
### Todo
* もうちょいあがく
* CLIPに実装するときのコードも考えておく


---
## 11/7 MTG
### todoの振り返り
* もうちょいFTを自分であがく
    * あがいて回り始めました
    * 次の日に確認したところ終わってた？
    * モデルがどこにも保存されていないのでどこかで止まってしまったよう

* CLIPに実装するときのコードも考えておく
    * 絶賛GPTと相談中…
    * CLIPの単語の部分を次回までに用意する予定

### todo
* もう一度実行してみる（nohup python3 ~.py > ~.txt &）
* CLIPの単語の部分を用意する



---
## 11/14 MTG
### todoの振り返り
* FTの実行（nohup python3 ~.py > ~.txt &）
    * FTの実行がいまだにできない…
    * バッチサイズを下げてもダメでした
    * octaやnonaという環境でやってみると良いと言われたが二つの違いを知る必要がありそう
* 「CLIPの単語の部分を用意する」
    * 失念しておりました
    * 具体的にどのように行うかはあらかじめ決めておいた方が良い
    * ↓その時に使う予定のコード
```
pip install pandas mecab-python3


import MeCab
from collections import Counter
import pandas as pd

# 商品説明文のリスト
descriptions = [
    "この商品の特徴は、高品質な素材と優れたデザインです。",
    "軽量で持ち運びに便利なこの商品は、おしゃれなデザインが特徴です。",
    # ここに商品説明のテキストデータを追加
]

# === ステップ1: 形態素解析によるトークン化 ===
mecab = MeCab.Tagger("-Owakati")  # 分かち書き用のオプション

# 全商品説明文をトークン化し、名詞だけを抽出
words = []
for description in descriptions:
    parsed_text = mecab.parse(description)
    words += [word for word in parsed_text.split() if word.isalpha()]  # ひらがな・カタカナ・漢字のみ取得

# === ステップ2: 単語の頻度をカウント ===
word_counts = Counter(words)

# === ステップ3: 頻度順でデータフレームを作成 ===
word_freq_df = pd.DataFrame(word_counts.items(), columns=['単語', '頻度'])
word_freq_df = word_freq_df.sort_values(by='頻度', ascending=False).reset_index(drop=True)

# === ステップ4: CSVファイルに保存 ===
output_file = 'keyword_frequency.csv'
word_freq_df.to_csv(output_file, index=False, encoding='utf-8-sig')  # UTF-8で保存（日本語対応）

print(f"キーワード頻度データが '{output_file}' に保存されました。")
```


## todo
* CLIPの単語の部分を用意する
    * メルカリの説明文の確認
    * 単語の絞り込み
* FTは先生にお願いします


---
## 11/28 MTG
### todoの振り返り
CLIPの単語の部分を用意する
* MeCabの「Owakati」という辞書で形態素解析を行ったところ、単語とは言えない物が多数存在していました
* 辞書を「ochasen」に変えようとしたところ、それが出来ませんでした。
* tf-idfでも試しましたが、キーワードと呼べるものではありませんでした
* 全部のカテゴリの説明文は必要ない
    * カテゴリを絞ってもう一度

### todo
* tf-icfも使ってみる
* 数値などの不要なものの精査
* カテゴリで絞る
* IPA辞書を変えてみる


---
## 12/5 MTG

### todoの振り返り
#### カテゴリで絞る
* 服関連のカテゴリだけのIDは収集済みなので
#### 数値などの不要なものの精査
* こんな感じ？
```
# 正規表現を使って不要な単語を判定する関数
def is_valid_word(word):
    # 除外条件: 数字のみ、記号のみ、アルファベット一文字
    if re.fullmatch(r"[0-9０-９]+", word):  # 数字だけの単語
        return False
    if re.fullmatch(r"[a-zA-Z]", word):  # アルファベット一文字
        return False
    if re.fullmatch(r"[\W_]+", word):  # 記号だけの単語
        return False
    return True
```

* 実際に使ってみた（カテゴリの絞り込みも入れてみた）
```
import MeCab
from collections import Counter
import pandas as pd
import re

# === ステップ1: 必要なカテゴリIDのCSVを読み込む ===
category_ids = pd.read_csv("clothing_related_ids.csv")  # 必要なカテゴリIDのみが入っているCSV
target_category_ids = category_ids["id"].tolist()  # カテゴリID列からリストを取得
print("対象カテゴリID:", target_category_ids)

# === ステップ2: 商品説明CSVを読み込む ===
df = pd.read_csv(
    "data/mercari_items_202208_000000000000.csv", 
    sep=",", 
    header=None, 
    on_bad_lines="skip", 
    names=["商品ID", "出品状態", "商品名", "商品説明", "価格", "カテゴリID", "商品状態", "サイズ", "ブランド名", "送料の負担", "発送方法", "発送先", "発送にかかる日数", "いいね数", "コメントの数", "更新日時", "出品日時"],
    low_memory=False
)

# 指定されたカテゴリIDの商品説明を抽出
filtered_descriptions = df[df["カテゴリID"].isin(target_category_ids)]["商品説明"].dropna().tolist()

# === ステップ3: 分かち書きモードで形態素解析 ===
# MeCabの設定（neologdを利用する場合は辞書パスを指定）
mecab = MeCab.Tagger("-Owakati")  # 分かち書きモード

# 正規表現を使って不要な単語を判定する関数
def is_valid_word(word):
    # 除外条件: 数字のみ、記号のみ、アルファベット一文字
    if re.fullmatch(r"[0-9０-９]+", word):  # 数字だけの単語
        return False
    if re.fullmatch(r"[a-zA-Z]", word):  # アルファベット一文字
        return False
    if re.fullmatch(r"[\W_]+", word):  # 記号だけの単語
        return False
    return True

# 分かち書き結果から有効な単語を抽出する関数
def extract_valid_words(text):
    words = mecab.parse(text).strip().split()  # 分かち書き結果をリストに変換
    valid_words = [word for word in words if is_valid_word(word)]  # 不要な単語を除外
    return valid_words

# 全商品説明文から単語を抽出
words = []
for description in filtered_descriptions:
    try:
        words += extract_valid_words(description)
    except Exception as e:
        print(f"エラー発生: {description}\n{e}")

# === ステップ4: 単語の頻度をカウント ===
word_counts = Counter(words)

# === ステップ5: 頻度順でデータフレームを作成・保存 ===
word_freq_df = pd.DataFrame(word_counts.items(), columns=['単語', '頻度'])
word_freq_df = word_freq_df.sort_values(by='頻度', ascending=False).reset_index(drop=True)

# 結果をCSVに保存
output_file = "keyword_frequency_filtered_and_cleaned_wakati.csv"
word_freq_df.to_csv(output_file, index=False, encoding="utf-8-sig")

print(f"抽出されたキーワード頻度データが '{output_file}' に保存されました。")
```
* 保存したCSVファイルには何も出力されていなかった...


#### IPA辞書を変更させたい
* 未だに茶筅書きにできていない
* neologDをインストールはしたが、こちらも同じエラーを検出
![image](https://hackmd.io/_uploads/B1XBk2AQJe.png)
↑これ

## todo(二週間分)
* まずは単語群の作成
    * コンテナの中でやってみる
    * mecabとneologDをそこで入れなおす
    * コードの中身の見直し、実装したいこと
        * 実行できていたコードと見比べてくしかないかね
        * 茶筅とneologDの組み込み
        * 不要なデータの精査
* 評価実験の評価方法はどうするか考える
* 論文も探しとけ


---
## 12/10
* dockerのコンテナ内で作業することに
    * neologdを入れなおし
    * パス(コンテナ内)
        * '/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd'
        * /usr/local/lib/python3.11/site-packages/ipadic/dicdir/mecabrc
        * /usr/local/lib/python3.11/site-packages/unidic_lite/dicdir/mecabrc
    

---
## 12/17
ここ最近のの進捗
* 序盤はリオンサーバーが落ちていたので全然進まず
    * 論文の検索
        * 探し中…
    * 最終的な評価の仕方の再検討
        * 類似度での判断以外にアンケートなどを行う
        * 具体的にどの服の画像を使うのかをメルカリデータから探す
        * 単語はいくつ入力する？
        * 単語で入力する必要のない単語はないか再検討
            ![image](https://hackmd.io/_uploads/rksrAaeSkx.png)

* リオン復帰後、コンテナ内で形態素解析を実行
    * neologdで1つ実行していないものがあることが判明したことでエラーが解決
    * カテゴリを以下のものに絞る
    * 単語とは言えない余計なものを除くように改良
```
#絞ったカテゴリ

["服", "ファッション", "トップス", "ジャケット", "パンツ", "ワンピース", "スーツ", "レッグウェア","ウェア"]
```

```
#単語の除外の関数

def is_valid_word(word):
    # 除外条件: 数字が1つでも含まれる、記号のみ、アルファベット2文字以内、ひらがな単体、横棒
    if re.search(r"[0-9０-９]", word):  # 数字が1つでも含まれている単語
        return False
    if re.fullmatch(r"[a-zA-Z]{1,2}", word):  # アルファベット1文字または2文字
        return False
    if re.search(r"[\W_]+", word):  # 記号だけの単語
        return False
    if re.fullmatch(r"[あ-ん]+", word):  # ひらがな単体
        return False
    if re.fullmatch(r"[-ー]+", word):  # 横棒（全角・半角）だけの単語
        return False
    return True
```


---

## 12/19 (朝)
* 以前の日本語用CLIPの性能がそこまでよくないという結果から、多言語対応のCLIPを試してみた
    * Hugging Faceからモデルを探した
    * 複数のモデルで試したが全て存在しないとエラーが出た

```
試したモデル
clip-italian/clip-multilingual-v2
M-CLIP/XLM-Roberta-Large-Vit-B-32
sentence-transformers/clip-ViT-B-32-multilingual-v1
laion/CLIP-ViT-B-32-multilingual-v1
```

* ありそうなんだが

![image](https://hackmd.io/_uploads/B15yT6gS1x.png)



---
## 12/19 MTG


### todo
* 論文を必要なだけ探して中身を見てくる（7個は必要）
* 必要な画像の回収
* tf-idf(tf-icf)でもっと単語を絞る
    * 指定の形で形態素解析したCSVファイルを先生に提出
* 日本語特化のモデルを探す
    * とりあえず完了
    * 一応衣服の画像と単語でも確認してみる必要があるかも

## 12/27
* 形態素解析用のCSVファイルを先生に納品が完了


---
## 12/29

* [メルカリの「AI出品サポート」機能](https://about.mercari.com/press/news/articles/20240910_aisupport/?utm_source=chatgpt.com)
    * ヤバいこと始めだした
    * 研究の終着点が変わることも想定
* 服に関する画像を収集するため、服を定義するための情報
    * [カテゴリ一覧-ファッション通販FASHION WARKER](https://fashionwalker.com/contents/category/)
* CLIPの使う予定のコードのファイル
    * mCLIP_try.py
        
        
## ~1/3
* 論文探し
    * アパレルECサイトにおける説明文自動生成
https://www.jstage.jst.go.jp/article/jasmin/2018t10/0/2018t10_125/_pdf/-char/ja
・園田 亜斗夢、新名 玄
・株式会社Business Hub,株式会社GAUSS
・経営情報学会2018年秋季全国研究発表大会
　2018年10月20日（土）～10月21日（日）
　近畿大学　東大阪キャンパス
出品者の労力軽減のため，既存のアパレル業者が保有するテンプレートを活用し，画像の特徴量からテンプレートを選択し，カテゴリ推定等を行い説明文を生成する．
* 画像収集
    * 上手くいかず
    * os.walkを使って商品IDと同じ羅列を含む画像ファイルを探すように作った
* tf-icf
    * 上手くいかず
    * 正直どのようなことを行うべきか分かっていない
    * 先生からいただいた情報の使い方が分かっていない
    * 衣料品カテゴリはどこでどのように使う？



---


## 1/5
* 佐竹先生のtf-idf指導
    * TF:ある単語が1つの文書内に出てきた回数/全単語
        * 高ければその単語の重要度が高い
    * DF：全文書である単語が含まれる文書数
        * 大きければカテゴリ関係なく使われている単語(専門的でない単語)
    * IDF：DFの逆
        * idf=log(総文書数/ある単語iを含む文書の数(DF)+1)
        * 大きければ専門的な単語といえる
    * TFIDF:TF*IDF
        * 値が高ければ単語の重要度が高く専門的な単語である


### todo　(佐竹先生にご教授いただきました)
0. カテゴリ再抽出作業(済)
    * もっと細かいものまでカテゴリ抽出するようにする
    * 関係ないものまで含まれていたため消せるようにする

1. カテゴリ絞り込み
    * それぞれのカテゴリIDファイルでどのIDが衣料品に関するカテゴリに当たるのかリスト化する
    * L・・・4つ(レディース、メンズ、ベビー・キッズ、スポーツ)
    * M・・・どうする？
        * 3階層目が衣料品でも2階層目が衣料品じゃないことがある
        * 先にSをリスト化→その中から2階層目を抽出し、それと同一の2階層目カテゴリを持つものをMから抽出する
    * S・・・3階層目を以前作成したカテゴリリストに基づいて絞り込む(タンス、バイクを消す)

2. カテゴリIDファイル(L,M,S)でそれぞれ以下の作業をする(1,2は逆でも可)
    1. IDF値を全単語に対して計算する
    2. 全単語の内、対象カテゴリ(衣料品)の文書内に含まれる単語に絞り込む
    3.  絞り込んだ単語に対してTFIDF値を求める
    4.  求めたTFIDF値を大きい順で並び替える

### todo(Sのtfidf計算のみ)
1. tf_S.csvの整理
    1. 横軸が存在しないので横軸を[カテゴリID,単語,ベクトル数値]で整理
    2. 必要なカテゴリIDを持つ単語のみ保存
    3. tf_S_filter.csv
2. icf計算
    1. 計算式:log(カテゴリ数(1318)/ある単語iを含むカテゴリの数(cf)+1)
3. tficfの計算
    1. 計算式：tf*icf
    2. icf計算されたすべての単語で行う
    3. 値が高い順番で並べ替え 



---


## 1/7
* tficfの計算が完了
    * tfファイルに同じ単語が複数存在していたので、TFベクトルの平均を取って統一
* 累積分布を作成
    * ![image](https://hackmd.io/_uploads/r13pVq58Jg.png)
    * ![image](https://hackmd.io/_uploads/S1QLBq9Iyg.png)
* 閾値を設定
    * 下30％を切り捨てる
    * 一番上の方にiPhoneがたくさんあるが、類似度には出てこないと見て放置
    * 6.49...の値の単語がとても多かった為そのあたりで区切った
    
* PTモデルのCLIPで実際に実験
    * CLIP_PV
        * 原型のコード
    * CLIP_PV2
        * GPUの問題で一度に出力する画像の枚数を制限するよう設定
    * CLIP_PV3
        * 実際に使ったコード、がぞうは上から順に使った
    * CLIP_PV4
        * PV3の画像を指定のものに設定する用



---
## 1/10(論文を進める)
* 論文調べるときのキーワード
    * フリマアプリ　トラブル
    * 商品説明文　テンプレ
* 見つけた論文
    * 説明文生成関連の研究
        * [顕著性マップを用いた画像の説明文自動生成](https://www.ai-gakkai.or.jp/jsai2016/webprogram/2016/pdf/707.pdf)
        * [視覚障害の方を支援する衣服の商品説明文生成](https://www.jstage.jst.go.jp/article/fss/36/0/36_473/_pdf/-char/ja)
        * [アパレルECサイトにおける説明文自動生成](https://www.jstage.jst.go.jp/article/jasmin/2018t10/0/2018t10_125/_pdf/-char/ja)
        * [深層学習を用いたユーザの入力を考慮した商品説明文の自動生成と評価](https://proceedings-of-deim.github.io/DEIM2023/1a-7-4.pdf?utm_source=chatgpt.com)
    * ViTに関する研究　肯定的な裏付け
        * [ViTを用いた画風変換手法](https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=236108&file_id=1&file_no=1)
        * [地下トンネルル点検時の一人称視点映像を用いたVision Transformer に基づく変状検出](https://www.jstage.jst.go.jp/article/jsceiii/3/J2/3_470/_pdf/-char/ja)
        * [Vision Transformer を用いた破断面画像からの材料特性値推定](https://www.jstage.jst.go.jp/article/pjsai/JSAI2024/0/JSAI2024_1K5OS15b03/_pdf/-char/ja)
    * CLIPについての研究
        * [Image-Text Re-Matching with Zero-shot and Finetuning of CLIP(CLIP のゼロショットと微調整による画像とテキストの再マッチング)](https://ceur-ws.org/Vol-3583/paper12.pdf)
            * CLIPを選んだ理由
                * 特徴を抽出することに適している
                * FTすると指定のタスクに応じて制度が変わるため
                * CLIPが研究でどう使われているかのサンプルを探す


* 前提知識
    * ViT
    * CLIP
        * ![image](https://hackmd.io/_uploads/H1jAQuRIye.png)
    * 衣服のカテゴリ階層
        * [このサイトを参考にした](https://fashionwalker.com/contents/category/)
    * tficf

---
## 1/12
### 今日のやること
* 決めた画像100枚の元データの確認
* 先生からもらうFT済みのモデルL,M,Sでコードを実行
* 論文の回収
    * あと5，6個

### CLIPの評価実験
1. ファイルの確認
    1. /home/share/data/jsho2024/modelsにある
    2. L,M,Sそれぞれエポック数が5~50の5刻みで10個ずつファイルがある
    3. 全てでCLIPを行う
2. コードの組み立て
    1. 元のコードはCLIP_PV3、画像はmel_film_100を使用
    2. 以下のコードを使うことになる
```
net = torchvision.models.vit_b_16()
net.load_state_dict(torch.load(f"data/ViT_FT_cat{cate}_{pret:03d}.model"))
```


---
## 1/13
* 0012)docker cp "lyonにあるデータのパス" "コンテナ内のパス"　でコンテナ外のデータを使える
* 30通りのパラメータでCLIPを行った
    * PVモデルとは単語の選出から変化が見られた
    * 30通りのCLIPでは変化が見られなかった
        * FTを行った際のCLIPが評価実験用のCLIPと異なっていることが原因なのでは
### todo
* 関連研究の枠を埋めていく(2)
    1. CLIPを使った研究を2つ、ViTを使用した研究2つ、衣服関連の研究を1つ探す
    2.
* 前提知識を埋めていく(1)
    1. 項目は現状CLIP、ViT、tficf、商品説明文、FTなど
    2. 図は使わない予定だが、どこまで詳しく説明するべきかによる
* 研究の評価実験
    * 先生の返答次第そっちに移る可能性もある　


---
## 1/14 個別MTG
* 以前提出した30個のパラメータを使用した結果は、配置が換わっていただけでPVモデルと結果が一致していた
    * 上手くFTしたパラメータを使用できていない
* 使っているViTがFT時と評価実験時でそもそも違う
    * ViTを合わせるようにFTしてもらっていたがうまくいっていない。ので破綻した
* 顕著性マップ(gradcam)を再使用
    * PVモデルの結果を使って上位幾つかの単語を顕著性マップに照らし合わせて、赤い面積を求める。
    * 面積が小さいほどその画像の特徴なのでは。

## 1/14 夜
* MTGのタスクは性能の低さ故に破綻
* 単語はあきらめて以下のシステムを繋げて画像認識を押していく
    * py torch
    * ViT
    * GradCAM


---
## 1/15
### todo
1. （画像の特徴領域抽出）：ViTに対してアテンションマップを生成し，画像内の特徴的な領域を抽出する（CLIP関係ない）
    * 事前学習済みとFTしたL,M,Sすべてで行う
    * まずはattentionマップの出力をできるようにする
    * 画像1枚使ってFT済みそれぞれとの変化を見比べる
    * 色が濃い部分を出力できるコードの作成
    * 残りの画像99枚でも行う
3. （商品キーワード抽出）：STEP1で抽出した特徴領域に対して，STEP2で抽出したカテゴリワードとの類似度を求め，上位単語をキーワードとして抽出する（事前学習済みCLIPを用いる）


---
## 1/16　20:00
* デッドラインまであと１週間切りました。
* 先生からのデッドラインは19日
* 昨日の時点でアテンションマップを作成するコードは完成
* 本日の進捗
    * 指定の範囲のアテンションが低い部分をマスク（黒）するコードの完成
    * それらをCLIPで読み込んで類似度を測ることの成功

### todo
* アテンションマップとCLIP込みのgradCAMのヒートマップ同士の相関係数を見る。
    1. 使用する画像を10枚ほど収集 (OK)
    2. attentionマップで30通り行う（可能）
    3. 指定の画像で実際に使われた単語のみを収集
        * output_word_frequency_filtered_2.csvを使用
    4. GradCAMでのヒートマップを作成
    5. (2)と(4)のヒートマップで相関係数を計算し一番強いマッチングの時の(4)単語を出力する



---
## 1/17 深夜
* todoの単語の部分をCLIPで類似度を測った時の上位100件に変更
* PTモデルのアテンション作るの忘れてた
* todoが一通り完了した
    * 相関係数が強い単語のほうが、CLIPで測った時に出力された上位の単語と比べた時にその画像に対しての特徴的な単語が強くなっている。（部分的）
    * もう少し使う単語の量と出力する範囲を広げてもよいかもしれない

## todo 起きたら
* 卒論の書けるところ
    * 手法に変化があったので再度関連研究に何を書くか検討しなおす
    * それに合わせても前提知識の枠も変えていく
    * 新しいキーワード
        * アテンション
        * gradcam
        * ヒートマップ
    * 提案手法については先生がある程度書いてくれるとのこと
* 寝る前のやり残し
    * ViTのPTモデルでアテンションのヒートマップを作成してgcと相関係数を測る
        * ヒートマップは作成した
        * PTモデルの相関係数の結果を出力した
            * 思ったよりFTと単語が変化していた
            * CLIPの類似度のように種類のような単語の時もあればかなり抽象的な単語を出力している時も確認できた。
    * 使用する単語の枠を100から200個、出力範囲を20個に広げる。
        * 101~200個用のCSVは作ったがGPUの関係で一時断念


---
## 1/20
### todo
1. 関連研究
2. 評価実験
    * ![image](https://hackmd.io/_uploads/ry36w0sDkg.png)
    * 
3. bibtexと参考文献などの貼り付け

* 使用した論文
    * StyleGANによるCLIP-Guidedな画像形状特徴編集
    * 深層学習を用いたユーザの入力を考慮した商品説明文の自動生成と評価
    * Image-Text Re-Matching with Zero-shot and Finetuning of CLIP
    * アパレルECサイトにおける説明文自動生成
    * 顕著性マップを用いた画像の説明文自動生成
    * ViTs are Everywhere: A Comprehensive Study Showcasing Vision Transformers in Different Domain
    * CLIP に基づくゲームバグ検知のための WordNet を用いたバグテキスト生成手法
    * 地下鉄トンネル点検時の一人称視点映像を用いたVision Transformer に基づく変状検出
    * 視覚障碍者支援を目的とした衣服画像説明文生成手法
    * Vision Transformerを用いた破断面画像からの材料特性値推定


---
## 1/21
* 評価実験として使う画像
    * 1a620298-5678-4beb-8c55-901e1bce227a/1a620298-5678-4beb-8c55-901e1bce227a_.jpg
        * gc_1a620298-5678-4beb-8c55-901e1bce227a/1a620298-5678-4beb-8c55-901e1bce227a_42.png
        * S_005.jpg
    * fc94a0f8-8761-491c-a048-7cad403cfa27.jpg
        * fc94a0f8-8761-491c-a048-7cad403cfa27_28.png
        * S_030.jpg

* [CLIP　顕著性マップ](https://axross-recipe.com/recipes/525)


---
## 1/22
明日の9時までに完成しなければ終わり
### todo
* 自分の研究の流れの確認、整理（15：30まで）
* 第5章
    * 実験設定と評価指標は先生に相談
    * 
* 第6章
* 終わりに
* はじめにと概要の再確認
* 提出(ここまでを先生が帰宅するまでに終わらせることが目標)(21時と予想)
    * 無理でした

### 実験の流れ　（さかのぼり）
* CLIPのヒートマップとFTしたViTのattentionマップの相関係数
    * CLIPのヒートマップの画像は単語数の100枚
    * ViTは階層カテゴリ3層それぞれと1層につきエポック数の差で計30枚にPTモデルの計31枚
        * カテゴリ階層はメルカリデータの商品全体のカテゴリから衣服に関するもののみを収集
            * 収集方法はfasion walkerの商品カテゴリを参考にどこかの層に衣服に関する単語を持つカテゴリ番号のみを回収し、収集したものを実際に確認して衣服に関係しないものを省いた（手作業）
    * ViTのヒートマップ31枚とCLIPの100枚で相関係数を測り、ViTのヒートマップ画像に対して相関が高いCLIPのヒートマップ画像の単語として使われた単語を順番に10件、その相関係数の値を10件出力
        * attentionは前提知識

* 使用する単語の作り方
    * 評価実験で使用する画像とTFICFして閾値を設定した単語群23823個
    *

* 修正部分
    * 句読点
    * Fine-tuningしたViTは($\text{FT-ViT}_t$)に変更

* 使う画像の理由など
    * 1a62
        * 原画
        * CLIP42：小花柄
        * CLIP95：バロチドレス
        * PT
        * S_5:小花柄で一番値が高い
        * M_35 一番小花柄が低い
        * L50
        * M50
        * S50
    * fc94
        * 原画
        * ｐｔ
        * CLIP29:ツイードチェックベルト
        * CLIP63：チェック柄
        * CLIP65：部屋着
        * L50
        * M_20:部屋着の最大
        * S_30:チェック柄の最大とツイードの最大
        * S５０
    

---
## Image-Text Re-Matching with Zero-shot and Finetuning of CLIP(CLIP のゼロショットと微調整による画像とテキストの再マッチング)

### 著者
* 深津佑太
* 青野雅樹
### 時期
* 2022年
### 場所
* 
### 目標、目的
* 様々なニュース領域における画像とテキストの相互作用をより深く理解することを目指している。
* ゼロショットと微調整を用いたCLIPモデルに基づく画像テキスト再マッチングの方法について述べる。
  * 具体的には、再マッチングのリコールを向上させるために、ゼロショットモデルと微調整モデルの間の重みを線形補間する手法であるWISE-FTを紹介
 

### 手法
* 3種類のCLIPの訓練
  * オンラインニュースポータル、ツイッター、RSSニュースフィールド
* ニュースの発表時期によって内容が異なることの対策としてWISE-FTを検索問題に用いる。
* 

### 実験

### 結果

### 結果と考察


### 自分の意見

### ワード
* WISE-FT（ゼロショットモデルと微調整済みモデルの重みをアンサンブル）
  * ゼロショットモデルとFine-tuningモデルをアンサンブルし、係数を線形平均で統合する方法を採用しています。分布シフトの精度と堅牢性のトレードオフを図ることが目的です。この方法の有効性を実験的に示した研究として注目されています。

* 

---
## キーワード調べ

### CLIP(クリップ)
  * 特定のタスクのために追加の学習を必要としない(ゼロショット)画像分類モデル
  * 画像と画像を説明したテキスト(オープンボキャブラリー)のセットで学習する
  
### 特徴量抽出
  * 画像の中から特徴的な部分を抽出するアルゴリズムのこと
  
### 顕著性マップ
  * 人が画像を認識する際に、注視しやすい部分を表現した画像で、人の視覚系におけるピクセルの重要度を反映する技術
![image](https://hackmd.io/_uploads/SJ82YLaSC.png)

### CNN（畳み込みニューラルネットワーク）
  * 人間の視覚情報処理を模倣し、画像の特徴を自動的に抽出することができる技術
  
### RNN(リカレントニューラルネットワーク)
  * 過去の情報を利用して現在および将来の入力に対するネットワークの性能を向上させる、ディープラーニングの構造
    * 画像からの説明文生成の一般的なアプローチは、CNNを用いて画像の特徴量を抽出し、単語ベクトルと共にRNNへ入力して説明文を予測する手法
    * 高い精度を達成しているが、画像特徴量を用いるのは説明文生成の最初の段階のみであるので、画像内の領域と生成される単語の対応が取りづらいという問題がある
    
### VGGnet
  * 初期の代表的な少し深い物体画像認識向けのCNN
  
### pooling
  * 入力画像のある範囲のウィンドウの数値から一つの数値を取り出し、画像データを小さくまとめる処理
  
### Embedding
  * 単語や文といった自然言語をベクトル空間に配置し、その位置関係から要素間の関係性を数値化するもの
  
### softmax関数
  * 入力データ（＝ベクトル）内の複数の値を0.0～1.0の範囲の確率値に変換する関数。
  * 出力される複数の値の合計は常に1.0になる。
  
### LSTM(Long Short Term Memory)
  * RNNの改良版。
  * 時系列を考慮することができるという特徴
  
### Microsoft COCO
  * 画像の説明文の自動生成タスクの精度を競う競技が開催されており、そのためのデータセットが公開されている。
  * ジャンルに依らない一般的な画像1枚あたりに5つの説明文が人手で付与されている。訓練画像として82783枚、評価画像として40203枚が用意されている。

### SALICON
  * 顕著性マップを生成する精度を競う競技のために用意されたデータセットであり、画像に人手で顕著性マップが付与されている。合計で15000枚の画像が用意されている。

### Latent Dirichlet Allocation/LDA/潜在ディリクレ配分法
  * トピックモデル(「言葉の意味」を統計的に解析していく手法)の代表的な文書生成モデル
  * 文書が特定のトピックの混合で構成されているという考えに基づく確率的生成モデル
  
### パーセプトロン
  * 動物の脳は多数(人間の大脳の場合140億個位)の「神経細胞」という細胞がシナプス結合されて出来ています。そこでまず研究者達はこの「神経細胞」を数学的にモデル化した「パーセプトロン」を考案しました。

### Multi Layer Perceptron/MLP/多層パーセプトロン
  * 「パーセプトロン」を多数結合して多層パーセプトロンと呼ばれるネットワークを考えた。
  * 入力層、隠れ層、中間層、出力層ごとに層分けされた多層構造

### 説明可能なAI（XAI）
* AIの推論結果を人間が解釈可能な形で出力する技術
* 顕著性マップで判断根拠を可視化

### クラス活性化マッピング
* 説明可能なAIの1つ
* 画像分類、物体検出、セマンティックセグメンテーション、VQAのような分類を用いる幅広いタスクを扱うことができる
* 任意のクラスにする判断根拠を確認できる

### CAPR
* コンピュータビジョン、人工知能、機械学習、および関連分野の研究開発におけるトップカンファレンスの一つであり、業界最先端の研究成果がここで発表される。

### Transformer
* attentionのみを使用した翻訳タスク
* エンコーダーデコーダーモデルで計算量と精度も改善
* 再帰畳み込みを使わず、並列化しやすく訓練時間が短い

### attention
* 文中のある単語の意味を理解する時に、文中の単語のどれに注目すれば良いかを表すスコアのこと

### ViT(Vision Transformer)
* CNNの代わりに、Transformerを使用。
* 画像を固定サイズのパッチに分割し、各パッチを1Dベクトルに変換して入力とします。さらに、位置情報をエンコードした位置エンベディングを追加します。それらをまとめてTransformerの入力とし、最終的なクラス予測は、Transformerの出力のうち特定の一つ（通常は最初のトークン）をMLPに通したもので行います。
---
[伏見メモ](https://hackmd.io/Rq5SuGH9QuilkNj4HDN-ZA)



---
## 深層学習を用いたユーザの入力を考慮した商品説明文の自動生成と評価

### 著者
* 福本健二
* 灘本明代
### 時期
* 2023　1月
### 場所
* なし 
### 目標、目的
* ユーザの入力情報を考慮しながら、商品説明文を自動生成する深層学習モデルを構築し、その生成結果を評価すること
* オンラインショッピングやマーケットプレイスで利用される商品説明文の質を向上させ、ユーザ体験を改善することを目指す
 

### 手法
1.  商品の特徴やカテゴリ情報をエンコードする深層学習モデルを構築。
2.  ユーザの入力（例: キーワードや希望するスタイル）を考慮するため、注意機構（Attention Mechanism）を採用。
3.  テキスト生成には、自然言語処理モデル（例: TransformerやGPT）を活用。
4.  モデルのトレーニングには、公開データセットや独自に収集した商品情報データを使用。


### 実験
1. 複数の商品カテゴリを対象に、生成された説明文の質を評価。
2. ヒューマンジャッジメント（人間による評価）や自動評価指標（BLEUスコアやROUGEスコア）を用いて比較。
3. 他のベースライン手法と比較し、生成された説明文の関連性、流暢さ、創造性を検証。

### 結果
* 提案モデルは、従来手法と比較して商品説明文の質が向上した。
* 特に、ユーザ入力に応じた柔軟な生成が可能である点が評価された。
* BLEUスコアやROUGEスコアにおいても優れた性能を示し、ヒューマンジャッジメントでも高い評価を得た。


---
## アパレルECサイトにおける説明文自動生成
### 著者
* 園田亜斗夢
* 新名玄
### 時期
* 2018　10/20~
### 場所
* 近畿大学　東大坂キャンパス
### 目標、目的
* 出品者の労力軽減のため，ファッション ECに特化し，画像から説明文を自動生成するシステムの事例を紹介する．
 

### 手法
1. 画像検索フェーズ
    1. アパレルのアイテム画像から類似した画像を検索
    2. オートエンコーダによる画像のベクトル化
    3. Fast R-CNNという物体検出に特化したCNNを採用
3. 原稿作成フェーズ
    1. 画像検索で得られた情報や特徴を駆使して原稿を作成
    2. 業者の力を借りてテンプレを収集


### 実験
1. 複数の商品カテゴリを対象に、生成された説明文の質を評価。
2. ヒューマンジャッジメント（人間による評価）や自動評価指標（BLEUスコアやROUGEスコア）を用いて比較。
3. 他のベースライン手法と比較し、生成された説明文の関連性、流暢さ、創造性を検証。

### 結果
* 提案モデルは、従来手法と比較して商品説明文の質が向上した。
* 特に、ユーザ入力に応じた柔軟な生成が可能である点が評価された。
* BLEUスコアやROUGEスコアにおいても優れた性能を示し、ヒューマンジャッジメントでも高い評価を得た。
